什么是非线性/向后覆盖?

信息安全 视窗 开发 威胁缓解
2021-08-24 02:28:27

我阅读了Black Hat USA 2012会议上的一些幻灯片,偶然发现了这个术语 ,在Microsoft 安全工程中心 (MSEC) (PDF) 演示文稿中 Ken Johnson 和 Matt Miller 的 Windows 8 漏洞利用缓解改进的non-­linear/backward overwrite幻灯片 5 中提到

            Windows 上的漏洞利用缓解历史记录             图片来源:Ken Johnson、Matt Miller,Microsoft 安全工程中心 (MSEC)

根据这张图片,在 Windows 7 中,还没有针对这种覆盖的缓解措施。

有谁知道这non-­linear/backward overwrite是什么,可以给我一些关于这种利用技术的额外信息吗?

1个回答

首先,“线性覆盖”是最常见的缓冲区溢出类型。这是幻灯片中给出的示例。从某个基地址开始,您以线性方式写入并最终覆盖返回地址:

void function(LPCSTR input){
    char buffer[256];
    strcpy(buffer, input);
}

非线性覆盖的一个示例是由 rGod 编写的 GroupWise ActiveX 控件利用这个 ActiveX 组件有一个方法调用,其中一个参数是内存地址,它允许攻击者写入内存中的任意位置。如果返回地址受金丝雀保护,攻击者可以直接指向返回地址并覆盖它,而不会破坏金丝雀。悬空指针还可以产生一种条件,攻击者可以控制特定地址以非线性方式读取、写入或执行。