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

安全
Pegasus是一套高度定制化和自动化的间谍软件,其内置三叉戟(3个iOS的0day漏洞组合),可以有效刺破iOS的安全机制,抵达内核,完全控制手机,然后窃取其中数据。

事件介绍

这篇报道是关于最近发生的在全球范围内活跃的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,以确保自己的手机安全。

0×01.背景

随着移动设备进一步的渗透进我们的日常生活当中,恶意软件作者就瞄上了这块巨大的市场,持续的开发木马间谍软件运行于受害者的设备上,受害者却浑然不知。这些暗黑的项目中,有些是为了谋财,例如广告木马、银行卡木马、或者短信欺诈,有些则是为了窃取组织或者个人情报,例如高度定制的系统级别木马,在受害者毫不知情的情况下,偷偷把信息传回控制服务器。

间谍软件通常可以做到收集受害者的短信、联系人、通话记录、通话录音,或者远程开启摄像头和麦克风,对目标进行监听和监视。包括录下声音和视频,传回控制服务器。

有些间谍软件甚至可以做到传播病毒和木马,以受害人手机为基础和跳板,进一步攻击最终目标。这项技术非常复杂和冒险,攻击者往往得掌握着目标系统的0day漏洞才能成功。所以不管是私人安全公司还是企业系统均推出漏洞回馈计划,有偿征集系统漏洞。

两家私人安全公司Gamma集团和Hacking Team公司,自从被爆出开发了移动平台监控软件并出售给政府机构之后,都上了各大媒体头条。这些监控软件造价不菲,功能丰富,往往只有大金主才能使用,里面内置的0day漏洞更是确保其行动万无一失。

以色列NSO集团平时行事低调,不显山不露水,这次行动已经进行了五年之久,也没人发现。这家由Niv Carmi,Shalev Hulio,和Omri Lavie在2010年建立的NSO集团宣称,已经把自己开发的监控软件卖给了各国的政府集团。他们宣传自己的监控软件是无法被检测的,其中以为创始人还说:“我们是名副其实的魅影”。私人公司费城兄弟在2014年以1.1亿美元收购了NSO集团。在此之外,NSO集团还组建了移动软件安全公司Kaymera,既射门,又守门,风光无限,一时无两。

0×02.时间线

  • 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),每段代码都有其自己的目的,稍后详述。

  1. # ca.crt - root keystore中的TLS certificate  
  2.  
  3.  # ccom.apple.itunessotred.2.csstore - standalone模式的JavaScript代码,会在重启时执行。用于在重启时执行未签名的代码以及静默维持jailbreak。 
  4.  
  5.  # converter - 根据pid来入侵dylib。这只不过是把Cydia开源软件库中的cynject程序重命名而已。 
  6.  
  7.  # libaudio.dylib - 通话录音的基础库 
  8.  
  9.  # libimo.dylib - imo.im的嗅探库 
  10.  
  11.  # libvbcalls.dylib - Viber的嗅探库 
  12.  
  13.  # libwacalls.dylib - Whatsapp的嗅探库 
  14.  
  15.  # lw-install - 安装换新所有嗅探库 
  16.  
  17.  # systemd - 发送报告及文件到服务器 
  18.  
  19.  # watchdog 
  20.  
  21.  # 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。

另外一个特性就是,标准的越狱检测程序无法检测到设备已经越狱,因为攻击者的目标是尽可能的隐蔽。所以受害者的设备哪怕在专业程序的检测下,依然是“未越狱”的状态。

0×03.专业开发团队

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

这样就算出了每个程序在内存中的地址(基于内核地址的偏移量),这个信息在破解时帮了大忙。

另外,模块化的代码命名方式对于我们的剖析内部构造也是非常有力,例如libwacalls就是Whatsapp的嗅探库,libvbcalls就是Viber的嗅探库,代码及其高效简洁,这跟其他木马作者不同,其他作者总是尽全力隐藏其目的,而Pegasus是木马界的一股清流。

还有,程序健壮,高可用也是充分保证的,哪怕在最初阶段我们也发现了他们的debugging代码和QA标准,这些都是企业级别测试组织流程。

0×04.革命性的软件

这款木马已经运作了数年,这足以让我们产生给它颁发一座软件健壮大奖的冲动,并且它还支持所有ihone型号上运行的所有iOS版本,从iPhone 4s到iPhone 6s Plus。

这是一段证明其适用于iOS7 (发布于2013年)的代码片断。

剖析“三叉戟”漏洞

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

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

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

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

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

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

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

0×08.越狱维持技术

一旦内核被攻破了,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进程中来收集系统和用户信息。

0×09.安装和持久化

软件在阶段三运行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。

0×0901.持久化技术: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有一大堆功能来保持其隐蔽性和静默性,它持续地监控手机状态并且阻止任何其他的方法来越狱/连接手机,并且当纸包不住火时,它有完整的自毁功能,从手机里完整的移除自己。

0×0902.禁用更新

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

0×0903.检测越狱状态

阶段三会检测手机是否已经越狱;

Pegasus每次启动时也会检测一次是否越狱。

0×0904.监控设备

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

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

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

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

尽管看上去像一条来自谷歌的密码重置短信,这个短信实际上是发给Pegasus的更新C&C服务器的指令命令行。Pegasus可以接受5种像这样的命令短信,指令ID是验证码中的最后一位,在这个例子中就是9。

这个功能可以在http或者https不可用的时候,C2(C&C中继服务器)服务器框架也下线的时候,这个功能就是Pegasus最后的救命稻草,指导它去发现新的C2服务器,这项前无古人的设计,确保了哪怕服务端已经完全down掉,发个短信也能迅速换新Pegasus。

短信的姿势可以是这些:

0×0906.自毁

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

0×10.收集数据

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

0×1001.日历

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

0×1002.联系人

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

0×1003.GPS信息

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

0×1004.捕获用户密码

0×1005.捕获Wifi和路由器密码

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

0×11.拦截电话与短信

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

0×1101.进程注入:converter

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

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

0×1102.Skype

Pegasus会抓取所有的Skype通话记录,包含录音。

0×1103.Telegram

0×1104.Whatsapp

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

Libaudio.dylib把来自于Whatsapp的通话录音保存在以下文件夹:

  1. # micFileName - /private/var/tmp/cr/x.<call_id>.caf 
  2.  
  3.   # spkFileName - /private/var/tmp/cr/t.<call_id>.caf 
  4.  
  5.   # sentryFileName - /private/var/tmp/cr/z.<call_id>.caf 

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

  1. # setCallConnected 
  2.  
  3.   # setCallInterrupted 
  4.  
  5.   # setCallInterruptedByPeer 
  6.  
  7.   # endCall 

还有CallLogger类里的addCallEvent方法。

所有的hook都依赖于系统通知机制IPC。

0×1105.Viber

我们捕获的样本中,Viber的hook动态库libvbcalls会抓取所有的Viber通信记录。Libvbcalls的hook方式与libwacalls类似,当电话接通和结束的时候,libvbcalls也会发送ID。

CallEnded用来hook通话的结束时间并且发送系统级的ID。

下列ID是libvbcalls发送的。

  1. # onCallStarted : eb899b6873eb166859e610915dd002ea21b6057bd31fc6c1b38f27e2 
  2.  
  3. # onCallEnded : b79cd49420fbeba629a0290bc890c66924dd8452d0c2fd5ba9b327d0 

Libaudio.dylib收到ID后开始录音,并且把通话保存到下列文件夹:

  1. # micFileName - /private/var/tmp/cr/x.<call_id>.caf 
  2.  
  3. # spkFileName - /private/var/tmp/cr/t.<call_id>.caf 
  4.  
  5. # sentryFileName - /private/var/tmp/cr/z.<call_id>.caf  

0×12.实时监控

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

结论

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

这份文件告诉我们,维持手机系统版本up to date的重要性,还有就是即使是最新版的软件,也要保持警惕。

0×13.附录A:TLS证书信息

0×14.附录B:越狱检测IOCs信息

 

责任编辑:武晓燕 来源: freebuf.com
相关推荐

2009-09-14 10:35:15

Linq内部执行原理

2022-01-10 17:35:26

Pegasus间谍软件

2022-07-28 11:47:22

网络安全间谍软件

2016-08-31 08:47:59

2022-07-14 08:02:57

Netty网络模块

2021-09-08 18:26:41

间谍软件木马NSO

2022-01-19 17:29:26

间谍软件黑客网络攻击

2023-05-30 09:07:06

CPU性能火焰图

2021-12-15 10:10:35

NSO间谍软件攻击

2012-02-08 10:37:42

Java反射

2024-01-17 21:34:51

2019-11-27 14:41:50

Java技术语言

2019-11-25 16:05:20

MybatisPageHelpeJava

2022-02-16 13:08:30

间谍软件Pegasus

2021-12-04 15:01:38

间谍软件漏洞攻击

2024-03-04 19:00:48

2021-10-27 05:42:58

间谍软件恶意软件网络攻击

2010-10-12 14:22:41

PHP异常机制

2022-08-30 09:01:11

浏览器渲染前端

2016-12-19 14:35:32

Spark Strea原理剖析数据
点赞
收藏

51CTO技术栈公众号