iOS远程越狱间谍软件Pegasus技术分析
前言
听了报告,了解一下
正文
一、事件
苹果公司昨天针对IOS发布了一个安全更新,涉及到三个0 day漏洞,这次漏洞的发现过程从一次APT攻击开始。大家需要注意,黑客通过漏洞进行远程控制并获得IOS用户的系统最高权限,造成敏感信息泄露、数据破坏等严重后果。
这次漏洞的发现过程从一次APT攻击开始。阿联酋人权活动人士Ahmed Mansoor在他的苹果手机上收到一个含有链接地址的短信,短信声称链接的内容是关于阿联酋虐待监狱囚犯的。Mansoor引起警觉,随即将该链接提供给了加拿大的Citizen实验室。Citizen实验室和Lookout公司的联合研究结果表明,这是一种针对IOS用户的APT攻击,该攻击代码被命名为Pegasus。
二、Pegasus简介
Pegasus攻击的方式很简单,有效载荷的传播也是静默方式。攻击者给受害者发送一个URL,可以是短信、邮箱、社交软件或者任何其他方式,受害者仅需点击一下链接,服务器就开始向受害者的手机传输攻击载荷,远程越狱受害者的手机,然后安装监控软件。一切都是在受害者不知情的状况下发生的,受害者唯一可以察觉的就是按下这个链接之后,浏览器自动退出了。监控软件包含木马代码和程序,用来监控、收集数据并且上传到服务器,受害者的一举一动尽在攻击者的掌握之中。为了达到完全静默监控,监控软件不会下载这些软件的木马版本,重新安装到受害者手机上。而是采用预装的版本,包括系统软件和用户安装的软件。
一般情况下,iOS的系统是为软件做好分离设计的,软件之间是无法通信甚至无法知道对方存在的。但是越狱后的系统确是可以通过hooking的方式来监控其他软件的。三叉戟软件套装通过加载其动态链接库到目标进程的方式,可以应用于hook那些安装有Cydia Mobile Substrate框架的软件。这个框架在越狱社区非常有名,Pegasus套装也使用了这个框架。
三、攻击条件
Pegasus一共涉及到三个IOS 0day漏洞的利用:CVE-2016-4655、CVE-2016-4656和CVE-2016-4657。
CVE-2016-4655:
KASLR漏洞,可以寻找到内核基址。在Pegasus进行越狱之前,它首先得确定内存中内核的位置。苹果系统中的KASLR保护就是把内核映射到不可预测的内存地址,以起到保护的作用。
但是在这个漏洞中,攻击者使用一个函数调用,这个函数会在返回值中返回没有经过混淆的内存地址,从而攻击者可以计算出内核的基址,锁定内核的位置。
漏洞原理
OSUnserializeBinary函数用于解析二进制格式的序列化对象,之前爆出的UAF漏洞(CVE-2016-1828)和这次的UAF漏洞(CVE-2016-4656)都存在于该函数中。观察OSNumber对象的创建代码。
1 | len = (key & kOSSerializeDataMask); |
CVE-2016-4656:
是内核内存损坏,这个漏洞用于提权越狱,基于内核中的内存损坏漏洞。通过精心构造数据可以在Free之后先分配对象来重新占用之后再触发Use,也可以进一步转换成double free,获取内核态的执行权限从而执行越狱代码。
漏洞原理
1 | // open user client |
通过POC代码可以看到漏洞存在于17号调用函数,定位后对其进行逆向分析。该函数会将传入的port、callback、refcon等数据保存起来,以供需要向用户态发送消息时使用。传入的数据大小是0x18,前两个64位数据分别是callback地址和refcon的值。值得注意的是在保存数据前会首先检查相同的refcon是否已经存在,如果存在则认为已经添加过了,会调用releaseAsyncReference64函数释放reference,从而调用iokit_release_port_send释放我们传入的port,并且返回0xE00002C9号错误。
1 | if ( !a3->asyncReference ) |
CVE-2016-4657:safari的内核webkit漏洞,Safari Webkit中存在一个漏洞,能够执行任意代码。Pegasus会利用这个漏洞获取Safari浏览器内的代码执行权限。
利用以上的三个漏洞,只要用户点击了特定的url,Pegasus就会开始攻击,从而实现监控获取用户的信息。
四、攻击流程
Pegasus的可怕之处在于,攻击过程基本不需要用户交互,用户所要做的仅仅是点击一个链接,接着,攻击者就可以静默地传送payload,然后远程越狱,安装间谍软件。用户唯一能感知到的情况就是点击链接之后,浏览器自动关闭了。间谍软件中包含恶意代码、进程和用于监控用户行为并进行反馈的app。
实际上,iOS的安全机制并不允许应用相互监控,但是可以在越狱的设备上安装用户监控的hook。Pegasus就是利用了远程越狱和hook。Pegasus将它的动态库插入到设备里的针对正规进程中。这些动态库之后就会使用Cydia Mobile Substrate框架去hook应用。
受害者点击链接之后,攻击者展开攻击。攻击分为三个阶段,每个阶段都包含了攻击模块代码和隐蔽软件。攻击是线性的,每个阶段都依赖于上个阶段的代码、隐蔽软件的成功,每个阶段都使用了关键的漏洞,以确保进攻成功进行。
第一阶段:传送并利用WebKit漏洞,通过HTML文件利用WebKit中的CVE-2016-4655漏洞,这个阶段是诱使受害者点击一个网站地址,诱发漏洞,执行代码,32位机器和64位机器分别下载用于下个阶段的代码;。
第二阶段:越狱。在第一阶段中会根据设备(32/64位)下载相应的,经过加密混淆的包。每次下载的包都是用独一无二的key加密的。传统的云端特征码检测技术在此失效,软件包内包含针对iOS内核两个漏洞(CVE-2016-4656和CVE-2016-4657)的exp还有一个用来下载解密第三阶段软件包的loader。这些包中含有内核基质定位代码和UAF漏洞利用代码,并且包含了代码解密程序。在此阶段内核基质被定位并被越狱。
第三阶段:安装间谍软件。经过了第二阶段的越狱,第三阶段中,攻击者会选择需要监听的软件,把hook安装到应用中。
另外,第三阶段还会检查设备之前有没有通过其他方式越狱过,如果有,则会移除之前越狱后开放的系统访问权限,如ssh,使其成为Pegasus专属监控设备。程序也会监控三个阶段的执行是否成功,如果失败(或者特定状态下),则清除自身不留痕迹。
软件还有一个“故障保险“,如果检测到设备满足某些条件,软件就会自毁。
第三阶段中,间谍会部署一个test222.tar文件,这是一个tar包,包中包含各种实现各种目的的文件,如实现中间人攻击的根TLS证书、针对Viber、Whatsapp的嗅探库、专门用于通话录音的库等。
五、越狱后维持
一旦内核被攻破了,Pegasus开始准备安装越狱环境。
●关闭内核保护措施,例如代码签名
●重新挂载系统分区
●清除Safari的缓冲区(清除攻击痕迹)
●写入越狱文件(包含主要加载器 /sbin/mount_nfs)
在上一节的阶段二中,Pegasus会移除/etc/nfs.conf导致文件系统加载/sbin/mount_nfs(这就是阶段三的越狱加载器),/sbin/mount_nfs是以root的权限运行的,所以越狱软件接管了系统的完整权限。阶段三结束后,Pegasus需要在重启后也继续维持越狱状态,所以使用一段jsc二进制代码替换了系统中的rtbuddyd,并且链接到CVE-2016-4657,达到越狱持久化。
六、隐蔽性
Pegasus的自我保护和反侦察功能是优先于监控功能的。也就是说,宁可不再监控,也要保护自己不被发现。Pegasus有一大堆功能来保持其隐蔽性和静默性,它持续地监控手机状态并且阻止任何其他的方法来越狱/连接手机,并且当纸包不住火时,它有完整的自毁功能,从手机里完整的移除自己。而且,阶段三禁用了软件更新,使手机无法收到任何软件更新提示信息,从而很好的隐藏自己。
七、影响
监控软件可以完全控制以下软件:GMAIL,FACETIME,FACEBOOK,LINE,MAIL.RU,CALENDAR,WECHAT,SURESPOT,TANGO,VIBER,SKYPE,TELEGRAM,KAKAOTALK,从而获得用户的信息。
用户感染了Pegasus之后,手机处于完全的监控状态之中,包括电话录音,通话记录,短信,麦克风/摄像头实时通信(几乎变成对讲机)。在这个阶段获取到信息之后,监控者可以将这些信息用于下个阶段的入侵,例如拿到你的银行卡账户和密码,拿到邮箱账户密码,以及社保等等。