[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

정리

정적분석의 경우

동적 분석의 경우

참고 자료