Forensic/SUA - 기초부터 따라하는 디지털 포렌식

2주차 과제 A

Ron Weasley 2022. 4. 3. 19:08

A과제 : Volatility 플러그인들을 정리하고, 사용법을 실습해보기(실습은 Cridex 분석으로 하겠습니다 하지만 모든 플러그인에 대해서는 다루지 않을 것이며, 몇몇 분석에 필요한 플러그인만 다루도록 하겠습니다.)

 

먼저, 메모리 포렌식에 대해서 정의를 해보겠습니다.

 

메모리 포렌식이란 컴퓨터 구조의 하드웨어에서 주 기억장치인 RAM에 남아있는 데이터 흔적을 분석하는 기법입니다. 우리가 FTK Imager같은 툴로 Memory Capture를 실습했을 때, 나왔던 mem파일이 RAM의 데이터를 덤프한 파일입니다.

 

RAM은 휘발성이 강한데도 불구하고 프로세스 정보, 네트워크 연결 정보, 악성코드 파일 정보, 시스템 관련 데이터 구조, 사용자 활동 정보 등 고유의 정보들이 남아 있습니다. 그 이유는 컴퓨터 시스템은 구조적으로 CPU에 의해서 연산이 이루어지는데, 어떤 소프트웨어를 쓰더라도 RAM에 그 데이터와 코드가 적재되어야 CPU에서 연산이 가능하기 때문입니다. 따라 메모리 포렌식의 주 된 목적은 악성코드와 관련된 데이터를 추출하고, 어떤 로그가 남았으며, 어떤 이벤트가 발생했는지 등 RAM에 남아있는 악성코드 감염과 관련된 다양한 흔적을 분석하여 DFIR목적으로 아주 유용한 기법입니다.

 

메모리 덤프 파일이란 프로세스의 메모리를 정해진 포맷에 따라 데이터들을 압축하여 기록한 파일입니다.

덤프 파일은 컴퓨터 프로그램이 특정 시점에서 작업 중이던 메모리의 상태를 기록한 것이며, 보통 프로그램이 정상적인 종료를 하지 않을 때 생성됩니다. 확장자로는 dmp, raw, vmem, img등 다양한 확장자를 가집니다.

 

메모리 포렌식을 위한 도구인 volatility의 플러그인들을 정리하고, 출력된 내용에 대해서 설명을 하겠습니다.

 

[이미지 식별]

분석 중인 메모리 덤프 파일의 샘플에 대한 정보들을 요약하여 보여주는 플러그인들을 말합니다. 

 

Imageinfo : 메모리 덤프 파일의 프로파일 정보를 출력합니다. 프로파일은 운영체제와 하드웨어 아키텍쳐 식별 정보입니다.

- Suggested Profile : 분석중인 메모리 파일에서 사용할 수 있는 프로필

- PAE(Physical Address Extension, 물리주소확장) : 4GB의 메모리 주소 가능 여부

- DTB(Directory Table Base) : 가상주소를 물리 주소로 변환하기 위한 디렉터리 테이블의 주소 값

- KDBG(_KDDEBUGGER_DATA64) : 운영체제의 정보를 가지고 있는 구조체이며, Process 활성화 상태, Handle 오픈 여부, Kernel변수의 Memory 주소 등의 정보를 확인할 수 있습니다.

- KPCR(Kernel Processor Control Region) : CPU의 정보를 가지고 있는 구조체이며, 멀티코어 시스템에서는 각 프로세서마다 KPCR을 가지고 있습니다.

- KUSER_SHARED_DATA : 커널모드와 유저 모드 사이에 공통으로 매핑되어 있는 메모리, 커널단에서는 0 xFFDF0000 주소로, 사용자 영역에서는 0x7FFE0000 주소로 참조 가능한 물리적 페이지 메모리 영역이며, 4 Kbyte 영역 중 1 Kbyte만을 시스템이 사용 중이므로 나머지 3 Kbyte의 공간은 비어있음

ex) volatility2.6.exe -f <file path> imageinfo

 

kdbgscan : 커널 디버거 데이터 블록의 특징을 찾고 분석합니다. imageinfo가 프로파일의 정보를 출력하기 위해서 사용하는 논리적인 기능은 kdbgscan 플러그인에서 제공된 기능에 기반합니다.

- Offset(V) : 가상 주소

- Offset(P) : 물리적인 주소

- PsActiveProcessHead : 활성화된 프로세스의 헤드 목록에 대한 주소

- PsLoadedModuleList : 로드된 커널 모듈 목록에 대한 주소

- KerbelBase : 커널주소

- Major & Minor : OS버전 앞, 뒷 자리 (5, 1)

ex) volatility2.6.exe -f <file path> kdbgscan

 

kpcrscan : CPU의 정보들을 체크하여 잠재적 KPCR(커널 구조체) 구조들을 스캔하기 위하여 사용되는 명령어입니다.

- kdVersionBlock : 커널의 전역 변수로 디버깅 시스템에 대한 정보를 지닌 _DBGKD_GET_VERSION64 구조체의 주소를 가지고 있습니다.

또한 이 구조체의 DebuggerDataList 필드는 _KDDEBUGGER_DATA64 구조체의 Linked list에 포함되어 있습니다.

- IDT(Interrupt Descriptor Table) : 인터럽트 디스크립터 테이블이며, CPU에서 트러블이 발생하면, 임시로 처리를 스위칭하는 기능

- GDT(Global segment Descriptor Table) : 글로벌 디스크립터 테이블, 세그먼트는 메모리의 구역을 정확히 나누어서 메모리의 이용범위를 안 겹치게 하는 방법으로 메모리를 분할한 뒤 블록의 처음 시작 번지를 0으로 다루는 기능- CurrentThread : 현재 수행중인 쓰레드- IdleThread : 유휴 쓰레드- Details : CPU 벤더, 속도

- CR3/DTB : CPU의 레지스터 페이지 디렉터리의 시작 위치로 페이지 디렉토리(PD) 혹은 페이지 디렉토리 포인터 테이블(PDPT)을 가리키기 위해 CR3 레지스터가 사용되며, 이 값을 Directory Table Base라 부릅니다. DTB는 _EPROCESS.Pcr.DirectoryTableBase 필드에도 존재

ex) volatility2.6.exe -f <file path> --profile=<운영체제> kpcrscan

 

[프로세스 및 DLL분석]

pslist : 현재 작동중인 모든 프로세스 리스트를 출력합니다. 이미지 식별 명령어중 kdbgscan에서 PsActiveProcessHead가 가리키는 총 프로세스와 동일하게 출력이 되며, 오프셋, PID, PPID, 쓰레드 수, 핸들 수, 프로세스 시작/종료 시간 등 정보를 출력해줍니다. 하지만 숨겨져있는 프로세스나 연결이 해제된 프로세스에 대해서는 감지되지 않습니다.

- Systme과 smss.exe는 세션 ID를 가지고 있지 않은데, System은 세션들이 자리 잡기 이전에 시작이 되고, smss.exe는 세션 관리자이기 때문입니다.

- Offset은 기본적으로 Offset(V)로 출력이 되지만, -P옵션을 추가하면 Offset(P)로 출력이 됩니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> pslist

ex) volatility2.6.exe -f <file path> --profile=<운영체제> pslist -P

 

pstree : 프로세스 목록을 트리 형식으로 보여줍니다. pslist에서 출력된 프로세스에 자식 프로세스가 표현됩니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> pstree

 

psscan : 프로세스를 스캔합니다. 위에 봤던 두 플러그인과는 다르게 비활성된 프로세스나 루트킷에 의해 숨겨진 프로세스를 찾을 수 있습니다. - 프로세스가 종료된 경우 Time exited 필드에 종료 시간이 표시됩니다.

- 숨겨진 프로세스에 대해서 조사하고 싶으시다면 해당 프로세스의 물리주소로 이동하여 EPROCESS 구조체의 물리 오프셋 정보를 확인

*******(이 부분에 대해서는 잘 모르기때문에...공부하여 수정하도록 하겠습니다.)

ex) volatility2.6.exe -f <file path> --profile=<운영체제> psscan

 

psdispscan : psscan과 유사하지만 다른점은 프로세스를 열거합니다. 즉, 풀어쓴다고 생각하시면 됩니다. 하지만 플러그인을 사용하실 때, 명령어 라인에 --plugins=contrib/plugins를 입력 해주셔야 합니다. 단, XPx86 운영체제만 지원됩니다. ( 그래서 사용해보질 못했습니다)

ex) volatility2.6.exe -f <file path> --profile=<운영체제> psdispscan --plugins=contrib/plugins <<< ( 잘 모르겠습니다. )

 

dlllist : 특정 프로세스에서 로드 한 DLL의 정보를 분석해줍니다.

- 분석하고 싶은 Process에 대한 DLL list를 보려면 -p, -pid 옵션을 이용하여 확인이 가능합니다.

- 루트킷에 의해 숨겨지거나 연결이 끊긴 프로세스들의 DLL을 보기 위해서는 psscan에서 물리주소를 --offset옵션과 함께 입력합니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> dlllist

ex) volatility2.6.exe -f <file path> --profile=<운영체제> dlllist -p(--pid) 1136

ex) volatility2.6.exe -f <file path> --profile=<운영체제> dlllist --offset=0x000000000225bda0

모두 동일한 결과를 출력합니다.

 

dlldump : 모든 프로세스에서 로드한 DLL을 바이너리 형태로 추출합니다.

- 디렉토리를 설정하기 위해 -D 옵션을 사용합니다. (꼭 경로를 잘 지정해주세요 한번 사용했다가 큰일났습니다..)

- 특정 프로세스로부터 모든 DLL을 덤프 뜨려면 -p 또는 --pid를 사용합니다.

- 숨겨지거나 연결이 끊어진 프로세스로부터 DLL을 덤프 뜨려면 --offset 옵션을 이용합니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> dlldump -D ./ ( 이 옵션은 사용 금지 )

ex) volatility2.6.exe -f <file path> --profile=<운영체제> dlldump --pid 1136 -D ./

ex) volatility2.6.exe -f <file path> --profile=<운영체제> dlldump --offset=0x000000000225bda0 -D ./

 

handles : Process 분석 시 어떤 경로에 이미지 파일이 있는지, 어떤 파일을 이용하는지 등 Image로 부터 열려있는 handle을 보여줍니다. 그래서 악성코드를 분석할 때 유용하게 쓰입니다.

- 특정 Process의 handle만 출력하고 싶다면 -p, --pid 옵션을 사용합니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> handles 

ex) volatility2.6.exe -f <file path> --profile=<운영체제> handles -p 1136

ex) volatility2.6.exe -f <file path> --profile=<운영체제> handles -p 1136 --silent

(이 옵션은 1136 PID를 가진 프로세스에서 Object가 이름이 없어 공백이 나오는 경우를 없애줍니다.)

공백이 사라진 것을 볼 수 있습니다.

 

getsids : 각 프로세스의 소유자를 표시합니다.

- SID(Security ID)를 보기 위해 getsids 명령어를 사용합니다.

- 권한 상승과 같은 의심 가는 부분을 확인할 수 있습니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> getsids

 

cmdscan : 콘솔 쉘인 cmd를 통해 입력한 명령어들을 _COMMAND_HISTORY를 스캐닝해줍니다.

- 콘솔 호스트 프로레스의 이름

- 콘솔로 사용되고 있는 어플리케이션의 이름

- 명령어 히스토리

ex) volatility2.6.exe -f <file path> --profile=<운영체제> cmdscan

 

consoles : 공격자가 cmd에서 입력하거나 백도어를 경유하여 실행되는 명령어들을 찾기위해 _CONSOLE_INFORMATION을 스캐닝합니다.

- 공격자가 입력한 명령을 출력해줄뿐만 아니라, 버퍼를 모두 수집합니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> consoles

 

envars : 프로세스의 환경변수들을 보여줍니다.

- CPU 수, 하드웨어 아키텍처, 프로세스의 현재 디렉토리, 임시 디렉토리, 세션 이름, 컴퓨터 이름, 유저 이름 등

ex) volatility2.6.exe -f <file path> --profile=<운영체제> envars

 

verinfo : PE File에 저장된 정보들을 보여주는 명령어입니다.

- 모든 PE File들이 버전 정보를 가지지는 않습니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> verinfo

 

[프로세스 메모리 분석]

memmap : 분석하고자 하는 Image에서 할당된 Memory 주소의 Map을 보여주는 명령어 입니다.

- 페이지의 가상주소, 페이지의 일치하는 물리적 주소, 페이지 사이즈를 보여줍니다.

- -p옵션을 이용해 필요한 PID만 출력할 수 있습니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> memmap -p 1136

 

memdump : 프로세스의 다양한 메모리 세그먼트에서 데이터를 추출하여 덤프하는 명령어입니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> memdump -p 1136 -D ./ > test1.txt

 

procdump : 실행 가능한 프로세스를 덤프하는 명령어입니다.

- 슬랙공간에 대해서도 포함합니다.

- 슬랙공간이란, 저장 매체의 물리적인 구조와 논리적인 구조의 차이로 발생하는 낭비 공간이며, 물리적으로 할당된 공간이지만 논리적으로는 사용할 수 없는 공간입니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> procdump -p 1136 -D ./ > test1.txt

vadinfo : 프로세스의 VAD 노드들에 대한 확장된 정보를 보여주기 위한 명령어입니다. (이 부분부터는 잘 모르겠습니다. )

ex) volatility2.6.exe -f <file path> --profile=<운영체제> vadinfo -p 1136

vadwalk : VAD nodes 들을 보여주는 명령어입니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> vadwalk -p 1136

 

vadtree : VAD nodes 들을 Tree 형태로 보여주는 명령어입니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> vadtree -p 1136

 

vaddump : memdump와 유사한 명령어로 VAD Segment에서 포함된 Data를 dump하는 명령어입니다.

- memdump와는 달리 dump되는 dmp File의 이름이 Memory 주소 영역으로 되어 있습니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> vaddump -p 1136 -D ./ > test1.txt

 

evtlogs : Windows 이벤트 로그 추출 명령어입니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> evtlogs

 

[커널 메모리 및 오브젝트 분석] (filescan, dumpfiles를 제외하고는 잘 모르겠습니다.)

modules : System에 load된 커널 드라이브들을 보여주는 명령어입니다.

- 기본적으로는 가상 주소를 출력하지만, 물리 주소를 보고싶다면 -P 옵션을 추가하시면 됩니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> modules

ex) volatility2.6.exe -f <file path> --profile=<운영체제> modules -P

 

modscan : 커널 모듈을 물리 주소로 보여주는 명령어입니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> modscan

 

moddump : 커널 드라이브를 파일로 덤프해주는 명령어입니다.

- 정규 표현식과 물리 주소를 이용한 필터도 가능합니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> moddump

 

ssdt : Native와 GUI SSDT의 함수들을 list시켜주는 명령어입니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> ssdt

 

driverscan : 메모리의 DRIVER_OBJECT를 Pool 태그 스캐닝하는 명령입니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> driverscan

 

filescan : pool 태그 스캐닝을 사용하여 물리적 메모리에서 FILE_OBJECT를 스캐닝하는 명령어입니다.

- Rootkit이 디스크에 파일을 은닉 했거나, 실제 시스템의 후킹하였더라도 open file을 찾을 수 있습니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> filescan ./ > test1.txt

 

mutantscan : 메모리에서 KMUTANT 객체를 pool 태그 스캐닝을 사용해 스캐닝하는 명령어입니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> mutantscan

 

symlinkscan : 심볼릭 링크 객체들을 pool 태그 스캐닝을 사용해 스캐닝하는 명령어입니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> symlinkscan

 

thrdscan : 메모리의 ETHREAD 객체를 pool 태그 스캐닝을 사용해 스캐닝하는 명령어입니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> thrdscan

 

dumpfiles : 메모리에서 파일을 덤프합니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> dumpfiles -Q [메모리주소] -D ./ > test1.txt

 

 

[네트워크 관련 분석]

connections : 활성화 상태의 네트워크 연결 정보를 나열합니다. (Windows XP, 2003 Server만 사용가능)

- 기본적으로 _TCPT_OBJECT의 가상 주소로 출력되지만 물리주소를 얻고 싶다면 -P 옵션을 추가합니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> connections -P

 

connscan : Pool 태그 스캐닝을 통해여 connection 구조체를 찾는 명령어 입니다.  (Windows XP, 2003 Server만 사용가능)

ex) volatility2.6.exe -f <file path> --profile=<운영체제> connscan

 

sockets : TCP, UDP, RAW 등 프로토콜에서 Listening Socket을 찾아내는 명령어입니다.

- Windows XP, 2003 Server에서만 사용 가능하며, -P옵션을 추가하면 물리 주소로 볼 수 있습니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> sockets -P

 

sockscan : Pool tag Scanning을 통하여 _ADDRESS_OBJECT 구조체를 찾는 명령어입니다.

- Windows XP, 2003 Server에서만 사용 가능합니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> sockscan

 

netscan : Pool tag Scanning을 통하여 활성화 상태의 네트워크 연결 정보를 보여줍니다.

- Windows7, Windows 2008 Server, Vista에서 사용 가능합니다.

- IPv4, IPv6를 구별하여 Local과 Remote IP, Local과 Remote Port, 소켓이 연결된 시간, 현재 상태를 보여줍니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> netscan

 

[레지스터 분석]

hivescan : 메모리 덤프로부터 CMHIVEs의 물리 주소를 찾아주는 명령어입니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> hivescan

 

hivelist : 메모리 덤프로부터 레지스터 하이브파일의 가상 메모리 주소와 디스크 상의 절대 경로를 알려줍니다.

- 만약 특정 하이브로부터 값 표기를 원한다면 hivelist 명령어를 실행시켜 하이브 주소 값을 보고, Windows password를 크랙할 수 있습니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> hivelist

printkey : 특정 레지스터 키의 서브키, 값, 데이터, 데이터 타입을 보여주는 명령어 입니다.

- 모든 하이브로 부터 검색하여 찾아지는데, 위 특정값인 SECURITY안을 둘러보고 싶다면 -K 옵션을 이용하여 문자열을 함께 적어줍니다.

- 특정 하이브를 검색하는데 제한이 있다면, -o 옵션과 함께 가상주소로 입력해주셔도 됩니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> printkey

ex) volatility2.6.exe -f <file path> --profile=<운영체제> printkey -K "system32\config\SECURITY"

ex) volatility2.6.exe -f <file path> --profile=<운영체제> printkey -o 0xe15709b8

 

hivedump : hive로부터 모든 subkey를 list 형태로 보여주는 명령어입니다.

- 입력을 할 때, -o 옵션을 통해 원하는 하이브 파일의 가상 주소를 지정하면 해당 하이브파일 subkey에 대한 리스트형태로 출력이 가능합니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> hivedump -o 0xe15709b8

 

hashdump : 주로 SAM 파일을 추출할 때 쓰이는 명령입니다. ( 더 공부해야 함 )

- 시스템 하이브의 가상 주소를 -y 옵션을 통해서 넣어주고, SAM hive의 가상 주소를 -s 옵션을 통해서 넣어줍니다.

- 메모리 덤프로부터 레지스트리 키를 읽을 수 없는 경우 "Unable to rad hashes from registry" 에러 발생

ex) volatility2.6.exe -f <file path> --profile=<운영체제> hashdump 

ex) volatility2.6.exe -f <file path> --profile=<운영체제> hashdump -y [system virtual address] -s [sam virtual address]

 

lsadump : 레지스트리로부터 LSA 덤프를 수행하는 명령어입니다.

- SYSTEM hive의 Virtual address를 -y Option을 통해 넣어주고 SECURITY hive의 Virtual address를 -s Option을 통해 넣어주면 출력이 가능합니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> lsadump -y [system virtual address] -s [sam virtual address]

 

userassist : 메모리 덤프 파일에서 UserAssist 관련 레지스트리 키 정보 추출하는 명령어입니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> userassist

 

shellbags : shellbags 정보를 추출하는 명령어입니다.

- 특정 사용자가 호스트에서 수행 한 파일 또는 폴더 작업을 확인하는데 유용합니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> shellbags

 

shimcache : Application Compatibility Shim Cache 레지스트리 키를 분석하는 명령어입니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> shimcache

 

dumpregistry : 레지스트리 하이브를 디스크에 덤프해주는 명령입니다. ( 더 공부해서 적겠습니다 )

- 기본적으로 하드웨어에 발견된 모든 레지스트리만 덤프하기 위해서 가상 주소를 지정할 수 있습니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> dumpregistry -D ./

 

[크래쉬 덤프 및 최대 절전 모드 분석] ( 여기 있는 분석 플러그인은 사용한적이 없어서 나중에 추가 하도록 하겠습니다. )

crashinfo : Crash dump header 정보를 출력해주는 명령어입니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> crashinfo

 

hibinfo : hibernation file로 부터 정보를 출력해주는 명령어입니다.

Control Register상태, file 생성시간, 상태 등 보여줍니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> hibinfo

 

imagecopy : 크래시/BSOD 등 분석 불가능한 덤프파일을 분석 가능한 덤프파일로 바꿔주는 명령어입니다.

- Windows XP SP2가 아니라면 --profile 옵션을 통하여 profile을 지정해줘야 하며, -O 옵션을 통해 추출할 파일을 지정할 수 있습니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> imagecopy -O Win7SP1x64.raw

 

raw2dmp : 물리 메모리 덤프를 crash dump로 변환하는 명령어입니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> raw2dmp -O test.dmp

 

vboxinfo :  virtualbox 코어 덤프에서 세부 정보를 가져옵니다.

- 파일 주소랑, 물리 메모리 주소, 파일 크기를 출력해줍니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> vboxinfo

 

vmwareinfo : vmware의 저장 상태, vmware 스냅샷 파일에서 헤더 정보를 분석합니다.

- 메타 데이터에는 CPU 레지스터, VMX 구성파일, 메모리 실행 정보 등을 출력합니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> vmwareinfo

 

hpakinfo : FDPro.exe에 의해 생성된 hpak 형식의 메모리 덤프 정보를 출력하는 명령어입니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> hpakinfo

 

hpakextract : 위 hpak 형식의 메모리 덤프 파일을 추출 및 압축하는 명령어입니다.

 

[맬웨어와 루트킷 분석]

malfind : 사용자 모드 형태로 은폐되어 있거나 인젝션 된 코드 또는 DLL정보를 분석하는 명령어입니다.

- VAD 태그와 페이지 권한들 같은 문자들을 기반으로 사용자 모드 메모리에 숨겨져 있더나 삽입되어 있는 코드가 DLL을 찾음

ex) volatility2.6.exe -f <file path> --profile=<운영체제> malfind

malware와 rootkit이 없는 프로세스
malware와 rootkit이 보이는 프로세스

yarascan : YARA를 이용하여, 사용자 및 커널 모드 메모리 영역에 포함된 바이트, 유니코드, 문자열을 검색하는 명령어입니다.

- 의심스러운 드라이버에 대한 메모리 스캔이 가능합니다. ( 공부를 더 해오겠습니다. )

ex) volatility2.6.exe -f <file path> --profile=<운영체제> yarascan

ex) volatility2.6.exe -f <file path> --profile=<운영체제> yarascan -Y "???.sys" --wide

 

svcscan : 메모리 이미지에 등록된 서비스 목록을 확인할 수 있는 명령어입니다.

- process ID, Service name, Service Display name, Service Type, Current status, Binary Path 정보들을 확인할 수 있습니다.

- Binary path의 경우 User-mode service뿐 아니라, Kernel-mode에서 사용된 service의 Driver이름까지 출력합니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> svcscan

ldrmodules : 특정 프로세스나 DLL에 의해 은폐된 DLL 정보 분석하는 명령어입니다.

- PEB안의 linked list에서 Unlinking을 통해 DLL을 숨기는 기법의 경우 VAD(Virtual address Descriptor)에 정보가 남아 있기 때문에 탐지가 가능합니다.

- Unlinked된 명령어를 출력해주며, 메모리에 매핑된 PE File이 PEB에 존재하면 1, 존재하지 않으면 0을 출력합니다.

- 경로를 덮어쓰기 함으로써 악성코드가 DLL을 숨길 수 있으며, 모든 엔트리의 경로를 보는 -v옵션을 사용합니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> ldrmodules

ex) volatility2.6.exe -f <file path> --profile=<운영체제> ldrmodules -v

 

impscan : 코드가 import하고 있는 함수를 보여줍니다. ( 공부를 더 해오겠습니다. )

 

apihooks : 사용자 및 커널 모드에서 API 후킹 정보를 분석하는 명령어입니다. ( 공부를 더 해오겠습니다. )

 

idt : 

gdt :

threads :

callbacks :

driverirp : 

devicetree : 

psxview : 

timers : 

 

[파일 시스템 분석]

mbrparser : MBR을 검색하고 구문 분석을 합니다.

 

mftparser : MFT를 검색하고 분석을 하는데 사용하는 명령어입니다.

ex) volatility2.6.exe -f <file path> --profile=<운영체제> mftparser  > mft.csv ( csv 파일로 만듦 )

 

-reperence-

https://github.com/volatilityfoundation/volatility/wiki/Command-Reference#image-identification

https://lastcard.tistory.com/

'Forensic > SUA - 기초부터 따라하는 디지털 포렌식' 카테고리의 다른 글

Windows Registry  (0) 2022.05.14
1주차 과제  (0) 2022.04.01