DOM文档对象模型
HTML文档对象模型(DOM)是HTML页面的结构化表示,JavaScript通过浏览器提供的接口访问和修改DOM属性。这个复杂的接口存在多种安全缺陷,例如攻击者在CFR入侵中利用的释放后重用(use-after-free)漏洞。Elderwood组织此前至少发现并利用了Internet Explorer中三个同类型漏洞。
释放后重用漏洞原理
当程序释放内存块后仍继续引用该内存时,若攻击者能在原位置分配新数据,便可控制程序执行流:
- 程序分配并释放内存块A
- 攻击者分配内存块B占用原A的内存空间
- 攻击者向B写入恶意数据
- 程序误用已释放的块A,执行攻击者预设代码
堆内存预分配策略
Internet Explorer在16次同尺寸分配后会启用低碎片堆(LFH)。为规避前16次不可利用的分配,攻击代码创建3000个div元素并设置className属性:
|
|
随后间隔释放这些字符串创建内存空洞:
|
|
漏洞触发机制
通过特定DOM操作序列创建释放后重用条件:
|
|
值得注意的是,这段代码是唯一被try/catch包裹的部分,暗示可能直接复制自模糊测试工具输出。
对象替换技术
攻击者通过21次精准堆分配覆盖释放的CButton对象:
|
|
内存布局显示攻击者完全控制了虚函数表指针:
|
|
可靠性分析
在理想测试环境下该漏洞利用成功率仅60%,主要缺陷包括:
- 硬编码SWF文件内存地址(0x10ab0d0c)
- 假定第21个分配必定覆盖目标对象
- 依赖垃圾回收器触发漏洞的不确定性
测试数据显示,若省略堆预分配操作,成功率会进一步降至50%。这种脆弱性导致近半数符合条件的网站访问者未能被成功渗透。
结论
尽管Elderwood工具包提供了绕过DEP/ASLR的现成方案,但攻击者在关键的对象替换环节表现出对堆操作理解的不足。代码中大量存在JavaScript Cookbook示例的变量命名(如arrObject),且在核心利用部分仍保持相同的低水平实现质量。这表明APT组织在实际攻击中并不总是需要高度可靠的漏洞利用代码即可达成目标。