Volatility 플러그인
볼라틸리티를 사용한 메모리 포렌식은 직접 분석도 중요하지만 우선 플러그인 사용법을 숙달하는 것이 선행되어야 합니다. 간단하게 플러그인에 대한 설명과 실행가능한 명령어로 정리해 봤습니다.
imageinfo - 메모리 덤프 파일의 프로파일 정보를 출력한다. 프로파일은 운영체제와 하드웨어 아키텍쳐 식별 정보다.
vol.py -f sample\cridex.vmem imageinfo
kdbgscan - 커널 디버거 데이터 블록의 특징을 찾고 분석한다. imageinfo가 프로파일의 정보를 출력하기 위해서 사용하는 논리는 kdbgscan에서 제공된 기능에 기반하고 있다.
vol.py -f sample\cridex.vmem kdbgscan
timeliner - 시간 정보가 있는 윈도우 아티팩트를 출력한다. csv 파일로 출력하면 보기 편하다. body로 출력하면 mftparser 플러그인과 shellbags 플러그인과 합쳐서 볼 수 있다. timeliner 플러그인에서 추출하는 윈도우 아티팩트에 대해 더 알아봐야 한다.
vol.py -f sample\cridex.vmem timeliner
--info - 플러그인 정보 확인이 가능하다. 자세히 관찰하면 시스템 이름이 포함된 이름을 발견할 수 있다. 시스템 이름이 없는 플러그인은 윈도우에서만 실행되는 플러그인이다.
vol.py --info
pstree - 프로세스 트리를 출력한다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 pstree
psxview - pslist 플러그인 실행 결과와 psscan 실행결과를 비교한 결과를 출력한다. 은닉된 프로세스 정보를 찾을 때 사용한다.
vol.py -f sample\cridex.vmem--profile=WinXPSP2x86 psxview --output=html --output-file=result\psxview.html
dlllist - 프로세스에서 로드 한 dll 목록을 출력한다. -p 옵션을 사용하면 특정 프로세스만 지정 할 수 있다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 dlllist -p 368 --output=html --output-file=result\dlllist.html
dlldump - 프로세스 별로 로드 한 DLL을 파일로 추출한다. 추출한 dll파일 이름은 [프로세스 ID.프로세스 가상 주소.로드된 dll주소] 형식이다. -p 옵션을 사용하면 특정 프로세스만 지정 할 수 있다. --base 인자는 특정 dll을 추출한다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 dlldump -p 368 --base=0x07c900000 -D ./dlls
hivelist - 레지스트리 하이브의 물리 주소, 가상 주소, 경로를 포함한 이름을 출력한다. 가상 주소는 printkey 플러그인 등 특정 레지스트리에 대한 플러그인을 실행할 때 필요하다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 hivelist
hivedump - 특정 레지스트리의 하이브의 모든 서브키를 출력한다. -o 옵션을 사용해 가상 주소를 입력한다. xlsx나 json으로 출력하는 것을 추천한다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 hivedump -o 0xe15709b8
printkey - 레지스트리의 키의 서브키, 값을 출력한다. -K 옵션을 사용해 hivelist를 사용해 알아낸 경로를 입력하면 해당 레지스트리에 대해서만 정보를 가져온다. -o 옵션을 사용해 가상 주소를 입력하면 특정 하이브에 대해서만 탐색한다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 printkey -o 0xe1570510 -K "Microsoft\Windows\CurrentVersion\Run"
hashdump - 레지스트리 하이브에 있는 해시를 추출하고 역해시를 시도한다. 윈도우 계정의 해시를 추출하고 레인보우 공격을 시도할 때 많이 사용된다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 hashdump
lsadump - 윈도우 인증정보에 관련된 정보를 출력한다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 lsadump
userassist - 레지스트리 키를 대상으로 분석한 결과를 출력한다. userassist 플러그인은 최근에 실행한 프로그램 목록, 마지막 실행 날짜, 실행 횟수, 프로그램 실행한 사용자 등의 정보를 저장한다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 userassist
shellbags - shellbags 레지스트리를 분석한다. 폴더에 대한 접근 기록 또는 폴더 생성/수정/삭제 분석할 떄 유용하다.
vol.py -f sample\cridex.vmem--profile=WinXPSP2x86 shellbags
shimcache - shim 인프라가 사용하는 캐시를 분석한다. 공격자 또는 악성코드가 실행 흔적을 지워서 분석이 지체될 때 shimcache 플러그인을 사용해서 실행 흔적을 찾을 수 있다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 shimcache
getservicesids - 윈도우 각 사용자의 설치된 서비스 목록을 가져온다. 플러그인 실행시간이 오래 걸리기 떄문에 파일로 출력을 권장한다. 서비스 이름과 sid를 출력하기 때문에 sid를 사용자 이름으로 변경하면 분석하기 편하다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 getservicesids --output=html --output-file=getservicesids.html
dumpregistry - 모든 레지스트리 하이브를 파일로 추출한다. 특정 하이브만 파일로 추출하고 싶으면 -o 옵션에 해당 하이브의 가상 주소를 입력한다. -D 옵션으로 경로 지정이 가능하다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 dumpregistry -o 0xe15709b8 -D ./result
mftparser - ntfs 파티션의 mft 엔트리를 분석한다. 파일, 폴더에 대해 생성, 삭제, 수정 시간을 분석할 때 유용하다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 mftparser
getsids - 윈도우 사용자가 실행한 프로세스 목록을 가져온다. 권한 상승한 악성코드를 분석할 때 유용하다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 getsids
consoles - conhost.exe를 분석하여 cmd.exe에서 입력한 명령어와 명령어 실행결과 그리고 cmd.exe을 사용하는 프로세스 이름을 출력한다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 consoles
connections - 현재 실행 중인 tcp 세션을 출력한다. 윈도우 xp, 윈도우 서버 2003만 해당 플러그인을 사용할 수 있다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 connections
connscan - 종료된 또는 현재 실행 중인 tcp 세션을 출력한다. 윈도우 xp, 윈도우 서버 2003만 해당 플러그인을 사용할 수 있다. 오탐이 있으므로 결과를 신뢰하면 안 된다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 connscan
sockets - listening 상태인 tcp, udp, raw 소켓 등을 출력한다. 윈도우 xp, 윈도우 서버 2003만 해당 플러그인을 사용할 수 있다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 sockets
sockscan - 종료된 또는 현재 실행 중인 tcp, udp, raw 소켓 등을 출력한다. 윈도우 xp, 윈도우 서버 2003만 해당 플러그인을 사용할 수 있다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 sockscan
netscan - tcp, udp, raw 소켓 등을 출력한다. 윈도우 7, 윈도우 서버 2008버전 이상에서 사용가능 하고 이하 버전은 사용 불가능하다.
vol.py -f MSEDGEWIN10.raw --profile=Win10x64_10586 netscan
malfind - 페이지 권한 등을 사용해서 프로세스에 삽입된 코드 또는 DLL을 찾는다. 정상 프로세스에 삽입된 악성코드를 찾을 때 유용하다. 악성코드 뿐만 아니라 정상적인 목적으로 코드 삽입을 하는 경우가 있으므로 플러그인 실행결과를 참조해서 수동으로 분석한다. -dump-dir 옵션을 사용해 원하는 경로에 저장 가능하다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 malfind --dump-dir result\malfind_output
filescan - 추출할 수 있는 파일을 찾고 offset필드 값을 사용해서 dumpfiles 플러그인으로 해당 파일을 추출할 수 있다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 filescan
dumpfiles - 프로세스가 접근/수정/생성/삭제한 파일 등 메모리에서 추출할 수 있는 파일 추출을 수행한다. 특정 파일을 추출하기 위해서는 -Q 옵션을 사용해 원하는 파일의 offset값을 입력하면 된다. 이외에도 옵션이 다양하므로 따로 봐야할 필요가 있다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 dumpfiles -Q 0x00000000025eb4f8 --dump-dir result\
apihooks - 후킹 된 API 함수를 찾는다. 디폴트로 모든 프로세스를 대상으로 후킹 분석을 하므로 시간이 매우 오래 걸린다. apihooks 플러그인인 malfind 플러그인과 같이 사용하면 좋다. malfind 플러그인에서 찾은 의심스러운 프로세스를 대상으로 apihooks 플러그인을 실행한다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 apihooks -p 608
driverscan - 드라이브 목록을 출력한다. 악성코드로 설치된 드라이버를 찾을 때 유용하다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 drivescan
mutantscan - kmutant 객체 목록을 출력한다. 악성코드가 사용 한 kmutant 객체를 찾을 때 유용하다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 mutantscan
thrdscan - 프로세스가 사용한 쓰레드 목록을 출력한다. 프로세스 아이디는 psxview에서 구할 수 있다. 은닉 프로세스를 찾을 때 유용하다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 thrdscan
memmap - 프로세스가 사용한 물리 메모리와 가상 메모리 주소를 출력한다. dumpfileoffset 필드는 volatility가 임의로 만든 메모리 오프셋이다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 memmap
memdump - 윈도우 가상 메모리를 파일로 추출한다. 디폴트로 모든 프로세스의 가상 메모리를 추출한다. -p 옵션을 사용하면 특정 프로세스만 대상으로 가상 메모리 주소를 추출한다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 memdump -p 368 -D result\
procdump - 프로세스를 파일로 추출한다. memdump 플러그인과 다른 점은 추출할 대상이 프로세스만 가능하다. 추출한 파일은 모두 PE 헤더를 가지고 있고 실행이 된다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 procdump -p 368 -D result\
yarascan - yara를 이용하여 사용자 및 커널 모드 메모리 영역에 포함된 바이트 순서, ansi 및 유니코드 문자열을 검색한다.
vol.py -f sample\cridex.vmem --profile=WinXPSP2x86 yarascan --yara-rules="adobe" -p 1640
[오픈소스로 알아보는 윈도우포렌식] 책으로 공부하면서 플러그인을 각각 실습해 볼 수 있었습니다.
메모리 샘플은 아래 링크에서 다운로드를 받았습니다. 링크를 누른다음 상단 탭의 [Wiki]를 클릭하면 우측에 카테고리가 나오는데 거기서 Memory Samples를 누르면 됩니다.
오늘 실습해 본 플러그인을 까먹지 않기 위해서 이후 안랩에서 정리한 분석사례를 통해 플러그인을 활용할 수있는 방법에 대해 공부해봐야겠습니다.
'정보보안 > 디지털 포렌식' 카테고리의 다른 글
쓰기방지, 이미징 (0) | 2019.09.24 |
---|---|
모바일 포렌식: 이미징 (0) | 2019.09.04 |
증거법 (0) | 2019.09.04 |
디지털 증거 보장 위한 제도적 장치 (0) | 2018.11.15 |
NTFS(New Technology File System) (0) | 2018.10.11 |
댓글
이 글 공유하기
다른 글
-
쓰기방지, 이미징
쓰기방지, 이미징
2019.09.24 -
모바일 포렌식: 이미징
모바일 포렌식: 이미징
2019.09.04 -
증거법
증거법
2019.09.04 -
디지털 증거 보장 위한 제도적 장치
디지털 증거 보장 위한 제도적 장치
2018.11.15