yon11b

[SK 쉴더스 루키즈] 윈도우 기초 정적/동적 분석 실습 (Practical Malware Analysis LAB 03-01) 본문

보안/SK 쉴더스 루키즈

[SK 쉴더스 루키즈] 윈도우 기초 정적/동적 분석 실습 (Practical Malware Analysis LAB 03-01)

yon11b 2026. 5. 29. 02:50
반응형

======== 정적 분석 ========

순서: 정적분석 → 동적분석

 

[entropy 비정상적 높음]

entropy란?

  • PE 파일 내부 데이터가 얼마나 “무질서한지” 나타내는 값

entropy가 높다

  • 패킹, 암호화 의심

entropy 가 낮다

  • 일반 코드/문자열일 가능성 높음

entropy 기준

0 ~ 3
→ 매우 규칙적

4 ~ 6
→ 일반적인 코드/데이터

7 이상
→ 압축/암호화/패킹 의심

 

sections > entropy

.data 영역의 엔트로피가 좀 높긴 하다.

[import table에 함수가 하나뿐!]

imports> 함수가 하나뿐?! (ExitProcess)

왜 import table에 함수가 ExitProcess 하나만 있는가?

-> 다른 API들은 import table에 안 적고 실행 중 직접 찾아서 호출했기 때문이다.

 

그럼 ExitProcess는 왜 불러오는가? 얘도 나중에 찾아오면 되는 거 아님?

-> GetProcAddress랑 LoadLibrary 을 불러오려면 kernel32.dll이 필요함

→ kernel32.dll을 불러오기 위한 함수 최소한 1개는 필요함.

 

windows XP 시절에는 ASLR이 없어서 kernel32.dll이 올라온 주소가 항상 고정이었다.

그래서 이 주소를 미리 예측하고 kernel32.dll 이 export하는 다른 함수들(ex: LoadLibrary)을 불러오는 코드를 미리 짤 수가 있었다.

 

strings를 보면 kernel32.dll 말고도 다른 dll이 있다. 그럼 저 dll 들도 불러와야 하는데 import table에는 없다.

 

 

ws2_32.dll 이런 얘들이 이상한 악성 행위를 하기 때문에 이걸 감추려고 일부러 table에는 안 올리고 나중에 동적 실행되게 한 것으로 추정해 볼 수 있다.

 

ws2_32.dll

  • 역할
    • Windows Socket 통신
    • TCP/IP 통신 기능 제공
    • 소켓 생성 및 네트워크 연결 수행
  • 대표 API
    • socket
    • connect
    • send
    • recv
    • bind
  • 악성코드에서의 활용
    • C2 서버 통신
    • 데이터 유출
    • 백도어 연결

advapi32.dll

  • 역할
    • Windows 고급 시스템 기능 담당
    • 레지스트리 및 서비스 관리 기능 제공
    • 권한 및 보안 관련 기능 제공
  • 대표 API
    • RegOpenKeyEx
    • RegSetValueEx > Run 등록
    • OpenSCManager
    • CreateService
    • AdjustTokenPrivileges
  • 악성코드에서의 활용
    • 레지스트리 자동실행 등록
    • 서비스 생성
    • 권한 상승
    • 보안 설정 변경

user32.dll

  • 역할
    • Windows GUI 및 사용자 입력 처리 담당
    • 키보드, 마우스, 창(Window) 제어 기능 제공
    • 사용자 인터페이스 관련 기능 수행
  • 대표 API
    • MessageBox
    • SetWindowsHookEx
    • GetAsyncKeyState
    • FindWindow
  • 악성코드에서의 활용
    • 키로깅
    • 사용자 입력 감시
    • 화면 조작
    • 특정 프로그램 실행 여부 확인

[외부 도메인 접속]

 

 

strings에 도메인, HTTP, 상태코드로 추정되는 503, 200, 윈도우 소켓 api인 ws2_32가 보이므로 네트워크 통신 관련 코드가 .exe 파일에 있다는 것을 알 수 있다.

(정적분석이므로 실제로 네트워크 통신이 일어난 것은 아님.)

[의심 레지스트리 분석] > 네트워크, 자동실행

 

commandv: HTTP 핸들 조작 가능성

CurrentVersion\Run: 자동 실행 등록 위치

Shell.Folders: 사용자 shell folder 조회 가능성

 

[의심 파일명 분석]

 

vmx32to64.exe, WinVMX32와 같은 파일명은 윈도우에 존재하지 않는 파일명이다.

공격자가 만든 위장 악성 파일일 가능성이 크다.

[악성 행위 흐름 추정]

  1. 사용자가 Lab03-01.exe를 실행한다.
  2. 초기 스텁 코드가 실행된다.
  3. 필요한 DLL 또는 API를 런타임에 해석한다.
    • ws2_32
    • advapi32
    • ntdll
    • user32
    • advpack
  4. 사용자 AppData 경로를 조회한다.
  5. 자기 자신 또는 내장 데이터를 vmx32to64.exe 등의 이름으로 복사한다.
  6. 레지스트리에 자동 실행 값을 등록한다.
    • CurrentVersion\Run
    • Active Setup\Installed Components
    • StubPath
  7. HTTP 관련 레지스트리 또는 핸들러를 조회·수정할 수 있다.
  8. www.practicalmalwareanalysis.com 도메인으로 HTTP 기반 통신을 시도한다.
  9. HTTP 응답 코드 200, 503 등을 기준으로 분기 처리할 수 있다.
  10. 작업 완료 후 ExitProcess를 호출해 종료한다.

 

======= 동적 분석 ========

동적 분석 보고서 생성을 위해 GPT에 넘길 자료들

  1. PE studio 결과 파일
  2. regshot 스냅샷 비교 파일
  3. process monitor 파일
  4. process explorer 파일
  5. wireshark로 캡쳐한 파일

각각에서 어떤 정보들을 얻을 수 있는가?

  1. PE studio 결과 파일
    • Import API
      • 어떤 Windows API를 사용하는지 확인 가능
    • Sections 정보
      • entropy, rwx 권한, 이상한 section 이름 확인 가능
      • 패킹/난독화 여부 판단
    • Strings
      • URL, IP, mutex, registry 경로, 파일 경로 등 IOC 확인 가능
    • PE Header 정보
      • 컴파일 시간, subsystem, entry point, architecture(x86/x64) 확인 가능
  2. regshot 스냅샷 비교 파일
    • 새로 생성된 Registry Key
      • 자동실행 등록 여부 확인 가능
    • 수정된 Registry 값
      • 시스템 설정 변경 여부 확인 가능
    • 삭제된 Registry 정보
      • 흔적 제거 행위 확인 가능
    • Persistence 관련 흔적 ?
      • Run, Services, Winlogon 등 지속성 확보 여부 분석 가능
  3. process monitor 파일
    • 파일 생성/삭제/수정 기록
      • 어떤 파일을 건드렸는지 확인 가능
    • Registry 접근 기록
      • 어떤 레지스트리를 읽고 수정했는지 확인 가능
    • Process/Thread 생성
      • 자식 프로세스 실행 여부 확인 가능
    • DLL 로드 정보
      • 어떤 DLL을 사용하는지 확인 가능
  4. process explorer 파일
    • 부모-자식 프로세스 관계
      • 어떤 프로세스가 악성코드를 실행했는지 확인 가능
    • 로드된 DLL 목록
      • DLL Injection 및 수상한 모듈 확인 가능
    • Handles / Mutex 정보
      • 파일, 레지스트리, mutex 사용 여부 확인 가능
        • mutex 정보를 보는 이유
          • 악성코드 충돌 나면 비정상 실행되므로 악성코드에 mutex 쓰는 경우 많음
          • 옛날 악성코드의 경우, mutex 이름에 abc123, HGL345, DarkCometMutex 의 문자열을 돌려썼음. 이 문자열 보고 악성코드인 거 판별 가능.
    • Strings / 메모리 정보
      • 메모리 내 URL, 명령어, 경로 등 IOC 확인 가능
  5. wireshark로 캡쳐한 파일
    • 통신 대상 IP / Domain
      • C2 서버 및 외부 통신 대상 확인 가능
    • 사용 프로토콜
      • HTTP, DNS, SMB, TCP 등 어떤 통신 사용하는지 확인 가능
    • 전송 데이터 내용
      • 평문 데이터, 다운로드 URL, 명령어 확인 가능
    • 패킷 흐름 및 타이밍
      • beaconing, 주기적 통신, 데이터 유출 여부 분석 가능

[레지스트리 확인: regshot > vmx32to64]

레지스트리 경로에 이상한 파일들이 올라왔는지 확인해보자.

 

 

Currentversion\\Run\\VideoDriver 경로에 어떤 파일이 올라온 것을 확인할 수 있다.

디코딩하여 확인해보니, vmx32to64였다. 이 파일은 (정적분석에서도) self copy되어서 currentversion\Run에 등록될 것으로 예상했던 악성 파일이었다.

 

[외부 서버 도메인의 ip 얻기- wireshark]

03-01.exe 파일을 실행시키고 캡쳐를 하니 www.practicalmalwareanalysis.com으로 접속하는 패킷이 잡혔다.

 

해당 도메인의 ip도 얻었다.

 

[self copy 확인 & Run 등록 & 윈도우 통신 - procmon]

[번외] prefetch file: 이전에 한번 실행되었던 파일이라는 것을 알 수 있음. 포렌식에서 많이 쓰임]

 

C:\Windows\Prefetch

프로그램 실행
↓
Windows가 실행 정보 기록
↓
C:\\Windows\\Prefetch 에 .pf 생성

.pf 파일 안에는 "이 exe 실행 시 어떤 DLL/파일을 읽었는지” 에 대한 정보가 기록된다.

WinPrefetchView 도구로 Chrome.exe.pf을 살펴봤다.

 

ws2_32.dll, msvcrt.dll, kernel32.dll 등 익숙한 dll들이 보인다.

 

1. writefile

 

실제로 쓰기를 한 흔적

 

ReadFile에서 읽은 7168byte를 그대로 WriteFile로 심어놓았기 때문에 자기 자신을 심어놓은 self copy임을 알 수 있다.

저 7168byte의 파일은 Lab03-01.exe 파일이다.

 

분석 보고서 일부

 

실제로 저 경로에 들어가서 봤더니 잘 생성(복제)가 된 것을 확인할 수 있었다.

 

2. RegSetValue도 중요! > Currentversion\Run 등록

 

 

3. ws2_32.dll

여기는 윈도우 통신에 관한 라이브러리를 불러옴

 

4. aws 서비스 이용

 

[mutex 확인 - procexp]

mutex 이름: WinVMX32

 

실습 3-1 정리

➢1. 이 악성코드의 임포트 함수에서 발견되는 주요 문자열은 무엇인가?

exitProcess

 

➢2. 감염을 식별할 수 있는 호스트 기반 지표(IOC)는 무엇인가?

VMx32to64

 

➢3. 이 악성코드를 식별할 수 있는 네트워크 기반 시그니처가 존재하는가? 있다면 무엇인가?

www.practicalmalwareanalysis.com

 

 

728x90