强制ASLR行为机制解析
上周CERT/CC发布的安全公告描述了在Windows 8及以上系统中使用Windows Defender Exploit Guard(WDEG)和EMET启用系统级强制ASLR时观察到的异常行为。本文将解释该配置问题的本质并提供解决方案。
ASLR技术背景
在Windows系统中:
- 动态基址(/DYNAMICBASE):EXE/DLL需通过此编译标志选择加入ASLR保护,该选项自VS2010起默认启用
- 强制ASLR:Windows 8引入的新特性,可强制重定位未启用ASLR的模块
- 自底向上随机化:为强制ASLR重定位的模块提供熵值增强
核心配置问题
当进程EXE未启用ASLR时,系统不会自动启用自底向上随机化(如下表示例):
EXE类型 | 强制ASLR | 自底向上随机化 | 实际效果 |
---|---|---|---|
已启用ASLR | 开启 | 自动启用 | 完全随机化 |
未启用ASLR | 开启 | 需手动启用 | 仅重定位无熵值 |
解决方案
方法一:通过注册表全局启用
|
|
方法二:使用WDEG按程序配置
- 启用"强制映像随机化"(强制ASLR)
- 启用"随机化内存分配"(自底向上随机化)
Windows 7差异说明
在Windows 7上,EMET通过特殊设置将所有模块视为ASLR兼容,这会导致:
- 隐式启用自底向上随机化
- 可能引发应用程序兼容性问题
- 该模式在后续版本中被弃用
总结
当前行为属于系统设计预期,WDEG团队正在修复配置界面问题。管理员可通过注册表或程序级配置实现完整的ASLR保护,但需注意潜在兼容性风险。