KASLR 和 SMEP 是内核模式保护,将 ASLR 应用于内核空间并分别在执行时强制执行特权环边界。EMET 只是一个用户空间保护工具,因此不涉及 KASLR 或 SMEP。
您还应该知道 EMET 不是灵丹妙药。它的设计有两个目标:提高漏洞利用开发的成本,以及降低或消除现有预先编写的 shellcode 的功效。
因此,要回答您关于 EMET 和 Windows 8.1 的问题,答案是肯定的,EMET 提供了很多保护:
SEHOP
SEHOP 是一种旨在防止通过 SEH 处理程序覆盖利用堆栈缓冲区溢出的机制。EMET 挂钩提供异常处理的 OS 功能并插入检查以确保处理程序没有损坏,主要是通过验证处理程序地址是应用程序中预定义的地址。
动态 DEP
数据执行保护允许硬件强制执行内存页面上的访问标志。操作系统的正常配置是为服务启用 DEP,然后根据编译器标志(存储在 PE 标头中的特性字段下)让应用程序选择加入。EMET 允许您为进程指定强制 DEP 启用的策略,即使它不是使用此标志编译的。它还有一个额外的好处:它为进程指定了 DEP 策略,这样SetProcessDEPPolicy应用程序内部的调用就不能覆盖这个标志,因此与该 API 的 ROP 链接不会禁用 DEP 并允许简单的堆栈执行。
堆喷雾保护
这种保护只是为了防止从 Metasploit 等框架中提取的库存 shellcode。它预先分配堆喷射攻击中使用的公共页面地址,并将内存设置为不可访问。这很有用,因为许多现有的路过式攻击都使用这些地址,并且您可以通过分配它们正在寻找的页面来从根本上阻止所有这些攻击。当然,知道自己在做什么的人可以重新编写 shellcode,但它提高了标准,使只知道如何使用 Metasploit 或 PoC 脚本的脚本小子更难。
空页分配
与堆喷雾保护相同,只是它在空页地址处分配一块只读内存。目标是防止空页面取消引用做任何奇怪的事情,尽管他们坦率地承认这只是一种纵深防御措施,因为空页面取消引用并不是真正可利用的错误。
强制 ASLR
与 DEP 一样,ASLR 必须使用标志进行编译,该标志再次设置在 PE 标头中。ASLR 的问题在于,即使您的主程序可执行文件被标记为 ASLR,它也只需将单个非 ASLR DLL 加载到其内存空间中即可导致潜在的 ASLR 绕过——一旦在可预测的位置存在已知代码块,攻击者可以建立一个 ROP 链。强制 ASLR 强制所有加载的模块都标记为启用 ASLR,即使它们不是这样编译的。
但是,在 Windows 8(和 8.1)中,如果启用了本机强制 ASLR 实现,则此功能不会执行任何操作,因为它在操作系统级别执行相同的操作。
导出地址过滤
EAF 监视导出地址表 (EAT) 上的读取操作,以确保读取仅来自应用程序代码区域,而不是 shellcode。这是为了让 shellcode 难以扫描模块的 EAT 以找到 API,其中模块地址以某种方式泄露,以促进这种技巧。这是他们使用启发式来猜测调用者是否是 shellcode 的另一种机制,并且不是万无一失的。它只是为了抓住低垂的果实。
电弧炉+
这是 EAF 的扩展,但它可以与 EAF 结合使用或独立于 EAF 使用。它检查堆栈指针是否在允许的范围内,以及堆栈和帧指针是否不匹配。EMET 5.0 为进程引入了一个“有效模块”列表,当它被填充时,EAF+ 还检测是否读取这些模块的 EAT 指针,并监视对内存中可执行文件的 MZ 和 PE 标头的读取以防止 EAT / IAT 扫描。
自下而上的随机化
也称为自下而上的 ASLR,这会随机化自下而上分配的位置,例如堆栈和堆。这是对 ROP 的一种额外对策,它只会增加布局中的熵量。
抗ROP
这是一整套有助于防止 ROP 成功的保护措施。它监视 LoadLibrary 调用以防止从 UNC 路径加载 DLL,防止内存保护 API 使堆栈可执行,检查 API 是否被正确调用(即使用 CALL,而不是 RET),尝试跟踪调用链以检查 ROP类似的行为,并尝试检测堆栈旋转(包括检查 ESP / EBP 与存储在某些 API 中使用的上下文快照中的值)。所有这些都让任何试图构建有效的 ROP 链的人感到头疼。
攻击面减少
ASR 允许您将允许应用程序加载的 DLL 列入白名单。出于多种原因,这很有用,包括阻止恶意软件进行 DLL 注入、阻止加载不安全的插件(例如 Flash)以及阻止漏洞利用 LoadLibrary 进行恶意目的。
高级防ROP
该功能增加了更多的防ROP功能。它挂钩了更深层次的功能,例如 ntdll 的内存分配功能,因此绕过反 ROP 检查变得更加困难。它还尝试捕获包含函数 prolog 副本的 shellcode,执行它,然后跳过真正的 prolog 以到达真正的函数,作为一种钩子绕过的形式。最后,它禁止了 ntdll!LdrHotPatchRoutine 函数,以防止滥用热补丁功能。
证书固定
这不是其他相同意义上的缓解措施,但它在 IE 中强制执行证书,因此它们不能轻易被替换。
我在这里要说明的一点是,EMET 具有一整套保护措施,当同时启用这些保护措施时,会使利用过程变得更加困难。EMET 并没有试图阻止 APT 和民族国家破坏东西。他们试图让构建工作漏洞的成本(在时间/金钱/技能方面)变得更加昂贵,这样坏人尝试的利润就会降低。他们还渲染了大多数不是专门为避免 EMET 无法运行而设计的 shellcode,这是市场的很大一部分。绝对值得启用它。
由于您担心某些应用程序的稳定性,您只需要确定与不同保护措施的兼容性。EMET 5.0 具有记录检测的报告功能,因此您可以检查并尝试识别问题。从启用所有主要保护开始,然后随时打开或关闭其他保护,直到达到平衡。
至于证书固定,它主要是特定于浏览器的。当然,有一些 Firefox 和 Chrome 的插件可以做到这一点,尽管我对一些插件印象深刻。Certificate Patrol 很受欢迎,但我觉得它太吵了,没用——你只是学会了盲目地点击 OK。Chrome 确实有--hsts-hosts命令行选项,看起来很棒,但您需要做一些手动工作才能正确设置它。Firefox现在默认固定多个站点,Chrome 也是如此,这意味着您已经在一定程度上受到保护。不幸的是,似乎没有简单的方法可以在您的环境中的所有浏览器上管理您自己的固定,您必须进行手动工作。
资料来源: