안녕하세요, 보안을 공부하는 여러분! 🛡️
오늘은 조금 짜릿하고 위험한(?) 실습을 준비했습니다. 바로 실제(하지만 교육용으로 안전한) 랜섬웨어 샘플을 코앞에 두고 해부해보는 시간입니다.
악성코드 분석에는 크게 두 가지 방법이 있죠.
- 동적 분석 (Dynamic Analysis): 가상환경에서 실제로 실행시켜보고 행동을 관찰하는 것 (위험 부담 있음)
- 정적 분석 (Static Analysis): 파일을 실행하지 않고, 파일 내부의 정보만 뜯어보는 것 (상대적으로 안전)
오늘 우리는 '정적 분석'의 기초를 다질 겁니다. 마치 의사가 환자를 수술하기 전에 엑스레이를 찍어보는 것처럼, 랜섬웨어를 실행하기 전에 이 녀석이 어떤 기능을 숨기고 있는지 뼈대와 장기를 확인해보는 과정입니다.
준비되셨나요? 그럼 랜섬웨어의 세계로 조심스럽게 들어가 봅시다! 🚀

🛑 0단계: [매우 중요] 안전 수칙 및 준비물
본 실습은 교육 목적으로 제작된 '랜섬웨어 시뮬레이션 샘플' 또는 이미 무력화된 샘플을 대상으로 합니다. 하지만 습관은 중요합니다.
⚠️ 경고: 절대 본인의 호스트 PC(실제 사용하는 컴퓨터)에서 실습하지 마세요! 반드시 인터넷이 차단된 가상머신(VMware, VirtualBox 등) 환경에서 진행해야 합니다. 실수로라도 더블 클릭해서 실행하면 큰일 납니다! 😱
🛠️ 준비물 (무료 분석 도구) 가상머신 안에 아래 도구들을 미리 설치해주세요.
- PE-bear: PE 헤더를 시각적으로 보기 편하게 해주는 도구
- Pestudio: 악성코드 초동 분석의 끝판왕 (IAT, 문자열, 해시 등을 한눈에 보여줌)
- Strings (Sysinternals): 바이너리에서 텍스트만 쏙쏙 뽑아내는 커맨드라인 도구
1단계: 너의 신분증을 보여줘! - PE 헤더(Header) 분석 🆔
윈도우 실행 파일(.exe, .dll 등)은 PE(Portable Executable) 라는 특정 형식을 따릅니다. 이 파일의 앞부분(헤더)에는 "나는 어떤 파일이고, 언제 만들어졌고, 메모리 어디에 로딩되어야 해" 같은 중요한 신상 정보가 담겨 있습니다.
[실습 따라하기]
- PE-bear를 실행하고 랜섬웨어 샘플 파일을 드래그 앤 드롭합니다.
- 'DOS Header' 탭을 봅니다.
👉 관전 포인트 1: 매직 넘버 (Magic Number) 가장 처음에 MZ (4D 5A)라는 문자가 보이나요? 이것은 "나는 윈도우 실행 파일이 맞다"는 증명서입니다. 만약 확장자가 .jpg인데 헤더가 MZ로 시작한다면? 100% 위장된 악성코드겠죠!
👉 관전 포인트 2: 컴파일 시간 (Time Date Stamp) 'File Header' 탭으로 이동하면 Time Date Stamp가 있습니다. 이 파일이 언제 만들어졌는지 알려줍니다.
- 팁: 공격자들이 이 시간을 조작(Timestumping)하기도 하지만, 때로는 아주 중요한 단서가 됩니다. 1990년대로 나온다면 조작된 것이고, 아주 최근 날짜라면 신종일 수 있습니다.
2단계: 너의 공구함에는 뭐가 들어있니? - 임포트 테이블(IAT) 분석 🧰
이 부분이 오늘 실습의 핵심입니다! ⭐⭐⭐
프로그램은 혼자서 모든 걸 다 만들 수 없습니다. 파일을 읽거나, 암호화하거나, 네트워크 통신을 하려면 윈도우 운영체제가 제공하는 함수(API)들을 빌려 써야 합니다.
IAT(Import Address Table)는 이 프로그램이 윈도우에게 "나 실행될 때 이 도구(함수)들이 필요해!"라고 요청하는 '대출 신청 목록'입니다. 이 목록만 봐도 랜섬웨어가 무슨 짓을 꾸미는지 알 수 있습니다.
[실습 따라하기]
- 이번엔 Pestudio를 실행하고 샘플 파일을 넣습니다.
- 왼쪽 메뉴에서 'imports'를 클릭합니다. (Pestudio는 의심스러운 API를 빨간색으로 표시해 줍니다! 👍)
👉 관전 포인트: 랜섬웨어의 필수 3요소 API 찾기
랜섬웨어라면 반드시 가지고 있어야 할 수상한 도구들을 찾아보세요.
- 파일을 뒤지는 도구 (File System)
- 내 PC의 소중한 문서들을 찾아야 암호화하겠죠?
- FindFirstFile, FindNextFile (파일 탐색)
- SetFileAttributes (파일 속성 변경, 숨김 처리 등)
- 파일을 암호화하는 도구 (Cryptography) 🔐
- 가장 결정적인 증거입니다. 윈도우의 암호화 라이브러리를 가져옵니다.
- CryptAcquireContext (암호화 작업 시작)
- CryptGenKey (암호화 키 생성)
- CryptEncrypt (실제 암호화 수행) 👈 이게 보이면 빼박입니다!
- 파일을 조작하는 도구 (File I/O)
- 원본 파일을 읽고, 암호화된 내용으로 덮어쓰거나, 원본을 지워야 합니다.
- ReadFile, WriteFile (파일 읽기/쓰기)
- MoveFile, DeleteFile (파일 이동/삭제 - 원본 파괴용)
여러분의 샘플에는 몇 개나 발견되었나요? 이 함수들이 조합되면 "파일을 찾아서 -> 암호화하고 -> 원본을 지운다"는 시나리오가 완성됩니다.
3단계: 너의 속마음을 들려줘 - 문자열(Strings) 추출 💬
실행 파일은 대부분 기계어로 되어 있지만, 그 안에는 사람이 읽을 수 있는 문자열(텍스트)도 많이 숨어 있습니다. 해커가 남긴 메시지, C&C 서버 IP, 공격 대상 파일 확장자 등이 평문으로 노출되기도 합니다.
[실습 따라하기] 두 가지 방법이 있습니다.
- 방법 A (Pestudio): 왼쪽 메뉴에서 'strings'를 클릭합니다. Pestudio가 알아서 수상한 문자열을 걸러줍니다.
- 방법 B (커맨드라인): 터미널(cmd/PowerShell)에서 strings -n 8 sample.exe 명령어를 입력합니다. (최소 8글자 이상의 문자열만 뽑으라는 뜻)
👉 관전 포인트: 결정적 단서 찾기
수많은 외계어 속에서 의미 있는 단어를 찾아내는 보물찾기입니다. 🕵️♀️
- 랜섬 노트(협박문) 내용 📜
- Your files have been encrypted!
- readme_restore.txt (랜섬노트 파일명)
- bitcoin, wallet 같은 금전 요구 관련 단어
- 공격 대상 확장자 목록
- 랜섬웨어는 아무 파일이나 암호화하지 않습니다. 중요한 문서만 골라내죠.
- .doc, .xls, .jpg, .pdf, .zip 같은 확장자가 리스트 형태로 보인다면 확실합니다.
- 수상한 경로 또는 IP
- C:\Users\Hacker\Desktop\RansomProject\... 같은 PDB 정보(개발자 경로)가 남아있을 수도 있습니다.
- 키를 전송하기 위한 외부 서버 IP나 도메인 주소.
🎉 실습 마무리: 엑스레이 촬영 끝!
수고하셨습니다! 👏👏👏
우리는 오늘 파일을 실행하지 않고도, 엑스레이(정적 분석 도구)를 통해 이 파일이 랜섬웨어일 가능성이 매우 높다는 것을 과학적으로 증명했습니다.
오늘의 요약:
- ✅ PE 헤더: MZ로 시작하는 윈도우 실행 파일임을 확인했다.
- ✅ IAT: 파일을 찾고(FindNextFile), 암호화하는(CryptEncrypt) 수상한 도구들을 빌려 쓰고 있다.
- ✅ 문자열: "Your files encrypted" 같은 협박 메시지와 공격 대상 확장자(.doc, .pdf) 목록을 발견했다.
이 정도 증거면 이 파일을 당장 격리 조치하기에 충분하겠죠?
정적 분석은 악성코드 분석의 기본 중의 기본입니다. 오늘 배운 내용을 바탕으로 앞으로 더 깊이 있는 분석(리버스 엔지니어링, 동적 분석)에 도전해 보시길 바랍니다!
다음 시간에도 유익하고 안전한(?) 보안 실습으로 찾아오겠습니다. 안녕! 👋
'일반IT > IT보안' 카테고리의 다른 글
| [실습] 악성코드의 심장을 찾아라! 🫀 암호화·네트워크 함수 위치 특정 및 코드 정밀 분석 (0) | 2025.12.14 |
|---|---|
| [실습] "AI야, 이거 악성코드 같니?" 🤖 추출한 메타데이터로 1차 판별하기 (0) | 2025.12.14 |
| [정리] "AI가 범인이라는데, 진짜일까?" 🤔 AI 분석의 오탐(False Positive)과 인간의 역할 (0) | 2025.12.14 |
| [실습] "이 코드 위험한가요?" 🤖 AI에게 악성코드 판별 맡기고 근거까지 완벽하게 받아내는 법 (0) | 2025.12.14 |
| [실습] "이거 아까 걔 아냐?" 👯♂️ 악성코드 원본 vs 변종, AI로 유전자 검사(유사도 분석) 하기 (0) | 2025.12.14 |