본문 바로가기

메모리포렌식

동적 링크 라이브러리 (Dynamic Link Library; DLL)

_EPROCESS.PEB -> _PEB.Ldr -> _PEB_LDR_DATA의 3가지 이중 연결 리스트

 

* DLL은 코드와 다수의 프로세스 간 공유될 수 있는 자원을 포함

* 프로세스의 스레드, 핸들, 프로세스 메모리의 모든 영역에 같이 자원에 접근 가능 (이로 인해 공격자에게 인기)

 

 

% 위험성 감지

목록 불일치 메타 데이터 구조의 연결을 제거
이름이나 경로를 덮어 씀
예기치 않은 이름과 경로 의심스러운 이름
표준이 아닌 경로
컨텍스트 ws2_32.dll, crypt32.dll와 같이
해당 애플리케이션이 사용하는 용도에 맞지않은 dll

 

 

 

 

* DLL이 로드되는 방식

동적 링킹 프로세스 초기화 루틴의 일부인 Import Address Table; IAT
에 있는 DLL들은 자동으로 주소 공간에 로드
의존성. Dependency DLL이 로드 될때 의존하는 추가적인 DLL 또한 프로세스의 주소 공간에 로드
런타임 동적 링킹 LoadLibrary를 사용한 로드
삽입 Injection으로 강제로 삽입

 

 

 

* 라이브 시스템에서 DLL 열거하는 방식

1. CreateToolhelp32Snapshot으로 스냅샷을 딴 후,

2. Module32First, Module32Next로 검색

 

- Sysinternals와 같은 프로세스 DLL 열거 기능을 하는 프로그램의 경우

PEB.Ldr에서 3가지 이중 연결 리스트 중, InLoadOrderModuleList 첫번째 링크를 사용한다. 

그렇기에 이 링크를 악성 코드가 제거 시, 숨김과 같은 효과를 보게 된다.

 

 

 

 

* 볼라틸리티의 dlllist은 메모리 덤프에서 InLoadOrderModuleList 이중 연결 리스트를 통해 검색한다.

이때 LoadCount값이 0xffff 인 값 = Short 자료형에서 0xffff는 -1값. 이는 IAT에서 로드된 DLL를 말한다.

 

 

 

 

 

 

 

* 3개의 이중 연결 리스트를 끊어서 숨긴 경우 검색하는 방식 (메모리 덤프 상)

1. PE 파일 탐색 

2. VAD 상호 참조

'메모리포렌식' 카테고리의 다른 글

코드 삽입 Injection  (0) 2022.01.19
메모리 내의 PE 파일  (0) 2022.01.18
환경 변수  (0) 2022.01.15
_LDR_DATA_TABLE_ENTRY  (0) 2022.01.14
_PEB_LDR_DATA  (0) 2022.01.14