Deception CheckDeception Check← all research
Threat Research

The 52-Command Playbook

How a botnet sizes you up — and quietly checks whether you're a honeypot — before it ever drops a payload.

Deception Check Threat Research · July 2026
The short version Most of what hits an internet-exposed Linux box isn't an attack yet — it's a survey. We captured one: a 52-command reconnaissance playbook that ran 886 times, byte-for-byte identical, across at least five of our Linux decoys in multiple regions. It resolves the exact CPU architecture to pick a binary, checks for a GPU to gauge mining value, and — most tellingly — writes and runs a test script to confirm the shell is real. That last step is anti-honeypot detection. Here's the whole thing, taken apart.
886×
Identical runs of the same playbook
52
Commands · same order · every time
5+
Linux decoys, multiple regions (sampled)
The same 52-command playbook running identically across a sample of Linux decoys
The same 52-command playbook, byte-for-byte identical across a sample of our Linux decoys. A human didn't type this once, let alone hundreds of times — this is a program.

What we saw

Across a two-week window, our fleet of LLM-backed SSH and Telnet decoys logged tens of thousands of hands-on shell sessions. When we clustered those sessions by their exact command set, one signature stood out: a 52-command reconnaissance playbook that appeared 886 times, run identically across at least five of our Linux decoys, in multiple regions. Same commands, same order, same sentinel strings. No typos, no exploration, no hesitation.

Public abuse feeds log these same hosts hammering SSH with brute-force logins; once one succeeds, this survey runs in the shell it opens. On our decoys the door always opens — so we get to watch what happens next, and what it does is a small masterpiece of automated triage.

The playbook, phase by phase

Phase 1 — Resolve the tools

It doesn't assume uname lives in one place. It calls it three ways and falls back to reading /proc/version directly. Embedded and IoT systems are stripped down and inconsistent; this playbook is built to work on all of them.

commands 1–4$ /bin/uname -s -v -n -m 2>/dev/null
$ busybox uname -s -v -n -m 2>/dev/null
$ head -1 /proc/version
$ grep '^ID=' /etc/os-release

Phase 2 — Resolve the CPU architecture

This is the tell. It determines the exact instruction set with a fallback ladder straight out of the botnet-loader playbook:

commands 9–19$ grep -q "lm" /proc/cpuinfo && echo x86_64
$ grep -q "CPU architecture: 8" /proc/cpuinfo && echo aarch64
$ grep -q "CPU architecture: 7" /proc/cpuinfo && echo armv7l

The lm ("long mode") flag means 64-bit x86; CPU architecture: 8 is ARMv8/aarch64; 7 is ARMv7. Multi-architecture malware carries a dozen compiled binaries — x86_64, ARM, MIPS, PPC, SH4 — and it needs to pick the right one. This is how it decides which binary to drop. In a separate session on the same fleet, we watched the follow-through: a loader that dropped ARM, ARMv5, ARMv7, and MIPS binaries one after another, byte-by-byte. Security researchers have documented this exact fallback pattern as a hallmark of multi-architecture IoT loader reconnaissance.

Phase 3 — Is this box worth having?

It counts cores, reads the CPU model, checks /proc/device-tree/model (an embedded-device tell), pulls uptime, and reads login history with last. Then the most interesting line in the whole survey:

command 29$ lspci 2>/dev/null | grep -i nvidia

It's looking for a GPU. A box with an NVIDIA card is a cryptomining or ML-theft prize, not just another DDoS foot-soldier. CPU-and-GPU resource profiling is well-established botnet behavior — mining is resource-hungry, and operators triage accordingly.

Phase 4 — Is this shell even real?

This is the part that should make honeypot operators uncomfortable. The playbook prints a marker, ===SHELL_BEHAVIOR===, and then runs a genuine capability test:

commands 32–51$ printf '#!/bin/sh\necho "xxxxxx"\n' > filter && chmod +x filter && ./filter
$ case "$out" in *xxxxxx*) ... try bash / /bin/bash / /usr/bin/bash / busybox sh

It writes a tiny script, makes it executable, runs it, and checks whether the sentinel xxxxxx actually comes back — repeating the test across every shell it can find and capturing the error mode of each. In plain terms: it is checking whether commands truly execute, or whether something is faking the output.

Why this matters for deception That is anti-honeypot detection. Low- and medium-interaction honeypots simulate a shell by returning canned responses, and they get fingerprinted precisely because their state machine doesn't behave like a real one under this kind of probing. A faked shell writes the test script, "runs" it, and returns nothing coherent — the survey notices, flags the box as a trap, and moves on without ever revealing the payload. Our decoys answer the probe like a real host because the shell is model-driven rather than a lookup table, which is why we see the whole kill chain instead of just the knock at the door.

Phase 5 — Report

Everything collapses into one structured, machine-readable line:

command 52$ echo "UNAME:$uname ARCH:$arch UPTIME:$uptime CPUS:$cpus"

Key-value, easy to parse, easy to route. This output feeds a queue that decides — automatically, at scale — which boxes get which binary, which get mined, and which get discarded as honeypots.

Why it matters

Seeing the same playbook 886 times across just a handful of our decoys is a rounding error of a campaign that is surveying the entire internet, continuously.

This is the internet's triage layer, and you can watch it work. The 52-command playbook isn't the attack; it's the census the attack runs first. Industry telemetry backs the scale: 2025's botnet growth was driven less by novel malware than by automation against known weaknesses, with Mirai-descended families (Murdoc, Resbot/LZRD, Mozi, Gafgyt, Hajime) scanning broadly and deploying multi-architecture payloads — and Mirai-class DDoS alone was pegged at $2B+ in global damages for the year.

The honeypot that survives the census is the one that catches the payload. The Phase-4 shell-behavior probe is a filter designed to make traps disqualify themselves — a decoy that only fakes a shell gets fingerprinted and abandoned before the interesting part ever happens.

Is it "AI"? No.

A timing-based classifier would happily label this session "agentic": no typos, steady sub-second pacing, dozens of distinct commands, methodical branching that looks like reasoning. It isn't. It's identical across hundreds of sessions and many source IPs — the signature of a very good script. The honest test for an autonomous AI attacker is behavior that adapts over time, not one fast, flawless, perfectly repeatable run. That distinction is the difference between a threat-intel headline and a threat-intel finding.

What defenders should take from this

The census never stops. The useful question isn't whether you're being surveyed — you are — but whether you can watch it happen.

Indicators

The playbook ran from 20 source addresses clustered in a handful of /24 ranges — not a single host. Those ranges span a few offshore/anonymized ASNs — AS47890 and AS48090 (Romania / Netherlands “Unmanaged Ltd” / “Techoff” space that OSINT reports frequently tie to “DMCA-ignored” marketing), plus a third offshore ASN (AS197170 / AS210644, per differing OSINT sources). Treat the networks as blockable indicators, but lean on the behavioral signatures: the same toolkit reappears from fresh IPs, while the command pattern stays constant.

Source networks (observed) net  2.57.122.0/24  ·  AS47890 (RO)  ·  busiest host 2.57.122.168
net  92.118.39.0/24  ·  AS47890 (RO)  ·  .77 .71 .14 .49 .50
net  80.94.92.0/23  ·  AS47890 (RO)  ·  .234 .55 .179
net  193.32.162.0/24  ·  AS47890 (RO)  ·  .84
net  195.178.110.0/24  ·  AS48090 (NL)  ·  .217 .227 .232 .228
net  91.92.40.0/24  ·  AS197170 / AS210644 (offshore)  ·  .231 .176 .233 .240 .237
Host fingerprint (uniform across the botnet) os     Ubuntu 22.04 · OpenSSH 8.9p1  (banner: SSH-2.0-OpenSSH_8.9p1, Ubuntu 22.04)
port   22/tcp only — no other services exposed
rep    Shodan tag “scanner”  ·  VirusTotal 12–17 / 91 vendors malicious
Behavioral signatures (hunt on these) marker  ===SHELL_BEHAVIOR===  and  ===DONE===  · the shell-reality probe
cmd     printf '#!/bin/sh\necho "xxxxxx"' > filter && chmod +x filter && ./filter
cmd     grep -q "CPU architecture: 8" /proc/cpuinfo  · arch fallback ladder
cmd     lspci 2>/dev/null | grep -i nvidia  · GPU / mining triage
sentinel  xxxxxx  · execution-test string echoed back to confirm a real shell
report  UNAME:$uname ARCH:$arch UPTIME:$uptime CPUS:$cpus  · structured output line
Independently corroborated These aren't our indicators alone, and the pattern holds across every range. Shodan tags most of these hosts a scanner; 12–17 of 91 vendors on VirusTotal flag each malicious; and GreyNoise, Guardpot, AbuseIPDB, ThreatHive, and Live Honey Feed all independently report the same SSH brute-force combined with network scanning across the same window (late June through 22 July 2026). What our fleet adds is the part the brute-force trackers miss: the post-access reconnaissance — the architecture triage, the GPU check, and the shell-reality probe.
MITRE ATT&CK T1110     Brute Force  · the same hosts force the door (cross-feed)
T1059     Command and Scripting Interpreter
T1082     System Information Discovery
T1083     File and Directory Discovery  · reads /proc, /etc/os-release
T1497.001 Virtualization / Sandbox Evasion — System Checks  · the shell-reality probe (our mapping)

Sources & notes

About Deception Check

Deception Check operates a global fleet of LLM-backed honeypots that study how attackers behave the moment they reach an exposed system — from Linux servers to industrial controllers and medical devices. We turn that behavior into early-warning detection for the operational-technology, healthcare, and enterprise environments that conventional tools struggle to protect. This briefing is for educational purposes and references open, citable sources throughout.

© 2026 Deception Check. Command sequences reproduced from real captured sessions; identifying details withheld.