Follow the Operator ยท 06 โ The Same Keystrokes: The Routine That Repeats Itself
Follow the Operator โ Case 06. This register takes a cloud of unrelated-looking attacks and follows one forensic thread back to the single hand behind them, closing each case on the signal that clinched it: SHARED KEY ยท SHARED MALWARE ยท SHARED FINGERPRINT ยท SHARED INFRASTRUCTURE ยท SHARED BEHAVIOR ยท NAMED IDENTITY.
The five preceding cases attributed operators by things โ a key, a payload, a tool, a landlord. This case, and the two that follow it, attribute by something less tangible and, in a way, more human: how the operator acts. When an intruder takes a machine, he does something to it, and the something he does is not random. It is a routine โ a sequence of commands, run in an order, with particular flags and particular quirks โ and because the modern takeover is scripted, that routine is the same every time. The operator wrote it once and it runs forever, identically, on every machine his fleet touches. So the routine is a behavioral fingerprint: not what the operator carries, but what he does, captured keystroke for keystroke by a sensor that records everything typed into it.
The honeypot is uniquely placed to read this, because unlike a firewall or a scanner, it lets the intruder in and watches. Every command the intruder runs after access โ the reconnaissance, the download, the execution, the cleanup โ is recorded in order, the full session transcript preserved exactly as the operator's script issued it. And the sensor sees the same transcript, the same commands in the same order, arriving from scattered unrelated IPs. That repetition is the signal. A dozen addresses on three continents that all, on gaining access, run the identical sequence of commands are not a dozen humans who happen to type alike; they are one operator's script, replayed across his fleet. The routine is the invariant, and the transcript is how the honeypot reads it.
But behavior is a trickier invariant than a key, and the case must be honest about where its attribution lives, because most of what an operator does is not individuating at all. Everyone who takes a Linux box runs uname -a to see the kernel; everyone runs cat /proc/cpuinfo to count the cores; everyone downloads a payload with wget or curl. Those are the field's common conventions, shared by every operator alike, and they attribute nothing โ clustering on them would gather the whole population, exactly as clustering on stock OpenSSH does. What individuates is not the common steps but the idiosyncratic ones: the operator's own authorship inside the routine โ an unusual flag no one else uses, a bespoke one-liner he wrote himself, a distinctive variable name, a specific and unnecessary ordering, and, most tellingly, a mistake he never fixed. Linkage signal: SHARED BEHAVIOR โ read on the idiosyncrasy, never on the convention.
1. The Determinism of the Script
Begin with why behavior is attributable at all, because at first glance it seems too fluid to fingerprint: humans vary, improvise, adapt. The answer is that the post-access takeover, for the vast automated base of the threat landscape, is not human โ it is a script, and a script does not vary. The prior series established this from the inside: the uniform recon-callback-pull routine, run identically across thousands of sessions at machine speed, is proof that a program and not a person is doing the takeover. And a program is deterministic. It issues exactly the commands its author wrote, in exactly the order he wrote them, with exactly the flags he specified, every single time it runs, on every single machine. The operator's behavior is therefore not a fluid human habit but a frozen artifact โ his routine, crystallized in code, executed without variation.
This determinism is what turns behavior from an impression into an invariant. A human analyst watching two intrusions might say "these feel similar" โ a soft, unreliable judgment. But two scripted routines are not similar; they are identical, byte for byte in the commands they issue, because they are the same script running twice. The honeypot does not have to judge similarity; it can compare transcripts exactly, and find that session A and session B ran the same forty commands in the same order with the same arguments. That exact match is a hard signal, not a soft one, and it is available precisely because the operator automated his routine โ the automation that makes his operation scale is the same automation that makes his behavior repeatable and therefore fingerprintable. He scripted himself to be efficient, and in doing so scripted himself to be consistent, which is to say identifiable.
And the transcript the honeypot captures is complete, which matters because behavioral attribution is only as good as the fidelity of the record. A netflow sensor sees that a connection happened; a honeypot sees what was done inside it โ every command, its arguments, its order, the responses, the timing. This is the richest behavioral record available anywhere in the defensive landscape, because the honeypot's whole purpose is to let the attacker act and record the acting. So when the register attributes on behavior, it is not inferring behavior from side effects; it is reading the operator's actual keystrokes, the literal sequence his script typed, preserved in the log. The routine is captured at full resolution, which is what makes the idiosyncrasies โ the small authorial details that individuate โ readable at all.
2. Convention Versus Authorship
Now the central discipline, because behavioral attribution succeeds or fails on one distinction: the difference between what the operator shares with everyone and what is his own. Most of a post-access routine is convention. There is a more-or-less standard way to reconnoiter a compromised Linux host, and every operator does roughly the same things because those are the things worth doing: identify the OS, count the CPU, check the user, look for competitors' malware, disable defenses, fetch a payload, run it, clean the logs. Two operators running these standard steps are not linked by doing so, any more than two cooks are linked by both boiling water. The convention is the field's shared knowledge, and clustering on it produces a cluster of everyone โ the behavioral equivalent of the shared-tool trap.
Authorship is what is left when convention is subtracted, and it is where the attribution lives. Within the standard routine, each operator makes idiosyncratic choices that are his own: he uses a particular flag combination where others would use a different one; he writes a bespoke one-liner to do something for which there is no standard command; he names a downloaded file or a variable in a distinctive way; he orders his steps in a sequence that is not the obvious one, out of his own habit; he includes a command that is redundant or unnecessary, a personal tic. None of these is dictated by the task โ they are the operator's authorial choices, the places where his routine could have been written many ways and he wrote it his way. And because the script is deterministic, his way propagates identically to every session, so the idiosyncrasy is as repeatable as the convention but, unlike the convention, individuating.
The most powerful idiosyncrasy of all is the mistake, and it deserves special mention because it is the behavioral signal's crown jewel. When an operator's script contains an error that does not break it โ a misspelled path that happens to still work, a redundant command, a typo in a comment or a variable, a flag that does nothing โ that error tends never to get fixed, because it causes no visible problem, and so it propagates forever, identically, across every session the script ever runs. A carried typo is a near-perfect authorial signature: it is highly specific (the exact same misspelling), it is not dictated by any convention (no one is taught to misspell), and it is durable (it persists because there is no pressure to correct it). Two scattered fleets that both run a routine containing the same harmless typo are tied far more strongly than two that share any correct command, because the correct command might be convention but the shared mistake can only be shared authorship. The register weights the idiosyncratic and the erroneous heavily, and the conventional not at all.
3. Where Behavior Sits on the Axis
Now the confidence, because behavior occupies a specific and instructive place on the shareability axis the register has been building, and locating it correctly is the case's methodological contribution. A bespoke key (HIGH) is nearly unshareable by accident. A tool fingerprint (MEDIUM-HIGH) is shareable by design but individuating when rare. Shared infrastructure (LOW for the operator) is maximally shareable. Where does a command sequence fall? In the middle, and for a reason that is itself illuminating: a routine is part convention (maximally shareable, worth nothing) and part authorship (hard to reproduce by coincidence, worth much), so its attribution value depends entirely on which part is doing the linking. The register assigns SHARED BEHAVIOR a MEDIUM confidence as its headline, reflecting that a full idiosyncratic sequence is genuinely hard to reproduce by coincidence, while noting that the confidence rises toward the idiosyncratic end and falls toward the conventional end.
This middle position makes behavior an ideal corroborating signal, which is how the register most often uses it. Because a bespoke routine is moderately individuating on its own, it adds real weight to a cluster already tied by a stronger signal: a fleet that shares a key is one operator's; a fleet that shares a key AND runs the same idiosyncratic routine is one operator's with more confidence, because two independent invariants now agree, and the behavior confirms that the key-sharing hosts are not just credential-sharing but operationally identical. Conversely, behavior can rescue attribution when the stronger signals are absent: an operator disciplined enough to use unique keys per host (defeating the key cases) and a common tool (weakening the fingerprint case) may still run his own idiosyncratic script, and the routine then becomes the primary thread. So behavior is both a corroborator (strengthening key-based clusters) and a fallback (attributing the operator who defeated the credential signals), which is why it earns its place despite sitting only at MEDIUM.
The reason it does not sit higher is the failure mode this case must name: behavior is copyable in a way a key is not. An operator can copy another's script โ paste a public playbook, run a leaked toolkit, adopt a routine he found on a forum โ and then his sessions carry someone else's idiosyncrasies, his own authorship replaced by borrowed authorship. When that happens, a shared routine reflects a shared script, not a shared hand: two unrelated operators running the same downloaded playbook produce the same transcript, the same idiosyncrasies, the same carried typo, because they are running the same borrowed code. This is the behavioral version of the register's recurring caution, and it is why behavior caps at MEDIUM and why the register attributes on idiosyncrasy plus corroboration rather than idiosyncrasy alone: a shared idiosyncratic routine is strong evidence of a shared script, and only corroboration โ a shared key, a shared bespoke C2 โ lifts "shared script" to "shared hand." The copied-script trap is treated directly in the register's later split and false-flag cases; here it is the reason the confidence is MEDIUM and the corroboration is required.
4. SHARED BEHAVIOR โ The Author in the Routine
The linkage signal is SHARED BEHAVIOR, and it earns its place as the register's reading of the operator himself rather than his equipment โ the way he does the work, as opposed to the tools he does it with. Its distinct value, beyond corroboration, is that it is the signal hardest for a careless operator to suppress. He can be taught to vary his keys and his addresses; he can be told to use a common tool to blend in. But his routine is his working method, the accumulated way he does the job, and varying it per host would mean rewriting his automation constantly, defeating the whole purpose of automating. So the behavioral fingerprint persists through disciplines that defeat the other signals, precisely because changing it is changing how you work, and people โ even scripted people โ do not casually change how they work. The routine is the operator's habit made durable by code.
There is a deeper point here that connects behavior to the register's affine spine, and it is worth stating because it is what makes this case more than a catalogue of tells. The operator's transformations โ changing address, network, country, even key and tool โ are all changes to his surface, the disguises he puts on. His routine is not surface; it is structure, the invariant form of his operation beneath every disguise. Two sessions from the same operator can differ in every visible attribute and still be, in their structure โ the ordered sequence of what is done โ the same routine, because the routine is what the operation IS, not what it wears. Behavioral attribution is the recognition of that structural invariant: the analyst looks past everything the operator changed to the shape of what he did, and finds the shape preserved. The keystrokes are the same because the operation is the same, however different the mask.
And this is why the idiosyncrasy matters so much, to close the conceptual loop: the idiosyncrasy is the part of the structure that could have been otherwise. Convention is structure the task forces โ everyone counts the CPU because counting the CPU is necessary. Idiosyncrasy is structure the operator chose โ he counts the CPU with this flag, in this order, after this redundant step, because that is how he, personally, wrote it. So the idiosyncrasy is the operator's signature in the structural invariant: the place where the necessary form of the operation carries the contingent mark of its author. The register reads that mark, at MEDIUM, on the contingent and not the necessary, corroborated by the stronger signals โ the author's hand visible in the one part of the routine the task did not dictate. The operator wore every mask, and ran the same script beneath all of them, and in the script's one unnecessary line, he signed it.
5. Reading Routines (and Varying Yours)
The register owes the analyst and the defender, and behavioral attribution gives the analyst a method and the defender both a detection and a caution. For the analyst, the method is subtraction then comparison: subtract the convention (the standard recon and download steps that everyone shares and that attribute nothing), then compare what remains โ the idiosyncratic flags, the bespoke one-liners, the distinctive orderings, the carried mistakes โ across sessions, and cluster on exact matches of the idiosyncratic residue. Weight the carried typo and the unnecessary command most heavily, because those are the purest authorship. And, crucially, before concluding "one hand," test the copied-script failure mode: is this idiosyncratic routine the operator's own authorship, or a public/leaked playbook many operators run? Check whether the routine appears in known toolkits or forum posts, and corroborate with a less-shareable signal, because a shared routine is firmly evidence of a shared script and only conditionally evidence of a shared hand. Attribute the script on the idiosyncrasy; attribute the operator on the idiosyncrasy plus corroboration.
For the defender, the operator's routine is a detection opportunity of the highest quality, because it is behavioral and therefore hard for the attacker to avoid emitting. Endpoint and log monitoring that looks for the shape of a takeover routine โ a login immediately followed by the recon-download-execute sequence, especially with the idiosyncratic markers of a known operator's script โ catches intrusions that signature-based detection misses, because the behavior is the same even when the payload, the address, and the key have all changed. The carried typo that betrays the operator to the analyst is also a detection rule for the defender: a command containing that specific idiosyncrasy, seen on your network, is that operator's script running on your machine. Behavioral detection is the defense that assumes the attacker will change everything he can and targets the one thing he cannot cheaply change โ how he works โ which is exactly what makes it durable.
The honest bound, stated for the defender as a mirror, is the same caution the operator ignores at his peril and the disciplined operator eventually learns: your own routines are your own fingerprint. This is a lesson for defensive and red-team operators as much as for the analyst โ an automation harness that runs the same idiosyncratic routine everywhere is an automation harness that can be fingerprinted and tracked, so operational security includes varying not just your keys and addresses but your behavior, which is far harder and which most operators never do. That most operators never do it is why behavioral attribution works: the routine is the last thing an operator thinks to vary, because it is the thing he thinks of as merely "how I do this," not as an identifier. The register reads it as an identifier, at MEDIUM, on the idiosyncrasy, corroborated โ the author's contingent mark in the operation's necessary form, the signature in the one line the task did not require. The vectors do not lie, and neither does the routine: the mask changed every session, and the script beneath it did not, and in the script's unfixed typo the same hand typed twice.
6. The counter-narrative, steelmanned
The strongest objection to this case is that behavioral attribution is the softest, most subjective thread in the register dressed up as hard evidence โ "they run similar commands" is exactly the kind of impressionistic pattern-matching that produces confident, wrong attributions, and calling a shared command sequence an "invariant" overstates what is really just the observation that attackers do attacker things.
The argument runs like this. Post-access routines, the objection notes, converge by necessity: there are only so many sensible things to do to a compromised Linux box, so of course intrusions look alike โ everyone reconnoiters, downloads, executes, and cleans up, because that is what the situation demands. Reading a "fingerprint" into this convergence is finding faces in clouds: the analyst who wants two intrusions to be one operator will find the resemblances that confirm it, weighting shared steps and discounting differences, in a classic confirmation-bias exercise. And the idiosyncrasies the case leans on, the objection continues, are the weakest part: a "carried typo" or an "unusual flag" could be coincidence, could be two operators copying the same tutorial, could be the analyst over-reading noise as signature. Behavior, on this view, is where attribution goes to fool itself โ a signal so pliable that it can be made to support whatever cluster the analyst already believes in.
The register accepts that soft behavioral matching is exactly this dangerous and argues that the case is built to be the hard kind, not the soft kind. Yes โ "they run similar commands" is impressionistic garbage, and confirmation bias in behavioral attribution is real and rampant; the register does not defend the soft version and would reject it as firmly as the objection does. But the case does not rest on similarity; it rests on exact match of idiosyncratic detail, which is a categorically different claim. The determinism section is precisely the answer to "faces in clouds": a scripted routine is not similar to itself across runs, it is identical, byte for byte in the commands issued, because it is the same program executing โ so the comparison is not the analyst's soft judgment of resemblance but the transcript's hard equality of exact command strings. And the convention-versus-authorship section is precisely the answer to "attackers do attacker things": the register explicitly discards the convergent, necessary steps (which do converge, exactly as the objection says) and attributes only on the contingent, idiosyncratic residue that necessity does not dictate โ the specific flag, the bespoke one-liner, the carried typo. On the coincidence worry: a single idiosyncrasy could be coincidence, which is why the register weights a full idiosyncratic sequence and a carried mistake (both low-probability-by-chance) and why it caps behavior at MEDIUM and requires corroboration, rather than asserting HIGH on a lone flag. The copied-tutorial worry the register not only concedes but names as the signal's defining failure mode โ the copied script โ and handles by attributing "shared script" from the routine and reserving "shared hand" for the routine plus a less-shareable signal. So the objection is a precise description of how behavioral attribution fails, and the case is a precise construction to avoid each failure: exact match not similarity, idiosyncrasy not convention, full sequence not lone tell, MEDIUM not HIGH, corroboration required, copied-script named. The soft version deserves the objection's contempt. The hard version is what the register built.
7. Linkage Signal โ SHARED BEHAVIOR
Case 06 opened the behavioral arc: the operator's scripted routine as a fingerprint. The honeypot captures every command an intruder runs after access, verbatim and in order โ the richest behavioral record in the defensive landscape โ and sees the same routine repeating identically across scattered unrelated IPs. Because the takeover is scripted it is deterministic: the same script issues the same keystrokes every time, so the routine is not a soft resemblance but a hard, exact invariant, comparable transcript-to-transcript. The routine is the operator's structure beneath every surface disguise โ the same operation however different the mask.
The linkage signal โ the thread โ is SHARED BEHAVIOR, at MEDIUM confidence, and its attribution lives entirely in the distinction between convention and authorship. The common recon-and-download steps everyone runs attribute nothing; what individuates is the operator's own authorship โ an unusual flag, a bespoke one-liner, a distinctive ordering, and above all a carried-forever typo, the contingent mark in the operation's necessary form. On the shareability axis, behavior sits above shared infrastructure (a full idiosyncratic sequence is hard to reproduce by coincidence) and below the bespoke key (behavior can be copied), which makes it both an ideal corroborator of key-based clusters and a fallback that attributes the disciplined operator who defeated the credential signals.
The failure mode is the copied script: a shared public playbook or leaked toolkit makes a shared routine reflect a shared source, not a shared hand โ so the register attributes "shared script" on the idiosyncrasy and reserves "shared hand" for the idiosyncrasy plus corroboration, capping behavior at MEDIUM and naming the trap it treats directly in the split and false-flag cases. For the defender, the routine is a high-quality detection surface precisely because it is the last thing an operator thinks to vary; for the operator, it is the fingerprint he does not know he emits, because he thinks of his routine as how he works rather than as who he is. The vectors do not lie, and neither does the routine: the mask changed every session and the script beneath it did not, and in the one unnecessary line the task never required, the same hand signed its name. We do not judge. We record. We let people judge โ and we read the author in the routine, on the line he chose rather than the line he had to write.
Follow the Operator โ Case 06. Linkage signal: SHARED BEHAVIOR. Confidence: MEDIUM โ the operator's scripted post-access routine (recon, download, execute, clean up), captured verbatim by the honeypot and seen repeating identically across scattered IPs, attributed on the exact match of idiosyncratic detail (unusual flags, bespoke one-liners, distinctive ordering, carried-forever typos) rather than the convergent conventional steps everyone runs, and corroborated with the key and HASSH clusters. Confidence sits above shared infrastructure and below the bespoke key on the register's shareability axis: a full idiosyncratic sequence is hard to reproduce by coincidence, but behavior can be copied. The failure mode (the copied public/leaked script โ a shared routine reflecting a shared source, not a shared hand) is named and deferred to the split and false-flag cases; the register attributes 'shared script' on the routine and 'shared hand' only on routine-plus-corroboration. The operator cluster is kept abstract; no real individual is named, and presumption of innocence is preserved. Classification: TLP:WHITE. Include everything โ the vectors do not lie, and they do not judge. The reader judges the author in the routine, the contingent mark in the necessary form, the same hand that typed the unfixed typo twice.