Pegasus间谍套件内部原理及流程剖析【转】

【翻译】三叉戟间谍套件技术分析-窥探高精度定向间谍软件的内部原理
事件介绍
0x01.背景
0x02.时间线
Pegasus间谍套装
0x03.专业开发团队
0x04.革命性的软件
剖析“三叉戟”漏洞
0x05.CVE-2016-4657:Safari的Webkit内核上的内存泄露
0x06.CVE-2016-4655:内核信息泄露漏洞绕过KASLR
0x07.CVE-2016-4656:iOS内核内存漏洞导致越狱
0x08.越狱维持技术
木马分析
0x09.安装和持久化
0x0901.持久化技术:JSC提权
0x0902.禁用更新
0x0903.检测越狱状态
0x0904.监控设备
0x0905.上传至C&C服务器
0x0906.自毁
0x10.收集数据
0x1001.日历
0x1002.联系人
0x1003.GPS信息
0x1004.捕获用户密码
0x1005.捕获Wifi和路由器密码
0x11.拦截电话与短信
0x1101.进程注入
0x1102.Skype
0x1103.Telegram
0x1104.Whatsapp
0x1105.Viber
0x12.实时监控
结论
0x13.附录A:TLS证书信息
0x14.附录B:越狱检测IOCs信息

事件介绍
这篇报道是关于最近发生的在全球范围内活跃的APT间谍软件的深度研究,Lookup团队已经捕获了样本,并且在一台全新的iOS设备上进行了深度研究。NSO集团提供的间谍软件套装名为Pegasus(可戏称为天马流星拳),Pegasus是一套高度定制化和自动化的间谍软件,其内置三叉戟(3个iOS的0day漏洞组合),可以有效刺破iOS的安全机制,抵达内核,完全控制手机,然后窃取其中数据。运用动态库hooking的方式来破坏内核层与应用层的安全机制,包括且不限于语音、电话、GMAIL、FACEBOOK、WHATSAPP、FACETIME、VIBER、WECHAT、TELEGRAM等等,不管是苹果的内置应用还是第三方应用,完全不能幸免(因为拿到了root权限,监控软件的进程已经是上帝模式)。Pegasus所使用的三叉戟漏洞,已经被苹果在最新的iOS 9.3.5中修补完成,下文中将对其进行详细的介绍。
  根据最新的报道,NSO集团从2010年开始就已经出售武器化的监控软件套装给企业和组织,到眼前被发现为止已经存在了很长一段时间来了,其宣称组合使用了高维度的系统组合漏洞来完成渗透和攻击,可以轻易地进入iOS、安卓和黑莓系统,窃取其内部信息。
这款间谍软件高度隐蔽并且模块化,易于定制。它使用了高强度的加密来保护自身不被传统杀毒软件发现,并且保证被发现之后进行“自爆”,提高取证难度。我们的报告指出三叉戟漏洞包含以下三种漏洞的组合:

CVE-2016-4657:Safari的Webkit内核上的内存泄露漏洞,用户点击之后攻击者可以占领这台机器。
CVE-2016-4655:内核信息泄露漏洞绕过KASLR,攻击者可以计算出内核的基质,锁定内核的位置。
CVE-2016-4656:iOS内核内存漏洞导致越狱,不管是32位还是64位均可以越狱其内核,并安装监控软件。

根据代码显示,这款间谍软件套装至少存在了超过两年的时间,代码里显示部分配置适配于iOS 7,这个版本苹果在2013年就发布了。
Pegasus利用了我们的生活已经离不开移动手机这一特点,手机是一款一直联网的终极信息管理终端。手机用户觉得他们的手机非常安全,毫无破绽,他们使用手机来发送/接受位置、打电话发送语音、进行社交和工作,但是他们不知道其实手机已经被Pegasus完全监控了,他们的一举一动均在NSO集团的掌握之中。Pegasus的一份授权卖25000美元,他们卖掉了300份授权,得到了超过800万美元的收入。
这份报告深入研究了Pegasus从开始到结束的技术细节,包括三叉戟漏洞的利用细节,以及监控组件的技术实现,让大家看一看一款监控软件究竟可以干哪些事情,并且做到什么地步。
三叉戟漏洞是最新的漏洞,一直到iOS 9.3.4版本依然有效,直到我们跟苹果合作,推出了9.3.5之后,才偃旗息鼓。请升级到最新的9.3.5,以确保自己的手机安全。

0x01.背景

随着移动设备进一步的渗透进我们的日常生活当中,恶意软件作者就瞄上了这块巨大的市场,持续的开发木马间谍软件运行于受害者的设备上,受害者却浑然不知。这些暗黑的项目中,有些是为了谋财,例如广告木马、银行卡木马、或者短信欺诈,有些则是为了窃取组织或者个人情报,例如高度定制的系统级别木马,在受害者毫不知情的情况下,偷偷把信息传回控制服务器。
间谍软件通常可以做到收集受害者的短信、联系人、通话记录、通话录音,或者远程开启摄像头和麦克风,对目标进行监听和监视。包括录下声音和视频,传回控制服务器。
有些间谍软件甚至可以做到传播病毒和木马,以受害人手机为基础和跳板,进一步攻击最终目标。这项技术非常复杂和冒险,攻击者往往得掌握着目标系统的0day漏洞才能成功。所以不管是私人安全公司还是企业系统均推出漏洞回馈计划,有偿征集系统漏洞。
两家私人安全公司Gamma集团和Hacking Team公司,自从被爆出开发了移动平台监控软件并出售给政府机构之后,都上了各大媒体头条。这些监控软件造价不菲,功能丰富,往往只有大金主才能使用,里面内置的0day漏洞更是确保其行动万无一失。
以色列NSO集团平时行事低调,不显山不露水,这次行动已经进行了五年之久,也没人发现。这家由Niv Carmi,Shalev Hulio,和Omri Lavie在2010年建立的NSO集团宣称,已经把自己开发的监控软件卖给了各国的政府集团。他们宣传自己的监控软件是无法被检测的,其中以为创始人还说:“我们是名副其实的魅影”。私人公司费城兄弟在2014年以1.1亿美元收购了NSO集团。在此之外,NSO集团还组建了移动软件安全公司Kaymera,既射门,又守门,风光无限,一时无两。

0x02.时间线
2016.08.12 Citizen Lab报告监控软件给Lookout团队
2016.08.15 两家团队合作分析这款间谍软件所使用的技术之后,提交给了苹果
2016.08.25 苹果释放9.3.5更新,封堵漏洞

Pegasus间谍套装

攻击的方式很简单,有效载荷的传播也是静默方式。攻击者给受害者发送一个URL,可以是短信、邮箱、社交软件或者任何其他方式,受害者仅需点击一下链接,服务器就开始向受害者的手机传输攻击载荷,远程越狱受害者的手机,然后安装监控软件。一切都是在受害者不知情的状况下发生的,受害者唯一可以察觉的就是按下这个链接之后,浏览器自动退出了。
  监控软件包含木马代码和程序,用来监控、收集数据并且上传到服务器,受害者的一举一动尽在攻击者的掌握之中。监控软件可以完全控制以下软件:GMAIL,FACETIME,FACEBOOK,LINE,MAIL.RU,CALENDAR,WECHAT,SURESPOT,TANGO,VIBER,SKYPE,TELEGRAM,KAKAOTALK。

为了达到完全静默监控,监控软件不会下载这些软件的木马版本,重新安装到受害者手机上。而是采用预装的版本,包括系统软件和用户安装的软件。
一般情况下,iOS的系统是为软件做好分离设计的,软件之间是无法通信甚至无法知道对方存在的。但是越狱后的系统确是可以通过hooking的方式来监控其他软件的。三叉戟软件套装通过加载其动态链接库到目标进程的方式,可以应用于hook那些安装有Cydia Mobile Substrate框架的软件。这个框架在越狱社区非常有名,三叉戟套装也使用了这个框架。
用户感染了Pegasus之后,手机处于完全的监控状态之中,包括电话录音,通话记录,短信,麦克风/摄像头实时通信(几乎变成对讲机)。在这个阶段获取到信息之后,监控者可以将这些信息用于下个阶段的入侵,例如拿到你的银行卡账户和密码,拿到邮箱账户密码,以及社保等等。
受害者点击链接之后,攻击者展开攻击。攻击分为三个阶段,每个阶段都包含了攻击模块代码和隐蔽软件。攻击是线性的,每个阶段都依赖于上个阶段的代码、隐蔽软件的成功,每个阶段都使用了关键的三叉戟漏洞,以确保进攻成功进行。
  阶段一:传递Safari内核的Webkit漏洞,这个阶段是诱使受害者点击一个网站地址,诱发漏洞,执行代码,位32位机器和64位机器分别下载用于下个阶段的代码;
阶段二:这个阶段是执行上个阶段下载来的代码,代码是一段加密后的乱码。每个下载都是用单独的密码单独加密的,传统的云端特征码检测技术在此失效(大多数杀软均采用特征码技术),这些代码中含有内核基质定位代码和UAF漏洞利用代码,并且包含了代码解密程序。在此阶段内核基质被定位并被越狱。
阶段三:这个阶段设备开始安装上个阶段下载解密好的监控程序Pegasus,并且动态库hooking到想要监控的程序,程序也会检测设备是不是已经通过其他方法越狱过,如果是,则移除任何第三方控制方式(例如SSH),使其成为Pegasus专属监控设备。程序也会监控三个阶段的执行是否成功,如果失败(或者特定状态下),则清除自身不留痕迹,春梦了无痕。

阶段三使用的程序部署在一个tarball里面(test222.tar),每段代码都有其自己的目的,稍后详述。

代码:

  # ca.crt - root keystore中的TLS certificate 
  # ccom.apple.itunessotred.2.csstore - standalone模式的JavaScript代码,会在重启时执行。用于在重启时执行未签名的代码以及静默维持jailbreak。
  # converter - 根据pid来入侵dylib。这只不过是把Cydia开源软件库中的cynject程序重命名而已。
  # libaudio.dylib - 通话录音的基础库
  # libimo.dylib - imo.im的嗅探库
  # libvbcalls.dylib - Viber的嗅探库
  # libwacalls.dylib - Whatsapp的嗅探库
  # lw-install - 安装换新所有嗅探库
  # systemd - 发送报告及文件到服务器
  # watchdog
  # worked - SIP模块

我们检测到的攻击最高可以用于iOS 9.3.4版本,攻击者维护着一份庞大的代码库用于攻击iOS从7到9.3.3,我们检测的代码中没有9.3.4的配置信息,但是对于9.3.4版本依然有效(我们知道9.3.4的发布,仅仅是为了封堵盘古团队手上的漏洞,盘古团队手上的漏洞可以越狱到9.3.3)。所以我们推荐大家升级到9.3.5。
另外一个特性就是,标准的越狱检测程序无法检测到设备已经越狱,因为攻击者的目标是尽可能的隐蔽。所以受害者的设备哪怕在专业程序的检测下,依然是“未越狱”的状态。

0x03.专业开发团队
Pegasus有着模块化的设计,简单高效。比如它维护者一份magic table,用来分辨不同设备,不同iOS版本号下的内核内存基址,iOS 9.2.1在iPhone 6上的内核内存基址如下图所示:

这样就算出了每个程序在内存中的地址(基于内核地址的偏移量),这个信息在破解时帮了大忙。
另外,模块化的代码命名方式对于我们的剖析内部构造也是非常有力,例如libwacalls就是Whatsapp的嗅探库,libvbcalls就是Viber的嗅探库,代码及其高效简洁,这跟其他木马作者不同,其他作者总是尽全力隐藏其目的,而Pegasus是木马界的一股清流。
还有,程序健壮,高可用也是充分保证的,哪怕在最初阶段我们也发现了他们的debugging代码和QA标准,这些都是企业级别测试组织流程。

  0x04.革命性的软件
这款木马已经运作了数年,这足以让我们产生给它颁发一座软件健壮大奖的冲动,并且它还支持所有ihone型号上运行的所有iOS版本,从iPhone 4s到iPhone 6s Plus。
这是一段证明其适用于iOS7 (发布于2013年)的代码片断。

剖析“三叉戟”漏洞

这套间谍软件内置了三个iOS系统内核漏洞,这里称之为“三叉戟”漏洞。这套漏洞组合在iOS 9.3.3上被发现,在9.3.4版本上也运行良好,于9.3.5版本被苹果封堵。

  0x05.CVE-2016-4657:Safari的Webkit内核上的内存泄露

在Safari的Webkit内核上存在的内存崩溃漏洞,使攻击者可以执行任意代码。Pegasus利用这个漏洞在Safari的进程中获取初始化代码执行权限。这个漏洞比较复杂,我们将继续分析,持续报道。

0x06.CVE-2016-4655:内核信息泄露漏洞绕过KASLR

在Pegasus可以执行jailbreak之前,它必须先知道内核位于内存的哪里。苹果的内核基址随机化技术使得内核在内存中出现的方式完全随机,找不到内核在哪里,攻破内核更是无从谈起了。Pegasus利用了iOS内核读取栈数据时缺乏边界检查,导致Pegasus能够获取栈上额外的数据,而函数的返回地址一般会被保存在栈上,刺探到了内核的基址。

0x07.CVE-2016-4656:iOS内核内存漏洞导致越狱

这个漏洞则是一个典型的UAF漏洞,通过精心构造数据可以在Free之后先分配对象来重新占用之后再触发Use,也可以进一步转换成double free,获取内核态的执行权限从而执行越狱代码。

0x08.越狱维持技术

一旦内核被攻破了,Pegasus开始准备安装越狱环境。

代码:

  # 关闭内核保护措施,例如代码签名
  # 重新挂载系统分区
  # 清除Safari的缓冲区(清除攻击痕迹)
  # 写入越狱文件(包含主要加载器 /sbin/mount_nfs)

在上一节的阶段二中,Pegasus会移除/etc/nfs.conf导致文件系统加载/sbin/mount_nfs(这就是阶段三的越狱加载器),/sbin/mount_nfs是以root的权限运行的,所以越狱软件接管了系统的完整权限。阶段三结束后,Pegasus需要在重启后也继续维持越狱状态,所以使用一段jsc二进制代码替换了系统中的rtbuddyd,并且链接到CVE-2016-4657,达到越狱持久化。

木马分析

Pegasus是我们检测过的最隐蔽和最高效的间谍软件套件。它使用神话般的方式来安装和隐藏自己,一旦它跻身系统之中,它有一连串方式来隐藏通讯和达到反查杀的功能,并且hook到root和mobile进程中来收集系统和用户信息。

0x09.安装和持久化

软件在阶段三运行lw-install时安装到受害者手机上。Lw-installl负责了持久化的的大部分设计功能,包括重启后持续接管,以及另外一些小手段防止手机变砖。
Lw-install做的第一件事情,就是检查iOS的版本号,根据手机运行的是iOS 9还是之前的版本执行不同的代码。
如果用户手机安装的是iOS 9,lw-install会运行.plist上的/sbin/launchctl load 拖到/Library/LaunchDeamons(这个目录通常是空的,或者用于存放越狱后开机启动plist服务列表,例如SSHD),这样可以保证重启后立即运行。




如果运行的不是iOS 9,lw-install会先删除一些数据,然后运行代码,log文件在这里/private/var/wireless/Library/com.apple.wifid.r.log。

0x0901.持久化技术:JSC提权

Pegasus用jsc开发工具来实现越狱持久化,这个组件是包含在iOS环境之中的,其功能是使用户可以在Webkit浏览器之外运行JavaScript代码。在这个组件里的内存崩溃漏洞使得Pegasus执行代码得到了持久化的能力。
持久化过程中,rtbuddyd这个守护进程被一段签名过并有着运行权限的jsc代码替换。系统重启时,在early-boot阶段假的rtbuddyd会运行,链接到com.apple.itunesstored.2.cstore文件,这个文件的结构与CVE-2016-4657类似,再次载入攻击脚本攻破内核,进行越狱。过程如下:

代码:

  # 运行jsc代码 --early boot
  # 运行攻击代码找到内核基址
  # 攻击内核越狱
  # 释放Pegasus监控套件,systemd、watchdogd。

  上一次分析中我们就提到,Pegasus的自我保护和反侦察功能是优先于监控功能的。也就是说,宁可不再监控,也要保护自己不被发现,因为一旦被发现、分析(这就是我们现在在做的事情),马上就会变成众矢之的,尸骨无存了。
所以,Pegasus有一大堆功能来保持其隐蔽性和静默性,它持续地监控手机状态并且阻止任何其他的方法来越狱/连接手机,并且当纸包不住火时,它有完整的自毁功能,从手机里完整的移除自己。

0x0902.禁用更新

阶段三禁用了软件更新,使手机无法收到任何软件更新提示信息。

0x0903.检测越狱状态

阶段三会检测手机是否已经越狱;
Pegasus每次启动时也会检测一次是否越狱。

0x0904.监控设备

为了可以持续监测和通讯,Pegasus禁用了系统的“深度睡眠”功能。(so那些受害人需要频繁充电?)


软件也在监测电池状态。同时监测网络状态,查看是否是运营商网络或者wifi网络,可能是用于选择何时合适将所有数据上传服务器。

0x0905.静默上传至C&C服务器

Pegasus拥有多种静默通信方式,systemd貌似使用的是短信方式。

  尽管看上去像一条来自谷歌的密码重置短信,这个短信实际上是发给Pegasus的更新C&C服务器的指令命令行。Pegasus可以接受5种像这样的命令短信,指令ID是验证码中的最后一位,在这个例子中就是9。
这个功能可以在http或者https不可用的时候,C2(C&C中继服务器)服务器框架也下线的时候,这个功能就是Pegasus最后的救命稻草,指导它去发现新的C2服务器,这项前无古人的设计,确保了哪怕服务端已经完全down掉,发个短信也能迅速换新Pegasus。

短信的姿势可以是这些:

0x0906.自毁

  Pegasus有高度敏感的反侦察系统,保证其不被发现,当其貌似即将暴露的时候,它就会开始自毁进程,并且移除李鬼版本的rtbuddyd和com.apple.itunesstored.2.csstore 。

0x10.收集数据

收集数据作为Pegasus监控软件的默认功能,是我们见过的间谍软件中最高效完备,兼容性最高的。它收集所有有价值的信息,例如密码、联系人、日历以及其他高价值信息的敲门砖,包括Sms,calendar,address book,gmail,viber,Facebook,Whatsapp,line,kakao,WeChat,surespot,IMO.im,mail.ru,tango,VK,odnoklashniki。

0x1001.日历

作为高价值信息,Pegasus当然想要受害者的日历。Systemd进程会抓取VCAL文件并通过短信发送出去。

0x1002.联系人

Pegasus会抓取受害者的所有联系人信息。

0x1003.GPS信息

Pegasus会抓取设备的GPS信息并发送出。

0x1004.捕获用户密码

0x1005.捕获Wifi和路由器密码

Pegasus为了偷到用户的所有密码,会分析抓取所有的wifi的SSID ,wep/wpa密码。已经苹果的路由器airport,time capsule等等。

0x11.拦截电话与短信

Pegasus在后台安装好语音(libaudio.dylib)与短信(libimo.dylib)窃听库,这些库非常健壮,但是还有一些特制的库用于拦截关键协议。Libaudio.dylib库注册了许多观察接口,这些观察接口由Pegasus旗下众多模块发送ID进行触发,在下面的例子中libwacalls和libvbcalls触发了观察接口,请见下图。

0x1101.进程注入:converter

Pegasus使用converter来实时动态注入通讯软件进程空间(例如Whatsapp),converter来源于cynject(这是Cydia的开源项目)。这个库使用一个pid作为参数,然后使用Mach内核API注入一个dylib到目标进程,converter的使用方式如下:

另外,converter还有一个失败模式,监听键盘上的一个键,用来上传一个自定义的dylib。

0x1102.Skype

Pegasus会抓取所有的Skype通话记录,包含录音。(图29、30)

0x1103.Telegram

0x1104.Whatsapp

Pegasus使用动态链接库libwacalls.dylib来hook Whatsapp的关键进程并且监听各种通信手段,通过我们捕获的样本,可以看出Pegasus已经对Whatsapp拥有了完整的拦截权限。Whatsapp在通话接通、打断或者结束的时候libwacalls会发出系统级通知,其他软件会接收到信号在他们知道ID的情况下,Pegasus的通知信号是独特的并且并不复杂,他们是由56个字符组成的字符串,看上去是由sha224产生的。Pegasus的其他模块会监听这些ID并且开始工作。在Whatsapp的情况下我们发现这些信号由libwacalls发出,最终由libaudio.dylib捕获并且开始录音,录制受害者的通话内容。
Libaudio.dylib把来自于Whatsapp的通话录音保存在以下文件夹:

代码:

  # 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


Libwacalls.dylib首先通过试图尝试连接/usr/lib/libdata.dylib的文件的存在来确认Cydia Mobile substrate是否安装在系统里,否则继续执行解密字符串来定位需要hook的类和方法。Libwacalls.dylib负责hook CallManager类下的以下方法:

代码:

  # setCallConnected
  # setCallInterrupted
  # setCallInterruptedByPeer
  # endCall

还有CallLogger类里的addCallEvent方法。
所有的hook都依赖于系统通知机制IPC。

0x1105.Viber
我们捕获的样本中,Viber的hook动态库libvbcalls会抓取所有的Viber通信记录。Libvbcalls的hook方式与libwacalls类似,当电话接通和结束的时候,libvbcalls也会发送ID。
CallEnded用来hook通话的结束时间并且发送系统级的ID。
下列ID是libvbcalls发送的。
# onCallStarted : eb899b6873eb166859e610915dd002ea21b6057bd31fc6c1b38f27e2
# onCallEnded : b79cd49420fbeba629a0290bc890c66924dd8452d0c2fd5ba9b327d0
Libaudio.dylib收到ID后开始录音,并且把通话保存到下列文件夹:
# 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

0x12.实时监控

为了能够监控手机的所有输入和输出,Pegasus可以实时录制音频和视频。就好像Omri Lavie在Financial Times所说的“你们的手机现在就跟对讲机没啥区别”,请见下文函数:


结论

  我们依赖手机来存储数码资产,手机一直带在身边已经成为了我们的语音、视频、文字一体化通讯系统。里面的很多秘密,成为罪犯的攻击目标。NSO集团作为网络武器商,拥有数百名员工,并且每年收入数百万美元。NSO只是一个例子,但是我们知道他并不是唯一的一个,就像我们知道的Hacking Team,Finisher,还有其他的互联网组织。这个软件只是iOS版本,据报道还有Android和Blackberry版本。
这份文件告诉我们,维持手机系统版本up to date的重要性,还有就是即使是最新版的软件,也要保持警惕。

0x13.附录A:TLS证书信息(


0x14.附录B:越狱检测IOCs信息(图41)
640 640df 640dfa 640dfad 640dfg 640dfsd 640dfwer 640eefa 640er 640ewwe 640fdf 640fg 640fgs 640gg 640rft 640sdf 640sdfd 640wef 6401 6402 6403 6404 6404gt 64045 64045f 64094o 64099 640451 640777 6401233 6409242 64084121 ttt

此条目发表在未分类, 经验技术分类目录。将固定链接加入收藏夹。