AppLocker
AppLocker也被称作“应用程序控制策略”,是Windows系统下的一项安全功能,来帮助管理员对主机系统进行一定程度的系统保护。通过合理定义规则,管理员可以决定哪些程序、安装程序、脚本可以在计算机上被运行,可以被定义的规则包括但不限于用户名名称、发布者名称、产品名称、文件路径、文件哈希、文件版本。
复现环境
攻击机:Kali,IP 192.168.195.154
受害机:Windows 7 32位,IP 192.168.195.145,管理员权限用户root,普通权限用户test
工具:Metasploit、Ollydbg
文件:calc_signed.dll、calc_unsigned.dll、msf_signed.dll、msf_unsigned.dll
复现流程
首先在受害机上进入本地服务,将Application Identity服务启动,该服务为AppLocker功能生效的先决条件。
在攻击机上使用msfvenom生成C#格式的payload,该payload运行后将会连接攻击机的指定端口。
网站“https://github.com/3gstudent/Bypass-McAfee-Application-Control--Code-Execution/blob/master/regsvcs.cs”可以下载用以生成恶意dll的cs文件,C:\Windows\Microsoft.NET\Framework\v4.0.30319文件夹中的csc.exe程序可以将cs文件生成为dll文件。在本文中,我们将使用calc.cs文件及msf.cs文件作为生成恶意dll的cs文件。其中,calc.cs文件即为从网站上下载的regsvcs.cs文件,msf.cs文件只需将calc.cs文件中shellcode部分替换为先前生成的payload即可。
csc.exe将使用calc.cs与msf.cs文件生成4个不同的dll文件,分别为calc_signed.dll、calc_unsigned.dll、msf_signed.dll、msf_unsigned.dll。其中calc_signed.dll为被签名的dll文件,calc_unsigned.dll为未被签名的dll文件,功能均为弹出一个计算器。msf_signed.dll为被签名的dll文件,msf_unsigned.dll为未被签名的dll文件,功能均为打开一个回连msf攻击机的会话。生成这4个dll的具体指令见下图。
Regasm.exe与Regsvcs.exe均可用来进行AppLocker绕过,但regsvcs.exe加载或卸载指定dll时该dll必须签名才可执行成功,否则将会出现下图中的报错。
进行签名所需的程序在C:\Program Files\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools文件夹中,可使用下图中的命令生成密钥对文件。
进行绕过前,我们将设置AppLocker下文件的通过规则,该规则可在“控制面板-管理工具-本地安全策略-应用程序控制策略-AppLocker”中进行设置。在本例中,我们设置用户名root允许或拒绝执行calc.exe程序。如下图所示,在允许执行时,可以成功弹出计算器。
在拒绝执行时,计算器无法成功弹出。因此可知,任意使用生成的dll来启动新程序的行为将无法绕过AppLocker规则。因此,我们将使用不会启动新程序的dll来进行后续测试。由于无新程序启动,则无法在Applocker中设置阻止规则。
如下图所示,当msf_signed.dll文件被尝试加载时,进行网络通信回连行为的是Regsvcs.exe进程。
在运行上图指令时,在攻击端打开msfconsole开启一个对4444端口的监听,随后可以看见成功获取shell。由下图可知,获取的shell可用来控制受害机。
由于Regasm.exe与Regsvcs.exe进行dll注册时需要管理员权限,因此在普通权限用户test下测试时,我们将使用另一个指令。
Regasm.exe与Regsvcs.exe进行dll卸载时普通权限即可,因此,我们使用下图中的指令尝试打开计算器与回连msf攻击机。经过测试。Regasm.exe可成功完成AppLocker绕过。
在攻击机上可以看到,当前的用户权限为普通用户test。
因此,即使受害机处于普通权限下,我们依然可以在攻击机上对受害机进行恶意操作,如下载文件、截屏、获取系统信息、执行指定程序等。
我们也可以在shell中移动至普通用户有权限的位置(如桌面),进行创建文件夹并上传恶意文件等恶意操作。
最后,我们对被注册的恶意msf_signed.dll进行简要的逆向分析,来了解该dll注册时回连攻击机的过程。将RegAsm.exe使用OD打开并添加msf_signed.dll为启动参数,设置中断于新dll的加载,随后依次加载直至加载msf_signed.dll。
进入新线程后,该dll将尝试使用connect()函数连接ip 192.168.195.154。
连接成功后,该dll将尝试使用recv()函数进行数据接收。
准备数据接收时,该dll将使用VirtualAlloc()函数分配内存空间,将即将接收的数据存储,由下图可知接收的数据为一个PE文件。
随后该dll将进入该PE文件所在的内存空间,该文件为msf完成连接后进行控制操作的核心代码,攻击机可通过该段代码将攻击指令下发至受害机,并从受害机获取相应的信息。
防护措施
1、开启AppLocker功能,合理设置规则,阻止恶意可执行文件的运行;
2、不轻易注册来历不明的dll;
3、不轻易运行来历不明的软件;
4、及时更新病毒库,查杀主机中的恶意病毒;
5、推荐使用“铁穹高级持续性威胁系统”(简称”铁穹“)发现潜在的攻击行为。“铁穹”是东巽科技技术有限公司结合流量检测与沙箱分析功能,用以检测主机内潜在威胁行为的系统。
参考:
https://pentestlab.blog/2017/05/19/applocker-bypass-regasm-and-regsvcs/