open atlas
↑ Back to track
Offensive Security RED · 04 · 03

Command and control

Once code runs on a target, the operator needs a channel back. C2 beaconing solves the firewall problem by calling out, not in — and that regular outbound rhythm is exactly the signal a defender hunts.

RED Middle ◷ 15 min
Level
FoundationsJuniorMiddleSenior

Your payload landed on a lab host and ran. Now you have a problem the movies never show: the box is behind a corporate firewall that drops every inbound connection, so you cannot just open a socket to it. The implant solves this by reaching out instead — every sixty seconds it makes one quiet HTTPS request to a server you control, asks “anything for me?”, and hangs up. To the firewall it looks like a browser. But on the defender’s NetFlow it looks like something a browser never does: the same host calling the same destination every sixty seconds, on the dot, for nine hours straight. That metronome is the whole story of command and control — and it cuts both ways.

By the end of this lesson you’ll understand how C2 beaconing works at the network level, why calling out defeats the firewall, and which traffic signals reveal the beacon to a defender — all in service of authorized testing and detection engineering.

Authorization first — C2 belongs in a lab, not on someone else’s network

Before any mechanism below, the rule that opens this whole track still holds: standing up command-and-control infrastructure and pointing an implant at a host is only legitimate against systems you own or are explicitly scoped to test. Running an implant that beacons to your server from a machine you don’t control is unauthorized access and persistence on someone else’s network — a serious crime in nearly every jurisdiction, and a contract-ending mistake even inside a sanctioned engagement if the host is out of scope. Everything here is framed for a CTF range, a deliberately built lab, or a red-team engagement with a signed rules-of-engagement document that names the target ranges and the C2 domains in advance.

We teach the mechanism so you can break it. In MITRE ATT&CK, command and control is the tactic TA0011; the step before it — getting your code to run and survive — is Execution and Persistence, and the Lockheed Martin Cyber Kill Chain lists Command & Control as the sixth link, right before Actions on Objectives. The kill-chain framing is the point: C2 is the chokepoint. An attacker can slip past every earlier stage quietly, but they cannot act on the target without a channel back — so if a defender breaks C2, the intrusion stalls with code on the box and no hand on the wheel.

Why beacon out instead of connecting in

The firewall problem is asymmetric, and that asymmetry shapes everything. A default corporate perimeter drops unsolicited inbound connections — there is no listening port for the operator to dial. But it almost always permits outbound traffic on 443, because employees need the web. So the implant inverts the direction: it does not wait to be connected to; it beacons — it periodically initiates a connection out to the C2 server, pulls down any queued task, runs it, and posts the result back, all over a protocol the firewall already trusts.

This is why HTTPS is the workhorse C2 channel. The request blends into the haystack of normal web traffic, and TLS encrypts the body so a network inspector sees a connection to some host on 443 but not the tasking inside it. The cost is latency: a beacon that calls home once a minute means up to sixty seconds between your command and its execution. Operators tune that interval — short for interactive work, long to stay quiet — and that single tuning knob is the seam a defender pries open.

What the beacon leaks: the signals a defender hunts

A human browsing the web is bursty and irregular — pages, idle, a video, idle, a different site. An implant on a default config is the opposite: it phones the same destination at the same cadence, indefinitely. That regularity is the primary tell. Defenders compute the time between connections from the same source to the same destination and look for a tight, repeating period — a beacon at a 60-second interval shows up as a near-vertical spike in the inter-arrival histogram that no human session produces.

Three more signals stack on top of the rhythm. The beacon request and response are small and uniform — a few hundred bytes each way, every time — versus the lopsided, variable sizes of real web browsing where responses dwarf requests. The destination is often a young or low-reputation domain with little legitimate traffic, not a CDN every other host also talks to. And a long-lived beacon produces a high connection count to a single rare destination over hours, which stands out the moment you aggregate NetFlow by destination. None of these is conclusive alone; together they are how the channel gets caught.

SignalWhat the beacon doesWhat normal traffic doesHow the defender hunts it
PeriodicityConnects every ~60s, indefinitelyBursty, irregular, human-drivenTight peak in inter-arrival times per (src→dst)
Payload sizeSmall, uniform both directionsVariable; responses dwarf requestsLow variance in bytes-per-flow
DestinationYoung / low-reputation domainEstablished CDNs and SaaSDomain age + reputation + rarity scoring
VolumeHundreds of flows to one rare hostMany destinations, few repeatsAggregate NetFlow by destination over time
ResolutionDNS tunneling: long, high-entropy subdomainsShort, repeated, cacheable namesQuery length, entropy, NXDOMAIN rate, volume

Evasion and its own tells: jitter, domain fronting, DNS tunneling

Operators know the rhythm is the giveaway, so they blunt it. The first move is jitter: randomize the sleep interval by some percentage so the period is not exactly 60 seconds but 45–75. This smears the inter-arrival peak, but it does not erase it — over hours, the mean still clusters, and detection that bins inter-arrival times with tolerance for jitter still finds the central tendency that random human traffic never has. Jitter buys time; it does not make the beacon look human.

When 443 to a strange domain is itself the problem, operators reach for channels that hide where the traffic goes. Domain fronting sends the TLS SNI to a trusted CDN host while the encrypted Host header routes to the C2 origin behind the same CDN — the network sees a connection to a reputable domain. DNS tunneling is the more desperate, more detectable option: it smuggles tasking inside DNS queries and responses, because DNS resolves even on networks that block direct web egress. But DNS was built for short cacheable names, so tunneling produces long, high-entropy subdomains and an abnormal volume of unique queries to one zone — which, as the table shows, is a loud signal of its own. Every evasion trades one tell for another; the defender’s job is to know which tell each technique leaves behind.

Why this works

Why not just beacon faster to feel like real traffic, or randomize the destination every time? Faster beaconing increases throughput but multiplies the connection count to a single rare host — it makes the volume signal worse, not better. Rotating destinations needs many domains and DNS records, each of which is itself young and low-reputation, so you trade a periodicity signal for a fan-out-to-junk-domains signal. There is no free interval: every choice that helps the operator hide on one axis lights them up on another, which is exactly why C2 detection works by stacking weak signals rather than relying on any single one.

How a defender reads it — and how that informs the operator

The detection engineer does not look for a payload; they look for a behavior. The durable hunt is: for each internal host, group outbound flows by destination, and flag destinations that are contacted on a regular cadence, with uniform small payloads, that are rare across the fleet, and young or low-reputation. That logic survives because it targets the structural fact that an implant must call home repeatedly — you can change the protocol, the domain, and the interval, but a remote operator fundamentally needs a recurring channel, and recurrence is detectable. For the authorized tester, this is the design constraint to respect: the stealthiest C2 is the one that minimizes total contacts and blends destination into the host’s normal traffic, not the one that merely encrypts the body.

Pick the best fit

On an authorized engagement, your HTTPS beacon at a fixed 60-second interval was caught by the blue team's NetFlow analytics within a day. You need the channel to survive longer. Pick the change that most reduces the detection signal without trading it for a louder one.

Quiz

Why does a C2 implant beacon outbound on a schedule instead of opening a listening port for the operator to connect to?

Quiz

A defender is hunting beacons and sees: one internal host making hundreds of connections to a single 3-day-old domain on 443, each request and response a few hundred bytes, at a tight 45–75 second cadence. Which combination of signals is doing the work here?

Order the steps

Order one full beaconing cycle as it happens on the implant, from sleeping to reporting:

  1. 1 Sleep for the configured interval (plus jitter)
  2. 2 Initiate an outbound HTTPS connection to the C2 server
  3. 3 Pull down any queued task from the server
  4. 4 Execute the task on the host
  5. 5 Post the result back, then loop to sleep again
Recall before you leave
  1. 01
    Explain why a C2 implant beacons outbound on an interval, and what that design choice costs the operator.
  2. 02
    Name the network signals that reveal a beacon, and explain why jitter and DNS tunneling don't make the channel invisible.
Recap

Command and control is the chokepoint in the kill chain: once code runs on a host (Execution and Persistence), the operator still needs a channel back, and a default firewall blocks inbound connections. C2 beaconing solves this by inverting direction — the implant calls out on 443, typically over HTTPS, on a fixed interval: sleep, beacon, pull task, run, report, repeat. The cost of calling out is a regular outbound rhythm, and that rhythm is the defender’s primary signal. Hunting stacks weak signals: periodicity in inter-arrival times, uniform small payloads, rare young or low-reputation destinations, and high connection counts to a single host — caught on metadata even though TLS hides the tasking. Evasion never escapes this; it only shifts the tell. Jitter smears but doesn’t erase the period, domain fronting hides the destination at the cost of needing a trusted CDN, and DNS tunneling bypasses web egress but emits long high-entropy queries that are loud in their own right. The durable lesson for both sides: a remote operator must call home repeatedly, recurrence is detectable, and the stealthiest channel is the one that minimizes total contacts and blends into normal traffic — so when you see one host talking to one rare destination on a metronome, that metronome is the thread to pull.

Practice

Start at the top. Tasks go easiest → hardest: recall a fact, apply it to a case, then a senior-level stretch. Open one, attempt it, then reveal.

recallapplystretch0 of 6 done
Connected lessons

Something unclear?

Ask a question about this lesson. Questions are anonymous and go straight to the author to make the lesson better.

shortcuts expand
search
K
prev piece
k
next piece
j
cycle tier
t
this menu
?
sources2
expand
  1. 01
  2. 02

Trademarks belong to their respective owners. Editorial reference only.