接好篇:
- 怎样根据查找故意开发人员的思路来找寻系统漏洞(上)
- 怎样根据查找故意开发人员的思路来找寻系统漏洞(中)
核心详细地址泄漏
在绝大部分漏洞利用中,攻击者应用核心表针泄漏原语来调节漏洞利用。在除CVE-2019-1458以外的全部漏洞利用中,此泄漏原语全是大家都知道的HMValidateHandle技术性。
HMValidateHandle()是user32.dll的内部结构未导出来函数公式,可根据isMenu()等各种各样函数公式进行利用,而且可用以获得全部Windows版本号(直到Windows10RS4)中不一样Window目标的核心详细地址。此项新技术是毫无疑问的,乃至早在2011年就已应用,因而大部分开发设计实例教程都挑选专业分析isMenu()来查找HMValidateHandle()的详细地址。
让人诧异的是,在可用以查找HMValidateHandle()的数十种不一样函数公式中,攻击者仅仅依照大家都知道的实例教程选取了也应用isMenu()。更让人诧异的是,这类普遍的利用技术性很多年来依然很合理,沒有鼓励攻击者根据挑选更专业的例如CheckMenuRadioItem()来试着“掩藏”。
该泄漏为科学研究技术人员保证了下列印痕信息内容:
- 对话框的核心详细地址;
- THREAD_INFO的核心详细地址(pti字段名);
在利用全过程中的好几个流程里将应用此印痕信息内容:
- 在偏向/建立伪核心构造时应用详细地址;
- 保证科学研究员工的核心详细地址是合理的Unicode字符串数组(不包含2个持续的“\x00”字节数);
- pti用以精准定位合理的EPROCESS,随后在动态口令互换环节应用它;
与PlayBit的较为:PlayBit挑选根据立即浏览客户方式桌面上堆来完成此函数公式。
动态口令交换
该进攻的根本宗旨是按照给出的PID主要参数将系统软件权利授于需要的过程,按照基本的构思完成这一点的办法是用系统服务的动态口令更换EPROCESS/KPROCESS构造中的过程的动态口令。
下边有一些常见的新技术可以实现这一点,你能诧异地发觉有这么多不一样的选择可以完成此函数公式。
应用Ps标记
Windows核心包括下列函数公式和与过程有关的函数公式的局部变量:
- PsLookupProcessByProcessId:查找偏向过程的EPROCESS的表针;
- PsInitialSystemProcess:包括偏向系统软件EPROCESS的表针的局部变量;
- PsReferencePrimaryToken–回到一个偏向过程关键动态口令的表针;
根据以核心方式实行这种函数公式,给出的shellcode可以简单精准定位SYSTEM的动态口令,但仍不可以处理怎样在需要的EPROCESS中分派动态口令的问题。
有2种常用的解决方法:
- 应用特殊于版本号的偏移立即在EPROCESS中浏览恰当的偏移;
- 扫描仪EPROCESS以查找科学研究工作人员自身的表针(此前启用PsReferencePrimaryToken所了解的表针),并在寻找配对项后更换该内容;
此工艺必须以核心方式实行编码,因而除非是布署了别的SMEP绕开,不然它将被SMEP维护阻拦。
扫描仪PsList
查找总体目标过程和系统服务的EPROCESS的普遍取代方式是扫描仪被称作PsList的双连接过程目录,此技术性涉及到的流程为:
- 应用泄漏的pti字段名,精准定位原始EPROCESS;
- 扫描仪PsList以查找具备总体目标PID的EPROCESS;
- 根据查找PID为4或名字为SYS来扫描仪PsList,以检索SYSTEM的EPROCESS;
- 获取动态口令并将其存放在总体目标过程中的配对偏移中;
慎重升级SYSTEM动态口令的引入记数。
Volodya漏洞利用Arbitrary-Read原语检索SYS,如Cutter所显示
这类技术性必须PsList的主动态口令和LIST_ENTRY的偏移,大部分规定他们都做为版本号特殊配备的一部分开展储存。
该工艺的关键优势是,虽然它仍可以在核心方式下做为简易的shellcode实行,当在CVE-2017-0263的利用中常做的那般),但它也能够在客户方式下彻底完成。因此,你需要2个利用原语,一个用以随意载入(来源于核心室内空间),另一个用以随意载入(进到核心室内空间)。在客户方式下运作可以处理科学研究工作人员以前对于SMEP所详细描述的问题,进而使这类维护针对这类利用原语毫无价值。
因为动态口令是一个引入记数目标,因而恰当申请注册刚加上的引入十分关键,那样可以防止在提高过程停止时发生电脑蓝屏身亡(BSOD)。事实上,有两个不一样的引入记数:
- 动态口令是一个EX_FAST_REF目标,较低的表针位被作为引入记数;
- OBJECT_HEADER储存在动态口令以前,并保存另一个引入记数;
因为攻击者挑选升级后一个引入计数据段,因而必须实行下列流程:
- 屏蔽动态口令指针的引用记数位:在32位过程中解决齐8个字节数,在64位过程中解决齐16个字节数。
- 减掉偏向OBJECT_HEADER的引入计数据段所需要的变量定义;
- 读选值(应用随意载入漏洞利用原语);
- 相对应地提升它;
- 回写升级后的值;
可是,如下图9所显示,科学研究员工在包括此函数公式的全部32位漏洞利用程序流程中看到了下列系统漏洞:
32位漏洞利用中的引入记数升级中保持的系统漏洞
载入引入计标值时的两端对齐子网掩码为8字节数的两端对齐方法,而回写升级后的值时采用不一样的子网掩码。假如动态口令将存放在两端对齐8个字节数而不两端对齐16个字节数的基址中,则载入实际操作将升级系统漏洞的字段名。
虽然CVE-2016-0040和CVE-2016-0167应用Ps技术性,但到现在为止,扫描仪PsList是科学研究工作人员发觉的攻击者最爱的实行动态口令互换的方法了,在许多人的8种利用里都应用了这类方法。之中的7其中,她们应用了客户方式下的随意载入和随意载入。
与PlayBit的较为:在许多人的全部实例中,科学研究工作人员会常常见到PlayBit应用Ps函数开展动态口令互换。这一决策驱使攻击者采用了一些SMEP绕开对策,将他们集成化到CVE-2016-7255和CVE-2018-8453的后面系统漏洞中。这类设计方案挑选表明了为何攻击者不愿意将适度的随意载入原语做为漏洞利用的一部分。PlayBit自始至终应用0x300或0x600做为检索限制,并不是对EPROCESS中的动态口令偏位应用特殊于版本号的配备,反而是自始至终扫描仪EPROCESS开展检索。
特别注意的是,PlayBit在不一样漏洞利用中采用的运行内存毁坏技术性也被Duqu2.0应用,并在微软公司于2015年公布的VB演说中开展了剖析。根据这类运行内存毁坏,他们可以开启一些运行内存载入/写入实际操作。
PlayBit漏洞扫描系统EPROCESS以检索动态口令,如Cutter所显示
虽然科学研究工作人员还能够从别的层面来探讨这个问题,例如每一个攻击者在研发流程中喜爱运用的不一样系统进程,对Windows和ScrollBars之类的已创建对象的取名承诺。但科研工作人员坚信上边的目录早已清晰地说明了科研工作人员方式的高效率或实效性。从以上的目录可以看得出,几乎每一个系统漏洞的每一个层面都能够根据几类不一样的方法完成。即便如此,科学研究工作人员所看到的2个攻击者在不同应用的进攻方式上面十分一致,每个人坚持不懈自身喜爱的方法。
在全部研究过程中,科学研究工作人员期待致力于系统漏洞编写者自身,不论是Volodya,PlayBit或是别人。可是,科学研究工作人员觉得,根据查询漏洞利用开发人员的顾客群,也是有许多值得学习的物品。Volodya的客户列表不尽相同,包含Ursnif等金融机构木马病毒开发人员,GandCrab,Cerber和Magniber等敲诈勒索软件开发技术,及其Turla,APT28和Buhtrap等APT机构,这种机构最开始从业网络诈骗,之后都发展趋势为互联网情报活动。有意思的是,科学研究工作人员能够看见Volodya的零日系统漏洞更有可能卖给PT机构,而一日系统漏洞是由好几个违法犯罪手机软件机构选购的。因为沒有大量的信息内容,科学研究工作人员只有假定一旦安全性领域检验到零日系统漏洞,该漏洞便被回收利用并且以较低的价钱售卖。
APT的顾客Turla,APT28和Buhtrap都通常来自于俄国,并且有意思的是,即使是这种高級精英团队也订购了漏洞利用程序流程,而不是内部结构开发设计。这种客观事实进一步加强了科研员工的假定,即书面形式系统漏洞(written exploit)利用可以被视作恶意程序的被利用的原曲。
下表汇总并展示了来自于Volodya的CVE,及其应用这种系统漏洞发觉的顾客或恶意程序组。标着深蓝色的CVE为零日系统漏洞,当然更价格昂贵。左边突显的组被视作APT。
Volodya的顾客和她们应用的CVE
总的来说,研究人员在检验了一段时间内的漏洞样版后发觉,她们还不可以探讨都还没发觉的零日漏洞。除此之外,研究人员只有试着将实例的日期上溯到被捕获以前的阶段,但悲哀的实际上是,研究人员通常会明确在野外初次发觉这类攻击性行为的日期。除此之外,值得一提的是,Volodya在开发设计CVE-2015-2546的第一个漏洞时,从一开始就己经十分技术专业了。例如,它有一个唯一的随意撰写原语,研究人员没法追踪到所有别的漏洞利用手册。
在对漏洞利用程序流程实现研究及其对研究人员搜集的数十个恶意软件实例开展剖析期内,研究人员留意到了一个有意思的转变。初期的Volodya漏洞是做为置入到恶意软件中的源码售卖的,而后面的漏洞利用程序流程则做为接纳某一API的外界应用工具来售卖,这类转变很有可能说明Volodya已经采用大量的反检验对策。
在2015年至2019年的这段时间内,研究人员还注意到Volodya的工艺专业技能拥有显着改进。伴随着该机构越来越更强和更有工作经验,Volodya逐渐采用更合理的随意读写能力原语,她们乃至修补了这种原语中间的不正确。
CVE-2015-2546和CVE-2016-0165,并且,伴随着大中型函数公式被拆分成较小的子方法,漏洞利用编码越来越更为模块化设计。除此之外,她们在各种各样构造中检索和浏览特殊偏移的工艺也取得了改善,而且在近期的完成中,它可以尽快解决Windows主次版本号中的变更,因而显得更为动态性和安全性。
这不但展现了网络攻击的自学能力越来越强,也暗示着了他俩的技术也在提升。搜索并靠谱运用Windows核心漏洞的功能的确并不是这么简单。比较之下,研究人员能够看见PlayBit在2015-2018年期内在这个市面上十分活跃性,她们的要点是售卖一日漏洞,在其中之一是Volodya的零日漏洞(CVE-2016-7255)。
汇总
研究人员的研究方式是对漏洞利用开发人员的特点开展案件线索鉴别,随后再将这种特点作为唯一的检索签字。在跟踪Volodya和PlayBit的漏洞时,研究人员2次运用了此项技术性。拥有这两个取得成功的检测实例,研究人员坚信该研究方式可用以检索别的漏洞利用软件开发者。研究人员提议别的研究人员试着文中讲的技术性,并将其作为其军械库中的别的专用工具。
在这里研究全过程中,研究人员关键研究了APT进攻和受欢迎的恶意软件(尤其是勒索病毒)中不一样恶意软件大家族所应用或置入的漏洞。
研究人员可以不断应用研究人员的新技术来追踪由两种不一样网络攻击撰写和售卖的16种WindowsLPE漏洞,这一点十分让人诧异。充分考虑在其中有15个是在2015-2019年的时间段内,因而可以假定他们组成了漏洞利用销售市场的关键市场份额,尤其是WindowsLPE漏洞。
最终,研究人员不太可能了解Windows核心零日漏洞的总产量。话虽如此,研究人员依然可以根据回望所捕获的漏洞窥一斑而知全豹。上年,诺顿杀毒软件汇报,有一个网络攻击散播了一个漏洞利用架构,主要包括此外3个零日漏洞。将这种数据加起來,研究人员发觉15个零日漏洞中有8个(占“市场占有率”的一半以上)仅来自于2个开发设计精英团队。这代表着研究人员的研究技术性有可能被用于跟踪由此可见销售市场中的很多网络攻击。
文中翻譯自:https://research.checkpoint.com/2020/graphology-of-an-exploit-volodya/