agentsclimarketplace

Hunting c2 beaconing with frequency analysis

Skill meltedinhex/analyst-ai-pack/skills/hunting-c2-beaconing-with-frequency-analysis

Detects command-and-control beacons in network logs by analyzing connection timing: measuring inter-arrival intervals, accounting for jitter, and scoring regularity per source/destination pair to surface periodic callbacks. Activates for requests to hunt C2 beaconing, find periodic callbacks, or analyze connection-interval regularity.From its SKILL.md

Install
npx -y skills add meltedinhex/analyst-ai-pack --skill hunting-c2-beaconing-with-frequency-analysis

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 19 stars19 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its file declares

Copied from the file, not written here

The file declares its own license as Apache-2.0. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

3.2 KB, 520 tokens by cl100k_base, as published. Nobody here has run it

Hunting C2 Beaconing with Frequency Analysis

When to Use

  • You have connection logs (proxy, firewall, Zeek/conn.log, NetFlow) and want to find implants that call home on a schedule.
  • You are testing a hypothesis that a beacon is hiding in normal-looking web traffic.
  • You need to rank source→destination pairs by timing regularity, allowing for jitter.

Do not use pure interval regularity as a verdict — software update checks, telemetry, and keep-alives also beacon; combine timing with destination reputation and data volume.

Prerequisites

  • Connection records with timestamp, source, destination (IP/domain), and ideally bytes, over a window long enough to capture many callbacks (hours to days).
  • A way to enrich destinations (reputation, age, rarity) for follow-up.

Workflow

Step 1: Group and order by pair

Bucket connections by (source, destination) and sort timestamps. Require a minimum count so the interval statistics are meaningful.

Step 2: Compute inter-arrival intervals

Derive deltas between consecutive connections per pair; the interval distribution reveals periodicity.

Step 3: Score regularity with jitter tolerance

A low coefficient of variation (std/mean) of intervals indicates a steady beacon; modern beacons add jitter, so score on tolerance rather than requiring identical intervals.

python scripts/analyst.py beacon conn.json --min-events 8

Step 4: Reduce false positives

Down-rank known update/telemetry destinations and CDNs; up-rank rare/young domains, small fixed payload sizes, and odd ports.

Step 5: Triage and confirm

For top pairs, pull payloads/JA3, destination intel, and host context; confirm via the C2/beacon config skills and escalate.

Validation

  • Top candidates show consistently spaced callbacks (low CV) over many events, not a handful.
  • Known-benign periodic services are filtered or explained.
  • Confirmed beacons corroborate with destination reputation or payload analysis.

Pitfalls

  • Too few events per pair, making the interval statistics noise.
  • Requiring perfect periodicity and missing jittered beacons.
  • Ignoring data-volume regularity, a strong secondary beacon signal.

References

What ships with it: 3 files

4.4 KB alongside SKILL.md, 1 of them executable

references/

scripts/

Keep looking

Skills are one crate of 326,970. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.