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