译者:WisFree
预估稿费:200RMB
投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿
概述
这篇文章将给大家介绍一种微软Device Guard(设备保护)用户模式代码完整性(UMCI)绕过技术,由于csc.exe在对C#代码进行动态编译的过程中并不会对代码完整性进行检测,而我们的这项技术利用的正是这一点。安全研究人员早在2016年11月14日就已经将这个问题上报给了微软公司,但微软直到目前都还没有决定要去修复这个问题。我们可以通过禁用csc.exe来缓解这项绕过技术,但考虑到很多合法代码和PowerShell模块都需要使用类似msbuild.exe和Add-Type(允许用户在Windows PowerShell会话中定义一个Microsoft .NET Framework类)这样的模块,所以这个缓解方案也许并不适用于你的环境。
介绍
当Windows系统启用Device Guard UMCI(用户模式代码完整性)来验证程序签名和权限时,除了会屏蔽应用白名单中没有许可的代码之外,系统还会根据预先制定的策略仅允许已签名的脚本运行(例如PowerShell和WSH)。UMCI在PowerShell中采用的是一种约束语言模式的执行策略,而限制语言模式的一项重要功能就是防止未签名或未许可的脚本调用Add-Type,否则这些脚本将能够通过编译并加载C#代码来实现任意代码执行。不过需要注意的是,Device Guard代码完整性(CI)策略准许运行的脚本不仅不会受到这种限制的,而且还能够以完整语言模式运行并允许调用Add-Type。
在研究Device Guard的绕过技术时,我们假定目标是合法代码,并允许调用Add-Type。根据我们目前已经知道的信息,调用Add-Type的行为将导致csc.exe(C#编译器)在%TEMP%目录下生成一个.cs文件,随后编译器便会编译这个文件,并加载它。PowerShell调用Add-Type的常规过程如下所示:
看到上图所示的这些文件被创建出来之后,我问了自己以下几个问题:
1.如果一个PowerShell函数跟很多微软签名的模块函数一样能够被允许(例如白名单策略)去调用Add-Type的话,我可以在源代码的编译和加载过程中,及时用自己的恶意.cs文件迅速替换掉csc.exe生成的.cs文件吗?
2.上图所示的过程中生成了一个.DLL文件,我可以对这个DLL文件下手吗?它是否也得遵循代码完整性检测呢?
研究方法论
我们先考虑一下上面的第二个问题,因为如果代码完整性策略(CI)能够阻止攻击者加载未经签名的恶意DLL文件,那么我们就不可能利用这个漏洞了。那么为了回答刚才的第二个问题,我需要确定Add-Type被调用时哪一个.NET方法被调用了。这里我们可以使用dnSpy来追踪方法的调用情况,在dnSpy的帮助下,我检测到了以下.NET方法的执行:
Microsoft.PowerShell.Commands.AddTypeCommand.CompileAssemblyFromSource
System.CodeDom.Compiler.CodeDomProvider.CompileAssemblyFromSource
Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromSourceBatch
Microsoft.CSharp.CSharpCodeGenerator.FromSourceBatch
Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch
【知识】7月20日 - 每日安全知识热点 阅读原文» 热点概要:VMware Escape Exploit、CLR 在 SQL Server 中的利用技术分析、针对Intel I9和Skylake服务器上新缓存架构的初步评估、Valve's Source SDK远程代码执行漏洞分析、腾讯游戏安全技术竞赛2017Round2、针对PostgreSQL的渗透测试指南、PHP反序列化漏洞 资讯类: 一篇文章告诉你黑客是如何控制你的人体平衡车的? http://thehackernews.com/2017/07/segway-hoverboard-hacking.html 新的Linux恶意软件利用SambaCry漏洞在NAS设备中植入后门 http://thehackernews.com/2017/07/linux-malware-sambacry.html 技术类:
没有评论:
发表评论