weibo:http://weibo.com/zhengmin1989
我們去年3,4月份在iOS還是7.0的時候就發現了一個能在非越獄的ios設備上進行釣魚的攻擊方法 (可以盜取Apple id的密碼, gmail的密碼等),很早就報給了apple (Follow-up id: 609680831),到現在apple也沒有修復。為了緊跟Project Zero的潮流(90天的漏洞披露策略),現在打算公開demo和細節:???
首先我來解讀一下這個demo。在非越獄的iPhone 6 (iOS 8.1.3) 上盜取App Store密碼:?
在這個demo中,App Store是貨真價實的系統app,但是彈出來的登錄框不是App Store的,而是另一個在后臺運行的app偽造的。我們知道在沙盒策略中,一個app運行在自己的沙盒空間中,理論上說是無法影響其他app的,如果能夠產生影響就是一個很嚴重的問題。除了沙盒逃逸外,要讓這個demo成功還需要具備以下幾點要求:
安裝釣魚app到目標設備。
后臺無限運行并開機啟動。
檢測目標app(比如App Store)的運行狀態。
得到Apple ID的用戶名以便實施釣魚攻擊。
彈出釣魚對話框,并將用戶輸入的密碼上傳到服務器。?
?釣魚app會使用一些特殊的API函數(后面會講到,因為這些API不屬于PrivateFrameworks,所以不確定是否是private API),所以我們需要考慮如果App Store拒絕接受這種app的情況。如果App Store拒絕接受的話,一般有兩個方案:
1、采用特殊手段繞過檢測:最簡單的方法是采用混淆和動態加載,這個是360當年最愛用的方法,后來被Apple發現了,所有app被迫下架了1,2年。復雜的方法請參考Usenix Security的paper:Jekyll on iOS: When Benign Apps Become Evil。這種方法是先上傳一個有溢出漏洞的App到App Store,然后采用遠程ROP Attack的方法觸發漏洞然后調用private API。
2、使用企業證書或者開發者證書簽名app。這樣的話就不通過App Store,而是通過USB等方法直接安裝App到手機上。也就是PP助手,同步推使用的手法。想要做到這點很簡單,一個國外的開源庫libimobiledevice(http://www.libimobiledevice.org/)就可以滿足你的需求。?
?這個有好幾種方案,我這里簡單介紹兩種:
1、如果是采用企業證書或者開發者證書傳播的話,只需要在UIBackgroundModes的plist里添加:Continuous,unboundedTaskCompletion和VOIP的屬性即可。前兩個算是private API,如果上傳到App Store是不會通過審核的。
2、如果想要上傳到App Store,就需要偽裝成一個VOIP類型的App,這樣的話可以做到開機啟動。隨后可以采用后臺播放無聲音樂的方法做到后臺運行,播放工具可以采用AVAudioPlayer 這個對象,然后聲明一個AudioSessionProperty_OverrideCategoryMixWithOthers的屬性。因為是MixWithothers,在面板上不會有任何顯示,用戶并不會發現有音樂在播放,并且其他播放器在放音樂的時候也沒有任何影響。??
這個也有好多方法,簡單介紹兩個:
1、UIDevice Category For Processes (http://zurb.com/forrst/posts/UIDevice_Category_For_Processes-h1H)。通過這種方法,可以獲取到當前運行的程序。Demo中就是每隔5秒鐘檢測一次當前運行的程序是否有App Store,如果有,彈出釣魚對話框。
2、獲取所有安裝的app的信息。使用LSApplicationWorkspace這個對象可以獲取到所有已經安裝的App的信息。?
并將用戶輸入的密碼上傳到服務器。正常的對話框是采用UIAlertView這個類,但是用這個類產生的對話框只能在自己app的view上顯示。但如果采用CoreFoundation 這個framework (非private framework)中的CFUserNotificationCreate()和 CFUserNotificationReceiveResponse()方法的話,一個app就可以跳出沙盒的限制,并且在別的app界面上彈出自己的對話框。
比如下圖,第一個是真正的對話框,而第二個是我偽造的,為了區分,我故意把K變成了小寫。通過CFUserNotificationCreate()這個API,我們可以偽造很多應用的登陸對話框,不光是App Store,還可以是YouTube,Gmail,天貓等等。因為偽造的對話框和真實對話框沒有任何區別,用戶中招的幾率會變得非常大。這個API本來是為Mac OS X設計的,但是因為iOS和Mac OS X共用了一些基本的底層框架,但是在iOS并沒有屏蔽這個API接口,也沒有做任何的權限檢測,最后導致了沙盒逃逸。?
人們往往認為iOS比android的安全,所以在使用蘋果手機的時候格外大膽,但事實并非如此。通過幾個漏洞的combo,黑客們可以很容易的騙取你的帳號密碼。更恐怖的是,本文所展示iOS漏洞也只是冰山一角。在我們ASIACCS 15論文中,我們還介紹了iOS遠程控制,監控等漏洞的利用,有興趣的同學可以繼續學習。
?2. Tielei Wang, Kangjie Lu, Long Lu, Simon Chung, and Wenke Lee.?"Jekyll on iOS: When Benign Apps Become Evil",?Proceedings of?Usenix Security 2013