Think Bad,Do Good
近期我们打算公开一系列文章,本篇文章为第一篇,欢迎大家的阅读。我们的目的是提供足够多的和安全威胁相关的技术数据来解决大家心中的疑惑,不仅如此,也希望大家可以理解我们所面临安全威胁的内部技术原理。
这一系列的文章列举了一些我们认为大家会比较感兴趣且熟知的攻击场景。某些攻击技术涉及的技术复杂度比较高,我们会进一步的分析纰漏攻击技术的细节。我们将尽最大的努力去研究攻击者使用的技术,从而保护我们的客户,实践我们的理念”Think Bad,Do Good”。
那话不多说,让我们看看这一系列的第一篇文章吧!
利用注册表键值绕过UAC
UAC是windows用于阻止对于系统未授权的更改而引入的一项特性,本篇文章将展现攻击者如何静默的绕过UAC的限制实现提权。UAC从Windows vista和Windows2008开始引入, 当系统发生了重要的更改会用来提醒用户。例如:UAC在系统发生重要更改时会弹出一个窗口,用来征询用户的同意,会向用户详细说明是哪一个程序将会对系统进行哪些修改,在弹出窗口的同事,屏幕的其他区域将是无法点击的,这样做会使用户更容易注意到这个提醒。
事实证明,这项安全特性对用户非常有帮助,通过这项技术用户能够了解系统到底发生了什么改变,并且也能够了解是何时何种程序对系统进行了修改。因此绕过UAC称为了一种广为人知的攻击技术,在”MITRE ATT&CK matrix”中被归到”Defense Evasion and Privilege Escalation”这一类。
技术细节
由于UAC能够阻止恶意软件未经授权便对系统进行修改,这使得攻击者长期以来一直在寻找新的方法绕过UAC的限制,从而实现静默的修改系统。现在已经有多种不同的方法绕过UAC,本篇文章专注于通过注册表这一种方式。
我们所研究的这种绕过UAC的方式是针对那些系统自带的,默认权限为”auto-elevated”的程序,它们在执行过程中需要依赖某些注册表项,并且能以较高权限执行第三方程序。这三个条件是实现绕过UAC所必须的
- 这些系统自带的”auto-elevated”程序必须能启动第三方程序
- 在这些系统程序执行过程中必须会读取注册表中的某些键值,这些键值必须包含一个用于启动第三方程序的路径信息
- 第三方程序能静默的以较高权限启动
例如我们在WIN7中使用的用来绕过UAC的系统自带程序是eventvwr.exe。这个特权程序可以认为是MMC的快捷方式
当eventvwr.exe启动时,它会检查是否存在一个指定的bin文件用来支持MMC的snap-in,至于检查是否存在这个文件的方式便是查找键值” HKEY_CURRENT_USERSoftwareClassesmscfileshellopencommand”,如果该键值存在那么该项内容将能用来绕过uac限制,如果不存在那么系统将会加载默认程序。
由于系统在不断的更新修复,不同版本系统我们所依赖的系统自带特权程序是不同的,由于目前并没有一个能够通用的特权程序以及相关键值,因此我们在本篇文章中分别会介绍一个WIN7下和WIN10下能被用来绕过UAC的案例。
Win7下的技术细节
系统自带的特权程序:eventvwr.exe
相关的注册表路径:HKEY_CURRENT_USERSoftwareClassesmscfileshellopencommand
为了演示这项技术我们首先修改上述键值为:C:WindowsSystem32cmd.exe。现在注册表已经被修改了,执行eventvwr时将会加载我们设定的文件,最终新创建的进程将会是高完整性,允许我们访问一些受保护的特权资源。
(以下是译者的实验:
在eventvwr启动过程中会读取相应键值:
译者环境机器中没有HKEY_CURRENT_USERSoftwareClassesmscfileshellopencommand这一键值,于是使用的上图中第二行的键值并设置路径:
运行结果如下:
译者按原文设置注册表路径后同样也能得到相同结果:
可以看到两种方式都能得到一个高完整性的calc进程。
WIN10下的技术细节
系统自带特权程序:sdclt.exe
注册表路径:HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionApp Pathscontrol.exe
第一步和win7中一样,修改相应的键值为C:WindowsSystem32cmd.exe,键值修改后,运行sdctl.exe便会加载我们指定的cmd.exe.最终将会看到一个新的进程被创建完整性为high。
我们的研究团队正在寻找是否有方法能够阻止类似的攻击手段。我们可以通过提取攻击特征场景的方式来实现这一目标,比如说我们提到的这种方式,就需要修改某些特定的键值。利用这些固定的场景特征我们是有能力去识别出这类基于注册表修改的攻击方式的,当然还有其他的特征场景,比如修改特定文件、执行系统命令等等。
缓解措施
大部分的技术都依赖于相同的准则,缓解措施也一样,最简单的缓解措施就是把UAC级别设置为”Always Notify”。
还有一种不同的缓解措施可以适用于那些无法将UAC级别设置为”Always Notify”的场景(从系统安全的角度来说并不推荐这么做),这种方法就是监控和阻止对以下两个键值的访问和修改:
HKEY_CURRENT_USERSoftwareClassesmscfileshellopencommand
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionApp Pathscontrol.exe
除了这些措施,我们也建议您尽可能使用普通账号,而不是特权账号。
总结
从这篇文章来看展示的是利用白名单程序绕过系统限制的思路,总的来说就是分析白名单程序的运行时行为,利用白名单程序的参数、或者其他信息来实现借鸡生蛋的目的,那么缓解措施也就可以着重于白名单程序的行为特征,应该可以酌情对于白名单程序的行为也建立一个白名单,从而减少利用白名单程序bypassuac的情况。
参考链接
https://technet.microsoft.com/en-us/library/cc709691(v=ws.10).aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/bb648649(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/bb742441.aspx
https://technet.microsoft.com/en-us/library/cc749356(v=ws.11).aspx
https://technet.microsoft.com/en-us/library/cc766401(v=ws.11).aspx
https://support.microsoft.com/en-us/help/17127/windows-back-up-restore
https://msdn.microsoft.com/en-us/library/bb625957.aspx
https://msdn.microsoft.com/en-us/library/bb625963.aspx
https://attack.mitre.org/wiki/Main_Page
https://attack.mitre.org/wiki/Technique_Matrix
https://enigma0x3.net/2016/08/15/fileless-uac-bypass-using-eventvwr-exe-and-registry-hijacking/
https://enigma0x3.net/2017/03/14/bypassing-uac-using-app-paths/
https://github.com/hfiref0x/UACME
https://github.com/hfiref0x/UACME/blob/master/Source/Akagi/methods/enigma0x3.c
https://www.rapid7.com/db/modules/exploit/windows/local/bypassuac_eventvwr
发表评论
您还未登录,请先登录。
登录