[译]UAC--渗透测试需要了解的

原文地址: http://blog.cobaltstrike.com/2014/03/20/user-account-control-what-penetration-testers-should-know/

UAC是User Account Control缩写。通过UAC,可以用来提权(包含vista)。
本文聚焦Windows完整性级别和UAC提权。

进程完整性级别
vista和后来的系统中,进程有三种不同的完整性级别:高,中,低。一个高级别的进程拥有管理员权限。中级别进程是标准用户权限,而低级别进程的权限非常低。
低级别进程不可以写注册表以及在user文件夹中大多数地方被限制写操作。保护模式下的Internet Explorer以低权限运行。目的之用来降低当浏览器被漏洞利用的时候造成的损失。
大多数桌面程序以中权限运行,即使当前user是本地管理员。使用Process Explorer可以用来查看你的程序的权限级别。


UAC
为了提权,一个程序必须运行另一个程序并且要求更高的完整性级别。如果user是管理员,将会发生的事情取决于UAC设置。
Always Notify:为最高UAC设置。当任何程序运行时,即使是window自带的程序需要跟高的权限都会提示user。
Notify me only when programs try to make changes to my computer:默认UAC设置。使用该设置时,当一些Windows自带程序需要高权限时,不会提示user。但是当其他程序需要高权限时,会提示user。这个区别很重要,因为我们接下来说的绕过UAC就是这个级别。
Notify me only when programs try to make changes to my computer (do not dim my desktop):类似默认设置,除了user的桌面不会变暗当UAC提示弹出的时候。用于有些电脑缺乏变暗桌面的能力以及显示一个对话框。
Never notify:把我们带入旧社会(vista之前)。在Windows 7,如果一个user是管理员,他的所有程序都会以最高权限运行。在Windows 8,程序以中级别权限运行,但是管理员运行的任何程序希望获得更高权限的时候,都会获得高权限而不提示user。
如果user不是管理员运行一个需要高权限的程序,那么他们将会看到一个对话框需要一个高权限的username和password。如果UAC设置为 Never Notify,系统将会自动拒绝高权限的请求。

Who Am I?
当从客户端获得一个立足点之后,我通常需要立即解答几个问题。首先我想知道我现在代表哪个user执行程序。其次,我想知道我的权限。而UAC使事情变得更加复杂。
一种可以知道我的身份的方法是Windows命令 whoami /groups该命令会显示当前user属于的组。
该命令同时也显示我的命令以什么级别完整性运行。如果我们的命令是一个是一个高权限上下文,那么我将看到 Mandatory Label\High Mandatory Level,这意味着我有管理员权限。

如果如果命令是在中等权限中运行,那么我将看到 Mandatory Label\Medium Mandatory Level,这意味着我有一个标准user权限


RunAs
如果被一个中等进程完整级别的运行,但是该user属于管理员组,可以潜在的从标准user权限提升到管理员权限。一个选择是运行 ShellExecute函数指定 runas参数。将会运行一个程序然后请求高权限。
如果UAC被设为除了Never Notify以外的其他值,user将会看到一个提示窗口来问user是否允许动作发生。
metasploit框架的 exploit/windows/local/ask模块实现这种攻击。确保你设置的EXE::Custom可以绕过杀毒软件。

如果user接收提示,系统将会以高权限运行我的程序。记住,中权限是系统标准user的权限,而高权限是管理员权限也是我们的目标。

绕过UAC
RunAs选项提示user,并且可能被user发现。我们需要一种没有提示就可以获得高级别的方法。
exploit/windows/local/bypassuac模块可以实现。
绕过UAC需要user设为默认值Notify me only when programs try to make changes to my computer。如果UAC被设为Always Notify,这个攻击将不会有效。同时要求我们的user是管理员组的一员。

绕过UAC:如何工作
UAC首先从COM开始说起。COM是一种可以重复利用的写组件方法。当运行一个带有Windows签名证书的程序时,一些COM组件可以自动提升它们成为高级别。如果相同的组件被一个没有签名证书的程序运行时,它会有和当前程序一样的级别。
我不能在一个高级别上下文中创建一个COM object因为我的程序没有微软的证书。但是我可以衍生微软签名的程序(例如notepad.ext)然后注入dll。从这个dll中,我可以实例化一个我指定的自我提权的COM object。
Leo的绕过UAC攻击创建一个IFileOperation COM object实例。该object有copy/delete文件的方法。从一个高级别的上下文中运行,该object运行我们进行以高级别权限copy文件到任何位置。
然后我们需要从文件copy到以高级别权限执行代码。在此之前,我们需要讨论Windows 7的另一个缺陷。
当默认UAC设定时,当一些Windows自带程序需要提权时,不会弹出提示。换句话说,这意味着一些Windows自带程序运行在高级别上下文。
这些自动提权的程序有一个特点,他们有微软的签名证书。他们位于一个安全的文件夹下(例如c:\windows\system32),他们都含有autoElevate证书。
我们可以使用strings来查看autoElevate。
引用
cd c:\windows\
strings –s *.exe | findstr /i autoelevate

现在我们知道可以自动提权的程序以及我们拥有了copy任意文件的能力。我们通过DLL搜索顺序注入攻击来进行代码执行。公共的绕过UAC攻击是copy一个CRYPTBASE.dll文件到c:\windows\system32\sysprep文件夹,然后运行c:\windows\system32\sysprep.exe。当sysprep.exe运行时它会查找CRYPTBASE.dll,并且先会找到恶意代码库。
因为sysprep.exe自动运行在高级别(当UAC设置为默认值时),攻击者控制的CRYPTBASE.dll也会在高级别权限中运行。
可以使用 exploit/windows/local/bypassuac_inject模块进行dll注入

绕过Windows 8UAC
leo的metasploit模块不适合Windows 8,但是可以尝试使用Beacon的UAC命令
http://www.advancedpentest.com/help-beacon

猜你喜欢

转载自j4s0nh4ck.iteye.com/blog/2160585