티스토리 뷰

개발/윈도우

RING 3 DLL 인젝션 방어

-=HaeJuK=- 2025. 3. 10. 15:52
728x90
반응형
RING3 DLL 인젝션 방어 방법

RING3 DLL 인젝션 방어 방법

1. 주요 DLL 인젝션 기법 및 방어 방법

인젝션 기법 공격 방법 방어 방법
CreateRemoteThread + LoadLibrary OpenProcess → VirtualAllocEx → WriteProcessMemory → CreateRemoteThread OpenProcess 제한, CreateRemoteThread 감지 및 차단, WriteProcessMemory 감시
APC (Asynchronous Procedure Call) QueueUserAPC를 통해 특정 스레드에서 LoadLibrary 호출 QueueUserAPC 후킹 및 차단, NtQueueApcThread 후킹
SetWindowsHookEx 기반 후킹 SetWindowsHookEx로 특정 DLL 로드 SetWindowsHookEx 제한, AppInit_DLLs 감시
Process Hollowing NtUnmapViewOfSection으로 프로세스 메모리 덮어씌움 NtUnmapViewOfSection 후킹, PE 구조 검증

2. C++ 코드 예제

✅ SetWindowsHookEx 후킹하여 DLL 인젝션 차단

#include 
#include 

HHOOK hHook;
LRESULT CALLBACK HookCallback(int nCode, WPARAM wParam, LPARAM lParam)
{
    std::cout << "[!] SetWindowsHookEx detected! Blocking attempt.\n";
    return 1; // 차단
}

void SetHook()
{
    hHook = SetWindowsHookEx(WH_KEYBOARD_LL, HookCallback, NULL, 0);
}

int main()
{
    SetHook();
    std::cout << "SetWindowsHookEx Hooked. Running...\n";
    while (true) Sleep(1000);
    return 0;
}

✅ CreateRemoteThread 후킹하여 DLL 인젝션 차단

#include 
#include 
#include 

typedef HANDLE(WINAPI* pCreateRemoteThread)(HANDLE, LPSECURITY_ATTRIBUTES, SIZE_T, LPTHREAD_START_ROUTINE, LPVOID, DWORD, LPDWORD);
pCreateRemoteThread OriginalCreateRemoteThread = CreateRemoteThread;

HANDLE WINAPI HookedCreateRemoteThread(HANDLE hProcess, LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize,
    LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId)
{
    std::cout << "[!] CreateRemoteThread detected! Blocking attempt.\n";
    return NULL;
}

void HookCreateRemoteThread()
{
    DetourTransactionBegin();
    DetourUpdateThread(GetCurrentThread());
    DetourAttach(&(PVOID&)OriginalCreateRemoteThread, HookedCreateRemoteThread);
    DetourTransactionCommit();
}

int main()
{
    HookCreateRemoteThread();
    std::cout << "CreateRemoteThread Hooked. Running...\n";
    while (true) Sleep(1000);
    return 0;
}

✅ NtQueueApcThread 후킹하여 APC 기반 DLL 인젝션 차단

#include 
#include 
#include 

typedef NTSTATUS(NTAPI* pNtQueueApcThread)(HANDLE, PVOID, PVOID, PVOID, PVOID);
pNtQueueApcThread OriginalNtQueueApcThread = (pNtQueueApcThread)GetProcAddress(GetModuleHandle(L"ntdll.dll"), "NtQueueApcThread");

NTSTATUS NTAPI HookedNtQueueApcThread(HANDLE ThreadHandle, PVOID ApcRoutine, PVOID ApcArgument1, PVOID ApcArgument2, PVOID ApcArgument3)
{
    std::cout << "[!] NtQueueApcThread detected! Blocking attempt.\n";
    return STATUS_ACCESS_DENIED;
}

void HookNtQueueApcThread()
{
    DetourTransactionBegin();
    DetourUpdateThread(GetCurrentThread());
    DetourAttach(&(PVOID&)OriginalNtQueueApcThread, HookedNtQueueApcThread);
    DetourTransactionCommit();
}

int main()
{
    HookNtQueueApcThread();
    std::cout << "NtQueueApcThread Hooked. Running...\n";
    while (true) Sleep(1000);
    return 0;
}

✅ ProcessMitigationPolicy 적용하여 DLL 인젝션 방어


#include 
#include 
#include 

void SetMitigationPolicies()
{
    PROCESS_MITIGATION_DYNAMIC_CODE_POLICY codePolicy = { 0 };
    codePolicy.ProhibitDynamicCode = 1;  // 동적 코드 실행 금지
    SetProcessMitigationPolicy(ProcessDynamicCodePolicy, &codePolicy, sizeof(codePolicy));

    PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY hookPolicy = { 0 };
    hookPolicy.DisableExtensionPoints = 1;  // DLL 인젝션 차단
    SetProcessMitigationPolicy(ProcessExtensionPointDisablePolicy, &hookPolicy, sizeof(hookPolicy));

    std::cout << "[+] Mitigation policies applied.\n";
}

int main()
{
    SetMitigationPolicies();
    std::cout << "Mitigation policies set. Running...\n";
    while (true) Sleep(1000);
    return 0;
}


3. 결론

  • CreateRemoteThread, NtQueueApcThread, SetWindowsHookEx 등의 API를 후킹하여 차단 가능
  • ProcessMitigationPolicy 적용하면 원천 차단 가능
  • Windows Defender Application Control을 활용하여 보안 강화

💡 더 강력한 보호가 필요하면 RING0(커널 모드)에서 필터 드라이버를 개발해야 합니다.

728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함
반응형