修复黑客用来攻击系统的漏洞背后的各个漏洞是很重要的,但阻止攻击者利用这些漏洞和删除整个漏洞的技术更有效,或者至少使它们更昂贵和更耗时的创建。
面向返回的编程(ROP)是一种非常常见的技术,尤其难以阻止,因为攻击者不是试图将自己的代码注入正在运行的进程(某些操作系统和浏览器已经添加了防御),而是寻找内存中已经包含“返回”的合法代码的小块,其中代码跳转到新的例程或返回主线程。
微软操作系统安全总监戴夫·韦斯顿告诉Tech Republic说:“有了ROP,我就无法创建新的代码;我只能跳转到不同的代码片段,并试图将它们串成有效负载。” 如果合法代码像缓冲区溢出一样存在内存安全错误,损坏内存中的指针意味着系统开始运行攻击者自己的代码,而不是返回程序调用堆栈中的地址。
自2012年以来,微软一直在研究如何阻止攻击者劫持像这样的程序中的控制流程。 Windows增加了多个级别的保护,从签署重要代码(代码完整性保护,或CIG)开始,首先在浏览器中阻止运行时代码生成,然后在VM和内核中(任意代码保护,或ACG)。
韦斯顿解释说:“目标是防止攻击者加载微软或我们的第三方之一没有签署的二进制文件;即使他们能够利用进程并在进程中获得内存损坏,他们也不能注入shell code或其他构造。”