Install any skill in seconds. Free to start, no credit card required.
Get Started Free →IOC extraction, threat intelligence correlation, MITRE ATT&CK mapping, hunt hypothesis generation, and detection rule creation
.claude/skills/masriyan-threat-hunting-ioc-analysis/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-08 | ✗→✓ | ▲ Improved | 231% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 135% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 183% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 233% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 193% | 0% |
Enable Claude to assist threat hunters with proactive threat detection, IOC extraction and normalization, MITRE ATT&CK mapping, hunt hypothesis generation, and converting threat intelligence into actionable detection rules across all major SIEM platforms.
This skill activates when the user asks about:
bashpip install requests pyyaml stix2 taxii2-client
Optional platforms:
When the user provides a threat report, article, email, or log snippet:
Claude performs these extraction steps:
| IOC Type | Pattern Examples | |----------|----------------| | IPv4 | 192.0.2.1, defanged: 192[.]0[.]2[.]1 | | IPv6 | 2001:db8::1 | | Domain | evil.example.com, evil[.]example[.]com | | URL | hxxp://evil.com/path, https://malicious[.]io/c2 | | Email | attacker@evil.com, phish[at]evil.com | | MD5 | 32 hex chars | | SHA1 | 40 hex chars | | SHA256 | 64 hex chars | | CVE | CVE-2024-XXXXX | | ATT&CK ID | T1059.001, TA0001 | | Registry Key | HKCU\Software\... | | File path | C:\Windows\Temp\..., /tmp/... | | Mutex | Named mutex patterns |
hxxp:// → http://[.] → .[at] → @[:] → :bashpython scripts/ioc_extractor.py --input threat_report.txt --output iocs.json python scripts/ioc_extractor.py --input report.pdf --format stix --output iocs.stix.json python scripts/ioc_extractor.py --input email.eml --defang --output iocs.csv
STIX 2.1 output template:
json{ "type": "indicator", "id": "indicator--[uuid]", "created": "2025-05-28T00:00:00.000Z", "name": "Malicious IP — C2 Infrastructure", "pattern": "[ipv4-addr:value = '192.0.2.10']", "pattern_type": "stix", "valid_from": "2025-05-28T00:00:00Z", "labels": ["malicious-activity", "c2"], "confidence": 85 }
When the user provides TTPs, behaviors, or a malware report:
bashpython scripts/mitre_mapper.py --input techniques.txt --output attack_map.json python scripts/mitre_mapper.py --technique T1059.001 --detection-query splunk
Mapping process:
ATT&CK Tactics Reference: | Tactic | ID | Description | |--------|----|-------------| | Reconnaissance | TA0043 | Pre-attack information gathering | | Resource Development | TA0042 | Establishing attack resources | | Initial Access | TA0001 | Entry into target environment | | Execution | TA0002 | Running malicious code | | Persistence | TA0003 | Maintaining foothold | | Privilege Escalation | TA0004 | Gaining higher permissions | | Defense Evasion | TA0005 | Avoiding detection | | Credential Access | TA0006 | Stealing credentials | | Discovery | TA0007 | Understanding environment | | Lateral Movement | TA0008 | Moving through network | | Collection | TA0009 | Gathering data of interest | | Command & Control | TA0011 | Communicating with compromised hosts | | Exfiltration | TA0010 | Stealing data | | Impact | TA0040 | Disrupting/destroying systems |
ATT&CK Navigator Layer format (JSON for visualization):
json{ "name": "Threat Hunt Layer — [Threat Actor/Campaign]", "versions": {"attack": "14", "navigator": "4.9"}, "domain": "enterprise-attack", "techniques": [ { "techniqueID": "T1059.001", "color": "#ff6666", "comment": "Observed PowerShell download cradle", "enabled": true, "score": 100 } ] }
When the user asks for hunt hypotheses:
Use this structured hypothesis template:
markdown## Hunt Hypothesis — [ID]: [Short Name] **Hypothesis Statement:** "We believe [Threat Actor/TTPs] may be present in [Environment] based on [Threat Intelligence / Recent Incidents / Industry Reports]." **Rationale:** [Why this threat is relevant to this organization — industry, exposure, recent news] **ATT&CK Techniques Covered:** - T1059.001 — PowerShell - T1053.005 — Scheduled Task/Job - T1021.001 — Remote Services: Remote Desktop Protocol **Data Sources Required:** - Windows Event Logs (Security, System, PowerShell/4104) - EDR process execution telemetry - DNS query logs - Proxy/firewall logs **Detection Logic:** [SIEM query or pseudocode] **Success Criteria:** - POSITIVE: We find evidence of the technique → escalate to IR (Skill 07) - NEGATIVE: No evidence after thorough search → document as cleared hunt - INCONCLUSIVE: Insufficient data → identify logging gaps **Estimated Hunt Duration:** [X hours] **Priority:** [High / Medium / Low] **Analyst:** [Name]
When the user asks to build detection queries for specific techniques:
spl// T1059.001 — PowerShell Execution with suspicious flags index=windows (source="WinEventLog:Microsoft-Windows-PowerShell/Operational" EventCode=4104) | search ScriptBlockText IN ("*DownloadString*", "*IEX*", "*EncodedCommand*", "*bypass*", "*WebClient*") | stats count by ComputerName, UserName, ScriptBlockText | where count > 0 // T1003.001 — LSASS Memory Dump index=windows EventCode=10 TargetImage="*lsass.exe" | where NOT (SourceImage IN ("C:\\Windows\\System32\\*", "C:\\Program Files\\*")) | table _time, SourceImage, TargetImage, GrantedAccess, CallTrace // T1547.001 — Registry Run Key Persistence index=windows EventCode=13 TargetObject IN ("*\\Run\\*", "*\\RunOnce\\*") | where NOT (Image IN ("C:\\Windows\\System32\\*", "C:\\Windows\\SysWOW64\\*")) | table _time, ComputerName, Image, TargetObject, Details // T1021.002 — Lateral Movement via SMB Admin Shares index=windows EventCode=5140 | where ShareName IN ("\\\\*\\ADMIN$", "\\\\*\\C$", "\\\\*\\IPC$") | stats count by SubjectUserName, IpAddress, ShareName, ObjectType | where count > 3
kql// T1110.001 — Brute Force Login Attempt SecurityEvent | where EventID == 4625 | where TimeGenerated > ago(1h) | summarize FailCount=count() by TargetAccount, IpAddress=replace(@"\.", "[.]", tostring(parse_json(EventData).IpAddress)) | where FailCount > 20 | join kind=leftouter ( SecurityEvent | where EventID == 4624 | summarize SuccessCount=count() by TargetAccount ) on TargetAccount | project TargetAccount, IpAddress, FailCount, SuccessCount | where isnotnull(SuccessCount) // Brute force succeeded! // T1190 — Exploit Public-Facing Application AzureDiagnostics | where Category == "ApplicationGatewayFirewallLog" | where action_s == "Blocked" | where ruleSetVersion_s startswith "3." | summarize count() by clientIp_s, requestUri_s, ruleId_s | where count_ > 100 | order by count_ desc
eql// T1055 — Process Injection sequence by host.name [process where process.name : "notepad.exe" and event.type == "start"] [process where event.type == "start" and process.parent.name : "notepad.exe" and not process.name in ("conhost.exe")] // T1566.001 — Spearphishing with attachment sequence by user.name within 5m [file where file.extension in ("doc", "xls", "pdf") and process.name : ("outlook.exe", "WINWORD.EXE")] [process where process.name : ("cmd.exe", "powershell.exe", "wscript.exe", "cscript.exe")]
yamltitle: Suspicious PowerShell Download Cradle id: a3c2f1b4-8e9d-4a2c-b7f6-1234567890ab status: stable description: Detects PowerShell commands used to download and execute code from the internet author: Threat Hunter date: 2025/05/28 modified: 2025/05/28 references: - https://attack.mitre.org/techniques/T1059/001/ tags: - attack.execution - attack.t1059.001 - attack.defense_evasion - attack.t1027 logsource: category: ps_script product: windows definition: Script Block Logging enabled (EventID 4104) detection: selection: ScriptBlockText|contains|all: - 'DownloadString' - 'IEX' selection2: ScriptBlockText|contains: - '-EncodedCommand' - '-enc ' - '-WindowStyle Hidden' - 'Net.WebClient' - 'WebProxy' condition: selection or selection2 falsepositives: - Legitimate software installations - Administrative scripts level: high
When the user asks to correlate IOCs or identify threat actors:
markdown ## Threat Assessment — Campaign Name]
Threat Actor: APT Group / Criminal Group / Unknown] Confidence: High / Medium / Low] Motivation: Espionage / Financial / Hacktivism] Targeting: Industries / Countries / Organization types]
Campaign IOCs:
Relevance to Organization: Why this threat is or isn't relevant]
Recommended Actions:
ioc_extractor.pybashpython scripts/ioc_extractor.py --input threat_report.txt --output iocs.json python scripts/ioc_extractor.py --input report.pdf --format stix --output iocs.stix.json python scripts/ioc_extractor.py --input email.eml --defang --output iocs.csv
mitre_mapper.pybashpython scripts/mitre_mapper.py --input techniques.txt --output attack_map.json python scripts/mitre_mapper.py --technique T1059.001 --detection-query splunk python scripts/mitre_mapper.py --actor "APT29" --output apt29_layer.json
| Condition | Adjacent Skill | |-----------|---------------| | IOCs from malware samples | ← Skill 05 (Malware Analysis) | | IOCs from IR engagement | ← Skill 07 (Incident Response) | | Feed hunting queries to SIEM | → Skill 12 (Log Analysis) | | Generate detection rules | → Skill 15 (Blue Team Defense) | | Automate response to findings | → Skill 11 (CSOC Automation) |
Threat-informed, repeatable hunting:
Precision rule: every hunt yields a hypothesis, the query, the result (found/not-found/inconclusive), and a disposition (new detection / tuned alert / closed).
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 21,500 | 35,038 | +63% | 1 | 1 | 0% | 4,006 | 7,969 | +99% | 0 | 0 | — |
case-02 | pass→pass | 5,058 | 9,513 | +88% | 1 | 1 | 0% | 985 | 5,923 | +501% | 0 | 0 | — |
case-03 | pass→pass | 4,143 | 5,509 | +33% | 1 | 1 | 0% | 733 | 4,989 | +581% | 0 | 0 | — |
case-04 | pass→pass | 9,269 | 9,768 | +5% | 1 | 1 | 0% | 1,720 | 5,823 | +239% | 0 | 0 | — |
case-05 | pass→pass | 10,070 | 10,031 | -0% | 1 | 1 | 0% | 1,918 | 5,948 | +210% | 0 | 0 | — |
case-06 | pass→pass | 14,964 | 12,618 | -16% | 1 | 1 | 0% | 2,831 | 6,325 | +123% | 0 | 0 | — |
case-07 | pass→pass | 12,996 | 13,328 | +3% | 1 | 1 | 0% | 2,463 | 6,367 | +159% | 0 | 0 | — |
case-08 | fail→pass | 9,519 | 7,655 | -20% | 1 | 1 | 0% | 1,596 | 5,285 | +231% | 0 | 0 | — |
case-09 | pass→pass | 9,243 | 9,564 | +3% | 1 | 1 | 0% | 1,761 | 5,901 | +235% | 0 | 0 | — |
case-10 | fail→pass | 19,490 | 23,373 | +20% | 1 | 1 | 0% | 3,330 | 7,814 | +135% | 0 | 0 | — |
case-11 | pass→pass | 18,093 | 16,581 | -8% | 1 | 1 | 0% | 3,069 | 6,851 | +123% | 0 | 0 | — |
case-12 | pass→pass | 19,270 | 18,803 | -2% | 1 | 1 | 0% | 2,995 | 7,243 | +142% | 0 | 0 | — |
case-13 | fail→pass | 17,454 | 22,494 | +29% | 1 | 1 | 0% | 2,642 | 7,465 | +183% | 0 | 0 | — |
case-14 | fail→pass | 9,975 | 11,456 | +15% | 1 | 1 | 0% | 1,760 | 5,865 | +233% | 0 | 0 | — |
case-15 | pass→pass | 13,997 | 8,960 | -36% | 1 | 1 | 0% | 2,297 | 5,458 | +138% | 0 | 0 | — |
case-16 | pass→pass | 16,009 | 23,039 | +44% | 1 | 1 | 0% | 2,427 | 7,671 | +216% | 0 | 0 | — |
case-17 | fail→pass | 15,045 | 16,433 | +9% | 1 | 1 | 0% | 2,226 | 6,530 | +193% | 0 | 0 | — |
case-18 | pass→pass | 19,721 | 19,047 | -3% | 1 | 1 | 0% | 2,783 | 6,868 | +147% | 0 | 0 | — |
case-19 | pass→pass | 13,769 | 15,556 | +13% | 1 | 1 | 0% | 2,410 | 6,756 | +180% | 0 | 0 | — |
case-20 | fail→fail | 16,244 | 20,687 | +27% | 1 | 1 | 0% | 2,697 | 7,527 | +179% | 0 | 0 | — |
case-21 | fail→fail | 13,671 | 14,100 | +3% | 1 | 1 | 0% | 2,429 | 6,294 | +159% | 0 | 0 | — |
case-22 | fail→fail | 19,644 | 17,269 | -12% | 1 | 1 | 0% | 3,701 | 7,104 | +92% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +23 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.