CTF | wargame

suninatas / 30번 Military (volatility를 이용한 메모리 덤프 분석)

nopdata 2017. 4. 10. 05:41


suninatas 문제이다. 보통 침투흔적은 디스크 분석을 통해서 하지만 이번 문제의 경우 메모리 덤프 분석 문제였다.
순서대로 하면 다음과 같다.

(1) profile 찾기
     volatility를 이용하기 위해서는 덤프를 뜬 메모리가 어떤 os인지 파악을 해야 한다. 일반적으로 kdbgscan이나 imageinfo 옵션을 이용하면 알아낼 수 있다.
          ex) vol.py -f "dumpfile" imageinfo
     imageinfo를 통해 문제 파일의 os를 파악해보면 Win7SP1x86임을 알 수 있다.

(2) 1. IP주소 찾기
     IP주소는 네트워크 환경 정보를 파악해야 된다. 윈도우 cmd쉘에서 netstat을 치듯 파악을 해야 한다. XP버전등에서는 sockscan등이 사용 가능하지만 7은 불가능 하다. 대신 netscan 옵션을 이용하면 파악할 수 있다.
          ex ) vol.py -f "dumpfile" --profile=Win7SP1x86 netscan
     netscan을 통해 무제 파일의 IP를 파악해보면 192.168.197.138임을 알 수 있다 (뒤 과정에서 다른 방식으로도 알 수 있다.)

(3) 2. 해커가 열람한 기밀 문서 파일명 찾기.
     보통 악성코드 분석을 하라고 하면 pstree나 psscan등의 명령으로 프로세스 목록을 파악하지만 기밀 문서의 경우 .txt일 수 있으므로 프로세스를 파악하는 것만으로 파악하기 힘들 수 있다. 대신 문제 풀이를 위해 기밀 문서등을 콘솔 창에서 실행시키는 경우가 있다. (악성 코드의 동작 과정도 이러한 경우가 있으므로..)
     해서, 콘솔 명령을 파악해볼 필요가 있다. cmdline, consoles등의 명령으로 파악할 수 있다.
          ex) vol.py -f "dumpfile" --profile=Win7SP1x86 consoles
     이 문제의 경우, 침해사고가 터진 후 사고 대응으로 netstat -an 명령으로 네트워크 확인과 dumpit으로 덤프를 뜬 부분까지 콘솔로 확인할 수 있었다.
     해서 콘솔 명령 확인으로도 IP주소 파악이 가능하다. consoles 명령으로 보면 notepad SecreetDocum7.txt 명령이 실행된 것을 알 수 있다.

(4) 기밀 문서의 주요 내용 파악.
     위에서 말했듯 악성 코드가 아닌 일반 문서이기 때문에 메모리상에 올라왔었던 데이터를 뽑아내면 문서의 파일도 알 수 있다. 따라서 프로세스를 추출하는 procdump등의 명령으로는 notepad만 추출될 것이기 때문에 메모리의 데이터를 추출해야한다.
     이는 memdump 옵션을 이용하면 해당 프로세스의 메모리 데이터를 가져올 수 있다. -p 에 주어야 하는 프로세스 번호는 pstree, pslist등 명령으로 알 수 있다.
          ex) vol.py -f "dumpfile" --profile=Win7SP1x86 memdump -p (프로세스 번호) --dump-dir (저장 경로)
     memdump 을 통해 메모리 정보를 알아낸 후, key 값을 얻어야 하는데 지문을 보면 굳이 "Key"라고 강조를 하였다. 따라서 추출된 데이터에서 Key를 조회하면 key값을 얻을 수 있다.


profile = Win7SP1x86
ip : 192.168.197.138 
기밀문서 : SecreetDocumen7.txt
문서 실행 명령 : notepad SecreetDocumen7.txt
실행 프로세스 번호 : 3728