安全圈 | 专注于最新网络信息安全讯息新闻

首页

工藝培訓-學習-良好的學習、態度和健康

作者 eppolito 时间 2020-02-27
all

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,但是更加高級:

注:

關於Process Hollowing的介紹,可參攷之前的文章《傀儡進程的實現與檢測》

實現思路:

1.打開一個正常檔案,創建transaction

關於NTFS transaction,可參攷:

http://www.ntfs.com/transaction.htm

2.在這個transaction內填入payload,payload作為行程被啟動

目前為止,殺毒軟體無法對填入的payload進行掃描

3.回滾transaction

相當於還原transaction,清理痕迹

對應程式實現過程:

1.創建transaction

關鍵函數:

2.在這個transaction內填入payload

關鍵函數:

3.payload作為行程被啟動

關鍵函數:

4.回滾transaction

關鍵函數:

當然,還涉及到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