覆盖SEH攻击的末日-SEHOPP
2009-02-04 13:53:20 来源:WEB开发网第二种方法则涉及向异常调度器添加动态check,而该调度器并不依赖于源自二进制的元数据。这正是SEHOP采用的方法。从较高级别来看,SEHOP保护能够通过验证thread的异常处理器列表的完整性(在允许任何登记的异常处理器被呼叫前)来阻止攻击者使用SEH技术。SEH覆盖的含糊性使这种缓解技术得以实现。当大多数基于堆栈的缓冲区发生溢出时,攻击者将会在覆盖异常登记记录的异常处理器函数指针之前,将会含糊地覆盖异常登记记录的下一记录指针。由于下一记录指针被损坏,异常处理器链的完整性就被破坏了。这一观点,加上ASLR技术,使SEHOP得以有效减轻SEH覆盖技术带来的损坏。
从执行的角度来看,SEHOP通过两个不同的步骤来实现其功能。第一步是在thread的异常处理器列表中插入象征性的异常登记记录以作为尾记录,这一步骤发生在thread第一次开始在用户模式执行的时候。由于异常登记记录总是插在异常处理器列表的前面,象征记录总是最后的异常登记记录。
第二步则是:在异常情况正在被调度的时候清理常处理器列表以确保象征记录的有效性。这一步骤发生在,异常调度器发现在用户模式出现异常的时候。如果象征记录无效,异常调度器就会认为,异常处理器列表已经遭到破坏,已经发生了SHE覆盖技术攻击。随后,异常调度器就会安全结束进程。如果发现象征记录有效,异常调度器就会正常运作并呼叫每个登记异常处理器。下图就是相关的原理图。
可以如何使用SEHOP
SEHOP在Windows Server 2008中是默认启用的,而在Windows Vista SP1中默认是禁用的。在Windows Vista SP1中默认禁用的主要原因是因为缺乏足够的应用程序兼容性数据。KB article 956607则讲述了如何从系统的角度启用或者禁用SEHOP。
安全专家指出,会继续研究新的先进的缓解技术,目前而言,SEHOP是能够保护用户的有效工具,希望用户们启用此功能(如果默认为禁用的话)以更好地保护自己免收SEH覆盖技术的攻击。
更多精彩
赞助商链接