查看: 30315|回复: 32
收起左侧

[技术探讨] Microsoft's Enhanced Mitigation Experience Toolkit by Didier Stevens (全文翻译)

   关闭 [复制链接]
星空下的吻
发表于 2011-8-4 17:01:54 | 显示全部楼层 |阅读模式
本帖最后由 zdshsls 于 2011-8-5 12:39 编辑



现在的威胁无处不在,为了我们个人用户的安全,我个人建议大家给系统穿上Microsoft的铠甲--EMET,它是我们MSE的神器,但与NPE不同,EMET是防御型神器,相当强大的MSE配套软件。

Z龙在这里就仅补充一下其它信息及介绍吧。


之前我并不认为EMET有多么强大,但看过这些介绍,我才知道这是我们的神器啊。


建议大家把联网的应用程序,如adobe软件(flash等等)QQ、浏览器、迅雷、游戏等等,以及系统进程,如svchost、explorer等等,添加到应用程序列表里。





=========================================================
EMET 2.1
Microsoft技术支持网站的中文介绍

什么是增强的缓解体验工具包?(EMET)
增强的缓解体验工具包 (EMET) 是一种可以帮助阻止软件中的漏洞被利用的实用程序。EMET 通过使用安全缓解技术来实现此目的。这些技术用作特殊防护和阻挡,导致利用者必须攻克障碍才能利用软件漏洞。这些安全缓解技术不保证这些漏洞不被利用。而是尽量使漏洞的利用变得尽可能困难。
在许多情况下,可以绕过 EMET 的完整功能利用可能从未开发出来。

对于 EMET 可以保护的软件是否有限制?
无论编写软件的时间和撰写人,EMET 设计用于任何软件。这包括由 Microsoft 和其他供应商开发的软件。但是,您应注意某些软件可能与 EMET 不兼容。有关此问题的详细信息,请参阅“使用 EMET 是否会出现任何风险?”部分。

使用 EMET 有何要求?
在 Windows XP 和 Windows Server 2003 操作系统上,必须安装 Microsoft .NET Framework 2.0 才能使用 EMET。对于任何其他支持的 Windows 版本没有其他特殊要求。

可以从何处下载 EMET?
若要下载 EMET,请访问以下 Microsoft 网站:
http://go.microsoft.com/fwlink/?LinkID=200220&clcid=0x409

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e127dfaf-f8f3-4cd5-8b08-115192c491cb

如何使用 EMET 保护我的软件?
安装 EMET 之后,必须配置 EMET 才能为软件提供保护。这要求您提供希望保护的可执行文件的名称和位置。为此,请使用下列方法之一:
使用图形应用程序的“配置应用程序”功能
使用命令提示符实用程序
注意:介绍如何使用这两种方法的说明位于随 EMET 一起安装的用户指南中。

如何在整个企业中部署 EMET?
如果使用的是当前版本,则在整个企业中部署的最简单方法是使用命令提示符实用程序。为此,请按照下列步骤操作:
在每个目标计算机上安装 MSI。或者,将所有已安装文件的副本放在网络共享上。
在每个目标计算机上运行命令提示符实用程序以配置 EMET。

注意:您可以使用许多不同的技术实现此操作,包括使用 System Center Configuration Manager。如果您将 EMET 放在共享上,请确保从该共享运行命令提示符实用程序。应用程序运行时,会将必要的文件复制到 Windows 目录,并且将进行任何所需的注册表更改。
我们发现此技术对于许多企业而言存在一些不便。在下一版本,我们致力于将企业环境中部署和管理 EMET 变得更为简单。

使用 EMET 是否有任何风险?
EMET 使用的安全缓解技术具有应用程序兼容性风险。某些应用程序完全依赖缓解阻止的行为。在工作环境中部署 EMET  之前使用测试方案充分测试所有目标计算机上的 EMET 非常重要。如果您遇到特定缓解的问题,您可以单独启用和禁用特定缓解。有关详细信息,请参阅随 EMET 一起安装的用户指南。

=======================================================


  对想深入了解微软的EMET的朋友是一个很不错的参考资料.

  在阅读本文之前可以先看一下jeffrie的文章:http://bbs.kafan.cn/forum.php?mod=viewthread&tid=976536


  微软的增强型减灾工具包是一个用来为那些不支持新型保护技术诸如DEP和ASLR的旧式应用程序增强保护的工具。如果你使用的应用程序并非利用DEP或者ASLR技术来减轻类似缓冲区溢出等威胁,你可以使用EMET强制这个应用程序开启DEP和ASLR。



EMET V2.0提供了六种减轻威胁的技术:
DEP(数据执行保护)
ASLR(地址空间布局随机化)
SEHOP(结构化异常处理覆写保护)
Export Address Table Access Filtering(导出地址表访问过滤)
NULL page Allocation(空页面分配)
Heap spray Allocation(堆喷射分配)

你可以通过使用EMET配置工具来为你的应用程序开启这些保护特性:

当你为一个特定的程序开启EMET的时候,EMET的有效DLL(即起作用的DLL)会注入到该应用程序的每一个实例.EMET包含32位(EMET.DLL)和64位的(EMET64.DLL)DLL.

当你安装EMET的时候,你可能会注意到安装过程需要Microsoft .NET Framework 2.0的支持,因为EMET是一个.net程序,所以这是必要的,但是这对于有效DLL不是必要的,因为它是个win32可执行文件.

EMET的配置被存放于注册表键HKLM\Software\Microsoft\EMET中.该位置表明你需要管理员权限来配置EMET,这将允许你在赋予你的用户最小的特权时,作为一个管理员来对你的用户进行设置.当你配置EMET的时候,你的最小特权用户帐户无法禁用你的配置.

数据执行保护(DEP)是一个在Windows XP SP2中介绍过的安全特性,它避免代码在仅被指定为数据的内存中被执行.Windows的应用程序可以指定内存(虚拟内存页面)作为数据或者代码的比例,但是X86微处理器却无差别的从数据内存或代码内存中执行代码,直到DEP的出现以及微处理器对DEP支持的到来.

在DEP开启的状态下,Windows操作系统通过生成一个异常来避免代码在数据内存中被执行.

DEP有效地减缓了一个被广泛利用的攻击方式所带来的威胁-攻击者可以向数据内存写入代码就像写入堆和栈一样(更准确的说是shellcode)并使它执行.但是DEP的存在使得代码无法从被标记为数据的虚拟内存页面中执行,因为这种操作将触发一个异常,并将会导致进程的终止.

如果当攻击发生的时候用户还有尚未保存的数据,那么这将不可避免的带来数据的丢失,除非应用程序提供了类似于Microsoft office一样的数据恢复特性.

当被注入有效DLL的进程启动时,EMET通过调用SetProcessDEPPolicy函数来启用常驻的DEP特性;它一旦被激活,就不会被调用的进程所禁止.

地址空间布局随机化(ASLR)是保护漏洞不被本地或远程利用的重要特性.当ASLR被启用时(在Windows vista被首先提出),可执行文件(EXE和DLL)在半随机化的地址中被加载到进程内存.

如果ASLR没有被启用,一个可执行文件加载进内存的基地址在编译时候就已经确定.

如果一个地址并非空闲的(即该地址处内存已经被分配),那么文件映像加载器将会在其他的地址中加载可执行文件.而且这个地址每一次都不相同.但是当一个可执行文件在编译时设置了ASLR的标志,文件映像加载器将不会尝试在基地址中加载可执行文件,即使该地址不在使用中.取而代之的,它将会使用半随机化的地址加载(当前的ASLR支持256种不同的可能性).这个半随机化的地址对于指定文件时是相同的,只有在Windows重新启动后才会被改变.

ASLR对于防御远程漏洞很重要(比如在网络服务端利用漏洞)因为攻击者的shellcode无法对攻击所需要的win32 api函数的地址进行硬编码(入口地址被随机化).

ASLR对防止本地漏洞被利用同样很重要,因为它阻止ROP代码正常工作.ROP是一项用来绕过DEP的技术:它并不将shellcode写入堆栈中(被DEP保护的数据部分),ROP利用在运行进程的可执行文件中找到的小部分字节代码的地址.ROP代码由访问ROP Gadget的调用组成,它们是攻击者生成的认为合适的一小片代码。因为ROP通过将ROP-gadgets的地址写入堆栈中但在可执行内存中执行工作,因此DEP将会允许该操作.但是如果攻击者无法找到ROP-gadgets,那么他们同样无法使用ROP来触发被DEP保护的漏洞位置.

ASLR同样还能防止攻击者找到ROP-gadgets:当ASLR被开启的时候,可执行文件将被载入随机的地址,因此攻击者无法预测ROP-gadgets加载到内存的什么地方去了.

这就是为什么使用ASLR辅助DEP显得那么重要的原因了.如果不配合ASLR单独使用DEP,那么ROP技术可以被用来触发漏洞.Adobe Reader有一个众所周知的漏洞利用时使用了ROP:Adobe Reader 9以及之后的版本都同时使用了DEP和ASLR来保护程序免受攻击,但是其中一些Adobe使用的第三方DLL并不支持ASLR.这个DLL即icucnv36.DLL,它总是加载进相同的地址,因此攻击者可以使用在该DLL中找到的ROP-gadgets,因为他们能够预测ROP-gadgets的地址.

当EMET配置为强制启用ASLR时,EMET通过强制icucnv36.DLL在随机化的地址中被加载的手段来保护Adobe Reader不受ROP的攻击.更严格的来说,EMET并非使用ASLR技术,而是强制已经加载入内存的DLL在它们的基地址处预分配一些内存.

当一个DLL已经被加载但是却不支持ASLR的时候,EMET的有效DLL会在这些DLL的基地址处分配一些虚拟内存以便载入.然后,当文件映像加载器加载该DLL的时候,它会注意到该基地址正在使用中,于是就在另一个位置中加载DLL.值得一提的是,EMET提供的保护方法甚至好于标准的ASLR,因为每一个进程实例都拥有不同的地址.EMET同样通过预分配指定的虚拟内存页面来防御堆喷射攻击.攻击者使用堆喷射技术(通常使用JavaScript或者Flash编程)来将攻击性的shellcode填入堆的内存中.

当漏洞被触发并且使得程序通过流式跳跃到一个位于堆内指定的地址处,在堆中指定地址被喷射的shellcode将被执行.地址0x41414141是一个典型的例子(这是AAAA的十六进制表示,它经常出现在缓存区溢出的例子中).

EMET通过在这些指定的地址处预分配虚拟内存页面来防止成功在指定位置(如0x41414141一样)插入shellcode的堆喷射攻击.这种预分配技术使得这部分的内存对于堆不再有效,因此没有shellcode能够被写入.被EMET保护的地址可以在注册表键值heap_pages中找到,并且当前的值为0x0a040a04;0x0a0a0a0a;0x0b0b0b0b;0x0c0c0c0c;0x0d0d0d0d;
0x0e0e0e0e;0x04040404;0x05050505;0x06060606;0x07070707;
0x08080808;0x09090909;0x14141414.

另一种减轻威胁的技术是空页面分配,微软将空指针解引用(使用地址0x00000000),称为一种理论上的攻击方式.尽管如此,EMET仍然通过在0地址处预分配内存来防止这种攻击,就类似在指定的地址处预分配内存一样.

唯一的区别就是EMET需要使用特别的方式在地址0x00000000处预分配内存,因为win32 API函数VirtualAllocEx不接受地址0x00000000作为有效的参数.取而代之的是,EMET将使用NtAllocateVirtualMemory函数,该函数可以被用来从0x00000000开始分配虚拟内存.

shellcode需要调用win32 API函数来进行一些不法的操作,因此这需要知道每一个用到的函数的地址(这些函数经常可以在kernel32.DLL和ntDLL.DLL中找到).静态的shellcode使用硬编码的地址:这意味着这个shellcode将只能够运行在特定的Windows版本上(不考虑ASLR),因为每一个Windows版本都有着不同的win32 API函数的地址.

而动态的shellcode则不使用硬编码的地址,它通过在每一个进程的固定地址处遍历函数表来获取需要的函数地址.动态的shellcode可以在不同的Windows版本上发挥作用,因为它并不依赖于硬编码的地址.

EMET通过检测函数表枚举行为(即导出地址表访问过滤)来阻止动态shellcode的攻击.当它检测到枚举行为的时候自动终止当前进程.从技术角度来看,它通过在函数表中大量的地址处设置硬件断点来检测枚举行为的起始位置(当硬件断点被触发的时候).当这些地址的数据被读取的时候(当shellcode枚举函数表的时候),一个断点异常将会被触发,然后EMET就会阻止shellcode的执行.

结构化异常处理覆写保护在Windows Vista SP1中首先被提出来.SEHOP将会在异常被分发到处理器之前通过检测SEH链的无效指针来阻止结构化异常处理的漏洞被触发.这些无效的指针对于覆写SEH记录存在着副作用.EMET为Windows vista SP1之前的Windows版本提供SEHOP技术的支持.

务必记住当EMET检测到恶意的行为时通常会立即终止进程.这将威胁遏制于触发的过程中,但是不可避免的带来了数据的丢失.假如这样的情形发生在Microsoft office的产品word上的时候,用户将失去所有未保存的工作,除非word的数据恢复特性可以通过自动保存来恢复大部分未保存的工作.

充分测试在EMET保护下的应用程序是非常重要的,因为并非所有的旧式应用程序能够在强制使用DEP或者ASLR的情况下正常工作.你必须在将应用程序分发给用户之前测试这些程序的兼容性,否则你会接收到更多的求助电话.如果你的应用程序在EMET的保护下无法正常运行了,你必须不断的尝试以找出EMET的哪一个保护特性是导致应用程序失败的罪魁祸首.

因为EMET是通过注册表进行配置的,所以你可以定义组策略对象(GPOs)来为你的用户组设置正确的键值,而不必为每一个用户单独配置.

EMET是一个有用的工具,它不仅可以保护那些旧式的应用程序,对于完全支持DEP和ASLR的程序也同样适用.特别是那些支持ASLR,但是使用时包括的DLL却不支持ASLR从而可能引发ROP攻击的程序-比如一些外壳扩展DLL.外壳扩展为Windows提供额外的功能,比如Windows Explorer的右键菜单.当你安装类似于Winzip这样的程序时,安装程序也将会安装一个外壳扩展,将Winzip的功能整合至Windows Explorer的右键菜单,使得其他所有的程序可以打开或保存项目.幸运的是,Winzip的外壳扩展DLL支持ASLR,因此它不会让使用Winzip的主程序遭受ROP攻击.但是并未所有的软件提供商都像Winzip这样有着安全意识,你肯定会找到一些软件安装的外壳扩展DLL不支持ASLR.而这些DLL将会使得利用它的主程序遭受ROP攻击-不仅仅是Windows Explorer,也有可能是类似于Adobe Reader的应用程序.

EMET的一个缺点就是当程序被EMET 终止的时候你不会获得任何通知.应用程序只是简单的终止,你没有获得任何类似于消息框的警告.因此可以预测来自用户的求助电话的增多是因为Adobe Reader崩溃了(只是举个例子而已).当用户打开一个恶意的PDF文件时,EMET会触发一个可疑的行为,并直接终止Adobe Reader.你必须意识到被EMET保护的程序的崩溃可能表明一个恶意攻击被成功阻止.

我建议你可以关注一下EMET,并使用它来保护你的应用程序,特别是那些恶意软件作者最喜欢的攻击目标,如Adobe Reader.即使你用的是Adobe Reader的最新版本,EMET仍然可以帮助你为它所调用的第三方DLL强制开启ASLR.icucnv36.DLL就是一个很好的例子.再者,如果你服务的组织机构没有使用最新版本的应用程序(无论出于什么原因),介绍EMET来增强用户电脑的保护无疑是一个绝妙的主意.
原文附件:

本文带颜色的字体由Z龙添加,仅为提供使用参考。
       —— ——zdshsls

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x

评分

参与人数 3经验 +50 人气 +2 收起 理由
Johnkay.Young + 1 版区有你更精彩: )
hj5abc + 1 星空好水平~
驭龙 + 50 感谢支持,欢迎常来: )

查看全部评分

驭龙
发表于 2011-8-4 17:07:24 | 显示全部楼层
感谢分享
ujty
发表于 2011-8-4 17:12:09 | 显示全部楼层
了解个大概,顺便支持下楼主~
飞霜流华
发表于 2011-8-4 17:14:14 | 显示全部楼层
今天正好遇到个和EMET有关的问题,刚刚装sandboxie,装好了,检测到我的系统装了EMET,可关键是,我没装啊
请问,这是什么状况啊?难道windows系统内部有类似组件?
驭龙
发表于 2011-8-4 17:19:13 | 显示全部楼层
wy1091727248 发表于 2011-8-4 17:14
今天正好遇到个和EMET有关的问题,刚刚装sandboxie,装好了,检测到我的系统装了EMET,可关键是,我没装啊[ ...

其实EMET的大部分功能,Windows 7系统上都有,只不过默认不是全部打开
飞霜流华
发表于 2011-8-4 17:24:31 | 显示全部楼层
zdshsls 发表于 2011-8-4 17:19
其实EMET的大部分功能,Windows 7系统上都有,只不过默认不是全部打开

额,原来还有这种基情在里面,sandboxie看来走眼了~
ps:最近有会员要求我测试双击,正在酝酿中
一晴空
发表于 2011-8-4 17:35:58 | 显示全部楼层
不错,把核心翻译出来了,+1
驭龙
发表于 2011-8-4 18:43:42 | 显示全部楼层
wy1091727248 发表于 2011-8-4 17:24
额,原来还有这种基情在里面,sandboxie看来走眼了~
ps:最近有会员要求我测试双击,正在酝酿中

前几天我为了测试驱动,我也装了SB,确实是有提示EMET,不过我的系统安装了EMET 呵呵,对了,你之前安装过EMET么,是不是没有卸载干净
驭龙
发表于 2011-8-4 18:48:44 | 显示全部楼层
星空,你这个没有使用上的介绍。我以后有时间把你这个翻译转到我之前写的帖子里,别介意哦,呵呵
星空下的吻
 楼主| 发表于 2011-8-4 19:27:27 | 显示全部楼层
zdshsls 发表于 2011-8-4 18:48
星空,你这个没有使用上的介绍。我以后有时间把你这个翻译转到我之前写的帖子里,别介意哦,呵呵

随便你吧,反正你是版主

评分

参与人数 1人气 +1 收起 理由
驭龙 + 1 我从来不把我当成版主。我以后在本帖编辑吧

查看全部评分

您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2024-6-11 14:31 , Processed in 0.137196 second(s), 18 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表