agentic/code/frameworks/forensics-complete/skills/forensics-triage/SKILL.md
Quick triage investigation following RFC 3227 volatility order
npx skillsauth add jmagly/aiwg forensics-triageInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Perform rapid triage of a potentially compromised system by capturing volatile data in order of volatility per RFC 3227. Identifies active threats, running malicious processes, suspicious network connections, and immediate red flags within minutes of invocation.
/forensics-triage <target> [options]
| Argument | Required | Description |
|----------|----------|-------------|
| target | Yes | SSH connection string (ssh://user@host:port) |
| --output | No | Output directory (default: .aiwg/forensics/findings/<hostname>-<date>/) |
| --scope | No | Triage scope: network, process, filesystem, or all (default: all) |
| --fast | No | Skip slower checks; capture critical volatile data only |
| --no-hash | No | Skip file hashing for speed (not recommended for evidence) |
When invoked, this command:
Establish Baseline Connection
Volatile Data Capture (RFC 3227 Order)
/tmp, /dev/shm)Red Flag Detection
/proc/*/exe pointing to deleted files)Network Snapshot
Process Inventory
/tmp, /dev/shm, hidden dirs)Quick Assessment and Scoring
Save Triage Artifacts
triage-summary.md with findings and threat scorevolatile//forensics-triage ssh://[email protected]
/forensics-triage ssh://[email protected] --scope network
/forensics-triage ssh://[email protected] --fast
/forensics-triage ssh://admin@host --output .aiwg/forensics/incident-2026-02-27/
Artifacts are saved to .aiwg/forensics/findings/<hostname>-<date>/:
.aiwg/forensics/findings/web01-2026-02-27/
├── triage-summary.md # Threat assessment and findings
├── volatile/
│ ├── process-list.txt # Running processes at capture time
│ ├── network-connections.txt
│ ├── arp-cache.txt
│ ├── login-sessions.txt
│ ├── open-files.txt
│ └── memory-maps.txt
├── chain-of-custody.yaml # Evidence integrity log
└── checksums.sha256
Triaging Target: 192.168.1.50
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Triage started: 2026-02-27T14:32:01Z
Clock drift: +0.3s
Step 1: Capturing volatile data (RFC 3227 order)
Process list: 187 processes captured
Network connections: 42 connections captured
ARP cache: 8 entries captured
Login sessions: 3 active sessions
Open files: 1,847 handles captured
Step 2: Red flag detection
[CRITICAL] Process 'kworker' running from /tmp/kworker (deleted binary)
[HIGH] Outbound connection to 185.220.101.42:4444 (known C2 range)
[HIGH] Base64 in process args: PID 3847 (/bin/bash -c 'echo <b64>...')
[MEDIUM] Unusual SUID binary: /usr/local/bin/.hidden (modified 2h ago)
[MEDIUM] Cron entry added 4h ago: * * * * * /tmp/.update
Step 3: Network snapshot
Established: 42 connections
Suspicious outbound: 2 connections to non-RFC-1918
DNS anomaly: None detected
Step 4: Process assessment
Suspicious processes: 3
Crypto mining indicators: None
Masquerading processes: 1 ('kworker' from /tmp)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Threat Score: 87/100 (CRITICAL)
IMMEDIATE ACTION REQUIRED
Active compromise indicators detected.
Next Steps:
/forensics-acquire ssh://[email protected] --logs --memory
/forensics-investigate ssh://[email protected] --scope full
Profiles select a pre-configured subset of checks tuned for a specific investigation scenario. Pass a profile name via --profile <name>. Profiles can be combined with --scope for further narrowing.
/forensics-triage ssh://admin@host --profile quick-triage
/forensics-triage ssh://admin@host --profile targeted-ssh
/forensics-triage ssh://admin@host --profile targeted-container
Time budget: ~5 minutes. Use when you need immediate situational awareness before a fuller investigation, or when the triage window is constrained (active incident, system may be shut down soon).
Captures:
ss -tunap, ARP cache, routing tableps auxwwef, processes from /tmp//dev/shm//var/tmpRed flag checks included:
Skipped checks: SUID binary inventory, LD_PRELOAD scan, cron modifications, failed login history
Output: Condensed triage-summary.md with threat score and top-priority findings. No volatile/ subdirectory — all data written to a single capture file.
When to use: First 5 minutes of an active incident; pre-escalation snapshot before calling the incident commander; when --fast alone is insufficient but a full triage is not yet authorized.
Time budget: ~15 minutes. Use when the suspected intrusion vector is SSH — brute force, credential stuffing, stolen key, or unauthorized key addition.
Captures (in addition to standard volatile capture):
auth.log, secure, journalctl -u sshdwho, w, last, lastb~/.ssh/authorized_keys)/etc/ssh/sshd_config) for unauthorized changesRed flag checks included: All standard red flags plus:
Output: Standard artifact structure plus ssh-analysis.md containing the full auth correlation report and a timeline of SSH activity sorted by timestamp.
When to use: Alert triggered by SSH brute-force detection; user reports unauthorized access; unusual login from unexpected geography or time; post-incident review of a suspected credential compromise.
Time budget: ~10 minutes. Use when the target is a Docker host, Kubernetes node, or containerized workload.
Captures (in addition to standard volatile capture):
docker ps -a, docker stats, docker inspect for running containerskubectl get pods --all-namespaces, kubectl describe poddocker inspect output filtered for Privileged: true or host namespace mounts/, /etc, /var/run/docker.sock)docker images --digests)Red flag checks included: All standard red flags plus:
--pid=host, --network=host)/var/run/docker.sock in container mounts) — allows full host escapehostPath volumes pointing to sensitive host directoriesOutput: Standard artifact structure plus container-analysis.md with container inventory, privilege audit, and escape-path assessment.
When to use: Alert from container runtime security tooling (Falco, Sysdig); unexpected privileged container detected; pod behavior anomaly in K8s cluster; post-incident review of a containerized workload compromise.
data-ai
Report which research-corpus radar sidecars are overdue for refresh. Computes staleness (days since last refresh vs the cadence window) for every radar, sorted most-overdue-first. Runs via `aiwg corpus radar-status`.
data-ai
Aggregate research-corpus radar sidecars into a corpus or per-cluster freshness report — totals, overdue count, per-cluster / per-GRADE / per-trajectory breakdowns, an overdue table, and per-radar rationale snippets. Runs via `aiwg corpus radar-report`.
testing
Scaffold radar/freshness sidecars for research-corpus REFs. Pulls title/authors from the citation sidecar and GRADE from the analysis doc, defaults the refresh cadence from GRADE and the cluster from a corpus-local map, and stamps documentation/radar/REF-XXX-radar.md. Runs via `aiwg corpus radar-init`.
data-ai
Compute an entity's publication trajectory — per-year paper counts, topic drift, hot-streak detection (≥3 consecutive A-grade years), and career phase. Runs via `aiwg corpus profile-temporal`.