DEFCON CHINA议题解读 | windows10代码安全机制

阅读量259139

|

发布时间 : 2018-05-15 14:19:40

吃人@dmzlab

演讲者

丁川达,2014 年加入腾讯,现任腾讯玄武实验室工程师,主要从事 Windows 平台安全研究。CanSecWest 2016 会议演讲者。

曾从事软件开发相关工作,对于因研发管理问题和开发人员安全意识欠缺而导致的各类漏洞有深入了解。

 

会议议程

  • 代码完整性保护
  • 执行保护
  • 任意代码保护
  • 应用程序保护

攻击者如何攻击浏览器

典型的网络浏览器漏洞利用链由三部分组成:

远程代码执行(RCE)漏洞的利用。
特权提升漏洞(EOP)漏洞的利用,用于提权并逃离沙箱。
利用获得的权限来实现攻击者目标的有效载荷(例如勒索软件,植入,侦察等)。
这些攻击的模块化设计,使攻击者能够根据目标选择不同的RCE,EOP和有效载荷组合。因此,现代攻击无处不在地依靠执行任意本地代码来运行其利用的第二阶段和第三阶段。

缓解任意原生代码执行

大多数现代浏览器攻击尝试将内存安全漏洞转化为在目标设备上运行任意本机代码的方法。这种技术非常普遍,因为它为攻击者提供了最简单快捷的途径,使他们能够灵活而均匀地对每个阶段进行阶段化攻击。对于防御来说,防止任意代码执行是及其易用的,因为它可以在不需要事先知道漏洞的情况下大幅限制攻击者的自由范围。为此,Windows 10创作者更新中的Microsoft Edge利用代码完整性保护(CIG)和任意代码保护(ACG)来帮助防御现代Web浏览器攻击。

 

Windows10防御机制

WDEG

微软于2017年10月17日正式发布了Windows 10的新版本Fall Creators Update(RS3)。
在此次更新中,微软将其工具集EMET(The Enhanced Mitigation Experience Toolkit)的功能集成到操作系统中,推出了WDEG(Windows Defender Exploit Guard)。

WDEG主要实现以下四项功能:

1.攻击防护(Exploit protection)
通过应用缓解技术来阻止攻击者利用漏洞,可以应用于指定的程序或者系统中所有的程序。

2.攻击面减少(Attack surface reduction)
通过设置智能规则来减少潜在的攻击面,以阻止基于Office应用、脚本、邮件等的攻击。

3.网络保护(Network protection)
扩展Windows Defender SmartScreen的范围,为所有网络相关的操作提供基于信任的防护。

4.受控制文件夹的访问(Controlled folder access)
协助保护系统中的重要文件,使其不会被恶意软件(尤其是加密文件的勒索软件)修改。

User Mode API Hook:
分配/执行/启用执行位的内存区域
创建进程/线程
创建文件/文件映射
获取模块/函数地址

export address filter + modules
mshtml.dll
flash*.ocx
jscript*.dll
vbscript.dll
vgx.dll
mozjs.dll
xul.dll
acrord32.dll
acrofx32.dll
acroform.api

局限性:
在很大程度上与emet 5.x相同,但也有类似的弱点
User Mode hooks可以被绕过
增加了恶意代码执行的难度但并不能完全阻止。

CIG:只允许加载正确签名的images

攻击者在攻击进程中加载images通过以下方式:在进程中加载dll和创建子进程。win10 TH2 推出了两种解决办法防止上述攻击:进程签名策略(process signature policy),子进程策略(child process policy)。

Process Signature Policy

Child Process Policy


从Windows 10 1511更新开始,Edge首次启用了CIG并做出了额外的改进来帮助加强CIG:防止子进程创建,由于UMCI策略是按每个进程应用的,因此防止攻击者产生具有较弱或不存在的UMCI策略的新进程也很重要。在Windows 10 1607中,Edge为内容流程启用了无子进程缓解策略,以确保无法创建子进程。

此策略目前作为内容处理令牌的属性强制执行,以确保阻止直接(例如调用WinExec)和间接(例如,进程外COM服务器)进程的启动。

更快地启用CIG策略(Windows 10 Creators更新):UMCI策略的启用已移至流程创建时间,而不是流程初始化期间。通过消除将不正确签名的DLL本地注入内容进程的进程启动时间差进一步提高可靠性。这是通过利用 UpdateProcThreadAttribute API为正在启动的进程指定代码签名策略来实现的。

局限性:攻击者可以使用自定义加载器加载shellcode来完成攻击,虽然有一定难度但是仍然可以绕过。

ACG:代码不能动态生成或修改

尽管CIG提供了强有力的保证,只有经过正确签名的DLL才能从磁盘加载,但在映射到内存或动态生成的代码页后,它不能保证代码页的状态。这意味着即使启用了CIG,攻击者也可以通过创建新代码页或修改现有代码页来加载恶意代码。实际上,大多数现代Web浏览器攻击最终都依赖于调用VirtualAlloc或VirtualProtect等API来完成此操作。一旦攻击者创建了新的代码页,他们就会将其本地代码有效载荷复制到内存中并执行它。

ACG在Windows 10 RS2中被采用。大多数攻击都是通过利用分配或修改可执行内存完成。ACG限制了受攻击的进程中的攻击者能力:阻止创建可执行内存,阻止修改现有的可执行内存,防止映射wx section。启用ACG后,Windows内核将通过强制执行以下策略来防止进程在内存中创建和修改代码页:代码页是不可变的,现有的代码页不能写入,这是基于在内存管理器中进行额外检查来强制执行的,以防止代码页变得可写或被流程本身修改。例如,不再可以使用VirtualProtect将代码页变为PAGE_EXECUTE_READWRITE。无法创建新的未签名代码页。不可使用VirtualAlloc来创建新的PAGE_EXECUTE_READWRITE代码页。

结合使用时,ACG和CIG施加的限制可确保进程只能将已签名的代码页直接映射到内存中。

局限性:OOP JIT需要生成动态代码,若要同时工作,将增加设计的复杂性,并且攻击者可以通过JIT和OOP生成恶意代码。

JIT

现代Web浏览器通过将JavaScript和其他更高级别的语言转换为本地代码实现了卓越的性能。因此,它们固有地依赖于在内容过程中生成一定数量的未签名本机代码的能力。JIT功能移入了一个单独的进程,该进程在其独立的沙盒中运行。JIT流程负责将JavaScript编译为本地代码并将其映射到请求的内容流程中。通过这种方式,决不允许直接映射或修改自己的JIT代码页。

Device Guard Policy

工作原理

Device Guard 将 Windows 10 企业版操作系统限制为仅运行由受信任的签署人签名的代码,如代码完整性策略通过特定硬件和安全配置所定义,其中包括:

用户模式代码完整性 (UMCI)

新内核代码完整性规则(包括新的 Windows 硬件质量实验室 (WHQL) 签名约束)

带有数据库 (db/dbx) 限制的安全启动

基于虚拟化的安全,用于帮助保护系统内存和内核模式应用与驱动程序免受可能的篡改。

Device Guard 适用于映像生成过程,因此你可以为支持的设备启用基于虚拟化的安全功能、配置代码完整性策略并设置 Windows 10 企业版所需的任何其他操作系统设置。此后,Device Guard 可帮助你保护设备:

安全启动 Windows 启动组件后,Windows 10 企业版可以启动基于 Hyper-V 虚拟化的安全服务,包括内核模式代码完整性。这些服务通过防止恶意软件在启动过程早期运行或在启动后在内核中运行,帮助保护系统核心(内核)、特权驱动程序和系统防护(例如反恶意软件解决方案)。

 

参考链接

https://hk.saowen.com/a/c349626fb50ebd1cba721ce30b81ea4428f958fb5e3ae6dc24dad321254f11b8

本文由吃人@dmzlab原创发布

转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/145003

安全客 - 有思想的安全新媒体

分享到:微信
+10赞
收藏
吃人@dmzlab
分享到:微信

发表评论

内容需知
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 三六零数字安全科技集团有限公司 安全客 All Rights Reserved 京ICP备08010314号-66