Files

4.0 KiB

name, description, domain, subdomain, tags, version, author, license, mitre_attack, d3fend, references
name description domain subdomain tags version author license mitre_attack d3fend references
triaging-an-unknown-sample Performs fast first-pass triage of an unknown file to decide depth of analysis: file type identification, hashing, reputation lookup, packing/entropy check, and string review. Activates for requests to triage, classify, or do initial assessment of an unknown or suspicious file. cybersecurity lab-foundations
malware
triage
file-identification
entropy
strings
reputation
1.0.0 analyst-ai-pack Apache-2.0
T1027
T1140
D3-FA
D3-FCR
file/libmagic — https://man7.org/linux/man-pages/man1/file.1.html
VirusTotal API documentation — https://docs.virustotal.com/reference/overview

Triaging an Unknown Sample

When to Use

  • A suspicious file has arrived and you need to quickly decide whether it warrants deep static/dynamic analysis or can be dismissed.
  • You want a structured first-pass record (type, hashes, packing, notable strings) before committing analyst time.
  • You are batch-triaging many files and need to rank them by suspicion.

Do not use triage results as a final verdict. A clean string review or unknown reputation does not mean benign; it means proceed to deeper analysis.

Prerequisites

  • file (libmagic) for type identification, or the bundled magic-based detection.
  • Optional VirusTotal API key for reputation (hash lookups only — never upload someone else's data without authorization).
  • The sample in a neutralized, non-executable form inside the lab.

Safety & Handling

  • Triage is static: read bytes, never execute. Keep the sample with a neutralized extension.
  • Submit only the hash to reputation services unless you have authorization to upload the file itself; uploads can expose sensitive or attributable data.

Workflow

Step 1: Identify the true file type

Do not trust the extension. Identify by magic bytes:

python scripts/analyst.py triage sample.bin
# reports: detected type, magic, hashes, entropy, suspicious strings

A .pdf that is really a PE, or a .jpg that is a script, is itself a finding.

Step 2: Hash and check reputation

Compute the SHA-256 and look it up (hash-only) to see if it is known:

python scripts/analyst.py reputation --sha256 <sha256> --vt-key $VT_API_KEY

Known-bad with many detections → escalate. Unknown → continue triage; absence of detections is not exoneration.

Step 3: Estimate packing via entropy

High, uniform entropy across the whole file or a code section suggests packing or encryption:

entropy ~7.9 / 8.0 over most of the file  -> likely packed/encrypted
mixed entropy with readable strings       -> likely unpacked

Step 4: Skim strings for quick signal

Look for URLs, IPs, registry paths, suspicious API names, and embedded PE headers (MZ). The script extracts and categorizes printable strings.

Step 5: Decide and record

Classify as: dismiss, deep static, or detonate. Emit a triage record for the case file.

Validation

  • The detected type matches the file's structure (e.g. PE confirmed by MZ/PE\0\0).
  • Entropy reading is consistent with the strings observed (packed files yield few readable strings).
  • The triage record captures type, hashes, entropy, reputation, and the escalation decision.

Pitfalls

  • Equating "0 detections on VirusTotal" with benign — fresh or targeted malware is often unknown.
  • Treating high entropy alone as proof of malice; installers and compressed media are also high-entropy. Combine signals.
  • Uploading samples to third parties without authorization, leaking sensitive data.
  • Stopping at triage for a file that is clearly suspicious but "not yet detected."

References

  • See references/api-reference.md for the triage tool and scoring logic.
  • libmagic and VirusTotal API documentation (linked in frontmatter).