第11章 其它类型漏洞分析11.4CVE-2014-9150AdobeAcrobatReaderMoveFileEx IPCHook竞争条件(沙盒逃逸)漏洞
Therac-25医疗事故
1986年4月,男性皮肤癌患者在美国一家医院接受Therac-25放射性治疗。电子医疗操作人员对设备非常熟练,快速输入数据,启动机器后,机器很快停机,显示“Malfunction 54”,即能量已发射,且剂量过高或过低。机器界面上显示剂量过低,于是操作人员就进行恢复和重启操作,但此时患者已疼痛的无法忍受,大声喊叫,治疗被迫终止。由于辐射剂量过大,患者脑部受损,,20天后去世。
经排查,当操作人员的数据输入速度过快,超过机器临界的处理速度后,就导致无法及时检测到计量过高的行为,从而出现“Malfunction 54”信息,最终放射过量致病人死亡。厂商对软件过度信任,关闭原有的硬件互锁装置,使得软件系统成为引发事故的起源点。这是历史上记录最早的因竞争条件漏洞导致的重大事件。
据统计20世纪80年代中期,加拿大原子能公司制造的放射性治疗仪Therac-25共发生类似医疗事故6起,皆因辐射剂量过量,导致4人死亡,2人重伤的特大医疗事故。该事件是医疗史和软件工程史上被大量引用的案例,常见于各种医疗或软件杂志,影响重大。
2003年北美断电事件也是因为竞争条件漏洞导致。卫星拍摄到当时断电前后的图片。
竞争条件漏洞原理
竞争条件(Race Condition)是多个对象(进程、线程等)同时操作同一资源,导致系统执行违背原有逻辑设定的行为。这类漏洞在Linux或内核层较常见,在Windows或Web层面也有,特别是电商网站,如存在购物的竞争条件漏洞,则可能导致低价购买很多商品。
举个现实场景例子,A和B同时向同一银行账户存款,此时卡约是1000元,A存200元,B存300元,正常存款流程应该是最后余额是1500元。但如果银行没有做到良好的同步处理机制,那么会造成最终存款额是1300元,丢失200元,这是不正常的。检查余额的时间可称为”Time of Check“,存款的时间可称为”Time of Use“,故该问题可称为”TPCTOU“或”TPCTTOU“(Time of Check to Time of Use),属于竞争条件漏洞,常见于各类IO操作,如文件操作,网络访问等。
如果攻击者能在某个对象的Time of Check和Time of Use之间争得时间,在此时获得操作的机会,那么就有可能破坏程序原定的处理逻辑。如相对用户B而言,A的Time of Use就是对其的破坏行为(漏洞攻击),使得本应存入的200元被丢弃。同理,相对用户A而言,B的Time of Check就是对其的破坏行为,只是检查余额是个无害行为,假如它刚好也是存款行为,那么这笔钱也会被”无效“掉。把用户B的2个行为互换,他存入的钱也会丢失。
熟悉Windows、Linux编程的人应该知道互斥锁和自旋锁的相关概念,它们就是为解决此类同步问题,保证某一对象在对特定资源进行访问操作时,其他对象不能访问操作该特定资源,保证正常的同步处理机制。
CVE-2014-9150漏洞描述
Adobe Acrobat Reader软件在处理MoveFileEx对应的Call Hook函数时,由于存在竞争条件漏洞,使得在检测移动目录位置合法性(Time of Check)与完成移动操作(Time of Use)的时间内,能够实施特定的攻击(如文件链接到其他位置),从而导致沙盒逃逸,向任意位置(如桌面)写入文件。桌面这种目录,沙盒进程是没有权限写入的。
Adobe沙盒介绍
Adobe沙盒和IE沙盒类似,也是对沙盒进程限制权限,如文件访问、注册表等敏感的安全位置,沙盒进程的完整性级别是Low,没有像IE的AppContainer级别。Adobe沙盒的原理可参考官方发布的原理图。当沙盒进程准备调用CreateFile创建文件时,它是不能直接向系统申请的,而必须通过Broker进程来当中介,由Broker进程去跟系统交互,因为像CreatFile/MoveFile/ReadFile等敏感操作函数都是被Hook(Adobe沙盒内有许多此类Call Hook),最后都会被Broker代为处理,然后Broker再根据相应的安全策略判断沙盒进程执行的操作是否在许可范围内,如果允许就由Broker与系统交互完成操作,然后把结果返回给沙盒进程,否则就拒绝。
CVE-2014-9150是由其中一个针对MoveFileEx的Call Hook存在竞争条件漏洞导致的。
利用漏洞实现沙盒逃逸
漏洞分析环境
操作系统:Windows 7 SP1
漏洞软件:Adobe Reader XI 版本号:11.0.08
正常情况下,Adobe沙盒进程调用MoveFileEx移动Adobe自身目录下的文件。由于这里Adobe没有做好同步处理机制,如能在Time of Check和Time of Use之间获得竞争时间执行特定操作(如将文件链接到沙盒进程无操作权限的文件位置,如桌面),那么就有可能实现沙盒限制写文件到桌面。
1,设置移动的源文件与目标文件分别为Adobe目录下的文件,保证沙盒进程允许访问。
2,对源文件设置OpLock,并设置解锁的回调函数UnlockFile,随后调用MoveFileEx对应的Call Hook函数,以保证后面的文件链接行为是在二者操作时间之间。关于Call Hook的查找,可以先从公开的API函数,如InternetGetCookie或DeviceCapabilitiesW等函数开始,从它们的交叉引用表逐步索引找到,具体可参考CanSecWest 2013黑客大会上的议题Adobe Sandbox When The Broker Is Broken,描述的很具体。
3,UnlockFile调用CreateJunctionPoint函数,将移动的目标文件链接到桌面,它是发送IOCTLFSCTL_SET_REPARSE_POINT创建文件的重定向。通过DLL注入到Adobe沙盒进程,执行后,成功在桌面写入文件。
总结
本章是对前面的补充,讲解了一些未提及的漏洞类型,如IE、Adobe沙盒逃逸漏洞,Java漏洞,类型混淆,竞争条件利用等类型的漏洞,但软件漏洞还有很多,不能一一列举覆盖。如逻辑漏洞、IE”上帝模式“漏洞、反序列化漏洞、对杀毒软件或防火墙的主动防御绕过、欺骗攻击等类型的漏洞,未提及,可在网上阅读相关分析文章。
豆读电音同小阅对本书的所有笔记 · · · · · ·
-
第11章 其它类型漏洞分析 11.1 引言 11.2 CVE-2013-2423 JAVA Applet reflection 类型混淆代码执行漏洞
大小写不统一 引言 前面介绍多种常见漏洞,但还有其他类型未能提及。本章挑选几种类型进行分...
-
第11章 其它类型漏洞分析 11.3 CVE-2014-0257 Microsoft Internet Explorer 11 dfsvc组件沙盒逃逸漏洞
565页第一段写的不明不白的。一会“完全性级别”,一会“完整性级别” 漏洞描述 CVE-2014-025...
-
第11章 其它类型漏洞分析11.4CVE-2014-9150AdobeAcrobatReaderMoveFileEx IPCHook竞争条件(沙盒逃逸)漏洞
-
第12章 软件漏洞发展趋势
这书是2012年开始写,15年写完,16年出版的,现在是2020年中期。看他好几年前的预测很有趣。...
说明 · · · · · ·
表示其中内容是对原文的摘抄