• 写入越狱有关文件(/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函数,然后拦截各种类型的通信。