| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- 파일 시스템
- AWS 사고 사례 분석
- 버퍼 오버플로우
- 운영체제
- Database
- AWS
- C
- reversing
- 악성코드 분석
- dreamhack
- crackme
- 드림핵
- sql
- AWS 보안 아키텍처 분석
- TryHackMe
- network
- 프로그래머스
- operating system
- terraform
- AWS 3 Tier Architecture
- 리버싱
- reversing.kr
- Amazon S3
- python
- AWS 침해사고 사례 분석
- 네트워크
- CrackMe 문제
- 악성코드분석
- AWS 침해 사고 사례 분석
- programmers
- Today
- Total
lhywk 님의 블로그
[악성코드 분석] Procmon 동적분석 본문
개요
Procmon(Process Monitor) 은 Sysinternals에서 제공하는 실시간 시스템 모니터링 도구로, 특정 프로세스가 발생시키는 Registry / File System / Network / Process·Thread 이벤트를 실시간으로 캡처한다. 정적분석만으로는 파악하기 어려운 "실행 시점에 실제로 무엇을 하는가"를 확인할 수 있어 악성코드 동적분석의 핵심 도구로 사용된다.
이번 실습에서는
- Procmon의 기본 화면 구성과 필터링 방법을 notepad.exe를 대상으로 익히고
- 정상 프로그램(dynamic1.exe)과 악성 프로그램(dynamic2.exe)의 행위를 비교 분석하여 랜섬웨어의 전형적인 파일 조작 패턴을 확인한다.
1. Procmon 화면 구성 및 필터링
1-1. 툴바 4대 이벤트 카테고리
Procmon 툴바에는 다음 4가지 이벤트 카테고리를 개별적으로 켜고 끌 수 있는 토글 버튼이 있다.

| 카테고리 | 설명 |
| Show Registry Activity | RegOpenKey, RegQueryValue, RegSetValue 등 레지스트리 접근 이벤트 |
| Show FileSystem Activity | CreateFile, ReadFile, WriteFile, CloseFile 등 파일 시스템 이벤트 |
| Show Network Activity | TCP/UDP Connect, Send, Receive 등 네트워크 이벤트 |
| Show Process and Thread Activity | Process/Thread Create, Load Image(DLL 로드), Process Exit 등 |
필터를 걸지 않은 상태에서는 시스템 전역의 모든 프로세스 이벤트가 초당 수백~수천 건씩 쌓이기 때문에 Filter 메뉴를 통해 분석 대상 프로세스만 선별하는 작업이 사실상 필수다.

Filter 메뉴에는 Filter...(Ctrl+L), Reset Filter, Load/Save Filter, Highlight...(Ctrl+H) 등의 옵션이 있으며, 이 중 Filter...를 열어 조건을 설정한다.
1-2. 특정 프로세스로 필터링하기
Process Monitor Filter 대화상자에서 Command Line contains notepad.exe 조건을 Include로 추가하면 notepad.exe가 발생시키는 이벤트만 선별적으로 확인할 수 있다. 기본적으로 Procmon.exe, Procexp.exe, Autoruns.exe 등 분석 도구 자신의 프로세스는 Exclude 처리되어 노이즈를 줄여준다.

필터 기능을 활용하여 notepad.exe를 포함하는 필터만 설정할 수 있다.
2. 카테고리별 이벤트 확인 (notepad.exe)
Registry Activity

notepad.exe가 실행되면서 HKCU\...\Classes, HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\..., TSF(Text Services Framework) 관련 키 등을 대상으로 RegOpenKey → RegQueryValue → RegCloseKey / RegEnumValue 패턴이 반복되는 것을 확인할 수 있다. 대부분 SUCCESS 또는 NAME NOT FOUND(존재하지 않는 키를 조회 후 넘어감)로 종료되며, 이는 UI 설정값·입력기 상태 등을 로드하는 정상적인 초기화 과정이다.
FileSystem Activity

notepad.exe 본체(C:\Windows\System32\notepad.exe), 언어 리소스(...\WinSxS\...\notepad.exe.mui), 폰트 및 imm32.dll, wow64cpu.dll 등 의존 DLL에 대한 CreateFile → QueryBasicInformationFile → CreateFileMapping → ReadFile → CloseFile 흐름이 나타난다. 이는 실행 파일과 리소스를 메모리에 매핑해 로드하는 표준적인 프로세스 초기화 과정이다.
Network Activity

일반적인 notepad.exe는 네트워크 통신을 하지 않기 때문에 아무 로그도 찍히지 않는다. 만약 notepad류의 단순 프로그램에서 이 카테고리에 이벤트가 찍힌다면 비정상 통신(C2 연결 등)을 의심해볼 근거가 된다.
Process and Thread Activity

Thread Create 및 다수의 Load Image 이벤트가 나타난다. ntdll.dll, kernel32.dll, wow64cpu.dll, user32.dll, gdi32.dll, msctf.dll 등 notepad.exe 구동에 필요한 표준 DLL들이 순차적으로 메모리에 로드되는 과정이 그대로 기록된다.
3. Operation 단위 필터링: WriteFile 이벤트로 파일 저장 행위 추적
카테고리가 아닌 특정 오퍼레이션(Operation) 단위로도 필터링이 가능하다. 이번엔 Operation is WriteFile 조건을 Command Line 필터(contains notepad.exe)와 함께 추가한다.

이번엔 WriteFile에 대한 이벤트만을 필터로 걸어놓는다.
메모장에 HelloWorld~~~!를 입력하고 바탕화면에 저장한다.

저장하는 순간, Procmon에 다음과 같이 단 하나의 이벤트가 정확히 찍힌다.

| Process | PID | Operation | Path | Result | Detail |
| notepad.exe | 2496 | WriteFile | C:\Users\Wanon\Desktop\Helloworld.txt | SUCCESS | Offset: 0, Length: 16 |
→ Operation 단위 필터링을 사용하면, 프로세스가 언제·어디에 파일을 쓰는지를 노이즈 없이 정밀하게 추적할 수 있음을 확인했다.
4. dynamic1.exe 행위 분석
Command Line contains dynamic1.exe 로 필터를 재설정한다.

dynamic1.exe를 실행하자 예상과 달리 계산기(calc.exe) 창이 떴다.

Process and Thread Activity로 실제 이벤트 시퀀스를 확인해보면 다음과 같다.

dynamic1.exe(PID 1312)가 Process Start → Thread Create 후, ntdll.dll, kernel32.dll, wow64.dll, wow64cpu.dll, user32.dll, gdi32.dll, msvcrt.dll, advapi32.dll, sechost.dll, rpcrt4.dll, sspicli.dll, cryptbase.dll, msasn1.dll, msctf.dll 등 표준 DLL들을 순차적으로 Load Image한다. 이후 아래 이벤트가 이어진다.
| Process | PID | Operation | Path/Detail | Result |
| dynamic1.exe | 1312 | Process Create | C:\Windows\SysWOW64\calc.exe (자식 PID 2128) | SUCCESS |
| dynamic1.exe | 1312 | Load Image | C:\Windows\SysWOW64\apphelp.dll | SUCCESS |
| dynamic1.exe | 1312 | Thread Exit | — | SUCCESS |
| dynamic1.exe | 1312 | Process Exit | Exit Status: 0 | SUCCESS |
분석 결과: dynamic1.exe는 자체적으로 파일 시스템을 조작하거나 레지스트리를 변경하지 않고, CreateProcess로 calc.exe를 실행시킨 뒤 곧바로 종료(Exit Status 0)되는 단순한 런처(launcher) 성격의 프로그램이다.
5. dynamic2.exe 행위 분석
이번엔 dynamic2.exe라는 악성 의심 프로그램을 대상으로 동일한 절차를 반복한다. 먼저 실행 전 가상머신 바탕화면 상태를 기록해둔다.

바탕화면에는 261143_20210325180240_500.jpg, 30000804196_1280.jpg, 20220612...jpg 등 여러 개의 정상 이미지 파일이 있는 상태다.
Command Line contains dynamic2.exe로 필터를 재설정한다.

프로그램 실행 후 바탕화면을 다시 확인하면, 기존 jpg 아이콘 3개가 바이너리(암호화된 데이터) 아이콘으로 바뀌어 있는 것을 확인할 수 있다.

5-1. Procmon 이벤트 시퀀스 상세 분석
dynamic2.exe(PID 4800)가 발생시킨 파일 시스템 이벤트를 순서대로 확인하면, jpg 파일 하나당 다음과 같은 11단계 시퀀스가 정확히 반복된다.

대상 파일: C:\Users\Wanon\Desktop\20220612800001_0.jpg (PID 4800)
| 순서 | Operation | 의미 | Path |
| 1 | CreateFile | 원본 jpg 열기 | 20220612800001_0.jpg |
| 2 | QueryStandardInformationFile | 파일크기/속성 확인 | 〃 |
| 3 | ReadFile ×2 | 파일 내용 읽기 | 〃 |
| 4 | CloseFile | 원본 핸들 닫기 | 〃 |
| 5 | CreateFile | 동일이름 + .ENC 확장자 파일 생성 | 20220612800001_0.jpg.ENC |
| 6 | WriteFile | 암호화된 데이터 기록 | 〃 |
| 7 | CreateFile | 원본 jpg 재오픈 | 20220612800001_0.jpg |
| 8 | QueryAttributeTagFile | 속성 확인 | 〃 |
| 9 | SetDispositionInformationFile | 원본 파일 삭제 예약 | 〃 |
| 10 | CloseFile | 실제 삭제 실행 | 〃 |
| 11 | QueryDirectory | 다음 대상 탐색 | Desktop\ |
이후 261143_20210325180240_500.jpg, 30000804196_1280.jpg에 대해서도 완전히 동일한 시퀀스(CreateFile → QueryStandardInformationFile → ReadFile → ReadFile → CloseFile → CreateFile(.ENC) → WriteFile → CreateFile(재오픈) → QueryAttributeTagFile → SetDispositionInformationFile → CloseFile)가 그대로 반복되는 것을 확인할 수 있다.
jpg 파일을 대상으로 원본 읽기 → 암호화 사본(.ENC) 생성 → 원본 삭제가 파일 단위로 반복되는 전형적인 랜섬웨어(Ransomware) 계열의 동작 패턴임을 확인할 수 있다.
QueryDirectory로 다음 대상을 순차 탐색하며 위 시퀀스를 자동 반복하는 것으로 보아, 바탕화면(또는 특정 디렉터리) 내 이미지 파일을 대상으로 일괄 암호화 후 원본 삭제를 수행하는 구조임을 알 수 있다.
'Malware Analysis' 카테고리의 다른 글
| [실습] crackme3_find_input_key (0) | 2026.07.09 |
|---|---|
| [실습] crackme2_find_number (0) | 2026.07.09 |
| [악성코드 분석] 프로세스/코드 인젝션 (0) | 2026.06.24 |
| [악성코드 분석] 메모리 공격 기법 (0) | 2026.06.24 |
| [악성코드 분석] 악성코드의 방어 기법 (0) | 2026.06.24 |