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

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

악성코드 분석 학습정리 — Part 4
기초 동적 분석 (Dynamic Analysis)

악성코드를 실제로 실행하여 행위를 관찰하는 동적 분석 방법, 도구, 분석 회피 기법을 정리합니다.

▶️ 동적 분석(Dynamic Analysis)이란?

동적 분석은 악성코드를 실제로 실행하면서 행위를 관찰하는 방법입니다. 패킹·난독화가 적용되어 정적 분석이 어려운 경우에도, 실제 동작하는 악성코드의 행위를 직접 확인할 수 있습니다.

정적 분석이 레시피 읽기라면, 동적 분석은 실제로 요리를 만드는 것입니다.
다만, 독이 든 요리를 만드는 것이므로 — 반드시 외부와 완전히 차단된 주방(격리 VM)에서만 해야 합니다.

절대 원칙 — 격리 환경 필수

동적 분석은 반드시 격리된 가상머신(VM)에서 수행해야 합니다. 분석 전 스냅샷을 찍고, 분석 후 스냅샷으로 복구합니다. 호스트와의 네트워크 연결은 반드시 차단합니다.

🛠️ 동적 분석 도구

Process Explorer

실행 중인 프로세스의 상세 정보를 실시간으로 보여줍니다. DLL 탭으로 어떤 DLL이 로드되어 있는지, 핸들·뮤텍스를 확인합니다.

핵심 활용: DLL 탭 → svchost 내부에 숨겨진 악성 DLL 탐지

Process Monitor (Procmon)

프로세스의 파일·레지스트리·네트워크 동작을 실시간으로 캡처합니다. 노이즈가 많아 필터 설정이 핵심입니다.

핵심 활용: 프로세스 필터로 분석 대상만 표시, 파일 생성·레지스트리 변경 탐지

Regshot

레지스트리 스냅샷을 찍어 악성코드 실행 전후를 비교합니다. 새로 생성된 레지스트리 키를 한눈에 파악합니다.

핵심 활용: 1st shot → 실행 → 2nd shot → Compare 버튼으로 차이 확인

Wireshark

네트워크 패킷을 캡처하여 C2 서버와의 통신, 다운로드 시도, 사용 프로토콜을 분석합니다.

핵심 활용: C2 도메인·IP 탐지, HTTP/DNS/TCP 통신 내용 분석
📋 동적 분석 수행 순서 (8단계)

동적 분석은 순서가 매우 중요합니다. 악성코드 실행 전에 모든 모니터링 도구를 준비해야 행위를 놓치지 않습니다.

1

Regshot → 1st shot (레지스트리 스냅샷)

악성코드 실행 전 현재 레지스트리 상태를 저장. 나중에 비교할 기준점이 됩니다.

2

Wireshark 캡처 시작

네트워크 인터페이스를 선택하고 캡처를 시작합니다. 악성코드가 시작하자마자 발생하는 통신도 놓치지 않기 위함입니다.

3

Procmon 캡처 시작 + 필터 설정

프로세스명 Include/Exclude 필터를 설정합니다. 노이즈 제거가 분석 효율의 핵심입니다.

4

Process Explorer 실행

프로세스 트리를 모니터링할 준비를 합니다. 악성코드 실행 후 새로운 프로세스가 생성되는지 확인합니다.

5

악성코드 실행

EXE: 더블클릭 또는 cmd에서 직접 실행 / DLL: rundll32.exe를 통해 특정 Export 함수 호출

6

30초 ~ 1분 대기

악성코드가 행위를 완료할 시간을 줍니다. Sleep 기반 분석 회피에 걸리지 않도록 충분히 기다립니다.

7

Regshot → 2nd shot → Compare

실행 후 레지스트리를 다시 찍고 비교합니다. 새로 생성된 서비스 키, Run 키 등을 확인합니다.

8

각 도구 결과 저장

Procmon 결과 XML 내보내기, Wireshark pcapng 저장, 스크린샷 촬영. 분석 증거를 보존합니다.

⚙️ DLL 실행 방법 (rundll32.exe)

DLL 파일은 직접 더블클릭해서 실행할 수 없습니다. rundll32.exe를 사용하여 DLL의 특정 Export 함수를 호출해야 합니다.

# DLL 실행 방법: rundll32.exe [DLL경로],[함수명]
C:\malware\> rundll32.exe Lab03-02.dll,installA

# 함수명은 PEview나 pestudio의 Export 탭에서 확인
# installA, ServiceMain, DllMain 등이 일반적인 Export 함수명

DLL 직접 실행 불가 = 설명서(DLL)는 읽을 수 없다는 비유가 맞습니다.
DLL은 혼자서는 동작하지 못하는 "부품"입니다. rundll32.exe는 이 부품을 "테스트 장비"에 꽂아 강제로 작동시키는 도구입니다.

🔽 Procmon 필터 설정 원칙

Procmon은 시스템의 모든 파일·레지스트리 동작을 캡처하기 때문에 노이즈가 매우 많습니다. 올바른 필터 설정이 분석 효율을 결정합니다.

조건 동작 이유
Process Name 악성 프로세스명 (예: Lab03-01.exe) Include 분석 대상만 표시
Process Name svchost.exe Include Service DLL형 악성코드 행위 캡처
Process Name Procmon.exe, Procexp.exe Exclude 분석 도구 자체의 노이즈 제거
Operation begins with IRP_MJ_ Exclude 커널 드라이버 노이즈 제거
Operation begins with FASTIO_ Exclude 파일시스템 캐시 노이즈 제거
🎭 분석 회피 기법 (Anti-Analysis Techniques)

악성코드는 분석자가 쉽게 분석하지 못하도록 다양한 회피 기법을 사용합니다. 이 기법들을 알아야 대응할 수 있습니다.

UPX 패킹

코드를 압축하여 정적 분석을 방해. 실행 시 메모리에서 복원.
upx -d 명령으로 언패킹 후 정적 분석

동적 API 로딩

LoadLibrary + GetProcAddress로 실행 중 함수를 동적 로드. IAT를 최소화하여 정적 분석 방해.
동적 분석으로 실제 API 호출 관찰

뮤텍스(Mutex) 사용

샌드박스의 다중 인스턴스 실행 환경을 탐지하거나, 중복 실행을 방지.
뮤텍스 이름 자체를 IOC로 활용

Sleep / 타이머

분석 환경에서 일정 시간 동안 아무 행위도 하지 않다가, 분석이 끝난 후 동작.
충분한 관찰 시간 확보 (최소 1~2분)

프로세스 은닉

svchost.exe 같은 정상 프로세스에 DLL로 숨어들어 동작. 프로세스 목록만으로 탐지 불가.
Process Explorer의 DLL 탭 확인

서비스명 위장

IPRIP, VideoDriver 등 정상처럼 보이는 이름으로 서비스 등록.
알 수 없는 ServiceDll 경로 의심

HTTP CONNECT 터널링

80/443 포트를 사용하여 방화벽을 우회하며 C2 서버와 통신.
패킷 페이로드 내용 심층 분석

타임스탬프 위조

컴파일 시간을 과거 날짜로 위조하여 새로운 악성코드처럼 보이지 않게 함.
컴파일 시간은 참고값으로만 활용
📊 실습 샘플별 동적 분석 결과

Lab03-01.exe

Regshot
변경 3개 (RNG Seed, UserAssist) / Run 키 등록은 C2 실패로 미확인
Procmon
advpack.dll 동적 로드, 시스템 디렉토리 열거
Wireshark
ws2_32 접근, HTTP CONNECT 터널링 시도

Lab03-02.dll

Regshot
IPRIP 서비스 키 6개 신규 생성, ServiceDll = Lab03-02.dll 등록
Procmon
ws2_32.dll 로드, SvcHost netsvcs 그룹 쿼리
Wireshark
ws2_32 로드 후 C2 연결 시도 (practicalmalwareanalysis.com)

동적 분석 핵심 원칙

1 반드시 격리된 가상머신에서 분석한다. 실행 전 스냅샷을 찍고, 분석 후 복구한다.
2 악성코드 실행 전에 모든 모니터링 도구를 준비한다. 순서를 지키지 않으면 초기 행위를 놓친다.
3 Procmon 필터를 올바르게 설정하여 노이즈를 제거해야 의미있는 결과를 얻을 수 있다.
4 svchost 내부 DLL은 Process Explorer의 DLL 탭으로만 탐지할 수 있다. 프로세스 목록만 보면 안 된다.
5 분석 결과는 즉시 저장한다. VM 스냅샷 복구 전에 반드시 모든 로그를 내보내야 한다.
📌 Part 4 핵심 요약
  • 동적 분석 = 실제 실행하며 행위 관찰 → 격리 VM 필수
  • 주요 도구: Process Explorer(프로세스/DLL), Procmon(파일/레지스트리), Regshot(레지스트리 전후 비교), Wireshark(네트워크)
  • 수행 순서: Regshot 1st → Wireshark → Procmon → ProcExp → 실행 → 대기 → Regshot 2nd → 저장
  • DLL 실행: rundll32.exe DLL파일,함수명
  • 회피 기법 8가지: 패킹, 동적 API, 뮤텍스, Sleep, 프로세스 은닉, 서비스위장, HTTP터널링, 타임스탬프위조