• 寫入越獄有關文件(/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)。它還會調用大量函數收集數據、截獲短信和電話。
安裝
第三階段時,軟件會運行一個lw-install二進制文件,這個文件包含很多關鍵架構,并且能在用戶重啟之后仍然駐足系統(tǒng),良心的是其中還有一些保護功能,防止用戶手機變磚。
lw-install首先會檢查iOS版本,對于不同的版本,lw-install會執(zhí)行不同的命令。
在iOS 9上,它會對/Library/LaunchDaemons中的plist文件執(zhí)行“/sbin/launchctl load”,LaunchDaemons目錄一般是空的,如果用戶之前已經越獄,這里就會存放一些launchd plist文件,目的是讓這些文件在重啟之后能夠運行。


JSC權限提升
Pegasus會通過jsc來做到駐足系統(tǒng)的目的。jsc是一個開發(fā)者工具,主要是用于讓用戶能夠在瀏覽器環(huán)境外使用WebKit引擎執(zhí)行js代碼。
為了能夠駐足系統(tǒng),Pegasus會把rtbuddyd守護進程替換成一個jsc的副本(經過簽名,能夠運行代碼)。設備重啟后,rtbuddyd會加載–early-boot,這是com.apple.itunesstored.2.cstore文件的鏈接。com.apple.itunesstored.2.cstore文件跟CVE-2016-4655 exp的結構相似。它能夠在系統(tǒng)每次重啟之后重新加載shellcode,攻擊內核。
Pegasus有很多保證私密的功能,他會經常檢查手機有沒有被其他軟件越獄,甚至還包含一個復雜的自毀機制:

禁止更新

檢測越獄

C&C服務器通信
Pegasus聯(lián)系C&C服務器的手段非常隱蔽,如下圖所示:

這看似是來自Google的密碼重置短信,實際上含有來自C&C服務器的指令。Pegasus能夠接收5種類型的指令,驗證碼的最后一位就是指令的ID,在本例中,指令ID就是9。
之所以使用短信,是因為Pegasus能夠在沒有網絡的情況下接收指令。如果C2服務器下線了,這種使用短信的方法仍然能夠讓攻擊者發(fā)送信息,告訴受害者手機新的C2服務器地址。
數據收集
手機中各個通信軟件都有專門的處理模塊能夠竊取其中的信息,這些軟件包括:
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作為參數,用Mach kernel API注入動態(tài)庫到進程中。converter的用法如下:
start (usage: %s [args...])
對于各種通信應用,Pegasus都有特別的方式進行監(jiān)聽,對于部分應用,如Skype和Telegram,軟件會直接從本地讀取數據庫;而對于WhatsApp,除了記錄消息記錄和通話記錄, Pegasus 還會加載一個庫(libwacalls)這個庫能夠hook關鍵的WhatsApp函數,然后攔截各種類型的通信。