“远程越狱”间谍软件Pegasus技术分析

  • 写入越狱有关文件(/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

  Facebook

  WhatsApp

  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...])

  WhatsApp

  对于各种通信应用,Pegasus都有特别的方式进行监听,对于部分应用,如Skype和Telegram,软件会直接从本地读取数据库;而对于WhatsApp,除了记录消息记录和通话记录, Pegasus 还会加载一个库(libwacalls)这个库能够hook关键的WhatsApp函数,然后拦截各种类型的通信。