출처: MITRE ATT&CK
DLL Hijacking
Tactics: 지속(Persistence), 권한 상승(Privilege Escalation), 방어 회피(Defense Evasion)
Mitigations: 감사(Audit), 실행 방지(Execution Prevention)
라이브러리란?
- 코드 내 반복되는 기능을 매번 작성하기 귀찮으니.. 해당 로직들을 따로 모아둔 파일이다. 표준화된 함수와 데이터 타입들을 만들어둔 것.
- 링커에 의해 링크될 수 있도록 보통 컴파일된 형태인 목적코드(object code) 형태로 존재하며, 컴파일 되어 있기 때문에 컴파일 시간이 단축.
- 해당 파일을 include 시 자유롭게 사용 가능함.
- 크게 동적 라이브러리와 정적 라이브러리로 나뉜다.
구분 | 특징 |
정적 연결 라이브러리 (.lib) |
컴파일되는 시점에 해당 라이브러리 내 함수들이 복사되어 Main 코드와 결합됨. |
(장점) - 만들어진 실행 파일만 전달하면 되기에.. 런타임 시 외부 참조 가 없어 속도가 빠르며, 이식성이 좋다. - 시스템 환경이 변해도 응용에 아무 영향도 없음. - 완성된 응용을 안정적으로 사용 가능 |
|
(단점) - 같은 코드를 가진 여러 응용 실 시 코드 중복으로 인해 메모리 낭비 - 라이브러리 변경 시 응용을 다시 재배포해야 함. |
|
동적 연결 라이브러리 (.dll) |
프로그램 실행 시 dll파일을 필요 때 호출. 즉, 실행 파일과 동적 라이브러리 파일은 독립적으로 존재함. |
(장점)
- 각 응용이 한번 메모리에 올려진 것(dll)을 공유하므로 메모리 사용공간이 정적 라이브러리에 비해 적다. - 라이브러리의 업그레이드가 쉬움 (유지보수 또한 쉽다.) - 서로 다른 언어를 사용하는 응용이라도 함수 호출 규칙만 따른다면 동일 dll 호출이 가능 |
|
(단점) 외부 의존도 ▲ (이식성이 나쁨) |
동적 연결 라이브러리(DLL, Dynamic-Link Libraries)의 검색 순서
DLL은 데이터와 실행가능한 코드의 모음을 의미한다.
SW 개발 시 DLL을 이용함으로써 쉬운 SW 업데이트와 응용 간 DLL파일코드공유를 통한 메모리 사용률 감소를 기대할 수 있다.
이러한 DLL을 로드할 때 절대경로가 지정되어 있다면 경로를 통해 DLL을 찾지만, 절대경로가 지정되어 있지 않을 때 Windows가 사용하는 DLL 검색 순서(DLL Search order)가 존재한다.
DLL 검색 우선순위
DLL 검색 우선순위는 옵션 사용 유무, Known DLL List의 유무, Safe DLL 검색 모드의 활성화 유무에 따라 달라진다.
[옵션] 응용프로그램이 해당 방법을 사용하지 않는 경우 해당 없음
① SxS(Side By Side Assembly) 파일에서 지정된 폴더 안의 DLL 파일
② DLL Redirection에 의해 지정된 폴더에 있는 DLL 파일
③ IpPathName이 가리키고 있는 폴더의 DLL 파일
------------------------------------
[Known DLL List가 존재하는 경우 - 레지스트리]
④ Known DLL File
------------------------------------
[SafeDLLSearchMode 비활성화 일 경우]
⑤ Directory of the Application
⑥ Current Directory
⑦ System Directory
⑧ 16bit System Directory
⑨ Windows Directrory
⑩ Directory in PATH value
[SafeDLLSearchMode 활성화 일 경우.(Default)]
⑤ Directory of the Application
⑥ System Directory
⑦ 16bit System Directory
⑧ Windows Directrory
⑨ Current Directory
⑩ Directory in PATH value
만약 DLL 로드 시 절대경로를 지정하지 않았다면, 이를 악용하여 공격자는 검색 순서를 가로채 자체 악의적인 페이로드가 실행되도록 할 수 있는데.. 이를 DLL Hijacking 이라 한다. = DLL Search Order Hijacking
DLL Search Order Hijacking은 DLL preloading 또는 Binary Planting Attack이라고도 불린다.
Process
① 공격자는 응용에 의해 요구되는 DLL의 위치보다 우선순위가 높은 디렉토리에 trojan dynamic-link library files을 저장하여 자신의 파일이 로드되는 것을 유도한다.
② Windows는 절대경로가 설정되어 있지 않은 DLL 로드 시 우선순위대로 검색을 수행하고 결국 공격자의 악의적인 파일을 수행한다.
또는 DLL redirection을 통해 Seach Order(검색 순서)를 직접 수정하는 방법도 있다. 이 기법은 DLL 검색 우선순위 순서에서 2번째에 해당하기에 공격자가 의도한 악의적인 파일을 로드할 수 있는 것.
③ 취약한 검색 우선순위 순서를 가진 응용 프로그램이 높은 권한 레벨에서 실행되도록 구성되었다면, 공격자가 심어둔 악의적인 DLL 또한 높은 권한 수준에서 실행된다.
→ admin 또는 SYSTEM으로의 권한 상승이 가능하다는 의미
④ 악의적인 DLL 파일이 사용자가 요구했던 정상 DLL을 로드하도록 설정되어 있기에, hijacking의 대상이 되는 프로그램은 정상적으로 동작하는 것처럼 보일 수 있다.
Detection
파일 시스템에서 발생하는 DLL 이동, 이름 변경, 교체 및 수정을 모니터링함으로써 해당 공격을 탐지할 수 있다.
- 기존에 존재하던 소프트웨어, 패치 등과 관련없는 프로세스에 의해 로드되는 DLL 세트의 변경을 로깅
- 프로세스에 의해 로드되는 DLL을 모니터링하고, 파일이름은 같으나 비정상적인 경로를 가진 DLL을 탐지
- 소프트웨어 업데이트와 관련없는 .manifest 및 .local redirection 파일의 수정 및 생성을 로깅
'System > TTPs' 카테고리의 다른 글
DLL Hijacking 실습 (3) (0) | 2023.03.30 |
---|---|
DLL Hijacking 실습 (1) (0) | 2023.03.29 |
1. Process Hollowing이란? (0) | 2023.03.29 |
UAC bypass 실습하다가 컴날림 (1) | 2022.07.15 |
AV 엔진 우회 2 (0) | 2022.06.11 |