Skip to content
Back to skills

Malware Triage

ASecurity

Malware triage workflow — sandbox output analysis (CAPE/Hybrid-Analysis/ANY.RUN/Joe Sandbox), YARA rule scaffolding at pattern level, IOC extraction, and TTP mapping to MITRE ATT&CK. Sandbox-only discipline; do not detonate in production or without an isolated runtime.

  • 4 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added May 28, 2026
securityrustgoshellgitapidatabaseperformance

Works with

  • cli
  • api

Security analysis

A100/100

Scanned May 28, 2026

npx -y skills add roodlicht/accans-sec-skills --skill malware-triage --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Malware Triage?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Malware Triage
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/roodlicht-malware-triage/badge)](https://www.skillsdirectory.com/skills/roodlicht-malware-triage)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: malware-triage
description: Malware triage workflow — sandbox output analysis (CAPE/Hybrid-Analysis/ANY.RUN/Joe Sandbox), YARA rule scaffolding at pattern level, IOC extraction, and TTP mapping to MITRE ATT&CK. Sandbox-only discipline; do not detonate in production or without an isolated runtime.
---

# Malware Triage

> **Sandbox-only discipline**: analysing a sample means running it in an isolated environment. Detonating in production or on a workstation with network egress creates an incident instead of solving one. Treat all samples as worm-class — that discipline costs less than a production outbreak. Detailed reverse engineering (debugger-attached, IDA Pro / Ghidra interactive) is out of scope here — that is a further specialization. The skill covers sandbox-driven triage and YARA scaffolding at signal-pattern level.

## When to use

A suspicious file or process lands on your SOC desk. Before you can say "clean" or "incident", you need a structured triage. This skill provides the structure.

Triggers on:

- A question like "what does this sample do", "write a YARA rule for this family", "ATT&CK mapping from this sandbox output", "is this the same malware family as last month".
- A handoff from `ioc-hunter` (sample known, IOCs needed), `log-triage` (suspect-execution event in EDR), `forensics-assist` (memory-extracted binary), `ir-runbook` (sample is part of an incident).
- Bug-bounty or bug disclosure where a sample is provided.
- A periodic review of EDR quarantine.

### When NOT (handoff)

- Deep reverse engineering with disassembler/debugger → out of scope. Requires specialized reverse work.
- Detection-rule building on IOCs or TTPs → `detection-engineer` (Sigma/SPL/KQL).
- IOC feed curation and sharing → `ioc-hunter`.
- Forensic evidence-grade analysis for court → `forensics-assist` plus a specialized forensics team.
- Active response after a confirmed incident → `ir-runbook`.
- Production detonation → don't. Lab/sandbox only.
- Attacker-tooling replication or tuning → out of scope.

## Approach

Six phases. Phase 1 (intake discipline) and phase 4 (YARA scaffolding) are where triage work becomes durable.

### 1. Intake and sandbox choice

- **Sample acquisition**: file comes from EDR quarantine, an email attachment, a USB find, or a public repo. Ensure secure transfer to the lab (encrypted, password-protected ZIP outside production paths).
- **Hash-first check**: compute SHA-256, look up against VirusTotal / Hybrid-Analysis / abuse.ch MalwareBazaar / internal history. Known? Then triage can be sped up by reading existing analysis.
- **Sandbox choice**:
  - **CAPE Sandbox** (open-source, on-prem) — Cuckoo fork with config extraction. Default for on-prem-only policy.
  - **ANY.RUN** (commercial, cloud) — interactive sandbox with manual progression. Good for user-interaction-required malware.
  - **Joe Sandbox** (commercial) — deep, multi-OS.
  - **Hybrid-Analysis** (Falcon Sandbox, free for research) — solid free tier.
  - **VirusTotal** — not just hash lookup; runs a sandbox if a sample is uploaded. Beware: upload is public; do not use for confidential samples.
- **Live versus static first pass**: before you run dynamic, gather static info — file type, headers, embedded strings, packer fingerprints (`pestudio`, `die`, `floss` for obfuscated strings, `binwalk` for archives).

Discipline: confidential samples (potential PII, potential IP leak) go to an on-prem sandbox or a paid private tier, not public VirusTotal.

### 2. Static-analysis pass

Before dynamic execution:

- **File type and metadata**: PE/ELF/Mach-O/script (PowerShell/JS/macro), compiler info, signing status.
- **String extraction** (`strings`, `floss` for stack-encoded). Hosts, URLs, file paths, mutex names, registry keys.
- **Sections / imports / exports**: unusual imports (CryptAcquireContext + InternetOpen + WriteFile is a frequent ransomware pattern), `.text` section size vs entropy (high entropy = packed).
- **YARA first pass**: known rules from community repositories (`Yara-Rules`, `Neo23x0/signature-base`, `Elastic/protections-artifacts`) against the sample. A known-family match speeds up the rest.
- **Code-signing check**: signed but unknown publisher is a red flag (stolen or dropped cert). Verify the cert chain.

### 3. Dynamic analysis via sandbox

Sandbox runs in an isolated VM with instrumented process events.

- **Process-tree observation**: parent → child → grandchild. Classic suspect: `winword.exe → cmd.exe → powershell.exe → certutil.exe`.
- **Network egress**: DNS queries (resolved and unresolved), HTTP requests, TLS fingerprints (JA3/JA4), C2 hosts. Match against `ioc-hunter` feeds.
- **Filesystem changes**: writes to Startup folders, schedule folders, AppData paths.
- **Registry changes**: Run keys, services, COM hijacks, BITS jobs.
- **API calls**: WriteProcessMemory + CreateRemoteThread (process injection T1055), CryptEncrypt burst (ransomware), VirtualProtect (shellcode runtime).
- **Persistence-mechanism detection**: scheduled-task creation, service installation, registry Run keys.
- **Anti-VM / anti-sandbox**: CPUID checks, mouse-movement checks, sleep-skip detection. The sandbox output usually shows whether detection happened.

For user-interaction malware (banking trojans, info-stealers with UI trigger): manual interaction in an interactive sandbox.

### 4. YARA-rule scaffolding at pattern level

YARA is the standard for malware classification. We write rules at pattern level, not for one specific binary.

```yara
rule SUSPECT_MyFamily_Loader {
  meta:
    author = "<analyst>"
    date = "YYYY-MM-DD"
    description = "Detects MyFamily loader pattern with embedded config string"
    reference = "<sandbox-report-link>"
    hash_seen = "<sha256>"
    tlp = "AMBER"

  strings:
    $config_marker  = "MYCFG_v2:" ascii wide
    $api_resolve_a  = "GetProcAddress" ascii
    $api_resolve_b  = "LoadLibraryA" ascii
    $unique_string  = "MyFamilyLoader/" ascii nocase
    $opcode_pattern = { 8B ?? ?? ?? 89 ?? E8 ?? ?? ?? ?? }

  condition:
    uint16(0) == 0x5A4D and             // PE header
    filesize < 5MB and
    (
      $config_marker or
      ($unique_string and 2 of ($api_resolve_*) and $opcode_pattern)
    )
}
```

**Discipline**:

- `meta.author`, `meta.date`, `meta.tlp`: tracking and sharing policy.
- `meta.hash_seen`: what the rule was conceived against; helps later reviewers.
- **Specific enough to distinguish at family level, not so specific that a second sample from the same family is missed.**
- **Performance-aware**: wildcards in opcodes and heavy regex against all files slow scanners down. Anchor with PE magic, file-size limits, context.
- **Test for false positives**: scan the rule against 1000+ benign binaries before production deployment. `yara` CLI or `Threatray`/`Cylance` test corpora.
- **Sharing**: TLP classification explicit. Open-share community rules to the Yara-Rules repo, sector-share via FI-ISAC NL or MISP events.

### 5. TTP extraction and ATT&CK mapping

Sandboxes give raw events; mapping them to ATT&CK techniques makes them reusable.

Per observation: technique T-ID. Common mappings:

- Embedded macro that downloads PowerShell → T1566.001 (Spearphishing Attachment) + T1059.001 (PowerShell).
- Process hollowing → T1055.012.
- LSASS access → T1003.001.
- Scheduled-task creation → T1053.005.
- Registry Run key → T1547.001.
- Network C2 over HTTPS → T1071.001 + T1573.002.
- DNS-tunneling C2 → T1071.004.
- Tor dropper / I2P → T1090.003 (multi-hop proxy).

**ATT&CK coverage output**: a table with technique T-ID, observation, evidence link (sandbox-report section). Provides input for `detection-engineer` (which detection rules are touched by this family) and `purple-ops` (gap analysis: which we miss).

### 6. Output, sharing, and verification-loop

- **Family classification** (if recognized): name + version (where known), source attribution (which vendor classifies it as such).
- **IOCs extracted**: hashes, IPs/domains/URLs, mutex names, file paths, registry keys. Forward to `ioc-hunter` with a confidence score.
- **YARA rule(s)**: as new or as refinement of existing.
- **TTP mapping**: ATT&CK table.
- **Recommendations** for the blue-team stack: which rules cover this, which are missing.

**Sharing**: keep confidential context internal; for community samples share to MISP / abuse.ch MalwareBazaar / VirusTotal / FI-ISAC.

**Verification-loop**: Layer 1 scope (all observations from the sandbox report carried over, sandbox ran fully?, no anti-sandbox detection bypass skipped?). Layer 2: ATT&CK T-IDs correct, family attribution only when there is a vendor source (no invented attribution), YARA syntax against the current YARA version (4.x), sandbox-feature claims (CAPE config extraction, ANY.RUN interactive) current.

## Output

```
Malware triage report — <sample-id / hash>
SHA-256:        <hash>
File type:      <PE/ELF/Mach-O/script>
Sandbox:        <CAPE/ANY.RUN/Joe/etc> | Run-id: <ref>
First seen:     <date/source>
TLP:            <classification>

Static analysis:
  Compiler:           <ref>
  Packed/obfuscated:  <yes/no, method>
  Strings of interest: <briefly noted, redacted>
  Code-signing:       <signed-by-X / unsigned / suspicious>
  YARA pre-match:     <existing family rules that match>

Dynamic observations:
  Process tree:       <parent → child → ...>
  Filesystem writes:  <persistence paths>
  Registry changes:   <run keys / services>
  Network egress:     <C2 hosts, DNS queries, JA3/JA4>
  API pattern:        <process injection / encryption burst / etc>
  Persistence:        <mechanism>
  Anti-sandbox:       <detected / not>

Family classification:
  Name:               <known family or "unknown variant">
  Variant:            <if derived>
  Attribution:        <vendor source if available>

IOCs (handoff to ioc-hunter):
  Hashes:    <list>
  IPs:       <list>
  Domains:   <list>
  URLs:      <list>
  Mutex:     <list>
  TLP:       <classification>

YARA rule(s):
  <full rule block>

TTP mapping (ATT&CK):
  Tactic | Technique-ID | Observation | Sandbox-evidence-ref

Recommendations:
  Detection (handoff to detection-engineer):  <which rules to write>
  Hunt (handoff to ioc-hunter / threat-hunt): <retro window>
  Cleanup (handoff to ir-runbook):            <if live infection>

Verification-loop: ...
```

## References

- **MITRE ATT&CK** — [https://attack.mitre.org/](https://attack.mitre.org/). Technique mapping.
- **CAPE Sandbox** — [https://github.com/kevoreilly/CAPEv2](https://github.com/kevoreilly/CAPEv2). Open-source dynamic analysis.
- **abuse.ch MalwareBazaar** — [https://bazaar.abuse.ch/](https://bazaar.abuse.ch/). Sample repository, signature database.
- **YARA** — [https://virustotal.github.io/yara/](https://virustotal.github.io/yara/). Pattern-matching framework.
- **Yara-Rules / signature-base (Neo23x0)** — [https://github.com/Neo23x0/signature-base](https://github.com/Neo23x0/signature-base). Community rules.
- **MalAPI.io** — [https://malapi.io/](https://malapi.io/). API-to-technique mapping for static analysis.
- **VirusTotal** — [https://www.virustotal.com/](https://www.virustotal.com/). Public hash lookup and sandbox; mind upload policy for confidential samples.
- **Hybrid-Analysis** — [https://www.hybrid-analysis.com/](https://www.hybrid-analysis.com/). Falcon Sandbox, free tier for research.
- **MITRE TRAM** — [https://github.com/center-for-threat-informed-defense/tram](https://github.com/center-for-threat-informed-defense/tram). NLP tool for TTP extraction from reports.
- **Florian Roth — Yara Style Guide** — [https://github.com/Neo23x0/YARA-Style-Guide](https://github.com/Neo23x0/YARA-Style-Guide). Practical YARA best practices.

## Categories

- blue

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.