tmxklab
[Volatility] Process Hollowing 탐지 본문
Process Hollowing
먼저, 프로세스 할로윙에 대한 개념을 살펴보기 위해서 다음 링크를 참고하자
Process Hollowing 순서)
① CreateProcess - 인젝션할 프로세스를 일시 중지된 상태로 생성한다.
② NtUnmapViewOfSection - 섹션 매핑 해제
③ VirtualAlloc - RWX로 메모리 할당
④ WriteProcessMemory - 인젝션
⑤ SetContextThread - 스레드 시작 주소를 인젝션한 엔트리 포인트로 변경
⑥ ResumeThread - 실행 재개
즉, 원본 코드를 날리고 인젝션한 코드로 채워 실행시킨다.
따라서, 할로윙을 하기 전과 후를 VAD를 기반해서 그림으로 비교하면 다음과 같다.
할로윙 이후에 VAD와 PEB간에 2개의 불일치가 발생한다. 프로세스 경로와 권한이 다른 점을 확인할 수 있다. 추가적으로 부모-자식 관계의 불일치도 발생할 수 있다. 이러한 특징을 이용하여 할로윙 탐지에 활용할 수 있다.
① 프로세스 경로 불일치(전체 경로 <-> 없음)
② 프로세스 권한 불일치(WCX <-> RWX)
③ 부모-자식 관계의 불일치(부모가 다름)
<<pslist, malfind, dlllist, ldrmodules플러그인 활용>>
(dlllist는 PEB에 의존하고 ldrmodules는 커널 VAD에 의존하므로 이 두 개를 통해 비교해보면 된다. 그리고 ldrmodules플러그인을 사용할 때 3개의 PEB 리스트에는 잡히는데 MappedPath가 비어있으면 의심해봐야 한다. 이외에도 다양한 방법이 있을 것임)
svchost.exe를 타겟으로 실행한 process hollowing테스트 코드를 실행하여 덤프 뜨고 분석을 진행해보자
다음은 malfind플러그인을 사용했을 때 출력 결과이다.
svchost.exe(pid : 3324)프로세스에서 RWX메모리 영역에 MZ시그니쳐를 발견하였다.(malfind가 짱짱인듯..)
다음은 svchost.exe(pid:3324)프로세스를 대상으로 dllist와 ldrmodules플러그인을 사용하여 출력한 결과이다.
PEB에 의존하는 dlllist에는 svchost.exe를 확인할 수 있지만 커널의 VAD에 의존하는 ldrmodules에는 svchost.exe를 확인할 수가 없다. 이를 통해 일반적으로 로드되지 않았음을 확인할 수 있다.
추가자료) - 프로세스 할로윙 인젝션 탐지 방법
'Security > Volatility' 카테고리의 다른 글
[Volatility] 커널 모드 루트킷 탐지 (0) | 2021.04.28 |
---|---|
[Volatility] API 후킹 탐지 (0) | 2021.04.28 |
[Volatility] Code Injection 탐지 (0) | 2021.04.28 |
[Volatility] 명령어 히스토리 조사 (0) | 2021.04.28 |
[Volatility] 서비스 조사 (0) | 2021.04.28 |