pre-patch window
pre-patch window(漏洞尚未修复窗口):从一个漏洞被发现到其相应的补丁发布之间的时间窗。
pre-patch window的危害:在漏洞尚未修复窗口,攻击者可以针对漏洞发起攻击。
pre-patch window的成因:因为依靠程序员手工分析漏洞、编制、测试程序补丁需要一定的时间。
之前工作
为了解决使用程序补丁修复漏洞的pre-patch window这个缺陷,软件用户经常使用“程序漏洞临时解决方案”来暂时防止程序漏洞在修复前被恶意利用。方案具体是:直接让用户修改与漏洞代码相关的程序配置参数来禁止执行含有漏洞的代码。然而程序配置参数是设计用于让用户灵活调整程序的功能行为,而非提供安全保护,所以绝大多数漏洞并无与之对应的程序漏洞临时解决方案。
本文工作:SWRR(快速漏洞屏蔽方案)
目的是缩小或消除漏洞尚未修复窗口,SWRR可以被自动生成来为大部分漏洞提供临时解决方案。
难点(需要解决的地方)
1、由于事先并不知道漏洞在何处,所以难点是SWRR如何适用于还未发现的漏洞。
2、由于漏洞可能和任何类型的程序功能相关,出现在程序代码中的任何一个位置,而每个SWRR应该确保程序在应用这个SWRR之后仍然可以继续运行,所以作者在设计SWRR时着重考虑简单性、通用性和非介入性,不依赖于任何关于目标程序本身和漏洞的假设,非介入性指的是不影响目标程序的主要功能。
实现方法
1、实现通用性强和非介入性的关键点是利用目标程序自身的出错处理代码,因为程序员在设计程序时,出错处理代码的目的就是让程序在发生意外错误之后能恢复正常、继续运行。所以作者设计开发了Talos解决方案:
Talos使用静态程序分析识别目标程序已有的出错处理代码,自动生成SWRR并添加SWRR到目标程序,一旦某个漏洞即将被利用,与此漏洞相应的SWRR就改变程序的执行流程去调用出错处理代码,防止漏洞被利用,来屏蔽这个漏洞。
如下图,植入式的SWRR可以让用户修改配置参数来动态启动或关闭用户指定的SWRR。
Talos的启发式规则Talos使用创新的启发式规则,通过静态程序分析来识别代码:
1、错误记录函数:当程序遭遇错误时,经常会调用错误记录函数来记录与错误相关的信息。通过识别程序对错误记录函数的调用,Talos可以发现出错处理代码。如下图:
2、NULL返回值:如果没能发现对出错记录函数的调用,Talos会查看目标函数的返回值类型是否是指针类型,通常一个返回值为指针类型的函数会返回NULL来向其调用者指明有错误发生。
3、错误传递:很多时候一个函数会使用其调用另一函数的返回值作为自己的返回值,相当于把错误沿着调用链(call chain)向上传递。这种出错传递有三种方式:直接使用、转换后上传、转换后下传。Talos可以识别这三种传递方式。
4、间接保护:如果一个函数的所有调用者都可以被SWRR保护,Talos可以通过植入在这些调用者里面的SWRR来保护这个函数。