본문 바로가기

System/TTPs

2. DLL Hijacking

출처: 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