你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> 淺談iOS應用安全自動化審計

淺談iOS應用安全自動化審計

編輯:IOS開發基礎

前言

此前有人統計過2015年漏洞最多的產品,蘋果的OSX與iOS系統分別占據第一二名,雖有人懷疑統計數據可能存在重復的不准確情況,但相信大趨勢是不會變的。

2015年在iOS平台上也發生過不少安全大事,比如“XcodeGhost”事件、iOS9越獄、“iBackDoor“、“YouMi“事件等等,尤其是XcodeGhost影響甚大,注定要在iOS安全史上留下重重的一筆。

結合CVEDetails站點上對iOS系統漏洞的統計情況【圖1】,整體處於上升的趨勢,尤其是2015年增長迅速,是2014年的3倍多,由此也可以預見iOS平台上的安全漏洞正在快速增長,iOS應用亦然。

3fb20169c2e7b51ebd1aeb0059c7f634.png

圖1:iOS系統歷年漏洞數量統計圖

騰訊也有很多iOS應用產品,基本上android上有的,對應的同款應用在iOS上也會有。目前Android應用的審計技術在業界都已經於相對成熟,而iOS應用漏洞審計系統在國內還是比較欠缺的,一些公司可能內部有開發,只是未公開。

此前騰訊iOS產品也是未能做有效的上線前審計,遺留一些安全隱患,因此我們專門研發了一款針對iOS應用的自動化審計系統。除了日常的應用審計外,同時也是希望它能夠在安全應急上起到輔助的作用。本文主要是對這部分技術進行一些粗淺的探索,以希望可以起到拋磚引玉的效果。

開發環境

  • Mac OS X 10.11

  • Python 開發環境:PyCharm5

  • Objective-C 開發環境:Xcode7 + iOSOpenDev

  • 支持 iOS 8.1 以上的越獄系統

系統架構

整個iOS應用審計系統主要分兩部分:靜態審計和動態審計【圖2】。靜態審計包括Bin文件漏洞審計、第三方庫檢測以及私有API靜態檢測等功能;動態審計主要通過Hook去監控網絡數據包、SSL中間人檢測,以及實現ipa的動態安裝和運行、文件上傳下載等基本功能。

1467127946243720.png

圖2:iOS應用審計系統架構圖

基本審計功能

通過靜態審計提取基本的文件信息,並以較好的展示效果輸出到報告頁面上【圖3】,也方便後面的二次掃描,以及鑒別不同的ipa文件。

f535722ea51385197467b3b3609e71e7.jpg

圖3:文件信息及漏洞統計圖

在靜態審計裡最重要的就是Bin文件漏洞檢測功能【圖4】,像編譯選項和使用函數的信息,借助otool即可很容易檢測。

應用漏洞檢測主要針對目前已公開的漏洞/惡意後門進行檢測,比如XcodeGhost、iBackDoor、AFNetworking等等,先通過分析樣本來制定靜態檢測規則,多數通過關鍵字符串即可檢測出,而對於AFNetworking SSL中間人漏洞,筆者是采用檢測漏洞相關的ARM指令。

b5fcb0da6b39d6b4f657af1d409b0bbe.jpg

圖4:BIN靜態審計功能

下面是AFNetworking某個漏洞版本的ARM指令【圖5】,不同版本會有一定差異,所以還是需要對比多個不同版本,提取通用的檢測規則(單純檢測下圖標紅的ARM指令會誤報)。除此之外,還要對比修復版本的代碼,避免誤報。

9d4d236746644202a85e243659f739e1.jpg

圖5:AFNetworking SSL 中間人漏洞代碼

由於iOS應用為了兼容性,都會包含32位與64位程序,很少會單純只使用64位編譯的應用,所以檢測時可以暫不用考慮64位問題。

除圖4上的應用漏洞之外,還支持自定義審計功能【圖6】,主要是為了在應急時,可以及時即時制定規則進行批量掃描【圖7】,我們也專門針對公司業務情況添加了一些規則,此處就不贅述了。

46fcdcaa4722d2a9db4647c36fad278e.jpg

圖6:自定義審計規則示例(非實際運用規則)

015a627f3a981e1229a83d12ed2ebe6b.jpg

圖7:應用批量掃描

上面【圖6】只是一份示例的規則,並非在系統上實際運用的,只是作為演示,它支持二進制、數據庫及文件的掃描,裡面可以使用linux命令去輔助檢測,當然你也可以笑稱它為“後門”。

另外,數據存儲安全和網絡傳輸安全都在動態審計部分完成,審計規則在自定義規則裡面定義的。其中網絡實時檢測功能主要是基於Hook實現的,針對發包函數進行監控,比如NSURLConnection:sendSynchronousRequest 或者UIApplication:openURL等等【圖8】。

1467128100154985.png

圖8:通過Hook網絡相關API實現監聽

程序會實時監聽HTTP、HTTPS甚至是自定義偽協議的請求,而且為方便後續測試會記錄cookie值,然後完整地輸出到報告上【圖9】,後續也可以把它導入掃描器作WEB漏洞掃描。

1467128120127391.png

圖9:網絡請求實時監控

由於著名第三方庫AFNetwork經常被使用,因此也增加了對它的網絡監控。

UI界面遍歷

為了觸發更多地程序邏輯,增加代碼覆蓋率,在動態檢測時,就需要去遍歷各個UI界面。對於這種情況,我們選用appcrawler工具進行UI遍歷,它同時支持Android與iOS應用,而在其提供的config.json配置文件裡面,可根據自身需要去靈活配置,比如遍歷的深度,匹配文本框關鍵字進行輸入(如登錄帳號),這些規則需要自己多測試應用去完善它。【圖10】是遍歷微信UI的部分截圖效果,由於只遍歷了10分鐘,所以截圖相對較少一些,整體效果還是不錯的。

3d3be8ec91266cf7e23822f82fe3aff8.jpg

圖10:遍歷微信UI的部分截圖

SSL中間人檢測

在移動APP中,無論是Android還是iOS平台,SSL中間人攻擊都是一種常見漏洞,經常是由於證書校驗不嚴謹導致的。雖然是中間人攻擊,但在一定場景下還可以造成很大的危害,尤其是金融場景下的公共WiFi。

針對SSL中間人漏洞,如果采用靜態代碼檢測,可能誤報率會比較高,筆者在此處是通過Hook做靜態檢測,在運行時注入證書異常站點的請求,然後再去檢測是否訪問成功【圖11】。

862b68fafe0d85315115eb7b0685401f.jpg

圖11:SSL中間人動態檢測原理

以QQ浏覽器HD為例,注入異常站點後會彈出【圖12】中的提示,說明不會自動連接此站點,因此不存在SSL中間人漏洞。

3f3ac1a4f796769def3bf4338409895b.jpg

圖12:檢測效果

不過對於使用第三方SSL庫的應用可能會漏報,另一種替代方案是使用證書替換的檢測方式,不過這會導致訪問異常,最終可能導致應用無法正常使用,後續的審計動作也將被中止。各有各的弊端,可以暫時兩者分開地使用,如果各位同仁有更好的檢測方法,也歡迎在下面回復討論。

私有API檢測

雖說調用私有API不算漏洞,但因為蘋果嚴格的審計機制,一經發現調用私有API會直接下架應用,對業務影響也是很大。

另外從安全角度看,如果應用的漏洞修復版本需要發布,但多次因為調用私有API也被蘋果官方拒絕上架,就會導致漏洞無法得到及時的修復。

檢測私有API的難點主要在於蘋果未公開這份私有API列表,因此在檢測時只能自己提取,但也導致會因此存在一定的漏報和誤報的情況。

網絡上有個提取私有API的公式:

私有的api = (class-dump Framework下的庫生成的頭文件中的api - (Framework下的頭文件裡的api = 有文檔的api + 沒有文檔的api)) + PrivateFramework下的api

其實這是不完全正確的,如果你單純按照這種方法提取,會出現很高的誤報和漏報情況。因為私有類裡面有公有API,公有類裡面有私有API。但上面的公式是提取私有API的第一步,之後就需要再做很多提取規則逐步完善,比如一些純小寫字母的api,大多是一些c庫函數,可以再過濾一大批。

這種沒有什麼特別好的方法,只能多掃應用,根據結果多優化規則。

Github上面也有用於檢測私有API的開源項目,但基本上沒有一個可以滿足測試需求的,誤報率和漏報率太高,而且支持iOS版本較低。iOS9 SDK以上版本,也不能直接使用classdump去提取頭文件,因為應用的符號表已經被去掉這些信息,筆者是采用nm去解決的。

最初筆者是打算把動態檢測私有API也做了,但後面考慮審計系統主要是面向公司內部,因此不存在那種惡意繞過私有API檢測的行為,然後就把寫了一半的動態檢測功能給注釋掉。

如果讀者要做動態檢測私有API,那麼誤報和性能就是首要考慮的問題。hook太深,則消息過多,時耗過多,而且有些是系統自身調用的私有API,就無法正確區分是應用還是系統調用的;hook太淺,又達不到效果,沒法監測到私有API的行為。這裡拋張動態檢測的半成品截圖【圖13】,大家可以繼續發揮。

1467128247627955.png

圖13:動態檢測私有API時的Hook日志(半成品)

為了提高靜態檢測的准確率,筆者就把靜態拼接API字符串的情況也支持【圖14】,因為正常情況下,兩個字符串都是相鄰的,組合起來再與私有API庫作比較即可。

440453b88d71dc736155c44bb6f45050.png

圖14:字符串拼接繞過私有API檢測

好了,說了這麼多,直接上一張實戰圖。下面【圖15】是針對去年曝光的一款iOS病毒TinyV做的檢測(感謝ClaudXiao分享的樣本),可以看到它調用LSApplicationWorkspace和MobileInstallation中的私有API去查看安裝程序列表,安裝和卸載應用。

1467128287977068.png

圖15:iOS病毒TinyV的私有API檢測結果

第三方庫檢測

有時外界會曝光一些第三方開源庫的漏洞,影響經常是跨平台的,包括iOS應用。因此我們專門收集上百個常用第三方庫信息作為檢測內容,在日常審計應用時,能夠維護一份哪些公司產品使用到哪些第三方庫的信息【圖16】,在外部曝光漏洞後,我們可以快速定位受影響的產品及危害范圍。

不過目前缺乏相應的版本信息,因為有些庫編譯出來後是不帶版本字符串,需要針對不同版本作指紋庫檢測,也是個不少工程量,如果業界有好心人願意造福群眾的話,可以試試做個第三方庫的指紋庫出來。

e0f7dd80b533aa0c924027149a915dac.jpg

圖16:第三方庫檢測

開放端口檢測

之所以做開放端口檢測這個功能,主要是基於此前曝光的“WormHole”漏洞,此類因開放端口導致的安全漏洞,在Android應用上已經有過不少案例,搜索烏雲就能找到。

檢測開放端口其實一條命令就足夠了,然後定期輪循即可:

lsof -i | grep '"+appname+"' | awk '{print $1,$8,$9,$10}'

直接上效果圖,如【圖17】所示:

12d0baec77b9f4cdef2c08e5d8bd47cb.jpg

圖17:開放端口審計

審計效果

我們隨機抽取了公司60款iOS應用,審計後共發現10款產品存在中高危漏洞【圖18】,其中主要是SSL中間人漏洞和授權密鑰洩露漏洞居多。

587734cbb1e78fd8cd9a719fc943eed5.png

圖18:審計結果

後記

本文主要針對筆者在開發iOS應用自動審計系統時運用的一些技術作個分享,希望能起到拋磚引玉的作用。系統本身也還有一些有待完善的地方,歡迎各位業界同仁共同交流探討。

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved