Close the hunt-to-detection gap. Feed it a structured threat hunt report and get production-ready detection rules in every format your stack consumes — plus a MITRE ATT&CK Navigator layer.
pip install 'peak-to-sigma[web]'
Every structured threat hunt should produce durable detection artifacts. When a hunt confirms attacker behavior, findings should immediately feed back into your detection stack — not sit in a Word document.
Sigma YAML, KQL (Sentinel/Defender XDR), SPL (Splunk ES),
and Databricks SQL. All at once, organized by finding.
Validated findings → production-ready rules.
Scoped → experimental. Unscoped → test-level drafts.
--enrich flag calls OpenAI or Anthropic to surface detection gaps,
related techniques, and hunting pivots you may have missed.
pip install peak-to-sigma and it works.
Web UI and enrichment are optional extras.
Structure your hunt findings in YAML, run the tool, get detection artifacts. Or use the web UI wizard — no YAML required.
peak-to-sigma main --hunt report.yaml — or open the web UI wizard and fill in the form.
Four formats generated from two confirmed findings: T1557.001 (AiTM process injection) and T1539 (session cookie theft via impossible-travel). All IPs and domains use IANA-reserved documentation ranges (RFC 5737 / RFC 2606).
title: "Adversary-in-the-Middle: LLMNR/NBT-NS Poisoning and SMB Relay"
id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
status: stable
description: >
Confirmed attacker activity — AiTM Proxy Detection hunt (Scoped).
Proxy process injected into browser SSL sessions via LLMNR poisoning.
Self-signed cert from untrusted CA. Parent spawned from explorer.exe.
references: []
author: Andre Seguin
date: 2026-04-08
tags:
- attack.credential_access
- attack.t1557.001
logsource:
category: process_creation
product: windows
detection:
selection_process:
Image|contains: "suspicious_proxy.exe"
selection_parent:
ParentImage|endswith: "\\explorer.exe"
Image|contains: "suspicious_proxy.exe"
selection_cert:
CertificateIssuer|contains: "Untrusted Root CA"
condition: selection_process or selection_parent or selection_cert
falsepositives:
- Legitimate proxy software with similar process names
- Internal PKI using non-standard CA names
level: high
---
title: "Steal Web Session Cookie: Impossible Travel via Token Replay"
id: b2c3d4e5-f6a7-8901-bcde-f12345678901
status: stable
description: >
Confirmed attacker activity — AiTM Proxy Detection hunt (Scoped).
Session tokens replayed from 203.0.113.47 (RFC 5737 documentation range).
Geolocation delta of 8,000+ km within 4 minutes. Correlated with proxy window.
references: []
author: Andre Seguin
date: 2026-04-08
tags:
- attack.credential_access
- attack.t1539
logsource:
product: azure
service: signinlogs
detection:
selection_ip:
callerIpAddress|contains: "203.0.113.47"
selection_domain:
NetworkDestination|contains: "aitm-proxy.example.com"
condition: selection_ip or selection_domain
falsepositives:
- VPN users with geographic IP routing anomalies
level: high
// ── T1557.001: Adversary-in-the-Middle — AiTM Process Injection ──────────────
// Hunt: AiTM Proxy Detection — Infostealer Delivery (Scoped)
// Author: Andre Seguin | Date: 2026-04-08 | Confidence: HIGH
// ATT&CK: T1557.001 — Credential Access
DeviceProcessEvents
| where Timestamp > ago(7d)
| where
FileName has "suspicious_proxy.exe"
or InitiatingProcessFileName =~ "explorer.exe" and FileName has "suspicious_proxy.exe"
| extend Technique = "T1557.001", Tactic = "CredentialAccess", Confidence = "High"
| project
Timestamp, DeviceName, AccountName,
FileName, ProcessCommandLine, SHA256,
InitiatingProcessFileName, InitiatingProcessCommandLine,
Technique, Tactic, Confidence
| order by Timestamp desc
// ── T1539: Steal Web Session Cookie — Impossible Travel ───────────────────────
// Hunt: AiTM Proxy Detection — Infostealer Delivery (Scoped)
// Author: Andre Seguin | Date: 2026-04-08 | Confidence: HIGH
// ATT&CK: T1539 — Credential Access
// Note: 203.0.113.47 is an RFC 5737 documentation IP used in this example.
SigninLogs
| where TimeGenerated > ago(7d)
| where
IPAddress == "203.0.113.47"
or NetworkLocationDetails has "aitm-proxy.example.com"
| extend Technique = "T1539", Tactic = "CredentialAccess", Confidence = "High"
| project
TimeGenerated, UserPrincipalName, AppDisplayName,
IPAddress, Location, DeviceDetail,
ConditionalAccessStatus, RiskLevelDuringSignIn,
Technique, Tactic, Confidence
| order by TimeGenerated desc
| comment "T1557.001: Adversary-in-the-Middle — AiTM Process Injection"
| comment "Hunt: AiTM Proxy Detection — Infostealer Delivery (Scoped)"
| comment "Author: Andre Seguin | Date: 2026-04-08 | ATT&CK: T1557.001"
index=* sourcetype=XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
(process_name="*suspicious_proxy.exe*"
OR (parent_process="*\\explorer.exe" AND process_name="*suspicious_proxy.exe*"))
| eval technique="T1557.001", tactic="Credential Access", confidence="high"
| table _time host user process_name parent_process CommandLine sha256 technique tactic
| sort -_time
| append [
| comment "T1539: Steal Web Session Cookie — Impossible Travel"
| comment "Note: 203.0.113.47 is RFC 5737 documentation address (example only)"
index=* sourcetype=azure:aad:signin
(src_ip="203.0.113.47" OR dest="aitm-proxy.example.com")
| eval technique="T1539", tactic="Credential Access", confidence="high"
| table _time user app src_ip dest authentication_method risk_level technique tactic
| sort -_time
]
-- ── T1557.001: Adversary-in-the-Middle — AiTM Process Injection ──────────────
-- Hunt: AiTM Proxy Detection — Infostealer Delivery
-- Author: Andre Seguin | Date: 2026-04-08 | ATT&CK: T1557.001 | Level: HIGH
SELECT
event_time,
host,
user_name,
process_name,
parent_process_name,
command_line,
sha256,
'T1557.001' AS technique,
'high' AS confidence
FROM security.process_events
WHERE
event_time >= NOW() - INTERVAL 7 DAYS
AND (
LOWER(process_name) LIKE '%suspicious_proxy.exe%'
OR (
LOWER(parent_process_name) LIKE '%explorer.exe'
AND LOWER(process_name) LIKE '%suspicious_proxy.exe%'
)
)
ORDER BY event_time DESC;
-- ── T1539: Steal Web Session Cookie — Impossible Travel ───────────────────────
-- Note: 203.0.113.47 is RFC 5737 TEST-NET-3 (documentation range, not a real host)
-- Note: aitm-proxy.example.com is RFC 2606 reserved (not a real domain)
SELECT
event_time,
user_principal_name,
app_display_name,
ip_address,
location,
risk_level_during_signin,
conditional_access_status,
'T1539' AS technique,
'high' AS confidence
FROM security.signin_logs
WHERE
event_time >= NOW() - INTERVAL 7 DAYS
AND (
ip_address = '203.0.113.47'
OR LOWER(network_destination) LIKE '%aitm-proxy.example.com%'
)
ORDER BY event_time DESC;
hunt:
name: "AiTM Proxy Detection — Infostealer Delivery"
hypothesis: >
Threat actors are using adversary-in-the-middle frameworks to intercept credentials
and deliver infostealer malware via poisoned SSL sessions.
analyst: "Andre Seguin"
date: "2026-04-08"
peak_phase: "Scoped" # Unscoped | Scoped | Validated
data_sources:
- name: "Microsoft Defender EDR"
type: endpoint
coverage: high
- name: "Entra ID Sign-in Logs"
type: identity
coverage: medium
- name: "Azure Monitor Network Logs"
type: network
coverage: medium
findings:
- tactic: "Credential Access"
technique: "T1557.001"
technique_name: "Adversary-in-the-Middle: LLMNR/NBT-NS Poisoning"
confirmed: true
description: >
Proxy process suspicious_proxy.exe spawned from explorer.exe and established
outbound TLS connections using a self-signed cert from "Untrusted Root CA".
Token replay observed in Entra ID logs within 30 seconds of initial auth.
data_source_ref: "Microsoft Defender EDR"
iocs:
- type: process_name
value: "suspicious_proxy.exe"
- type: cert_issuer
value: "Untrusted Root CA"
- type: parent_process
value: "explorer.exe"
- tactic: "Credential Access"
technique: "T1539"
technique_name: "Steal Web Session Cookie"
confirmed: true
description: >
Session tokens replayed from anomalous geoip — delta of 8,000+ km in 4 minutes.
Impossible travel alert correlated with proxy process activity window.
data_source_ref: "Entra ID Sign-in Logs"
iocs:
- type: ip
# RFC 5737 TEST-NET-3 — documentation address, not a real host
value: "203.0.113.47"
- type: domain
# RFC 2606 reserved — not a real domain
value: "aitm-proxy.example.com"
verdict: >
Confirmed attacker activity. Three detections deployed to production covering
process creation, impossible travel, and C2 beaconing. IR engaged for affected accounts.
Vendor-neutral YAML. Convert to any SIEM with sigma-cli.
Compatible with sigma-cli, Uncoder, Chainsaw.
Ready for Sentinel Analytic Rules or Defender XDR custom detections. pySigma Kusto backend with direct-build fallback.
CIM-compliant field names for Splunk Enterprise Security. Includes sourcetype hints based on data source type.
Targets security.* tables in a standard security
data lake schema. Adjust table names for your environment.
Layer schema v4.5. Confirmed findings in red, unconfirmed in amber. Import directly into attack.mitre.org/attack-navigator.
Optional --enrich flag. Calls OpenAI gpt-4o or
Claude to surface gaps, related techniques, and hunting pivots.
Each IOC type maps to the correct field name across all four output formats automatically.