0x00前言
在最近的BlackHat Europe 2017,Tal Liberman和Eugene Kogan介紹了一種新的程式碼注入科技——Process Doppelgänging
Process Doppelgänging
據說這種利用管道支持所有Windows系統,能够繞過絕大多數安全產品的檢測
於是,本文將要根據開源程式碼,編寫程式,實現Process Doppelgänging,測試功能,分析利用思路
參攷地址:
https://www.blackhat.com/docs/eu-17/materials/eu-17-Liberman-Lost-In-Transaction-Process-Doppelganging.pdf
0x01簡介
本文將要介紹以下內容:
- 原理
- 開源程式碼
- 修復方法
- 實際測試
- 利用思路
- 防禦檢測
0x02 Process Doppelgänging原理
原理上類似於Process Hollowing,但是更加高級:
- 不需要使用傀儡行程
- 不需要特殊的記憶體操作,例如SuspendProcess和NtUnmapViewOfSection
注:
關於Process Hollowing的介紹,可參攷之前的文章《傀儡進程的實現與檢測》
實現思路:
1.打開一個正常檔案,創建transaction
關於NTFS transaction,可參攷:
http://www.ntfs.com/transaction.htm
2.在這個transaction內填入payload,payload作為行程被啟動
目前為止,殺毒軟體無法對填入的payload進行掃描
3.回滾transaction
相當於還原transaction,清理痕迹
對應程式實現過程:
1.創建transaction
關鍵函數:
- NtCreateTransaction
2.在這個transaction內填入payload
關鍵函數:
- CreateFileTransacted
- NtCreateSection
3.payload作為行程被啟動
關鍵函數:
- NtCreateProcessEx
- NtCreateThreadEx
4.回滾transaction
關鍵函數:
- NtRollbackTransaction
當然,還涉及到payload的寫入,申請記憶體、PE檔案結構等,這裡暫不介紹,可直接參攷POC源碼
對於Native API的使用,可參攷之前的文章《滲透技巧——”隱藏”注册錶的創建》和《滲透技巧——”隱藏”注册錶的更多測試》
注:
Win10 RS3前的Win10系統,使用該方法會藍屏,原因在於NtCreateProcessEx函數傳入的空指針,細節可參攷:
https://bugs.chromium.org/p/project-zero/issues/detail?id=852
0x03開源POC
現時,已公開的POC有兩個
1、processrefund
地址:
https://github.com/Spajed/processrefund
現時僅支持64比特Windows系統
編譯工具:VS2015,安裝sdk
實際測試:
Win7 x64
測試如下圖
注:
如果選擇system32下的calc.exe,會提示許可權不夠
啟動行程calc.exe,但實際上執行MalExe.exe,彈出對話方塊
行程calc.exe的圖標和描述都是正常的calc.exe,數位簽章也正常,如下圖
2、hfiref0x的POC
https://gist.github.com/hfiref0x/a9911a0b70b473281c9da5daea9a177f
僅有一個c檔案,缺少標頭檔ntos.h
可供參考的位置:
https://github.com/hfiref0x/UACME/blob/master/Source/Shared/ntos.h
但是還需要作二次修改
為了更加瞭解細節,决定不使用ntdll.lib檔案(安裝DDK後包含),改為通過ntdll獲得Native API(當然,程式碼量也會新增)
以自己的管道重寫一個ntos.h,並對原POC的inject.c作修改
開源地址如下:
https://github.com/3gstudent/Inject-dll-by-Process-Doppelganging
編譯工具:VS2012
支持32比特Windows系統
實際測試:
Win7 x86
測試如下圖
注:
如果選擇system32下的calc.exe,會提示許可權不夠
綜上,我們可以看到,Process Doppelgänging在利用效果上和Process Hollowing類似:啟動一個正常行程(正常的圖標、簽名、描述),在這個行程中執行payload
Process Doppelgänging在利用上的一個缺點:需要替換檔案,所以在替換system32下的檔案時,會提示許可權不夠(管理員許可權無法修改該路徑下的檔案)
0x04利用思路
在上節我們測試了兩個POC,對Process Doppelgänging有了一些認識
而在實際利用中,需要對POC作進一步修改,利用思路如下:
將讀取payload的功能去掉,改為使用Buffer存儲(可進行壓縮編碼减小長度)
執行時讀取Buffer,解密執行
這樣能進一步隱藏payload,實現payload的”無檔案”(payload保存在exp中,不需要寫入硬碟)
0x05檢測
Process Doppelgänging並不是能繞過所有的殺毒軟體,幾個關鍵函數的調用還是會被攔截(例如NtCreateThreadEx),並且行程的記憶體同PE檔案存在差异
0x06小結
本文介紹了Process Doppelgänging的原理,根據開源程式碼,編寫程式,實現Windows x86和x64系統下的利用,測試功能,分析利用思路,介紹檢測方法
LEAVE A REPLY