/forensics-ioc
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.
Usage
/forensics-ioc <findings-path> [options]
Arguments
| 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 |
Behavior
When invoked, this command:
Scan Findings for Observables
- Read all finding documents in the specified path
- Parse timeline artifacts, triage summaries, and analysis outputs
- Extract raw observable strings matching IOC patterns
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
- Remove duplicate IOCs of the same type and value
- Normalize IP addresses (strip ports, consolidate subnets)
- Lowercase domain names
- Uppercase file hashes
- Apply
--no-private filtering if specified
Confidence Scoring
- Score each IOC based on context and repetition
- HIGH: IOC observed in multiple independent sources or directly linked to attack
- MEDIUM: IOC appears in findings with indirect correlation
- LOW: IOC extracted from context; may require validation
- Mark false-positive candidates (CDN IPs, common system paths)
Threat Intelligence Enrichment (when --enrich specified)
- Query VirusTotal, AbuseIPDB, or configured TI feeds for IP/domain/hash IOCs
- Record reputation score, malware family, and associated threat actor
- Note prior sightings and first/last seen dates
- Attach TI source attribution
STIX 2.1 Mapping (when --stix specified)
- Map each IOC to appropriate STIX Observable object type
- Create STIX Indicator objects with detection patterns
- Bundle into STIX 2.1 JSON bundle
- Link observables to Threat Actor and Malware objects where applicable
Detection Rule Suggestions
- Generate Sigma rule stubs for network IOCs
- Generate firewall rule suggestions for IP/CIDR blocks
- Generate YARA rule stubs for file hashes
- Note which IOCs are suitable for automated blocking vs. monitoring
IOC Register Output
- Write structured IOC register with all extracted indicators
- Include context, confidence, enrichment data, and MITRE mapping
- Export STIX bundle if requested
- Update investigation state with IOC count
Examples
Example 1: Extract IOCs from findings directory
/forensics-ioc .aiwg/forensics/findings/
Example 2: Extract and enrich with threat intel
/forensics-ioc .aiwg/forensics/findings/ --enrich
Example 3: STIX 2.1 output
/forensics-ioc .aiwg/forensics/ --stix --format stix
Example 4: High confidence only, exclude private IPs
/forensics-ioc .aiwg/forensics/ --confidence high --no-private
Example 5: MISP import format
/forensics-ioc .aiwg/forensics/ --enrich --format misp
Output
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
Sample IOC Register
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
References
- @$AIWG_ROOT/agentic/code/frameworks/forensics-complete/agents/ioc-analyst.md - IOC Analyst
- @$AIWG_ROOT/agentic/code/frameworks/forensics-complete/templates/ioc-register.md - Register template
- @$AIWG_ROOT/agentic/code/frameworks/forensics-complete/commands/forensics-report.md - Include IOCs in report
- @$AIWG_ROOT/agentic/code/frameworks/forensics-complete/commands/forensics-timeline.md - Timeline correlation
1---2name: forensics-ioc3description: Extract and enrich indicators of compromise4---56# /forensics-ioc78Extract 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.910## Usage1112`/forensics-ioc <findings-path> [options]`1314## Arguments1516| Argument | Required | Description |17|----------|----------|-------------|18| findings-path | Yes | Path to findings directory or specific finding file |19| --enrich | No | Perform threat intelligence enrichment lookups |20| --stix | No | Generate STIX 2.1 bundle alongside IOC register |21| --output | No | Output path (default: `.aiwg/forensics/ioc/ioc-register.md`) |22| --format | No | Output format: `markdown` (default), `json`, `stix`, `misp` |23| --types | No | IOC types to extract: `ip`, `domain`, `hash`, `url`, `email`, `all` (default: `all`) |24| --confidence | No | Minimum confidence threshold for inclusion: `low`, `medium`, `high` (default: `low`) |25| --no-private | No | Exclude RFC-1918 and loopback addresses |2627## Behavior2829When invoked, this command:30311. **Scan Findings for Observables**32 - Read all finding documents in the specified path33 - Parse timeline artifacts, triage summaries, and analysis outputs34 - Extract raw observable strings matching IOC patterns35362. **IOC Extraction by Type**3738 | Type | Sources | Pattern |39 |------|---------|---------|40 | IPv4/IPv6 | Network analysis, auth logs, connections | Address notation |41 | Domain/FQDN | DNS queries, connection targets, configs | Domain pattern |42 | File hash (MD5/SHA1/SHA256) | Acquisition checksums, malware artifacts | Hex string |43 | URL | Web logs, process command lines, configs | HTTP/HTTPS URL |44 | Email address | Auth logs, user accounts | Email pattern |45 | File path | Persistence findings, process analysis | Suspicious paths |46 | Process name | Triage process list, persistence | Masquerading names |47 | User agent | Web logs | Browser/tool strings |48493. **Deduplication and Normalization**50 - Remove duplicate IOCs of the same type and value51 - Normalize IP addresses (strip ports, consolidate subnets)52 - Lowercase domain names53 - Uppercase file hashes54 - Apply `--no-private` filtering if specified55564. **Confidence Scoring**57 - Score each IOC based on context and repetition58 - HIGH: IOC observed in multiple independent sources or directly linked to attack59 - MEDIUM: IOC appears in findings with indirect correlation60 - LOW: IOC extracted from context; may require validation61 - Mark false-positive candidates (CDN IPs, common system paths)62635. **Threat Intelligence Enrichment** (when `--enrich` specified)64 - Query VirusTotal, AbuseIPDB, or configured TI feeds for IP/domain/hash IOCs65 - Record reputation score, malware family, and associated threat actor66 - Note prior sightings and first/last seen dates67 - Attach TI source attribution68696. **STIX 2.1 Mapping** (when `--stix` specified)70 - Map each IOC to appropriate STIX Observable object type71 - Create STIX Indicator objects with detection patterns72 - Bundle into STIX 2.1 JSON bundle73 - Link observables to Threat Actor and Malware objects where applicable74757. **Detection Rule Suggestions**76 - Generate Sigma rule stubs for network IOCs77 - Generate firewall rule suggestions for IP/CIDR blocks78 - Generate YARA rule stubs for file hashes79 - Note which IOCs are suitable for automated blocking vs. monitoring80818. **IOC Register Output**82 - Write structured IOC register with all extracted indicators83 - Include context, confidence, enrichment data, and MITRE mapping84 - Export STIX bundle if requested85 - Update investigation state with IOC count8687## Examples8889### Example 1: Extract IOCs from findings directory90```bash91/forensics-ioc .aiwg/forensics/findings/92```9394### Example 2: Extract and enrich with threat intel95```bash96/forensics-ioc .aiwg/forensics/findings/ --enrich97```9899### Example 3: STIX 2.1 output100```bash101/forensics-ioc .aiwg/forensics/ --stix --format stix102```103104### Example 4: High confidence only, exclude private IPs105```bash106/forensics-ioc .aiwg/forensics/ --confidence high --no-private107```108109### Example 5: MISP import format110```bash111/forensics-ioc .aiwg/forensics/ --enrich --format misp112```113114## Output115116Artifacts are saved to `.aiwg/forensics/ioc/`:117118```119.aiwg/forensics/ioc/120├── ioc-register.md # Human-readable IOC register121├── ioc-register.json # Machine-readable IOC list122├── stix-bundle.json # STIX 2.1 bundle (if --stix)123├── detection-rules/124│ ├── network-ioc.sigma # Sigma rule stubs125│ └── file-ioc.yara # YARA rule stubs126└── enrichment-cache.json # TI lookup results cache127```128129### Sample IOC Register130131```132IOC Register: INV-2026-02-27-web01133━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━134135Extraction complete: 12 IOCs (4 enriched)136137--- Network IOCs ---138139| Type | Value | Confidence | Context | TI Result |140|---------|----------------------|------------|--------------------------------|------------------------|141| IPv4 | 185.220.101.42 | HIGH | SSH brute force source; C2 | Known Tor exit node |142| Domain | update-check.net | HIGH | DNS query from /tmp/.update | Malware C2 (VirusTotal)|143| IPv4 | 10.0.0.15 | MEDIUM | Lateral movement destination | Internal host |144145--- File IOCs ---146147| Type | Value | Confidence | Context |148|----------|-------------------------|------------|-------------------------------|149| SHA256 | a1b2c3d4e5f6... | HIGH | /tmp/.update - C2 implant |150| Path | /tmp/.update | HIGH | Malicious cron-executed binary|151| Path | /dev/shm/.x | MEDIUM | Hidden file in tmpfs |152153--- Account IOCs ---154155| Type | Value | Confidence | Context |156|------|---------|------------|------------------------------------------|157| User | deploy | HIGH | Compromised account (brute forced) |158159Total: 7 network, 3 file, 2 account IOCs160STIX bundle: .aiwg/forensics/ioc/stix-bundle.json161```162163## References164165- @$AIWG_ROOT/agentic/code/frameworks/forensics-complete/agents/ioc-analyst.md - IOC Analyst166- @$AIWG_ROOT/agentic/code/frameworks/forensics-complete/templates/ioc-register.md - Register template167- @$AIWG_ROOT/agentic/code/frameworks/forensics-complete/commands/forensics-report.md - Include IOCs in report168- @$AIWG_ROOT/agentic/code/frameworks/forensics-complete/commands/forensics-timeline.md - Timeline correlation