- 도구 : Volatility3
덤프 파일을 대상으로 한다.
분석 환경 세팅
https://github.com/stuxnet999/MemLabs 에서 Lab0을 우선 다운해준다. 문제 풀어보기
Volatility는 pycryptodome 등 python 라이브러리를 필요로 한다. exe파일로 설치했다면 별도의 세팅이 필요없다!
플러그인도 지원을 한다.
exe로 설치한다면 편할 수도 있지만 외부 플러그인을 추가할 경우 소스코드 버전으로 설치해야한다.
volatility3가 있는 곳에서
python -m ensurepip
python -m pip install --upgrade pip
python -m pip install pycryptodome
python C:\Tools\volatility3\vol.py로 실행했을 때 usage가 정상으로 출력되면 준비가 된 것이다.

Volatility Plugiin List (이 외에도 많다)
- windows.info : 운영체제 정보(프로필 알아냄)
- \windows.pslist, windows.pssscan, windows.pstree : 프로세스 정보
- windows.dumpfiles --pid : 프로세스의 실행 파일 덤프
- windows.dumpfiles --virtaddr : 가상주소 기반 메모리 파일 덤프
- windows.dumpfiles --physaddr : 물리주소 기반 메모리 파일 덤프
- windows.handles : 프로세스가 열고 있는 모든 핸들 검색
- windows.dlllist : 프로세스와 관련된 DLL 목록 출력
- windows.filescan : 메모리에 남아있는 파일 오프젝트 목록 출력
- windows.cmdline : 실행된 커맨드 목록 출력
- windows.netscan, windows.netcat : 네트워크 연결 정보 출력
- windows.registry.hivescan : 레지스트리 하이브 검색
- windows.registry.printkey : 레지스트리 하이브 키 출력
프로세스 목록 확인
windows.info
Lab0의 압축을 해제해준 뒤 python C:\Tools\volatility3-2.27.0\vol.py --save-config config.json -f Challenge.raw windows.info 을 실행해준다.
-f는 파일을 지정해주고, windows.info는 운영체제의 버전을 출력해준다.
--save-config config.json은 config를 저장하는 옵션이다. 처음 분석할 때 --save-config 옵션을 이용해 설정 파일을 저장해두고, 다음부터는 해당 설정을 바로 이용할 수 있다. 저장된 설정을 불러오는 옵션은 -c 이다.
즉, 한 번 설정을 해두면 다음부터 python3 vol.py -c config.json -f [메모리파일] [플러그인] 의 형태로 사용하면 된다는 소리이다.


- Is64Bit : 시스템이 64비트 기반 운영체제인지 여부
- NTBuildLab : Windows 빌드 버전
- SystemTime : 시스템 시간. 메모리 덤프가 생성된 시간 의미
windows.pslist
프로세스 목록을 출력한다. 로그가 길기에 리다이렉션(>)을 이용해 별도의 파일로 저장하며 실제 분석은 뷰어보구에서 한다. 결과가 출력된 파일을 확인하기 위해 type 명령어를 사용할 수 있다.


- PID / PPID : 프로세스ID / 부모 프로세스ID
- ImageFileName : 프로세스 이름
- CreateTime : 프로세스 생성된 시간
windows.psscan
프로세스 목록을 출력한다. pslist와는 내부적으로 동작하는 원리가 다르다. pslist는 빠른 대신 악성코드에 의한 조작에 취약하다.
pslist와 psscan의 결과를 비교하는 방식으로 활용할 수 있다.


windows.pstree
프로세스 목록을 트리 형태로 출력한다. 자식 프로세스는 * 를 기준으로 표시된다.


실행 경로와 커맨드도 확인 가능 하다.
프로세스 분석 방법
1. 수상한 이름의 프로세스 찾기
수상할 경우 악성코드일 가능성이 많다. Windows에서 일반적으로 동작하는 프로세스들의 이름은 다음과 같다.
| explorer.exe | 파일 탐색기 | winlogon.exe | 윈도우 로그인 관리자 |
| cmd.exe | 명령 프롬프트 | services.exe | 윈도우 서비스 관리자 |
| smss.ece | 세션 관리자 서브 시스템 | lsass.exe | 로컬 보안 인증 서브 시스템 |
| csrss.exe | 클라이언트/서버 런타임 서브 시스템 | svchost.exe | 윈도우 서비스 관할 프로세스 |
| wininit.exe | 윈도우 초기화 프로세스 | conhost.exe | 윈도우 콘솔 호스트 |
| dvm.exe | 데스크탑 창 관리자 |
Windows의 기본으로 실행되는 프로세스는 사건과 관련없는 PC에서 해당 프로세스가 실행 중인지 wmic을 이용하여 알아낼 수 있다.


부모 프로세스가 표시되지 않는 경우 tasklist 명령어로 wmic에서 표시되지 않는 내용을 보충할 수도 있다.


2. 부모 프로세스가 정상적이지 않은 프로세스 찾기
악성코드들은 정상 프로세스와 구분하지 못하도록 정상 프로세스와 동일한 이름으로 생성되기도 한다. 이런 경우 콘솔을 통해 실행되어 conhost나 cmd를 부모로 가지기도 한다.
3. 실행경로가 정상적이지 않은 프로세스 찾기
악성코드가 정상 프로세스와 동일한 이름을 가지더라도, 실행경로가 다를 수도 있다.
svchost.exe의 경우 정상이라면 C:\Windows\System32\svchost.exe에 위치하지만, 악성코드는 다른 경로에서 svchost.exe를 호출하기도한다.
프로세스 덤프
windows.handles
--pid 옵션과 함께 사용하며, 해당 프로세스가 열고 있는 핸들을 출력한다.
핸들은 Windows에서 파일, 이벤트, 디바이스, 드라이버 등 여러 오브젝트를 지칭하는 포인터이다.


Type이 key인 것은 레지스트리를 뜻한다.
windows.dlllist
--pid 옵션과 함께 사용하며, 해당 프로세스가 이용하는 DLL목록을 출력한다.
악성코드 중에는 정상 프로세스에 악성 DLL을 로드시켜 동작을 수행하도록 하는 경우가 많다. 수상한 프로세스를 찾지 못했을 경우 dlllist를 확인하는 것이 방법이 될 수 있다. (경로를 중심으로 확인할 것)


windows.dumpfiles
--pid 옵션과 함께 사용하며, 해당 프로세스와 관련된 모든 파일을 덤프한다.
--virtaddr 옵션으로 해당 가상 주소에 위치하는 파일을, --physaddr 옵션으로 해당 물리 주소에 위치하는 파일을 덤프한다.
-o 옵션으로 덤프될 파일이 저장될 디렉토리를 설정할 수 있다.

폴더에 저장된 파일들은 file.[시작주소].[끝주소].[획득방법].[원본파일이름].img의 구조를 가진다.

악성코드를 분석할 때는 Virus Total에 전달해 악성 여부를 판단하기도 한다.
Virus Total에 파일을 업로드할 경우 해당 파일이 서버로 전송되기 때문에, 외부에 공개 가능한 파일만 업로드하도록 주의해야한다.
windows.memmap
--pid 옵션과 함께 사용하며, 해당 프로세스의 메모리 구조를 알 수 있다.
--dump 옵션과 함께 해당 프로세스의 메모리 전체를 파일로 덤프하기위해 사용한다.

생성된 파일은 프로세스가 사용하던 메모리 공간을 복사해서 가져온 결과이다.
대부분 알 수 없는 구조이고, 공백, DLL, 파일 등이 존재한다. 때문에 키워드를 가지고 검색하는 편이 효율적일 것이다.
기타 플러그인
windows.cmdline
사용자가 프로세스를 실행할 때 입력했던 명령어를 출력한다.


windows.filescan
메모리에 존재하는 모든 파일 목록을 출력한다. 파일 주소(Offset)과 함께 출력되고, 해당 주소를 이용해 windows.dumpfiles로 파일을 덤프할 수 있다.


filescan을 시도하여 파일로 저장하려 하면 위와 같은 유니코드 에러가 발생할 텐데, 상단의 화살표를 눌러 명령 프롬프트 창에 진입한 뒤 set PYTHONIOENCODING=utf-8을 입력하고 filescan을 해주면 정상적으로 파일을 저장할 수 있다.
windows.dumpfiles
메모리에서 파일을 덤프한다. 물리 주소일 경우 --physaddr 옵션, 가상 주소일 경우 --virtaddr 옵션을 사용한다.

windows.envars
분석 대상 시스템의 환경변수를 출력한다.
악성코드들에서 환경변수에 실행에 필요한 값들을 저장해 두기도 하기 때문에 환경변수에 대한 분석은 필수적이다. 방법은 환경 변수 내 경로들 중심으로 특이한 경로가 있는지 확인하는 것이다.


windows.hashdump
Windows시스템에 저장된 사용자의 PW를 변환한 결과인 NTLM 해시값을 추출해준다. 공격자는 NTLM해시값을 얻어 PW를 추측하고, 권한 상승 공격을 하기도 한다.
NTLM은 hashcat같은 브루트포스 도구를 이용해 크랙이 가능하다.

'Forensic > Memory' 카테고리의 다른 글
| 아티팩트 탐색 - Lab4, Lab5 (0) | 2026.03.30 |
|---|---|
| 사용자 행위 파악 - Lab2, Lab3 (1) | 2026.03.29 |
| 메모리 포렌식 - Lab0 풀어보기 (0) | 2026.03.29 |

