<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址:http://drops.wooyun.org/mobile/4998

            0x00 簡介


            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成功還需要具備以下幾點要求:

            0x01 start


            1. 安裝釣魚app到目標設備


            ?釣魚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/)就可以滿足你的需求。?

            2.后臺無線運行并開機啟動


            ?這個有好幾種方案,我這里簡單介紹兩種:

            1、如果是采用企業證書或者開發者證書傳播的話,只需要在UIBackgroundModes的plist里添加:Continuous,unboundedTaskCompletion和VOIP的屬性即可。前兩個算是private API,如果上傳到App Store是不會通過審核的。

            2、如果想要上傳到App Store,就需要偽裝成一個VOIP類型的App,這樣的話可以做到開機啟動。隨后可以采用后臺播放無聲音樂的方法做到后臺運行,播放工具可以采用AVAudioPlayer 這個對象,然后聲明一個AudioSessionProperty_OverrideCategoryMixWithOthers的屬性。因為是MixWithothers,在面板上不會有任何顯示,用戶并不會發現有音樂在播放,并且其他播放器在放音樂的時候也沒有任何影響。??

            3.檢測目標app(比如App Store)的運行狀態


            這個也有好多方法,簡單介紹兩個:

            1、UIDevice Category For Processes (http://zurb.com/forrst/posts/UIDevice_Category_For_Processes-h1H)。通過這種方法,可以獲取到當前運行的程序。Demo中就是每隔5秒鐘檢測一次當前運行的程序是否有App Store,如果有,彈出釣魚對話框。

            2、獲取所有安裝的app的信息。使用LSApplicationWorkspace這個對象可以獲取到所有已經安裝的App的信息。?

            4.得到Apple ID的用戶名以便實施釣魚攻擊。這個細節請參考CVE-2014-4423。?


            5.彈出釣魚對話框

            并將用戶輸入的密碼上傳到服務器。正常的對話框是采用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接口,也沒有做任何的權限檢測,最后導致了沙盒逃逸。?

            enter image description here

            enter image description here

            0x02 結語 & 參考文章


            人們往往認為iOS比android的安全,所以在使用蘋果手機的時候格外大膽,但事實并非如此。通過幾個漏洞的combo,黑客們可以很容易的騙取你的帳號密碼。更恐怖的是,本文所展示iOS漏洞也只是冰山一角。在我們ASIACCS 15論文中,我們還介紹了iOS遠程控制,監控等漏洞的利用,有興趣的同學可以繼續學習。

            1. Min Zheng, Hui Xue, Yulong Zhang, Tao Wei, John C.S. Lui.?"Enpublic Apps: Security Threats Using iOS Enterprise and Developer Certificates". (Full Paper)??Proceedings of 10th ACM Symposium on Information, Computer and Communications Security (ASIACCS 2015)

            ?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

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线