악성 코드 분석 - 기초 정적 분석

SK Shieldus AI 사이버보안 부트캠프 | AI_31기

악성코드 분석 학습정리 — Part 3
기초 정적 분석 (Static Analysis)

악성코드를 실행하지 않고 파일 자체를 분석하는 정적 분석 방법과 도구를 정리합니다.

🔬 정적 분석(Static Analysis)이란?

정적 분석은 악성코드를 실행하지 않고 파일 자체를 분석하는 방법입니다. PE 헤더, IAT, 내장 문자열, 해시 등을 분석하여 악성코드의 기능을 예측합니다. 안전하게 수행할 수 있지만, 패킹·암호화가 적용된 경우 분석이 제한됩니다.

법의학 증거 수집처럼 생각하면 됩니다.
범인을 잡기 위해 현장에 직접 범인을 불러올 필요 없이 (실행 없이), 현장에 남겨진 지문·발자국·흔적 (PE 헤더, 문자열, IAT)으로 범인의 정체와 행동 방식을 예측하는 것입니다.

🛠️ 정적 분석 도구

PEview 필수

PE 파일의 헤더 구조를 트리 형태로 보여주는 도구. IAT, 섹션 정보, 컴파일 시간 등을 확인합니다.

주요 활용: IAT 확인, 섹션 이름 확인, Subsystem 값 확인

HxD 필수

헥스 에디터. 파일을 16진수(Hex) 바이트 단위로 보여주고 직접 수정도 가능합니다.

주요 활용: Ctrl+G → 오프셋 직접 이동, Subsystem 값 수정 실습

pestudio 종합

PE 파일을 종합적으로 분석. 위험 지표, 블랙리스트 문자열, 임포트를 한눈에 볼 수 있습니다.

주요 활용: Indicators(위험 지표) 확인, 엔트로피 측정, 악성 문자열 탐지

Resource Hacker

PE 파일의 .rsrc(리소스) 섹션을 분석·추출합니다. Dropper 분석에 필수입니다.

주요 활용: BIN 리소스 추출, 내장 파일(PE) 확인 및 저장

WinMD5Free

파일의 MD5 해시를 계산합니다. 해시 값으로 VirusTotal에서 악성코드 검색이 가능합니다.

주요 활용: 파일 해시 추출 → VirusTotal 검색 → 탐지 여부 확인

VirusTotal 온라인

70개 이상의 안티바이러스 엔진으로 파일·해시를 검사. 행위 태그, Code Insights 제공.

주요 활용: 해시 검색, 탐지율 확인, 행위 태그(trojan/downloader 등) 확인
📦 패킹(Packing)과 언패킹(Unpacking)

패킹은 원본 코드를 압축·암호화하여 정적 분석을 어렵게 만드는 기법입니다. 실행 시 메모리에서 원본 코드를 복원(언패킹)한 후 동작합니다. 대표적인 패킹 도구는 UPX(Ultimate Packer for eXecutables)입니다.

패킹 = 진공 압축팩에 옷을 넣는 것.
겉에서 보면 작고 무엇인지 알 수 없지만 (분석 방해), 개봉(실행)하면 원래 옷이 그대로 나옵니다 (메모리에서 복원). UPX 언패킹은 이 진공팩을 뜯는 작업입니다.

정상(비패킹) 파일

섹션 이름.text / .rdata / .data
.text 엔트로피0.5 ~ 5.0 (낮음)
IAT 함수 수수십 개 이상
.text 크기코드 크기에 비례

패킹된 파일

섹션 이름UPX0 / UPX1 / UPX2
.text 엔트로피6.5 이상 (높음!)
IAT 함수 수매우 적음 (1개도 가능)
.text 크기거의 0 또는 매우 작음

UPX 패킹 탐지 방법: PEview에서 섹션 이름 확인 → UPX0/UPX1이 보이면 UPX 패킹. pestudio에서 엔트로피 확인 → .text 섹션이 6.5 이상이면 패킹 의심.

bash — UPX 언패킹 명령어
# UPX 패킹 해제 (언패킹)
C:\> upx -d Lab01-02.exe -o Lab01-02_unpacked.exe

Ultimate Packer for eXecutables
Copyright (C) 1996 - 2024
File size Ratio Format Name
-------------------- ------ ----------- -----------
3072 <- 16384 18.75% win32/pe Lab01-02_unpacked.exe

# 결과: 3,072B → 16,384B로 복원! 이제 정상 IAT 분석 가능

# UPX 버전 확인
C:\> upx --version
📊 실습 샘플별 정적 분석 결과

실제 실습에서 분석한 6개 샘플의 주요 발견 사항입니다. 각 샘플에서 어떤 단서를 발견했는지 정리합니다.

샘플 주요 발견 핵심 IOC 단서
Lab01-01.exe 파일 열거·복사 기능 의심 FindFirstFileA, FindNextFileA, CopyFileA 임포트
Lab01-01.dll C2 통신, 뮤텍스 사용 WS2_32 Ordinal 방식 임포트 (함수명 은닉!)
Lab01-02.exe UPX 패킹 → 언패킹 후 서비스 등록 확인 CreateServiceA, InternetOpenUrlA / 뮤텍스 HGL345
Lab01-04.exe .rsrc에 PE 파일 내장 (Dropper) FindResourceA → WriteFile → WinExec 조합, BIN/101/1033에 MZ 발견
Lab03-01.exe IAT 최소화 (동적 로드 기법) ExitProcess 하나만 명시, 문자열에서 C2·뮤텍스 WinVMX32 발견
Lab03-02.dll 서비스 DLL로 위장 IPRIP 서비스명, ServiceDll, ws2_32 로드
🗺️ 정적 분석 수행 순서 (워크플로)
1

해시 계산 → VirusTotal 검색

WinMD5Free로 MD5 해시를 계산하고, VirusTotal에서 검색합니다. 이미 알려진 악성코드인지 빠르게 확인합니다.

2

패킹 여부 확인 (pestudio / PEview)

섹션 이름(UPX0/UPX1)과 엔트로피(7.0 이상) 확인. 패킹되어 있다면 즉시 언패킹 수행.

3

IAT 분석 (PEview / pestudio)

어떤 DLL의 어떤 함수를 임포트하는지 확인. 위험 함수 목록을 정리하고 기능을 예측합니다.

4

문자열 분석 (pestudio)

URL, 도메인, IP, 레지스트리 키, 뮤텍스 이름 등 내장 문자열을 추출합니다. IOC 도출의 핵심 단계입니다.

5

리소스 섹션 분석 (Resource Hacker)

BIN 리소스에 MZ 시그니처(실행파일)가 있는지 확인. Dropper 탐지의 핵심 단계입니다.

6

IOC 정리

발견한 해시, 뮤텍스, 도메인, 파일 경로, API 조합 등을 IOC 목록으로 정리합니다.

정적 분석 핵심 원칙

1 패킹 탐지 → 언패킹 → 재분석 순서를 반드시 지킨다. 패킹된 상태로 분석하면 의미있는 정보를 얻을 수 없다.
2 IAT가 거의 비어있다면 동적 API 로딩을 의심하고, 동적 분석으로 보완한다.
3 FindResourceA → WriteFile → WinExec 조합이 보이면 Dropper를 의심한다. Resource Hacker로 .rsrc 섹션을 즉시 확인한다.
4 컴파일 시간(Time Date Stamp)은 위조 가능하므로 참고값으로만 사용한다.
📌 Part 3 핵심 요약
  • 정적 분석 = 실행 없이 파일 자체 분석 → 안전하지만 패킹 시 한계
  • 주요 도구: PEview(헤더), HxD(헥스), pestudio(종합), Resource Hacker(리소스), VirusTotal(검증)
  • 패킹 탐지: UPX0/UPX1 섹션명 or 엔트로피 7.0 이상
  • 언패킹: upx -d 파일명.exe -o 출력파일.exe
  • IAT 분석이 정적 분석의 핵심 — 함수명으로 악성코드 기능 예측
  • 분석 결과는 반드시 IOC 목록으로 정리