SEHOP的全称是Structured Exception Handler Overwrite Protection(结构化异常处理覆盖保护),SEH攻击是指通过栈溢出或者其他漏洞,使用精心构造的数据覆盖结构化异常处理链表上面的某个节点或者多个节点,从而控制EIP(控制程序执行流程)。而SEHOP则是是微软针对这种攻击提出的一种安全防护方案。
Server 2008 默认启用, VISTA 和 WINDOWS 7 中 SEHOP默认是关闭的。
怎么开启 SEHOP :
1下载补丁
2 修改注册表 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession Managerkernel
设置 DisableExceptionChainValidation 项,值为0 启用SEHOP
SEHOP的核心是检测程序栈中的所有SEH结构链表,特别是最后一个SEH结构,它拥有一个特殊的异常处理函数指针,指向的是一个位于NTDLL中的函数。
解决方法 总结:
1 不去攻击SEH 去攻击函数返回地址 没启用GS 或者此函数没有GS保护 / 虚函数 没有攻击SEH等
2 利用未启用SEHOP模块 例如 Armadilo加壳了 之后禁用了SEHOP
检查SEH链中最后一个异常,那么我们伪造一个结构绕过 非常苛刻的条件:ASLR不能被启用 因为伪造SEH需要用到 FinalExceptionHandler指向的地址