Community연구 & 데이터 분석github.com

guelfoweb/malware-analysis-static

의심스러운 바이너리 정적 분석을 위한 코드렉스 스킬 – 악성코드 분석 작업을 자동화하고 리버스 엔지니어링 워크플로우를 안내합니다.

malware-analysis-static란 무엇인가요?

이 스킬은 AI 에이전트(코드렉스 등)가 의심스러운 바이너리 파일을 정적으로 분석할 수 있도록 설계된 전문 기술입니다. Windows PE, Linux ELF, macOS Mach-O, Android APK, 오피스 문서, 웹 페이로드, 스크립트 등 다양한 샘플 유형을 지원하며, 파일 형식 식별부터 악성코드 패밀리 분류, C2 인프라 분석, 난독화/패킹/암호화 해제, 지속성 및 안티 분석 기법 식별까지 포괄적인 정적 분석을 수행합니다. 이 스킬은 사용자에게 격리된 실습 환경에서 분석을 수행하도록 경고하며, 네트워크 접근이 제한된 환경에서도 오프라인 분석을 최우선으로 진행합니다. 도구 설치 전 사용자 승인을 요구하고, 분석 진행 중에는 자동으로 다음 분석 단계를 결정하여 사용자에게 불필요한 질문을 최소화합니다. 분석 결과는 'AGENTS.md'와 'REPORT.md' 파일에 체계적으로 저장되며, 모든 증거는 'case/' 디렉토리 구조에 보존됩니다.

지원 대상✓Claude Code✓Codex CLI~Cursor
npx skills add guelfoweb/malware-analysis-static

Installed? Explore more 연구 & 데이터 분석 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

악성코드 분석

분석을 시작하기 전에 다음 경고를 표시하세요:

경고: 악성코드 분석은 개인용 또는 프로덕션 워크스테이션이 아닌 격리된 실습 장비나 일회용 가상 머신에서 수행해야 합니다.

버전 관리 및 업데이트 확인

이 스킬은 명시적인 버전 관리를 사용합니다.

시작 동작:

  1. 프론트매터에서 로컬 스킬 버전을 읽습니다.
  2. 네트워크 접근이 가능하고 사용자가 네트워크 사용을 금지하지 않은 경우, 원격 SKILL.md를 다음에서 가져옵니다:
    • https://raw.githubusercontent.com/guelfoweb/malware-analysis-static/main/SKILL.md
  3. 프론트매터의 원격 version 필드를 읽고 로컬 버전과 비교합니다.
  4. 설치된 스킬이 이전 버전인 경우, 사용자에게 최신 버전이 존재함을 명확히 알리고 계속 진행하기 전에 업데이트할지 묻습니다.
  5. 사용자가 업데이트를 거부하면 현재 로컬 버전으로 분석을 계속합니다.
  6. 원격 파일을 사용할 수 없거나 프론트매터를 구문 분석할 수 없는 경우 정상적으로 계속 진행하고 업데이트 확인을 완료할 수 없었음을 기록합니다.

규칙:

  • 업데이트 확인에 실패해도 분석을 차단하지 마십시오.
  • 자동으로 업데이트를 수행하지 마십시오.
  • 실제로 최신 버전이 있는 경우에만 사용자에게 업데이트에 대해 질문하십시오.
  • 버전이 일치하면 불필요한 업데이트 대화를 표시하지 않고 계속 진행하십시오.

범위

이 스킬은 다음에 사용하십시오:

  • Windows PE 바이너리, DLL 및 .NET 어셈블리
  • Linux ELF 바이너리
  • macOS Mach-O 바이너리
  • Android APK
  • 오피스 문서
  • 임베디드 스크립트 또는 스머글링 로직이 포함된 HTML, HTM, MHTML, SVG, XML, XSL과 같은 웹 페이로드
  • JS, JSE, VBS, VBE, VBA, HTA, WSF, WSH, PowerShell, BAT, CMD, 셸 스크립트, Python, PHP, Perl, Ruby, Lua, AutoIt, Node.js 로더, 웹쉘 및 다운로더 체인과 같은 스크립트 및 소스 페이로드

기본 모드는 정적 분석입니다. 사용자가 명시적으로 동적 분석을 요청하는 경우에만 격리된 일회용 실습 환경을 준비하거나 사용하십시오. 개인 워크스테이션, 프로덕션 시스템 또는 실제 자격 증명이나 사용자 데이터가 포함된 호스트 OS에서 악성코드를 실행하지 마십시오.

목표

각 사례에 대해 다음을 확인하십시오:

  • 파일 유형 및 아키텍처
  • MD5, SHA1 및 SHA256
  • 증거로 뒷받침되는 악성코드 패밀리, 클러스터 또는 툴킷
  • C2 인프라
  • 드롭 URL 및 스테이지 URL
  • 구성 엔드포인트 및 임베디드 구성
  • 지속성 및 안티 분석 동작
  • 임베디드, 드롭 또는 다운로드된 스테이지
  • 난독화, 패킹, 인코딩, 압축 및 암호화 방법
  • 디코딩, 복호화, 언패킹 및 스테이징 로직

불확실성은 명시적으로 기술하십시오. 뒷받침되지 않는 주장을 하지 마십시오.

리버스 엔지니어링 명령

단순한 IOC 탐색이 아닌 실제 악성코드 리버스 엔지니어링을 수행하십시오.

자율성 규칙:

  • 승인된 범위, 사용 가능한 도구 및 실습 환경 내에서 다음 합리적인 분석 단계를 자동으로 진행하십시오.
  • 다음 명백한 분석 작업을 계속 진행할지 사용자에게 묻기 위해 멈추지 마십시오.
  • 하나를 즉시 시도할 수 있는 동등한 다음 분석 단계 중에서 사용자에게 선택하도록 요청하지 마십시오.
  • 원격 검색이 아직 승인되지 않은 경우, 검색을 선택 사항으로 제시하는 대신 사용 가능한 가장 깊은 수준의 오프라인 분석을 자동으로 계속하십시오.
  • 원격 검색에 추가 승인이 필요한 경우 기본적으로 오프라인 계속 진행을 선호하십시오.
  • 실제 결정이 필요한 경우에만 사용자에게 질문하기 위해 흐름을 중단하십시오:
    • 누락된 도구를 설치해야 하는 경우
    • 네트워크 검색 또는 실행 단계가 이미 승인된 범위를 초과하는 경우
    • 다음 작업이 의미 있는 안전 또는 비용 결정을 요구하는 경우
    • 진행 상황이 해결되지 않은 외부 종속성으로 인해 차단된 경우

자동으로 수행해야 하는 작업의 예:

  • 다음 의심스러운 스트림, 객체, 리소스, 매크로, 스크립트 블록 또는 오버레이를 구문 분석합니다.
  • 드롭 URL 또는 스테이지 URL이 이미 범위 내에 있을 때 다음 스테이지를 복구하고 분석합니다.
  • 의심스러운 문자열에서 코드로의 참조를 추적합니다.
  • 부모 코드가 디코더를 명확히 정의할 때 다음 blob을 디코딩합니다.
  • 실행 또는 손상 체인에서 다음 관련 아티팩트를 검사합니다.

다음 두 가지 모두 사용 가능한 경우:

  • 이미 사용 가능한 아티팩트에 대한 심층 오프라인 구문 분석 또는 리버스 엔지니어링
  • 아직 명시적으로 승인되지 않은 원격 검색

코드렉스는 자동으로 오프라인 경로를 선택하고 질문 없이 작업을 계속해야 합니다.

필요한 마인드셋:

  • 문자열이 불충분할 때 제어 흐름과 데이터 흐름을 추적하십시오.
  • 흥미로운 로직이 숨겨져 있을 때 트라이지(triage)에서 심층 리버싱으로 이동하십시오.
  • 임포트, 참조, 리소스, 오버레이, 구성 blob 및 디코드 루틴을 검사하십시오.
  • 가능할 때 디코딩, 복호화, 압축 해제 및 스테이징 로직을 재구성하십시오.
  • 필요에 따라 디스어셈블리, 디컴파일, 헤드리스 리버스 엔지니어링 도구 및 작은 헬퍼 스크립트를 사용하십시오.
  • 모든 중요한 결과를 증거 파일, AGENTS.md 및 REPORT.md에 보존하십시오.

첫 번째 장애물에서 멈추지 마십시오. 한 방법이 실패하면:

  1. 동등한 도구를 시도하십시오.
  2. 디스어셈블리, 섹션, 리소스, 원시 blob 또는 메타데이터와 같은 하위 수준 보기를 시도하십시오.
  3. 다른 추출 또는 디코딩 방식을 시도하십시오.
  4. 무엇이 실패했는지, 왜 실패했는지, 무엇을 시도했는지 문서화하십시오.
  5. 남아 있는 차단 요소가 실제이고 명확하게 설명될 때까지 계속하십시오.

유효한 에스컬레이션 예:

  • 문자열 -> 디코딩된 문자열 -> 참조 -> 디스어셈블리 -> 디컴파일
  • 매니페스트 검토 -> 디컴파일된 코드 -> smali -> 네이티브 라이브러리 검사
  • 매크로 추출 -> 스크립트 재구성 -> 디코더 에뮬레이션 -> 스테이지 추출
  • PE 메타데이터 -> 임포트 -> 구성 blob 조각 -> Ghidra 헤드리스 분석

다음 경우에만 중단하십시오:

  • 요청된 범위가 완료된 경우
  • 남아 있는 차단 요소를 사용 가능한 도구와 권한으로 해결할 수 없는 경우
  • 추가 진행을 위해 사용자가 승인하지 않은 실행이 필요한 경우

도구 발견 및 설치 정책

이 스킬은 단일 SKILL.md로 작동해야 합니다. 그 옆에 헬퍼 스크립트가 있다고 가정하지 마십시오.

분석 전:

  1. OS 및 셸 환경을 감지하십시오.
  2. 사용 가능한 도구를 동적으로 발견하십시오.
  3. 각 작업에 가장 적합한 도구를 선택하십시오.
  4. 선호하는 도구가 없으면 대체 방안을 사용하십시오.
  5. 누락된 도구를 설치하기 전에 사용자에게 물어보십시오.
  6. 도구를 자동으로 설치하지 마십시오.
  7. 승인 후 기본 패키지 관리자 또는 가장 직접적인 공식 설치 경로를 사용하십시오.

샘플 유형별 도구 확인:

  • 샘플 유형을 식별한 후 심층 분석을 시작하기 전에 해당 분석 경로에 필요한 도구를 확인하십시오.
  • 전체 글로벌 도구 목록이 아닌 현재 샘플 유형과 관련된 도구만 확인하십시오.
  • 해당 샘플 유형에 필수 도구나 기능이 없으면 진행하기 전에 사용자에게 설치할지 물어보십시오.
  • 유효한 대체 방안이 있으면 대체 방안을 사용하고 제한 사항을 기록하십시오.
  • 강력히 권장되는 도구만 누락된 경우, 누락된 기능이 구체적인 단계를 차단하지 않는 한 계속 진행하십시오.
  • 현재 샘플 유형과 관련 없는 도구를 설치하기 위해 워크플로우를 중단하지 마십시오.

일반적인 발견 명령:

uname -s
command -v file strings rg python3 node php perl bash sh pwsh yara objdump readelf nm otool lipo r2 rabin2 jadx apktool aapt2 floss xorsearch ilspycmd monodis oleid olevba oledump.py exiftool binwalk 7z upx analyzeHeadless xmllint xxd base64 iconv
python3 -c "import pefile, lief" 2>/dev/null
$PSVersionTable.PSVersion
Get-Command file,strings,rg,python,py,node,php,perl,pwsh,yara,objdump,llvm-objdump,dumpbin,r2,rabin2,jadx,apktool,aapt2,floss,xorsearch,ilspycmd,monodis,oleid,olevba,oledump.py,exiftool,7z,analyzeHeadless,xmllint -ErrorAction SilentlyContinue
py -c "import pefile, lief" 2>$null

핵심 도구:

  • file
  • sha256sum 또는 동등 기능
  • strings
  • ripgrep (rg)
  • python3 또는 py
  • xxd
  • base64
  • yara
  • objdump
  • nm
  • exiftool
  • 7z

중요 전문 도구:

  • Android: jadx CLI, apktool, aapt2, strings, ripgrep (rg), yara, 선택 사항 floss, bundletool, apkanalyzer
  • PE/.NET: strings, yara, floss, xorsearch, radare2 (r2), rabin2, ilspycmd, monodis, pefile, lief, 선택 사항 Ghidra 헤드리스 (analyzeHeadless), capa, upx, sigcheck
  • 오피스/스크립트: oletools (oleid, olevba), oledump.py, unzip, zipinfo, strings, ripgrep (rg), sed, awk, tr, 선택 사항 CyberChef CLI, rtfobj
  • ELF/Mach-O: objdump, readelf, nm, otool, lipo, binwalk, radare2 (r2), rabin2, 선택 사항 Ghidra 헤드리스 (analyzeHeadless)
  • 웹/스크립트/소스: strings, ripgrep (rg), sed, awk, tr, xxd, base64, iconv, xmllint, python3, 선택 사항 node, php, perl, pwsh, CyberChef CLI, beautifier 또는 AST 파서

인터프리터와 런타임은 안전한 텍스트 파싱, AST 추출, 미화, 또는 비활성 데이터에 대한 디코더 재구현에만 사용할 수 있습니다. node, php, perl, pwsh, python, bash 또는 기타 런타임을 사용하여 악성 샘플을 그대로 실행하지 마십시오.

설치 예시 (사용자 승인 후에만):

# Linux
sudo apt-get update
sudo apt-get install -y file binutils unzip p7zip-full yara apktool aapt default-jre mono-utils exiftool binwalk upx-ucl
python3 -m pip install --user flare-floss oletools oledump pefile lief capa
dotnet tool install --global ilspycmd
# macOS
brew update
brew install binutils p7zip yara apktool openjdk python dotnet exiftool binwalk upx
pip3 install --user flare-floss oletools oledump pefile lief capa
dotnet tool install --global ilspycmd
# Windows
winget install --id Python.Python.3.12 --accept-source-agreements --accept-package-agreements
winget install --id OpenJS.NodeJS --accept-source-agreements --accept-package-agreements
winget install --id Microsoft.DotNet.SDK.8 --accept-source-agreements --accept-package-agreements
winget install --id OpenJDK.OpenJDK.17 --accept-source-agreements --accept-package-agreements
winget install --id Microsoft.Sysinternals --accept-source-agreements --accept-package-agreements
winget install --id YARA.YARA --accept-source-agreements --accept-package-agreements
winget install --id OliverBetz.ExifTool --accept-source-agreements --accept-package-agreements
py -m pip install --user flare-floss oletools oledump pefile lief capa
dotnet tool install --global ilspycmd

Ghidra 헤드리스의 경우 공식 릴리스를 다운로드하고 support/analyzeHeadless 또는 support\analyzeHeadless.bat를 PATH에 노출시키십시오.

필수 도구 세트

다음 수준을 사용하여 환경이 완전한 분석에 충분한지 판단하십시오.

필수(Mandatory)

다음은 주요 샘플 유형에 대한 견고한 종단 간(end-to-end) 워크플로우에 필요한 도구 또는 기능입니다.

  • file
  • sha256sum 또는 동등한 해시 도구
  • strings
  • ripgrep (rg)
  • python3 또는 py
  • yara
  • 7z
  • objdump
  • nm
  • exiftool
  • jadx
  • apktool
  • aapt2
  • floss
  • xorsearch
  • radare2 (r2)
  • rabin2
  • Ghidra 헤드리스 (analyzeHeadless)
  • ilspycmd
  • monodis
  • oletools (oleid, olevba)
  • oledump.py
  • Python 모듈 pefile, lief

강력 권장(Strongly Recommended)

모든 경우에 필수는 아니지만, 악성코드 분석가 워크플로우는 정기적으로 이점을 얻습니다.

  • readelf
  • binwalk
  • unzip
  • zipinfo
  • xxd
  • base64
  • sed
  • awk
  • tr
  • xmllint
  • iconv
  • macOS의 otool 및 lipo
  • bundletool
  • apkanalyzer
  • rtfobj
  • CyberChef CLI

선택 사항 또는 상황별(Optional Or Situational)

특정 형식, 패밀리 또는 분석가 선호도에 유용합니다.

  • capa
  • upx
  • sigcheck
  • node
  • php
  • perl
  • pwsh
  • 스크립트가 많은 경우 beautifier 또는 AST 파서

해석 규칙:

  • 필수 도구나 기능이 누락된 경우에도 분석은 계속될 수 있지만, 코드렉스는 환경이 저하되었음을 명시하고 최상의 대체 방안을 사용해야 합니다.
  • 강력 권장 도구가 누락된 경우, 누락된 기능이 특정 단계를 차단하지 않는 한 정상적으로 계속하십시오.
  • 선택 사항 도구가 누락된 경우, 현재 사례를 실질적으로 개선할 때만 언급하십시오.

영구 사례 파일(Case File)

항상 사례 루트에 두 개의 파일을 유지하십시오:

  • AGENTS.md: 작업 메모리
  • REPORT.md: 분석가 대상 최종 보고서, 작업 중 업데이트됨

AGENTS.md

실질적인 작업 전에 AGENTS.md를 생성하거나 읽으십시오. 모든 의미 있는 작업이나 발견 후에 업데이트하십시오.

다음을 보존하는 데 사용하십시오:

  • 현재 샘플 및 현재 상태
  • 도구 가용성 및 대체 방안 결정
  • 확인된 발견 사항 및 출처(provenance)
  • 추출된 스테이지 및 부모-자식 관계
  • 디코더 또는 복호화 노트
  • 패밀리 귀속 상태
  • 차단 요소, 미해결 질문 및 다음 작업

권장 섹션:

  • Current Summary (현재 요약)
  • Sample Inventory (샘플 인벤토리)
  • Environment And Tooling (환경 및 도구)
  • Timeline (타임라인)
  • Confirmed Findings (확인된 발견 사항)
  • Decoders And Algorithms (디코더 및 알고리즘)
  • Family Attribution (패밀리 귀속)
  • Evidence Index (증거 색인)
  • Open Questions (미해결 질문)
  • Next Actions (다음 작업)
  • Final Assessment (최종 평가)

REPORT.md

분석 중에 REPORT.md를 생성하십시오. 작업이 계속되면 동일한 파일을 업데이트하십시오.

REPORT.md는 명확하고 간단하며 참조하기 쉬워야 합니다. AGENTS.md는 작업 메모리 역할을 합니다.

REPORT.md에는 다음이 포함되어야 합니다:

  • 사례 요약
  • 샘플 인벤토리
  • 순서가 있는 실행 또는 손상 체인
  • 각 스테이지별 세부 정보:
    • 파일 이름 또는 레이블
    • MD5
    • SHA1
    • SHA256
    • 파일 유형
    • 출처 또는 상위 스테이지
    • 체인에서의 역할
  • 다음으로 구분된 지표:
    • 드롭 URL
    • 스테이지 URL
    • C2 URL
    • 도메인
    • IP 주소
  • 디코딩, 복호화, 언패킹 또는 스테이징 로직
  • 지속성 및 안티 분석 발견 사항
  • 악성코드 패밀리 평가
  • 신뢰도 및 한계

체인을 완전히 재구성할 수 없는 경우, 중단되는 지점과 이유를 명시하십시오.

증거 보존

항상 사례 디렉토리를 생성하고 요청이 단순히 IOC 추출로 보이더라도 증거를 보존하십시오.

권장 레이아웃:

  • case/AGENTS.md
  • case/REPORT.md
  • case/00-intake/
  • case/01-triage/
  • case/02-strings/
  • case/03-static/
  • case/04-decoding/
  • case/05-config/
  • case/06-extracted/
  • case/07-stages/
  • case/08-yara/
  • case/09-reports/
  • case/10-iocs/
  • case/11-notes/

필요하면 수동으로 생성하십시오:

mkdir -p case/{00-intake,01-triage,02-strings,03-static,04-decoding,05-config,06-extracted,07-stages,08-yara,09-reports,10-iocs,11-notes}

YARA 스캔

사용 가능한 모든 YARA 규칙으로 각 샘플과 추출된 모든 스테이지를 스캔하십시오.

범위:

있는 그대로의 샘플, 메모리 덤프 또는 추출된 페이로드에 대한 YARA 스캔을 수행할 때:

  • 로컬 yara 명령줄 도구를 사용하십시오.
  • 샘플과 함께 제공되거나 yara 패키지 자체와 함께 번들로 제공되는 규칙을 사용하십시오.
  • 분석가가 키워드 기반 사용자 정의 규칙을 제공하는 경우, 이를 먼저 적용하고 번들 규칙이 부차적으로 보충되어야 합니다.
  • 스킬 번들 규칙 저장소를 가정하지 마십시오. YARA 규칙은 로컬에 없거나 타사 경로(인터넷, 회사 NAS 등)에 있으면 안 됩니다.
  • yara 명령줄 도구를 사용할 수 없으면 python3에서 yara-python을 사용해 보십시오.

규칙:

  • 번들 규칙에만 의존하지 마십시오.
  • 사용할 수 없는 규칙을 위해 분석을 차단하지 마십시오.
  • 스캔 결과를 증거 파일(case/08-yara/)에 보존하십시오.
  • 악성코드 패밀리 분류에 자신이 없다면, YARA 일치 항목을 명시적으로 언급하고 가장 가까운 알려진 패밀리 또는 일반 카테고리로 분류하십시오.

분석 흐름

다음은 일반적인 작업 순서입니다. 각 단계를 필요에 맞게 조정하십시오.

접수(Intake)

  1. case/ 디렉토리를 생성하십시오.
  2. 파일 유형, 해시 및 기본 메타데이터를 기록하십시오.
  3. 의심스러운 상태를 즉시 확인하십시오(패커, 알려진 악성 서명 등).

트라이지(Triage)

  1. strings, ripgrep 및 file을 실행하십시오.
  2. 임베디드 URL, IP, 경로, 레지스트리 키, 파일 이름을 추출하십시오.
  3. 가짜 양성(예: 공급업체 문자열, 디지털 서명)을 걸러내십시오.

정적 분석

  1. (리소스, 오버레이, 매니페스트, 임포트 및 익스포트 테이블)
  2. 패커, 크립터 또는 보호 계층을 식별하십시오.
  3. 패킹 해제 또는 복호화가 필요한 경우 기록하고 추출 로직을 재구성하십시오.

심층 분석

  1. 디스어셈블리 및 디컴파일(사용 가능한 경우).
  2. xref를 사용하여 기능 식별 및 디코더를 확인하십시오.
  3. C2, 드롭 및 스테이지 로직을 역추적하십시오.

스테이지 추출

  1. 임베디드 페이로드를 추출하십시오.
  2. 중첩된 분석을 위한 새 스테이지로 하위 사례를 생성하십시오.
  3. 모든 것을 재귀적으로 문서화하고 증거를 보존하십시오.

IOC 및 체인 재구성

  1. 드롭 URL, C2, 도메인 및 IP를 나열하십시오.
  2. 실행 또는 손상 체인을 구축하십시오.
  3. REPORT.md를 업데이트하고 AGENTS.md를 마무리하십시오.

최종 점검 목록

분석 완료 전에 확인할 사항:

  • 파일 유형 및 아키텍처 확인됨
  • MD5, SHA1, SHA256 기록됨
  • 모든 관련 증거가 case/ 아래에 보존됨
  • AGENTS.md에 작업 메모리 포함됨
  • REPORT.md에 실행 체인, IOC, 디코딩 로직 및 한계가 포함됨
  • 디코딩/복호화/언패킹 단계가 재구성되고 문서화됨
  • 패밀리 귀속이 증거로 뒷받침되거나 명시적으로 불확실함으로 표시됨
  • 불확실성과 가짜 양성 가능성이 명시적으로 언급됨
  • YARA 스캔이 완료되고 case/08-yara/에 저장됨
  • 남아 있는 차단 요소가 설명됨

관련 스킬