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

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

[Security] 정적분석과 동적분석
Photo by Markus Spiske / Unsplash

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) - 오픈소스

  • 용도: 파일 타입, 패커/컴파일러 탐지
  • 플랫폼: Windows, Linux, macOS

사용법:

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

PEiD - 오픈소스

  • 용도: PE 파일 패커/컴파일러 식별
  • 플랫폼: Windows
  • 사용법: 파일 로드 → 시그니처 기반 자동 탐지

ExifTool - 오픈소스

  • 용도: 파일 메타데이터 추출

사용법:

exiftool <파일명>

5.2 PE 분석

PE-bear - 오픈소스

  • 용도: PE 파일 구조 분석
  • 특징: 직관적 GUI, 섹션/헤더 상세 분석
  • 사용법: 파일 로드 → 섹션, Import/Export, 리소스 탐색

pestudio - 프리웨어

  • 용도: PE 파일 초기 분석 (IoC 추출)
  • 특징: VirusTotal 연동, 위험 지표 자동 표시
  • 사용법: 파일 로드 → 자동 분석 결과 확인

CFF Explorer - 프리웨어

  • 용도: PE 헤더 편집 및 분석
  • 특징: 리소스 편집, Import 추가/삭제 가능

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

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

  • 용도: 디스어셈블리, 디컴파일
  • 특징: 업계 표준, 강력한 분석 기능

사용법:

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

Ghidra - 오픈소스 (NSA)

  • 용도: 디스어셈블리, 디컴파일
  • 특징: 무료, 강력한 디컴파일러

사용법:

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

Binary Ninja - 상용

  • 용도: 디스어셈블리, 바이너리 분석
  • 특징: 현대적 UI, 스크립팅 지원

radare2 / Cutter - 오픈소스

  • 용도: 리버스 엔지니어링 프레임워크
  • 특징: CLI 기반 (Cutter는 GUI)

사용법:

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

5.4 문자열/해시 분석

strings (Linux/Windows) - 기본 도구

사용법:

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

FLOSS - 오픈소스 (Mandiant)

  • 용도: 난독화된 문자열 추출

사용법:

floss <파일명>

HashMyFiles - 프리웨어

  • 용도: 파일 해시 계산 (MD5, SHA1, SHA256)

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 - 오픈소스

  • 용도: 자동화된 악성코드 분석
  • 특징: API 호출, 네트워크, 파일 활동 기록

사용법:

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

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

  • 용도: 클라우드 기반 대화형 샌드박스
  • 특징: 실시간 상호작용, 네트워크 분석
  • 사용법: 웹에서 파일 업로드 → 실시간 분석 관찰

Joe Sandbox - 상용

  • 용도: 고급 악성코드 분석
  • 특징: 상세한 행위 보고서, 다양한 환경 지원

Hybrid Analysis - 무료

  • 용도: 무료 온라인 샌드박스
  • 특징: Falcon Sandbox 기반, 상세 보고서

6.2 프로세스 모니터링

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

  • 용도: 파일/레지스트리/네트워크 활동 실시간 모니터링

사용법:

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

Process Explorer - 프리웨어 (MS Sysinternals)

  • 용도: 프로세스 상세 정보 확인
  • 특징: DLL 목록, 핸들, 네트워크 연결 확인

Process Hacker - 오픈소스

  • 용도: 고급 프로세스 관리/분석
  • 특징: 메모리 덤프, 네트워크 연결 분석

6.3 네트워크 분석

Wireshark - 오픈소스

  • 용도: 네트워크 패킷 캡처/분석

사용법:

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

FakeNet-NG - 오픈소스 (Mandiant)

  • 용도: 네트워크 트래픽 시뮬레이션/캡처
  • 특징: DNS, HTTP 등 서비스 에뮬레이션

사용법:

fakenet            # 실행 후 악성코드 분석

INetSim - 오픈소스

  • 용도: 네트워크 서비스 시뮬레이터
  • 특징: 다양한 프로토콜 에뮬레이션

6.4 API 모니터링

API Monitor - 프리웨어

  • 용도: Windows API 호출 모니터링

사용법:

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

정리

정적분석의 경우

  • 로컬에서 분석해도 될거같지만 정적 분석 내에서도 잘못 실행하여 문제가 발생할 수 있음. > 항상 가상 환경 내에서 실행이 필요함.
  • 암호화가 되어있는지 거의 대부분 exeinfo를 사용
  • 안에있는 문자열 구조를 확인하는게 정적 분석으로 엄밀히 말하면 기초분석에서도 수행
  • 패킹이 되어있는지 확인 -> 언패킹 과정도 필요.
    • 언패킹 도구는 구글링을 통해 충분히 확인 가능합니다.
    • 패킹에 대한 도구를 확인하는 툴, 파일의 구조를 확인하는 툴 등등.

동적 분석의 경우

  • 눈으로 직접 보는 분석이라 크로스체크하여 분석하는 것
  • 악성코드를 실행시키는 시점에 정상적일 수 있음.
    • 반드시 2~3번 반복 수행하며 실제 과정을 명확히 확인해야함.
    • 동일한 툴로 하더라도 악성코드가 수행하는게 맞는지 반드시 검증해야함.
      • 정적분석 대비 더 많은 시간이 필요
  • 악성코드에 의해 일어나는게 맞는지 확인해야함.
  • 직접 악성코드를 실행시켜서 분석하기에 가상환경이 반드시 필요함
  • 네트워크, 파일과 레지스트리, 프로세스 영역 3가지로 나눠서 확인하는게 필요

참고 자료