이번에는 메모리 포렌식 도구인 volatility에 대해 사용법과 플러그인들을 정리해보겠습니다. 원래는 문제를 풀면서 사용법을 하나씩 익히려고 했지만 다른 도구들보다 플러그인이 훨씬 많아서 먼저 정리해보고 문제를 푸는 게 나을 것 같습니다.
volatility란 메모리 분석 도구로 https://volatilityfoundation.org/ 에서 다운받을 수 있습니다. volatility는 기본적으로 python2 버전을 사용하는데 2021년에는 python3을 사용하는 volatility3 버전도 나왔다고 합니다. 저는 volatility3 버전을 먼저 깔아 문제를 풀어봤는데 플러그인 관련해서 오류가 떠서 그냥 volatility도 같이 다운받았습니다.
volatility를 설치하고 나면 경로에서
vol.py -f [이미지 경로] [플러그인]
과 같은 명령어로 분석을 진행할 수 있습니다. 만약 운영체제에 대한 정보를 알고 있다면
vol.py -f [이미지 경로] --profile=[운영체제] [플러그인]
라는 명령어로도 가능합니다.
기본적으로 volatility와 플러그인 정보를 확인하는 명령어는 vol.py --info입니다. volatility에는 다양한 플러그인들이 있지만 주요 플러그인을 먼저 정리해보겠습니다.
os 정보 관련
imageinfo: 메모리 덤프 파일의 프로파일(운영체제와 아키텍쳐 식별 정보)을 출력합니다.
kdbgscan: 커널 디버거 데이터 블록의 특징을 분석합니다.
timelliner: 시간 정보가 있는 윈도우 아티팩트를 출력합니다.
프로세스 관련
pstree: 프로세스 트리를 출력합니다.
pslist: 작동 중인 모든 프로세스를 출력합니다.
psscan: 풀 스캐너를 통해 프로세스를 출력합니다.
psxview: pslist 플러그인 실행결과와 psscan 실행결과를 비교한 결과를 출력합니다. 은닉된 프로세스 정보를 찾을 때 사용합니다.
procdump: 프로세스를 파일로 추출합니다. 추출한 파일은 PE 헤더를 가지고 실행이 가능합니다.
memdump: 윈도우 가상 메모리를 파일로 추출합니다. 기본적으로 모든 프로세스의 가상 메모리를 추출하고, p 옵션으로 특정 프로세스만 추출할 수 있습니다.
memmap: 프로세스가 사용한 물리 메모리와 가상 메모리 주소를 출력합니다.
handles: 프로세스에 의해 열린 핸들의 목록을 출력합니다.
dlllist: 프로세스가 사용하는 dll 리스트를 출력합니다. p 옵션으로 특정 프로세스만 지정할 수 있습니다.
dlldump: 프로세스별로 로드한 dll을 파일로 추출합니다. p 옵션으로 특정 프로세스만 지정할 수 있습니다. --base 옵션으로 특정 dll만 추출할 수 있습니다.
cmdline: 현재 실행되고 있는 프로세스의 command-line argument를 조회합니다.
cmdscan: cmd에서 실행한 명령을 조회합니다.
consoles: conhost.exe를 분석하여 cmd.exe에서 입력한 명령어와 실행결과, cmd.exe를 사용하는 프로세스 이름을 출력합니다.
getsids: 윈도우 사용가 실행한 프로세스 목록을 가져옵니다. 권한 상승한 악성코드를 분석할 때 유용합니다.
thrdscan: 프로세스가 사용한 쓰레드 목록을 출력합니다. 은닉 프로세스를 찾을 때 유용합니다.
네트워크 관련
netscan: tcp, udp, raw 소켓 등을 출력합니다.
netstat: 모든 프로세스의 네트워크 연결 상태를 출력합니다.
(아래는 윈도우 xp 또는 윈도우 2003 한정, volatility3에서는 사용 불가)
connscan: 종료된 tcp 세션과 실행중인 tcp 세션을 모두 출력합니다.
connections: 현재 실행 중인 tcp 세션을 출력합니다.
sockscan: 종료된 tcp, udp, raw 소켓과 현재 실행중인 tcp, udp, raw 소켓을 모두 출력합니다.
sockets: listening 상태인 tcp, udp, raw 소켓 등을 출력합니다.
레지스트리 관련
hivescan: 레지스트리 하이브의 물리 주소를 출력합니다.
hivelist: 레지스트리 하이브의 물리 주소, 가상 주소, 경로를 포함한 이름을 출력합니다.
hivedump: 특정 레지스트리의 하이브의 모든 서브키를 출력합니다. -o 옵션으로 가상 주소를 입력해 사용합니다.
printkey: 레지스트리의 키의 서브키와 값을 출력합니다. -K 옵션으로 hivelist에서 알아낸 경로를 입력하면 해당 레지스트리에 대해서만 정보를 가져옵니다. -o 옵션으로 가상 주소를 입력하면 특정 하이브에 대해서만 탐색합니다.
hashdump: 레지스트리 하이브에 있는 해시를 추출하고 역해시를 시도합니다.
userassist: 레지스트리 키를 대상으로 분석한 결과(최근 실행 프로그램 목록, 실행 횟수, 마지막 실행 날짜 등)을 출력합니다.
lsadump: 윈도우 인증과 관련된 정보를 출력합니다. -y 옵션으로 시스템 하이브의 가상 주소를 넣어주고 시큐리티 하이브의 가상 주소를 -s 옵션으로 넣어주면 출력이 가능합니다.
userassist: userassist 관련 레지스트리 키를 대상으로 분석한 결과를 출력합니다.
shellbags: shellbags 정보를 추출합니다. 특정 사용자가 호스트에서 수행한 파일이나 폴더 작업을 확인합니다.
shimcache: shim cache 레지스트리 키를 분석합니다. 공격자 또는 악성코드가 실행 흔적을 지웠을 때 shimcache 플러그인으로 실행 흔적을 찾을 수 있습니다.
getserviceaids: 레지스트리에서 각 사용자의 설치된 서비스 목록을 가져옵니다.
dumpregistry: 모든 레지스트리 하이브를 파일로 추출합니다.
파일 관련
filescan: 추출할 수 있는 파일을 찾고 offset을 출력합니다.
dumpfiles: 추출할 수 있는 파일에 대한 추출을 수행합니다. -Q 옵션으로 원하는 파일의 offset값을 입력하면 특정 파일만 추출할 수 있습니다.
mftparser: ntfs 파티션의 mft 엔트리를 분석해 파일, 폴더에 대해 생성, 삭제, 수정 시간을 분석합니다.
기타
malfind: 페이지 권한 등을 사용해 프로세스에 삽입된 코드나 dll을 찾습니다.
yarascan: yara를 이용해 사용자 및 커널 모드 메모리 영역에 포함된 바이트 순서, ansi 및 유니코드 문자열을 검색합니다.
apihooks: 후킹된 api 함수를 찾습니다. 주로 malfind에서 찾은 의심스러운 프로세스를 대상으로 실행합니다.
driverscan: 드라이브 목록을 출력합니다. 악성코드로 설치된 드라이버를 찾을 때 유용합니다.
mutantscan: kmutant 객체 목록을 출력합니다.
참고 https://velog.io/@swimming/Volatility-%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8
https://schmidtiana95.tistory.com/entry/Volatility,
플러그인 카테고리별 정리
volatility cheetsheet
'정보보안 > Forensics' 카테고리의 다른 글
물리메모리 포렌식 (SKS 포렌식 스터디 week3) (0) | 2024.08.01 |
---|---|
[forensicscontest.com] infected (SKS 포렌식 스터디 week2) (0) | 2024.07.31 |
[forensicscontest.com] evidence04 (SKS 포렌식 스터디 week2) (0) | 2024.07.30 |
[N0PSctf] what did I write ??? (SKS 포렌식 스터디 week2) (0) | 2024.07.27 |
OSI 7계층/네트워크 프로토콜 정리 (0) | 2024.07.25 |