DLL Hijacking
DLL Hijacking 공격은 실행 파일이 실행될 때 DLL이 참조되는 특성을 이용하여
악성 DLL을 삽입한 뒤 해당 시스템에서 특정 실행파일이 실행될 때마다
악성코드가 같이 실행되게끔 하는 지속성 공격입니다.
일반적으로 실행파일 소스코드에서 DLL 파일의 경로를 절대경로로 하드코딩 한 게 아니라면
다음과 같은 순서로 DLL을 참조합니다.
프로그램의 디렉토리
시스템 디렉토리(system32, SysWO64)
16비트 시스템 디렉토리
Windows 디렉토리
현재 디렉토리
PATH 환경변수에 설정된 디렉토리
이때 참조되는 순서를 이용한 공격이 Search Order Hijacking 공격이며
총 4가지의 하이재킹 공격 방법론이 있습니다.
Search Order Hijacking : DLL 참조 순서를 악용한 공격
Phantom DLL Hijacking : 존재하지 않는 DLL 참조를 악용하여 악성 DLL을 생성하는 공격
DLL Redirection : OS가 DLL 파일을 검색하는 위치를 변경하는 공격
Relative path DLL Hijacking : 쓰기 권한이 있는 폴더에 악성 DLL과 실행 파일의 이름을 변경하여 실행하는 공격
DLL 하이재킹은 보통 권한 상승보다는 지속성 공격으로 사용하는게 현실성과 가능성이 높기에
가장 흔하고 쉽게 사용되는 방식은 Search Order Hijacking 방식입니다.
실행 파일의 디렉토리에 참조하는 DLL과 동일한 이름으로 한다면 호환성만 해결했을 때
문제 없이 작동되기 때문입니다.
하지만 실습에서는 호환성 문제를 위해서 간단한 실습인 Phantom DLL Hijacking을 진행합니다.
Practice
실습 진행을 위해 Process Monitor를 설치합니다.
Process Monitor을 실행시킨 뒤, Windows 기본 프로그램인 osk.exe를 실행합니다.
그 이후 프로세스의 필터 기능에서 아래와 같이 필터를 걸어준 뒤 osk.exe에서
참조하지만 존재하지 않는 dll 파일을 찾아줍니다.
참조를 시도하지만 존재하지 않는 DLL 파일의 경로에 요구되는 이름과 같은 파일만 삽입한다면
해당 파일이 실행될 때 호환성의 문제 없이 백도어가 실행됩니다.
실습에서는 C:\Program Files\Common Files\microsoft shared\ink
하위에
Bcp47Langs.dll 파일을 만들어서 진행합니다.
이제 장악한 PC에서는 osk.exe를 실행할 때마다 백도어가 실행됩니다.
만약 단순한 리버스쉘과 같은 실행 파일 외에, DLL 파일만으로 코드 실행을 원한다면
아래와 같이 간단한 DLL cpp 파일을 만든 뒤 컴파일 후 사용할 수 있습니다.
파일을 test.cpp로 저장한 후에 Kali에서 명령어로 컴파일이 가능합니다.
References
Last updated
Was this helpful?