[Security] 정적분석과 동적분석

악성코드 분석 방법론인 정적 분석과 동적 분석을 정리했습니다.

1. 개요

악성코드 분석이란?

사용자 컴퓨터에 악의적인 영향을 끼치는 소프트웨어인 악성코드의 내부 구조와 동작 원리, 감염 경로, 그리고 특징까지 파악하며 보안 위협 대응하고 방어 전략 수립하는 단계입니다. 최근 AI, 자동화 툴들을 활용해 악성코드 변종이 급증하고 분석 방해 기법 등이 진화하고 확산됨에 따라 분석의 중요성이 커지고 있습니다.

분석 방법 분류

분류설명
정적분석코드를 실행하지 않고 분석
동적분석코드를 실행하면서 행위 분석

2. 정적분석 (Static Analysis)

2.1 정의

2.2 특징

2.3 분석 대상

대상설명
파일 메타데이터파일 크기, 해시값, 타임스탬프
PE 헤더Import/Export 테이블, 섹션 정보
문자열URL, IP, 레지스트리 경로, 명령어
디스어셈블리 코드어셈블리 수준 코드 분석
시그니처알려진 악성코드 패턴 매칭

2.4 장단점

장점단점
실행 없이 안전하게 분석난독화/패킹 시 분석 어려움
전체 코드 흐름 파악 가능런타임 행위 파악 불가
빠른 초기 분류 가능고급 기술 및 경험 필요
변종 탐지에 효과적동적 로딩 코드 분석 한계

3. 동적분석 (Dynamic Analysis)

3.1 정의

3.2 특징

3.3 분석 대상

대상설명
프로세스 활동생성/종료, 권한 상승
파일 시스템파일 생성/수정/삭제
레지스트리레지스트리 키 변경
네트워크C2 서버 통신, 다운로드
메모리메모리 인젝션, 언패킹
API 호출시스템 API 호출 패턴

3.4 장단점

장점단점
실제 행위 직접 관찰분석 환경 구축 필요
난독화/패킹 영향 적음샌드박스 탐지 회피 가능성
네트워크 행위 분석 용이모든 코드 경로 실행 어려움
자동화 분석 가능시간/리소스 소모

4. 정적분석 vs 동적분석 비교

4.1 주요 비교표

항목정적분석동적분석
실행 여부실행하지 않음실행함
분석 환경일반 환경 가능격리 환경(샌드박스) 필요
안전성높음 (감염 위험 없음)격리 필수
분석 속도빠름상대적으로 느림
난독화/패킹 대응어려움효과적 (실행 시 복호화)
코드 커버리지전체 코드 분석 가능실행 경로만 분석
분석 대상코드, 헤더, 문자열, 시그니처프로세스, 파일, 레지스트리, 네트워크
필요 기술리버스 엔지니어링시스템/네트워크 지식
자동화용이용이
한계런타임 행위 파악 불가샌드박스 탐지 회피 가능성

4.2 분석 단계별 활용

[초기 분류] → 정적분석 (해시, 시그니처, 문자열)
     ↓
[행위 분석] → 동적분석 (샌드박스 실행)
     ↓
[심층 분석] → 정적분석 (디스어셈블리, 디컴파일)
     ↓
[최종 분석] → 정적 + 동적 병행

4.3 권장 접근 방식


5. 정적분석 도구

5.1 파일 정보 분석

DIE (Detect It Easy) - 오픈소스

사용법:

1. 파일 드래그 앤 드롭
2. 자동으로 파일 타입, 패커 정보 표시
3. 엔트로피 분석으로 패킹 여부 확인

PEiD - 오픈소스

ExifTool - 오픈소스

사용법:

exiftool <파일명>

5.2 PE 분석

PE-bear - 오픈소스

pestudio - 프리웨어

CFF Explorer - 프리웨어

5.3 디스어셈블러/디컴파일러

IDA Pro - 상용 (Free 버전 있음)

사용법:

1. 파일 로드 → 자동 분석
2. Functions 창에서 함수 탐색
3. F5로 의사코드(Pseudocode) 확인 (Pro 버전)

Ghidra - 오픈소스 (NSA)

사용법:

1. 새 프로젝트 생성 → 파일 Import
2. 자동 분석 실행
3. Decompiler 창에서 C 유사 코드 확인

Binary Ninja - 상용

radare2 / Cutter - 오픈소스

사용법:

r2 -A <파일명>    # 분석 모드로 실행
afl              # 함수 목록
pdf @main        # main 함수 디스어셈블

5.4 문자열/해시 분석

strings (Linux/Windows) - 기본 도구

사용법:

strings -n 8 <파일명>    # 8자 이상 문자열 추출

FLOSS - 오픈소스 (Mandiant)

사용법:

floss <파일명>

HashMyFiles - 프리웨어

5.5 YARA 규칙

YARA - 오픈소스

규칙 예시:

rule Suspicious_Strings {
    strings:
        $a = "cmd.exe" nocase
        $b = "powershell" nocase
    condition:
        any of them
}

사용법:

yara <규칙파일.yar> <대상파일/디렉토리>

6. 동적분석 도구

6.1 샌드박스

Cuckoo Sandbox - 오픈소스

사용법:

cuckoo submit <파일명>
cuckoo web                # 웹 인터페이스

Any.Run - 상용 (무료 플랜 있음)

Joe Sandbox - 상용

Hybrid Analysis - 무료

6.2 프로세스 모니터링

Process Monitor (ProcMon) - 프리웨어 (MS Sysinternals)

사용법:

1. 필터 설정 (Process Name = 대상 프로세스)
2. 악성코드 실행
3. 로그 분석 (파일 생성, 레지스트리 수정 등)

Process Explorer - 프리웨어 (MS Sysinternals)

Process Hacker - 오픈소스

6.3 네트워크 분석

Wireshark - 오픈소스

사용법:

1. 캡처 시작
2. 악성코드 실행
3. 필터로 트래픽 분석 (예: http, dns, ip.addr==x.x.x.x)

FakeNet-NG - 오픈소스 (Mandiant)

사용법:

fakenet            # 실행 후 악성코드 분석

INetSim - 오픈소스

6.4 API 모니터링

API Monitor - 프리웨어

사용법:

1. 모니터링할 API 카테고리 선택
2. 프로세스 후킹
3. API 호출 로그 분석

x64dbg / x32dbg - 오픈소스

사용법:

1. 파일 로드 (F3)
2. 브레이크포인트 설정 (F2)
3. 실행/스텝 실행 (F9/F8/F7)

6.5 레지스트리/파일 시스템

Regshot - 오픈소스

사용법:

1. 1st Shot (실행 전 스냅샷)
2. 악성코드 실행
3. 2nd Shot (실행 후 스냅샷)
4. Compare → 변경사항 확인

Autoruns - 프리웨어 (MS Sysinternals)

6.6 메모리 분석

Volatility - 오픈소스

사용법:

vol.py -f memory.dmp imageinfo
vol.py -f memory.dmp --profile=Win10x64 pslist
vol.py -f memory.dmp --profile=Win10x64 malfind

7. 결론

핵심 요약

도구 선택 가이드

목적추천 도구
초기 분류DIE, pestudio, strings
심층 정적분석Ghidra, IDA Pro
자동 동적분석Cuckoo, Any.Run
수동 동적분석ProcMon, x64dbg, Wireshark
메모리 분석Volatility

정리

정적분석의 경우

동적 분석의 경우

참고 자료