tmxklab

[Volatility] Code Injection 탐지 본문

Security/Volatility

[Volatility] Code Injection 탐지

tmxk4221 2021. 4. 28. 20:41

코드 인젝션

  • 코드 인젝션은 정상 프로세스 메모리에 악성코드(pe파일, 쉘 코드, dll 등)을 인젝션하고 정상 프로세스의 콘텍스트 안에서 인젝션한 악성코드를 실행하는 기술이다. 
  • 코드를 인젝션하고자 일반적으로 RWX권한(PAGE_EXECUTE_READWRITE)의 메모리를 할당한 다음 할당된 메모리에 코드를 인젝션한다.

 

위 코드 인젝션의 특징에 기반해 RWX권한을 가지는 메모리 내용을 통해 의심스러운 메모리 범위를 탐지하는데 여기서 이전에 volatility plugin에서 dll조사를 하는 부분에서 VAD(Virtual Address Descriptors)를 이용할 것이다.

 

[Volatility] DLL 조사

1. dlllist 플러그인 로드된 DLL을 나열, DKOM 공격에 취약 dlllist플러그인은 PEB구조체를 찾아서 로드한 모듈 정보를 얻는다. _EPROCESS구조체에 PEB포인터를 포함하는 peb라는 필드를 가지고 있음 따라서,

rninche01.tistory.com

VAD는 커널 메모리에 상주하며 프로세스 메모리에 가상적으로 연속된 메모리 영역의 정보를 저장한 이진 트리 구조체라고 하였다. VAD를 통해 프로세스 영역의 메모리 권한을 확인할 수 있고, 메모리 매핑된 이미지 파일(실행파일, dll 등)을 포함한 메모리 영역에 관한 정보를 확인할 수 있다.

 


VAD를 활용하여 코드 인젝션 탐지

1) VAD 정보 확인 - vadinfo플러그인

먼저, vadinfo플러그인을 사용하여 VAD 정보를 획득한다.

vol_2.6.exe -f <메모리 이미지 파일> --profile=<프로파일 명> vadinfo -p <PID>

다음은 explorer.exe(pid=1484)를 타겟으로 VAD정보를 수집한 결과이다.

첫 번째 노드는 커널 메모리 주소 0x8223fa58에 위치하며 메모리 범위(0x478c0000 - 0x478c9fff)에 PAGE_EXECUTE_WRITECOPY권한을 가지는 것을 확인할 수 있다. (음 근데 첫 번째 노드(dot3api.dll)가 실행 파일 이미지 주소를 나타낼 줄 알았는데 그 다음 노드가 실행 파일(explorer.exe) 이미지 주소를 가짐) 

 

일반적으로 실행 파일 이미지가 메모리에 로드될 때 커널은 해당 메모리 영역에 PAGE_EXECUTE_WRITECOPY(WCX)권한을 부여한다. 하지만, 애플리케이션에서 VirtualAllocEx와 같은 API를 사용해 PAGE_EXECUTE_WRITECOPY(WCX)권한으로 메모리를 할당할 수 없다.

 

즉, 공격자는 인젝션하고자 PAGE_EXECUTE_READWRITE(RWX)권한으로 메모리를 할당하며 일반적으로 PAGE_EXECUTE_READWRITE(RWX)권한을 가진 메모리 영역은 거의 없어 의심해볼만 하다.

(하지만, 항상 RWX권한을 가지는 메모리 영역이 있다고 해서 악의적으로 사용되는 영역은 아니다.)

따라서, RWX권한을 가지는 메모리 영역을 덤프떠서 조사해볼 필요가 있다.

 

 

2) 메모리 확인 - volshell 플러그인

vol_2.6.exe -f <메모리 이미지 파일> --profile=<프로파일 명> volshell -p <PID>

위 그림과 같이 volshell 플러그인을 실행시키면 대화형 파이썬 쉘이 보이는데 의심가는 특정 메모리 영역의 주소를 알아내서 db(주소)를 입력하면 된다. 혹시 쉘 코드로 의심이 된다면 dis(주소)를 입력하여 확인하면 된다.

 

 

3) 메모리 덤프 - vaddump 플러그인

추가적인 분석을 위해 vaddump플러그인을 사용하여 덤프떠서 디스크에 저장할 수 있다.

vol_2.6.exe -f <메모리 이미지 파일> --profile=<프로파일 명> vaddump -p <PID> -b <Base Address> -D <Dump Directory>

특정 메모리 영역의 Base Address를 알아낸 뒤 -b옵션을 사용하여 덤프(-b옵션을 지정하지 않으면 모든 메모리 영역을 개별 파일로 저장하게 됨)

 

4) 자동화 - malfind 플러그인

다 필요없고 VAD 특징에 기반해 의심스러운 메모리 영역을 식별하는 과정을 자동화하는 플러그인을 사용한다.

vol_2.6.exe -f <메모리 이미지 파일> --profile=<프로파일 명> malfind -p <PID>

ㄷㄷㄷ 개쩐다. 솔직히 vadinfo로 PAGE_EXECUTE_READWRITE권한을 가지는 메모리 찾기 힘들었다. (없는 줄 알았는데..) 근데 딱 쓰니깐 바로 PE파일 시그니쳐(MZ, 0x4D5A)가 보인다. -p옵션을 지정하지 않으면 모든 프로세스에서 의심스러운 메모리 영역을 자동적으로 식별하게 됨

'Security > Volatility' 카테고리의 다른 글

[Volatility] API 후킹 탐지  (0) 2021.04.28
[Volatility] Process Hollowing 탐지  (0) 2021.04.28
[Volatility] 명령어 히스토리 조사  (0) 2021.04.28
[Volatility] 서비스 조사  (0) 2021.04.28
[Volatility] 레지스트리 조사  (0) 2021.04.28
Comments