plugins/forensics/skills/forensics-ioc/SKILL.md
Extract and enrich indicators of compromise
npx skillsauth add jmagly/aiwg forensics-iocInstall 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.
Extract indicators of compromise (IOCs) from forensic findings, enrich them with threat intelligence lookups, and map them to STIX 2.1 observables. Produces a structured IOC register suitable for detection rule generation, MISP import, or threat intelligence sharing.
/forensics-ioc <findings-path> [options]
| Argument | Required | Description |
|----------|----------|-------------|
| findings-path | Yes | Path to findings directory or specific finding file |
| --enrich | No | Perform threat intelligence enrichment lookups |
| --stix | No | Generate STIX 2.1 bundle alongside IOC register |
| --output | No | Output path (default: .aiwg/forensics/ioc/ioc-register.md) |
| --format | No | Output format: markdown (default), json, stix, misp |
| --types | No | IOC types to extract: ip, domain, hash, url, email, all (default: all) |
| --confidence | No | Minimum confidence threshold for inclusion: low, medium, high (default: low) |
| --no-private | No | Exclude RFC-1918 and loopback addresses |
When invoked, this command:
Scan Findings for Observables
IOC Extraction by Type
| Type | Sources | Pattern | |------|---------|---------| | IPv4/IPv6 | Network analysis, auth logs, connections | Address notation | | Domain/FQDN | DNS queries, connection targets, configs | Domain pattern | | File hash (MD5/SHA1/SHA256) | Acquisition checksums, malware artifacts | Hex string | | URL | Web logs, process command lines, configs | HTTP/HTTPS URL | | Email address | Auth logs, user accounts | Email pattern | | File path | Persistence findings, process analysis | Suspicious paths | | Process name | Triage process list, persistence | Masquerading names | | User agent | Web logs | Browser/tool strings |
Deduplication and Normalization
--no-private filtering if specifiedConfidence Scoring
Threat Intelligence Enrichment (when --enrich specified)
STIX 2.1 Mapping (when --stix specified)
Detection Rule Suggestions
IOC Register Output
/forensics-ioc .aiwg/forensics/findings/
/forensics-ioc .aiwg/forensics/findings/ --enrich
/forensics-ioc .aiwg/forensics/ --stix --format stix
/forensics-ioc .aiwg/forensics/ --confidence high --no-private
/forensics-ioc .aiwg/forensics/ --enrich --format misp
Artifacts are saved to .aiwg/forensics/ioc/:
.aiwg/forensics/ioc/
├── ioc-register.md # Human-readable IOC register
├── ioc-register.json # Machine-readable IOC list
├── stix-bundle.json # STIX 2.1 bundle (if --stix)
├── detection-rules/
│ ├── network-ioc.sigma # Sigma rule stubs
│ └── file-ioc.yara # YARA rule stubs
└── enrichment-cache.json # TI lookup results cache
IOC Register: INV-2026-02-27-web01
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Extraction complete: 12 IOCs (4 enriched)
--- Network IOCs ---
| Type | Value | Confidence | Context | TI Result |
|---------|----------------------|------------|--------------------------------|------------------------|
| IPv4 | 185.220.101.42 | HIGH | SSH brute force source; C2 | Known Tor exit node |
| Domain | update-check.net | HIGH | DNS query from /tmp/.update | Malware C2 (VirusTotal)|
| IPv4 | 10.0.0.15 | MEDIUM | Lateral movement destination | Internal host |
--- File IOCs ---
| Type | Value | Confidence | Context |
|----------|-------------------------|------------|-------------------------------|
| SHA256 | a1b2c3d4e5f6... | HIGH | /tmp/.update - C2 implant |
| Path | /tmp/.update | HIGH | Malicious cron-executed binary|
| Path | /dev/shm/.x | MEDIUM | Hidden file in tmpfs |
--- Account IOCs ---
| Type | Value | Confidence | Context |
|------|---------|------------|------------------------------------------|
| User | deploy | HIGH | Compromised account (brute forced) |
Total: 7 network, 3 file, 2 account IOCs
STIX bundle: .aiwg/forensics/ioc/stix-bundle.json
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`.