標籤:

乾貨 | 如何繞過微軟Decvice Guard執行任意代碼

01 前言

在Windows 10 Enterprise和Server 2016引入的新功能Decvice Guard是一種白名單機制,可用來阻止未授權的代碼執行。

簡單的理解,只要是不包含微軟數字簽名的程序,均無法用來執行代碼。

然而,如果能夠找到帶有微軟簽名的程序,那麼就能繞過Decvice Guard對應用程序的攔截,實現代碼執行。

目前已知的方法有:

1、WinDbg/CDB

可用來執行shell code

作者:Matt Graeber@mattifestation

地址:Bypassing Application Whitelisting by using WinDbg/CDB as a Shellcode Runner

2、CSI.exe

可用來執行c#代碼

作者:Casey Smith@subTee

地址:twitter.com/subTee/stat

3、dnx.exe

可用來執行c#代碼

作者:Matt Nelson@enigma0x3

地址:Bypassing Application Whitelisting By Using dnx.exe

4、rcsi.exe

可用來執行c#代碼

作者:Matt Nelson@enigma0x3

地址:Bypassing Application Whitelisting By Using rcsi.exe

02 簡介

Matt Nelson@enigma0x3在最近分享了他繞過Decvice Guard的兩種方法,這是繼Matt Graeber@mattifestation和Casey Smith@subTee後的第三和第四種繞過方法,本文將重現這兩個過程,完成他留給讀者的兩個作業,優化dnx.exe的環境搭建步驟,分享學習心得。

03 dnx.exe

dnx.exe內置於.NET Execution environment,包含數字簽名,可用來執行c#代碼

首先搭建dnx.exe的使用環境

參考資料:

Step-by-step installation instructions for getting DNX on your Windows machine

資料顯示需要powershell v4.0和安裝Visual C++ 2013 redistributable package,實際測試」print helloworld」並不需要這些條件,同時配置步驟也可以簡化,以下為簡化的配置步驟:

測試系統:Win8 x86

1、下載並安裝Microsoft .NET Framework 4.5.2:

下載地址:

Download 適用於 Windows Vista SP2、Windows 7 SP1、Windows 8、Windows 8.1、Windows Server 2008 SP2、Windows Server 2008 R2 SP1、Windows Server 2012 和 Windows Server 2012 R2 的 Microsoft .NET Framework 4.5.2(Web 安裝程序) from Official Microsoft Download Center

2、安裝DNVM

cmd:

powershell -NoProfile -ExecutionPolicy unrestricted -Command "&{$Branch=』dev;iex ((new-object net.webclient).DownloadString(https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.ps1))}"n

如圖

3、安裝DNX

打開新的cmd

cmd:

dnvm listn

輸入y,安裝dnx

如圖

cmd:

dnvm install latest -Unstable -Persistentn

cmd:

dnxn

將會看到dnx的操作說明

如圖

4、更新DNX和DNVM bits

cmd:

dnvm upgradendnvm update-selfn

如圖

5、配置Package

新建文件夾test

cmd:

cd c:testndnu restore -s Defaultn

如圖

註:

在C:WindowsSystem32直接輸入dnu restore -s Default會報錯,如圖

6、添加腳本文件

新建文件Program.cs,內容如下:

using System;npublic class Programn{n public static void Main()n {n Console.WriteLine("Hello World");n }n}n

註:

class名必須為Program,否則報錯

新建文件project.json,內容如下:

{n "dependencies":{n },n "commands":{n "test":"test"n },n "frameworks":{n "dnx451":{},n "dnxcore50":{n "dependencies":{n "System.Console":"4.0.0-beta-*"n }n }n }n}n

註:

project.json中」commands」內的」test」需要同文件夾名稱test對應

註:

中文系統的瀏覽器複製Step-by-step installation instructions for getting DNX on your Windows machine中的示例代碼為unicode格式,直接使用會報錯,如圖

需要將其中的Unicode字元轉化

7、測試腳本

cmd:

dnu restoren

如圖

cmd:

dnx testn

如圖

注:

如果僅測試上述代碼,只需完成步驟3即可

8、Win10 Device Guard測試

dnx.exe測試成功後,接下來需要找到dnx.exe在Win10上使用需要包含哪些支持文件,最直觀的方法可藉助於ProcessMonitor

使用ProcessMonitor獲取dnx.exe在運行時的操作,如圖

找到關鍵目錄:

經實際測試,在Win10上使用,只需要該目錄下的部分文件,大小為7.44MB

註:

這是Matt Nelson@enigma0x3留給讀者的作業

文件列表如下:

vcruntime140.dll(也可忽略,但會報錯,不影響代碼執行)

該目錄下的這些文件不需要:

如圖,由於dnx.exe包含微軟的簽名證書,所以在Device Guard UMCI(user mode code integrity)開啟的環境中仍具有執行許可權

繞過成功

04 rcsi.exe

rcsi.exe內置於Microsoft 「Roslyn」 CTP中,包含微軟數字簽名

Microsoft 「Roslyn」 CTP下載地址:

Microsoft 「Roslyn」 CTP

安裝前提:

1、實際測試

測試系統:Win8.1 x86

安裝Visual Studio 2012、VS2012 SDK、Microsoft 「Roslyn」 CTP

2、執行代碼

rcsi.exe的路徑為:

新建文件test.csx,內容如下:

using System;nConsole.WriteLine("Hello World");nConsole.ReadLine();n

cmd:

"C:Program FilesMicrosoft Roslyn CTPBinariesrcsi.exe" test.csxn

如圖,成功執行C#代碼

rcsi.exe同csi.exe類似,可以用來執行c#代碼,不同點在於csi.exe支持交互,而rcsi.exe不能

如圖

3、Win10 Device Guard測試

rcsi.exe在Win10上運行同樣需要支持文件

同樣使用ProcessMonitor獲取rcsi.exe在運行時的操作,如圖

找到rcsi.exe需要的支持文件如下:

註:

這也是Matt Nelson@enigma0x3留給讀者的作業

在Win10下測試成功,如圖

05 防禦

參照Matt Graeber的方法,更新Device Guard Bypass MitigationRules,可分別攔截利用WinDbg/CDB、csi.exe、dnx.exe和rcsi.exe的代碼執行

參考地址如下:

Using Device Guard to Mitigate Against Device Guard Bypasses

06 小結

本文對dnx.exe和rcsi.exe的利用方法做了介紹,截至目前共有四種繞過Device Guard的方法,相信未來會有更多的方法被發現,與此同時,防禦手段也需要隨之升級。

註:本文為3gstudent原創稿件,授權嘶吼獨家發布,未經許可禁止轉載

推薦閱讀:

如何利用sdclt.exe繞過UAC?
趨勢科技技術分析:詳解無文件勒索病毒Sorebrect
如何利用 DLL hijack 輕鬆繞過AMSI?

TAG:技术分析 |