常见的漏洞缓解技术整理

原帖:https://bbs.pediy.com/thread-226364.htm 作者:luobobo

GS

未开启GS时函数调用的系统栈的变化过程:

在这里插入图片描述
函数中的局部变量将从ESP所指的位置向下压栈,当写入的内存过大时,将会覆盖返回地址造成异常。

开启GS后,函数调用时会将一个DWORD随机数与ESP亦或后压入栈内,同时将其副本保存在.data段。在函数返回前,将有一个安全验证操作,防止函数返回地址被修改。
在这里插入图片描述
突破思路:覆盖异常处理机制 因为GS是在函数返回时检测,所以我们可以在返回前使程序发生异常,再覆盖异常处理函数达到EIP劫持。

SEHOP

SEHOP会检测SEH链的完整性,保证SEH链上最后一个异常处理函数是否为系统ntdll中的最终异常处理函数。
在这里插入图片描述
突破思路一:伪造SEH链
具体条件:
(1)当前覆盖Next SEH的值0xXXXXXXXX必须指向当前栈且能被4整除。
(2) 0xXXXXXXXX处存放为SEH最后一项,0xXXXXXXXX+4指向ntdll中最终异常处理函数
(3)未开启ASLR保护

突破思路二:覆盖虚表
常见的调用虚函数模式如:
mov esi, dword ptr [eax]
mov ecx, dword ptr [esi+?h]
call

ASLR

开启ASLR后,系统在加载可执行程序、动态链接库等映像文件时会对其加载位置进行随机化处理,使得重启后每次加载进内存的基址不同。

突破思路:https://paper.seebug.org/182/
在CVE-2012-1876中,我们通过堆溢出读取Button对象中虚表的值,由于该值与mshtml模块基址偏移值固定,从而可计算出mshtml.dll模块基址。
在这里插入图片描述
在堆布局中,我们大量构造多个String E、A、B、Button object这样排列的内存模块。其中E、A、B均为BSTR,包含头部四字节的String Size以及两字节的块尾。之后我们释放掉部分内存模块中的String E,再为Column样式分配内存。由于其内存大小与释放掉的String E内存大小近似,Column样式将会被分配在其中某一个内存模块中之前String E所在布局位置中。Exp中通过js代码修改其写入的内存,导致覆盖String B的Sting Size为一较大值,扩大string B的可读范围,获取到Button对象中虚表vftable的值,通过计算可得到mshtml.dll模块基址。

DEP

数据执行保护(DEP) 是一套软硬件技术,能够在内存上执行额外检查以帮助防止在系统上运行恶意代码,拒绝运行被标记为不可执行内存页的代码。

突破思路: 利用ROP(返回导向编程)绕过DEP。
首先我们应该了解Gadget的概念,ROP链就是由一个个小部件Gadget组成的。Gadget指以RET结尾的指令序列,由于RET指令等价于pop + jmp,因此在我们可控栈空间布局的情况下,通过精心设计即可控制代码实现流程。在此基础下通过在shellcode前构造ROP链,执行VirtualAlloc这样的API修改内存页的属性为可执行。

EAF/EAF+

导出地址表过滤,当前绝大部份shellcode在运行时需要通过遍历相应模块导出表来搜索API地址,EAF通过对ntdll.dll、Kernel32.dll和Kernelbase.dll导出地址表相应位置下硬件断点来拦截在攻击载荷中查找API地址的shellcode。同时还检测MZ/PE读取以及堆栈指针是否指向堆栈边界之外的某处或者是否与堆栈指针之间不匹配。 突破思路:通过创建Blob对象,调用了未被限制的ntdll模块,从而解决安全限制问题。

突破思路:通过创建Blob对象,调用了未被限制的ntdll模块,从而解决安全限制问题。 https://www.slideshare.net/CanSecWest/csw2016-gawlik-bypassingdifferentdefenseschemes?qid=7ed6ffea-695a-438e-a224-44dc3f6ece06&v=&b=&from_search=3
在这里插入图片描述

CFG

通过在间接跳转前插入校验代码,检查目标地址的有效性,进而可阻止执行流跳到预期之外的地点,最终及时有并效的进行异常处理。

EPM

启用EPM后渲染过程将在拥有网络隔离的AppContainer沙箱内运行,阻止沙箱进程和本地机器建立连接,并且阻止它接受新的网络连接。(Internet Explorer中不同的安全设置对应不同的zone:Internet上的页面通常在Internet Zone里进行渲染,本地内网上的页面则在Local Intranet Zone里进行渲染)

https://paper.seebug.org/196/中提到,由Internet Explorer的PlainHostName规则可知,如果域名不包含任何句点,则将被自动映射到Local Intranet Zone。并且AppContainer的网络隔离功能仍允许沙箱进程向本地137端口发送UDP数据。所以可通过NetBIOS Spoofing注册符合条件的域名信息,遍历NBNS数据包中的负责校验的两字节TXID字段以获得正确结果。(该方法在MS16-077已被修复)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值