FlareVM 개요
FlareVM(Forensics, Logic Analysis, and Reverse Engineering)은 FireEye 산하 FLARE 팀에서 개발한 전문 도구 모음으로, 악성코드 분석가, 디지털 포렝스 전문가, 사고 대응팀, 역공학 전문가를 위한 통합 환경을 제공한다. Windows 기반의 이 가상 머신은 복잡한 악성코드 샘플을 안전하게 분석하고 디지털 증거를 수집하는 데 필요한 도구들이 사전 구성되어 있다.
실험 환경 구성
TryHackMe 실습 환경에서 FlareVM 인스턴스를 활성화하려면 실습 페이지의 Start Machine 버튼을 클릭한다. 원격 데스크톱 연결 시 다음 정보를 사용한다:
- 계정명:
Administrator - 암호:
letmein123! - IP 주소:
MACHINE_IP
분석에 사용할 샘플 파일들은 C:\Users\Administrator\Desktop\Sample 경로에 위치하며, 해당 환경은 인터넷과 차단되어 있어 악성코드가 외부로 유출되는 위험을 방지한다.
도구 분류 체계
역공학 및 디버깅 도구
| 도구명 | 용도 |
|---|---|
| Ghidra | NSA에서 개발한 오픈소스 역공학 플랫폼, 바이너리 분석 및 디컴파일 |
| x64dbg | x86/x64 아키텍처용 오픈소스 디버거 |
| OllyDbg | 어셈블리 수준의 동적 분석을 위한 레거시 디버거 |
| Radare2 | 콘솔 기반의 확장 가능한 역공학 프레임워크 |
| Binary Ninja | 중간 표현(IR)을 활용한 현대적 바이너리 분석 도구 |
| PEiD | 실행 파일의 패킹 여부, 컴파일러 종류 식별 |
디스어셈블리 및 디컴파일
| 도구명 | 용도 |
|---|---|
| CFF Explorer | PE 파일 구조 분석 및 헤더 수정, 해시값 생성 |
| Hopper | 다중 플랫폼 지원 디스어셈블러 및 디컴파일러 |
| RetDec | 머신 코드를 고수준 언어로 복원하는 오픈소스 디컴파일러 |
정적/동적 분석 도구
| 도구명 | 용도 |
|---|---|
| Process Hacker | 프로세스 메모리 조작 및 실시간 모니터링 |
| PEview | PE 파일의 섹션, 임포트 테이블 등 구조 시각화 |
| Dependency Walker | 모듈 의존성 트리 분석 |
| DIE (Detect It Easy) | 패커, 프로텍터, 컴파일러 자동 식별 |
포렝스 및 사고 대응
| 도구명 | 용도 |
|---|---|
| Volatility | 메모리 덤프의 아티팩트 추출 및 프로파일링 |
| Rekall | 메모리 포렝스 분석 프레임워크 |
| FTK Imager | 디스크 이미지 생성 및 비트 단위 복사 |
네트워크 분석
| 도구명 | 용도 |
|---|---|
| Wireshark | 패킷 캡처 및 프로토콜 디코딩 |
| Nmap | 네트워크 탐색 및 취약점 스캐닝 |
| Netcat | TCP/UDP 연결 테스트 및 데이터 전송 |
파일 분석 및 기타
| 도구명 | 용도 |
|---|---|
| FileInsight | 바이너리 파일의 원시 데이터 뷰 및 편집 |
| Hex Fiend | 대용량 파일 처리에 최적화된 16진수 편집기 |
| HxD | 디스크, 메모리, 파일의 바이트 단위 조작 |
| Python | 자동화 스크립트 및 분석 파이프라인 구축 |
| PowerShell Empire | 포스트 익스플로테이션 프레임워크 |
Sysinternals 유틸리티
| 도구명 | 용도 |
|---|---|
| Autoruns | 시작 프로그램, 서비스, 드라이버 등 자동 실행 항목 나열 |
| Process Explorer | 프로세스 계층 구조, 핸들, DLL 정보 제공 |
| Process Monitor | 파일 시스템, 레지스트리, 프로세스/스레드 활성 실시간 로깅 |
핵심 조사 도구 상세 분석
Process Monitor (Procmon)
Procmon은 Windows 커널의 이벤트를 실시간으로 가로채어 필터링할 수 있는 강력한 모니터링 도구다. 악성코드 분석 시 다음과 같은 이벤트를 집중적으로 살펴본다:
- 파일 시스템: 비정상적인 경로에 대한 쓰기 작업(예:
%APPDATA%,%TEMP%) - 레지스트리: 런처 영구화를 위한 Run 키, Winlogon 항목 수정
- 프로세스/스레드: 의심스러운 프로세스 생성 및 DLL 주입
LSASS(lsass.exe) 프로세스에 대한 접근이 기록되는 경우, 이는 자격 증명 덤핑 공격(예: Mimikatz 활용)의 신호일 수 있다. 정상적인 lsasrv.dll 접근과 달리, 비정상적인 프로세스가 lsass.exe 메모리를 읽거나 쓰려는 시도는 추가 조사가 필요하다.
Process Explorer (Procexp)
Process Explorer는 실행 중인 프로세스의 상하위 관계를 시각적으로 파악할 수 있게 한다. 특히 문서 파일(Word, PDF), LNK, ISO 등에서 파생된 프로세스를 추적할 때 유용하다.
예를 들어, CFF Explorer 애플리케이션 실행 시 해당 프로세스와 그 부모 프로세스를 식별할 수 있다. 이는 공격자가 악성 문서를 통해 추가 프로세스를 생성하는 경우 탐지에 결정적 역할을 한다.
HxD
HxD는 파일, 메모리, 스토리지 미디어를 16진수 뷰로 검사할 수 있는 도구다. 파일의 매직 넘버(Magic Number)를 통해 실제 파일 형식을 식별하는 데 활용된다.
예시: possible_medusa.txt 파일을 HxD로 열면 4D 5A(리틀 엔디안)로 시작함을 확인할 수 있다. 이는 해당 파일이 실제로는 PE 실행 파일임을 시사하며, 공격자가 확장자를 위조하여 탐지를 회피하려 했음을 의미한다.
데이터 검사기(Data Inspector) 기능을 통해 특정 바이트를 다양한 데이터 유형(정수, 부동소수점, 시간 등)으로 해석하여 구조를 파악할 수 있다.
CFF Explorer
CFF Explorer는 PE 파일의 메타데이터를 포괄적으로 보여주는 도구로, 다음과 같은 정보를 추출할 수 있다:
- 파일 해시(MD5, SHA-1, SHA-256)를 통한 무결성 검증
- 타임스탬프, 아키텍처, 서브시스템 등 파일 특성
- DOS 헤더, NT 헤더, 섹션 테이블 등 구조 분석
cryptominer.bin 파일 분석 시 생성 시각(2024년 9월 23일), 64비트 PE 형식, 각종 해시값 등을 확인할 수 있으며, 이를 VirusTotal 등 외부 데이터베이스와 대조하여 알려진 악성코드 여부를 판단할 수 있다.
Wireshark
네트워크 트래픽 분석을 통해 C2(Command and Control) 통신, 데이터 유출, 비정상 프로토콜 사용 등을 탐지한다. TLS 1.2 이상의 암호화된 통신이 주를 이루는 현대 환경에서는 SNI(Server Name Indication), 인증서 정보, JA3指紋 등을 통해 악성 여부를 판단한다.
캡처된 패킷의 프로토콜 열, 출발지/목적지 IP, 포트 번호, 페이로드 크기 등을 종합적으로 분석하여 이상 징후를 식별한다.
PEStudio
PEStudio는 실행하지 않고 PE 파일의 특성을 정적으로 분석하는 도구다. 다음 요소들을 검토한다:
- 엔트로피(Entropy): 값이 7.0 이상이면 패킹/암호화 가능성이 높음
- 임포트 주소 테이블(IAT): 사용되는 Windows API 함수 목록
- 버전 정보: 위조된 정품 프로그램 위장 여부
- 매니페스트: 요청된 실행 권한 수준
PsExec.exe 분석 예시: 엔트로피 6.596(낮음~중간), Visual C++ 8로 컴파일, 원격 실행 기능. 시스템 관리자 도구이나 공격자가 lateral movement에 악용할 수 있는 dual-use 특성을 지님.
FLOSS (FLARE Obfuscated String Solver)
FLOSS는 악성코드 내부의 난독화된 문자열을 자동으로 복원하는 도구다. 단순한 strings.exe보다 강력한 정적 분석 기술을 적용한다.
PS C:\Users\Administrator\Desktop\Sample> floss .\cobaltstrike.exe
출력 결과는 다음 범주로 구분된다:
- 정적 문자열(Static strings): 파일 내에 직접 포함된 문자열
- 스택 문자열(Stack strings): 런타임에 스택에 구성된 문자열
- 타이트 문자열(Tight strings): 루프 내에서 생성된 문자열
- 디코딩 문자열(Decoded strings): 난독화 해제 후 복원된 문자열
추출된 문자열에서 파일 경로, URL, IP 주소, API 호출, 레지스트리 키, 오류 메시지, 암호화 키 등을 식별할 수 있다. 디코딩 문자열이 0개인 경우, 해당 샘플이 동적 생성 문자열을 사용하지 않거나 FLOSS의 분석 범위를 벗어난 난독화 기법을 사용했음을 의미할 수 있다.
실습 시나리오: windows.exe 분석
1단계: PEStudio 정적 분석
windows.exe를 PEStudio로 열어 초기 정보를 수집한다:
- MD5:
9FDD4767DE5AEC8E577C1916ECC3E1D6 - SHA-1:
A1BC55A7931BFCD24651357829C460FD3DC4828F - 설명: Windows 레지스트리 편집기(REGEDIT)로 위장
의심스러운 점:
- 정품 REGEDIT는
C:\Windows\System32에 위치하나, 해당 파일은 다운로드 폴더에 존재 - 메타데이터에 러시아어("Редактор реестра") 포함—조직의 지역 설정과 불일치 시 위험 신호
- Rich Header 누락—패킹/난독화 처리로 PE 구조 변조 가능성
- 엔트로피 값 7.999—매우 높은 난독화/암호화 가능성
블랙리스트 API 함수:
set_UseShellExecute: 쉘을 통한 외부 프로세스 실행CryptoStream,RijndaelManaged,CipherMode,CreateDecryptor: AES 대칭 암호화 활용
2단계: FLOSS 문자열 추출
PS C:\Users\Administrator\Desktop\Sample> FLOSS.exe .\windows.exe > windows.txt
주의: .NET 바이너리에 대한 언어별 문자열 추출은 현재 미지원. 결과 파일 하단에서 PEStudio에서 확인한 함수명들을 재확인할 수 있다.
3단계: 동적 분석—Process Explorer 및 Procmon
cobaltstrike.exe 실행 후 네트워크 연결 여부 확인:
- Process Explorer에서 프로세스 ID 확인(예: 4756)
- 속성 대화상자 → TCP/IP 탭에서 원격 연결 정보 확인
- Procmon에서 필터 설정:
Process Namecontainscobalt
확인 결과: 47.120.46.210로의 아웃바운드 연결 확인. 이는 Cobalt Strike 프레임워크의 기본 C2 서버 통신 패턴과 일치한다.
핵심 개념 정리
| 용어 | 설명 |
|---|---|
| Imphash | 임포트 테이블의 구조적 특성을 해시화한 값, 유사 샘플 군집화에 활용 |
| Rich Header | Visual Studio 컴파일러가 삽입하는 메타데이터, 누락 시 패킹/변조 의심 |
| 매직 넘버 | 파일 형식 식별을 위한 시그니처(예: PE 파일은 4D 5A) |
| 엔트로피 | 데이터 무작위성 지표, 7.0 이상 시 암호화/압축/패킹 가능성 |
| IAT | Import Address Table, 실행 시 필요한 외부 함수 참조 목록 |