首页 > 菜鸟学院 > Win10安全特性之执行流保护

Win10安全特性之执行流保护

时间:2015-02-12 | 来源:互联网 | 阅读:89

话题:

0x00 背景


微软在2015年1月22日公布了windows10技术预览版,Build号:9926。电脑管家反病毒实验室第一时间对其引入的新安全特性进行了深入分析。

众所周知,漏洞利用过程中攻击者若要执行恶意代码,需要破坏程序原有指令的的正常执行。执行流保护的作用就是在程序执行的过程中检测指令流的正常性,当发生不符合预期的情况时,及时进行异常处理。业界针对执行流保护已经有一些相对成熟的技术方案,在微软发布的windows10最新版本中,我们看到了这一防护思想的广泛使用。

0x01 CFI


CFI即控制流完整性Control-Flow Integrity,主要是通过对二进制可执行文件的动态改写,以此为其增加额外的安全性保障。


这是Mihai Budiu介绍CFI技术时使用的例子。这里通过对二进制可执行文件的改写,对jmp的目的地址前插入一个在改写时约定好的校验ID,在jmp的时候看目的地址前的数据是不是我们约定好的校验ID,如果不是则进入错误处理流程。

同理在call 和 ret的时候也可以进行改写:

左半部分就是一个对call的改写,右半部分是对ret的一个改写,在call的目的地址和ret的返回地址之前插入校验ID,然后改写的call 和ret中增加了对校验ID的检查,如果不符合预期,进入错误处理流程,这个思路和上边对jmp的处理是完全一样的。

0x02 CFG


实现CFI需要在jmp、call 一个寄存器(或者使用寄存器间接寻址)的时候,目的地址有时必须通过动态获得,且改写的开销又很大,这些都给CFI的实际应用造成了一定的困难。

微软在最新的操作系统win10当中,对基于执行流防护的实际应用中采用了CFG技术。CFG是Control Flow Guard的缩写,就是控制流保护,它是一种编译器和操作系统相结合的防护手段,目的在于防止不可信的间接调用。

漏洞攻击过程中,常见的利用手法是通过溢出覆盖或者直接篡改某个寄存器的值,篡改间接调用的地址,进而控制了程序的执行流程。CFG通过在编译和链接期间,记录下所有的间接调用信息,并把他们记录在最终的可执行文件中,并且在所有的间接调用之前插入额外的校验,当间接调用的地址被篡改时,会触发一个异常,操作系统介入处理。

小编推荐


湘ICP备2022002427号-10湘公网安备:43070202000427号
© 2013~2019 haote.com 好特网