_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 |