Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Identify command-and-control beaconing patterns in network traffic by applying statistical frequency analysis, jitter calculation, and coefficient of variation scoring to detect periodic callbacks from compromised endpoints.
.claude/skills/hunting-for-beaconing-with-frequency-analysis/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | — | — |
| case-22 | ✗→✓ | ▲ Improved | — | — |
| case-03 | ✗→✓ | ▲ Improved | — | — |
| case-02 | ✗→✓ | ▲ Improved | — | — |
| case-11 | ✗→✓ | ▲ Improved | — | — |
| Concept | Description | |---------|-------------| | T1071.001 | Application Layer Protocol: Web Protocols -- HTTP/HTTPS beaconing | | T1071.004 | Application Layer Protocol: DNS -- DNS-based C2 tunneling | | T1573 | Encrypted Channel -- TLS/SSL encrypted C2 communication | | T1568.002 | Dynamic Resolution: Domain Generation Algorithms | | Coefficient of Variation | Standard deviation divided by mean; values below 0.20 indicate periodicity | | Jitter | Random variation added to beacon interval to evade detection | | RITA Beacon Score | Composite score from connection regularity, data size consistency, and connection count | | JA3/JA4 Fingerprinting | TLS client fingerprinting to identify C2 framework signatures | | Fast-Flux DNS | Rapidly changing DNS resolution used to protect C2 infrastructure |
| Tool | Purpose | |------|---------| | RITA (Real Intelligence Threat Analytics) | Automated beacon scoring from Zeek logs | | AC-Hunter | Commercial threat hunting platform with beacon detection | | Splunk | SPL-based statistical beacon analysis with streamstats | | Elastic Security | ML anomaly detection for periodic network behavior | | Zeek | Network metadata collection (conn.log, dns.log, ssl.log) | | Suricata | Network IDS with JA3/JA4 TLS fingerprint extraction | | FLARE | C2 profile and beacon pattern detection | | VirusTotal | Domain and IP reputation enrichment |
splindex=proxy OR index=firewall | where NOT match(dest, "(?i)(microsoft|google|amazonaws|cloudflare|akamai)") | bin _time span=1s | stats count by src_ip dest _time | streamstats current=f last(_time) as prev_time by src_ip dest | eval interval=_time-prev_time | stats count avg(interval) as avg_interval stdev(interval) as stdev_interval min(interval) as min_interval max(interval) as max_interval by src_ip dest | where count > 50 | eval cv=stdev_interval/avg_interval | where cv < 0.20 AND avg_interval > 30 AND avg_interval < 86400 | sort cv | table src_ip dest count avg_interval stdev_interval cv
kqlDeviceNetworkEvents | where Timestamp > ago(24h) | where RemoteIPType == "Public" | summarize ConnectionTimes=make_list(Timestamp), Count=count() by DeviceName, RemoteIP, RemoteUrl | where Count > 50 | extend Intervals = array_sort_asc(ConnectionTimes) | mv-apply Intervals on ( extend NextTime = next(Intervals) | where isnotempty(NextTime) | extend IntervalSec = datetime_diff('second', NextTime, Intervals) | summarize AvgInterval=avg(IntervalSec), StdDev=stdev(IntervalSec) ) | extend CV = StdDev / AvgInterval | where CV < 0.2 and AvgInterval > 30 | sort by CV asc
yamltitle: Potential C2 Beaconing Pattern Detected status: experimental logsource: category: proxy detection: selection: dst_ip|cidr: '!10.0.0.0/8' timeframe: 24h condition: selection | count(dst) by src_ip > 50 level: medium tags: - attack.command_and_control - attack.t1071.001
Hunt ID: TH-BEACON-[DATE]-[SEQ]
Source IP: [Internal IP]
Source Host: [Hostname from DHCP/DNS]
Destination: [Domain/IP]
Protocol: [HTTP/HTTPS/DNS]
Beacon Interval: [Average seconds]
Jitter Estimate: [Percentage]
Coefficient of Variation: [CV value]
Connection Count: [Total connections in window]
Data Size CV: [Payload consistency metric]
Domain Age: [Days since registration]
TI Match: [Yes/No -- source]
Risk Score: [0-100]
Risk Level: [Critical/High/Medium/Low]
Indicators: [List of triggered risk factors]| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
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, and 20 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +32 percentage points is the difference between those two pass rates over the 20 comparable cases.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
Other measured skills in the registry, with their headline benchmark lift.