iOS“遠程越獄”間諜軟件Pegasus技術分析
上周蘋果緊急發(fā)布了iOS 9.3.5,修復了三個0day漏洞,這3個漏洞能讓攻擊者對全球范圍內(nèi)的iPhone進行監(jiān)聽。
這三個漏洞被爆出的起因是因為以為阿聯(lián)酋的人權活動人士在8月10日、11日,分別收到的兩條短信,短信中附有鏈接,短信稱鏈接網(wǎng)站里包含囚犯在阿聯(lián)酋遭受虐待的“新秘密”。實際上這位人權活動人士對這種包含鏈接的短信已經(jīng)見怪不怪,因此他沒有點擊鏈接,而是立即把短信轉發(fā)給了Lookout和公民實驗室的研究人員。
Lookout公司的研究人員通過研究發(fā)現(xiàn),用戶點擊短信內(nèi)的鏈接后,攻擊者就會利用3個0day漏洞,對用戶手機“遠程越獄”,然后安裝間諜軟件,隨后就能對設備進行全面控制,還能獲取設備中的數(shù)據(jù),通過麥克風監(jiān)聽對話,跟蹤即時通訊應用的對話內(nèi)容等。Lookout公司把這款惡意軟件命名為Pegasus,并對其技術細節(jié)進行了分析。
攻擊過程
Pegasus的可怕之處在于,攻擊過程基本不需要用戶交互,用戶所要做的僅僅是點擊一個鏈接,接著,攻擊者就可以靜默地傳送payload,然后遠程越獄,安裝間諜軟件。用戶唯一能感知到的情況就是點擊鏈接之后,瀏覽器自動關閉了。間諜軟件中包含惡意代碼、進程和用于監(jiān)控用戶行為并進行反饋的app。這款間諜軟件能夠獲取系統(tǒng)內(nèi)置軟件中的短信、通話記錄、郵件、日志,還有下列app中的信息:
- Gmail
- Facetime
- Line
- Mail.Ru
- 日歷
- 微信
- Surespot
- Tango
- Viber
- Skype
- Telegram
實際上,iOS的安全機制并不允許應用相互監(jiān)控,但是可以在越獄的設備上安裝用戶監(jiān)控的hook。Pegasus就是利用了遠程越獄和hook。Pegasus將它的動態(tài)庫插入到設備里的針對正規(guī)進程中。這些動態(tài)庫之后就會使用Cydia Mobile Substrate框架去hook應用。
簡要來說,攻擊共分為三個階段:
第一階段:傳送并利用WebKit漏洞,通過HTML文件利用WebKit中的CVE-2016-4655漏洞。
第二階段:越獄。在第一階段中會根據(jù)設備(32/64位)下載相應的,經(jīng)過加密混淆的包。每次下載的包都是用獨一無二的key加密的。軟件包內(nèi)包含針對iOS內(nèi)核兩個漏洞(CVE-2016-4656和CVE-2016-4657)的exp還有一個用來下載解密第三階段軟件包的loader。
第三階段:安裝間諜軟件。經(jīng)過了第二階段的越獄,第三階段中,攻擊者會選擇需要監(jiān)聽的軟件,把hook安裝到應用中。另外,第三階段還會檢查設備之前有沒有通過其他方式越獄過,如果有,則會移除之前越獄后開放的系統(tǒng)訪問權限,如ssh。軟件還有一個“故障保險“,如果檢測到設備滿足某些條件,軟件就會自毀。
第三階段中,間諜會部署一個test222.tar文件,這是一個tar包,包中包含各種實現(xiàn)各種目的的文件,如實現(xiàn)中間人攻擊的根TLS證書、針對Viber、Whatsapp的嗅探庫、專門用于通話錄音的庫等。
攻擊影響的系統(tǒng)范圍非常廣泛,從iOS 7.0以上直至8月8日發(fā)布的9.3.4都受到波及。
“Trident“漏洞詳情
CVE-2016-4657: Safari Webkit內(nèi)存損壞.
Safari Webkit中存在一個漏洞,能夠執(zhí)行任意代碼。Pegasus會利用這個漏洞獲取Safari瀏覽器內(nèi)的代碼執(zhí)行權限。
CVE-2016-4655: 內(nèi)核信息泄露KASLR保護繞過漏洞
在Pegasus進行越獄之前,它首先得確定內(nèi)存中內(nèi)核的位置。蘋果系統(tǒng)中的KASLR保護就是把內(nèi)核映射到不可預測的內(nèi)存地址,以起到保護的作用。
但是在這個漏洞中,攻擊者使用一個函數(shù)調用,這個函數(shù)會在返回值中返回沒有經(jīng)過混淆的內(nèi)存地址。
CVE-2016-4656: 內(nèi)核內(nèi)存損壞(用于越獄)
最后這個漏洞用于越獄。漏洞基于內(nèi)核中的內(nèi)存損壞漏洞。針對iOS各版本的不同,exp也各有不同。這個漏洞非常復雜,因此,Lookout需要進一步研究,之后會發(fā)表更詳細的報告。
越獄過程
- 關閉內(nèi)核安全保護,關閉代碼簽名機制
- 重新掛載系統(tǒng)分區(qū)
- 清理Safari緩存(為了清理痕跡)
- 寫入越獄有關文件(/sbin/mount_nfs)
第二階段結束時,exp會移除/etc/nfs.conf,然后加載/sbin/mount_nfs。為了在重啟之后依然留在系統(tǒng)中,Pegasus會把系統(tǒng)守護進程rtbuddyd替換成一個jsc二進制文件,并且創(chuàng)建一個鏈接到ascript。
軟件分析
保護功能
Pegasus應該是Lookout調查過的最復雜精妙的間諜軟件了。它采用非常新穎的方法安裝、隱藏自己、駐足系統(tǒng)。一旦安裝成功,這個軟件就會采用各種方法來隱藏自己,防止被發(fā)現(xiàn)。它還會調用大量函數(shù)收集數(shù)據(jù)、截獲短信和電話。
安裝
第三階段時,軟件會運行一個lw-install二進制文件,這個文件包含很多關鍵架構,并且能在用戶重啟之后仍然駐足系統(tǒng),良心的是其中還有一些保護功能,防止用戶手機變磚。
lw-install首先會檢查iOS版本,對于不同的版本,lw-install會執(zhí)行不同的命令。
在iOS 9上,它會對/Library/LaunchDaemons中的plist文件執(zhí)行“/sbin/launchctl load”,LaunchDaemons目錄一般是空的,如果用戶之前已經(jīng)越獄,這里就會存放一些launchd plist文件,目的是讓這些文件在重啟之后能夠運行。
JSC權限提升
Pegasus會通過jsc來做到駐足系統(tǒng)的目的。jsc是一個開發(fā)者工具,主要是用于讓用戶能夠在瀏覽器環(huán)境外使用WebKit引擎執(zhí)行js代碼。
為了能夠駐足系統(tǒng),Pegasus會把rtbuddyd守護進程替換成一個jsc的副本(經(jīng)過簽名,能夠運行代碼)。設備重啟后,rtbuddyd會加載–early-boot,這是com.apple.itunesstored.2.cstore文件的鏈接。com.apple.itunesstored.2.cstore文件跟CVE-2016-4655 exp的結構相似。它能夠在系統(tǒng)每次重啟之后重新加載shellcode,攻擊內(nèi)核。
Pegasus有很多保證私密的功能,他會經(jīng)常檢查手機有沒有被其他軟件越獄,甚至還包含一個復雜的自毀機制:
禁止更新
檢測越獄
C&C服務器通信
Pegasus聯(lián)系C&C服務器的手段非常隱蔽,如下圖所示:
這看似是來自Google的密碼重置短信,實際上含有來自C&C服務器的指令。Pegasus能夠接收5種類型的指令,驗證碼的最后一位就是指令的ID,在本例中,指令ID就是9。
之所以使用短信,是因為Pegasus能夠在沒有網(wǎng)絡的情況下接收指令。如果C2服務器下線了,這種使用短信的方法仍然能夠讓攻擊者發(fā)送信息,告訴受害者手機新的C2服務器地址。
數(shù)據(jù)收集
手機中各個通信軟件都有專門的處理模塊能夠竊取其中的信息,這些軟件包括:
- SMS/iMessage
- 日歷
- 通訊錄
- Gmail
- Viber
- Telegram
- Skype
- Line
- Kakao
- 微信
- Surespot
- Imo.im
- Mail.Ru
- Tango
- VK
- Odnoklassnik
除此之外,Pegasus還會收集其他各種信息,其中包括:
- GPS位置信息
- 用戶輸入的密碼
- WiFi密碼
進程注入
為了實時截獲WhatsApp、Viber等應用的電話,Pegasus會使用一個庫,動態(tài)注入到他們的進程空間。這是基于converter二進制文件:https://github.com/r-plus/substrate/blob/master/cynject.cpp
這個庫會將進程PID作為參數(shù),用Mach kernel API注入動態(tài)庫到進程中。converter的用法如下:
- start (usage: %s [args...])
對于各種通信應用,Pegasus都有特別的方式進行監(jiān)聽,對于部分應用,如Skype和Telegram,軟件會直接從本地讀取數(shù)據(jù)庫;而對于WhatsApp,除了記錄消息記錄和通話記錄,Pegasus還會加載一個庫(libwacalls)這個庫能夠hook關鍵的WhatsApp函數(shù),然后攔截各種類型的通信。
當有通話開始、中斷、結束,或者有另一通電話時,這個庫就會發(fā)布全系統(tǒng)的通知。只要知道通知的ID任何程序都能夠接收到事件。通知的ID是唯一的,長達56個字符,似乎是sha224哈希函數(shù)的輸出值。Pegasus還有一個錄音模塊會專門監(jiān)聽這些ID。libwacalls發(fā)送這些通知,然后libaudio.dylib就會進行處理,Pegasus從而就能對用戶的WhatsApp通話進行錄音。
Libaudio會把通話錄音保存在如下目錄:
- micFileName – /private/var/tmp/cr/x.<call_id>.caf
- spkFileName – /private/var/tmp/cr/t.<call_id>.caf
- sentryFileName – /private/var/tmp/cr/z.<call_id>.caf
總結
手機在我們的日常生活中無處不在,因此對于攻擊者來說也是非常重要的目標。
據(jù)報道NSO小組有幾百名員工,年收入高達幾百萬美金,就是網(wǎng)絡世界中的軍火商。NSO也不是唯一一家出售這類間諜軟件的公司,我們曾經(jīng)見過的就有Hacking Team、Finfisher等。
因此,我們還是建議廣大iOS用戶,盡快升級到最新系統(tǒng)。