Campaign comparison
The DDoS Zombie That Won't Let Go vs Skynet Lost the War in 2013. Its Malware Still Doesn't Know It.
2026-09-10 · 2026-08-29
Link signals
Analytic
Same stage(s) reached by different techniques: initial-access, execution, defense-evasion, impact, command-and-control — same objective, different method
Commodity
Shared ATT&CK technique(s): T1571 — commodity, many actors share these
Actor & objective
Actor
unattributed
vs
unattributed
different
Objective
DDoS-for-hire botnet recruitment: conscripts the host as an on-demand flooding zombie, not data theft. The lockdown behavior exists to keep the machine exclusively under the operator's control.
vs
financial: banking credential theft (ZeuS core) and cryptocurrency mining, with a persistent per-victim Tor backdoor for remote access
different
Kill chain
= same stage & technique ≠ same stage, different technique • unique to one campaign
The DDoS Zombie That Won't Let Go
-
divergent step: 1. initial-access
· T1190
Jenkins Script Console reachable from the internet without a password; Groovy code execution as the service account, no exploit required
-
divergent step: 2. execution
· T1059.004
delivery command tries five writable directories and three download tools (wget/curl/busybox wget) in turn, then runs the binary four times in a row
-
unique step: 3. persistence
· T1543.002
writes /etc/systemd/system/system-helper.service ("System Helper", Restart=always), enables it, then deletes its own file from disk
-
divergent step: 4. defense-evasion
· T1562.004
adds firewall chain LOCKER_INPUT dropping inbound traffic on SSH/Telnet/RDP/VNC ports so remote access cannot be restored
-
divergent step: 5. impact
· T1489
kills sshd, dropbear, ftpd, vncserver, xinetd and in.telnetd before the firewall rules go in
-
divergent step: 6. defense-evasion
· T1562.001
sets 19 download-tool binaries (wget/curl/tftp/scp/aria2c and others) to permission 000, and SIGKILLs ps/top/netstat/tcpdump/strace/gdb and a dozen other analysis tools the instant they start
-
divergent step: 7. defense-evasion
· T1070.002
deletes and recreates empty auth.log, syslog, messages, secure, wtmp, btmp, lastlog, faillog, dmesg, kern.log and the journal/audit directories
-
divergent step: 8. defense-evasion
· T1070.003
wipes .bash_history and .zsh_history for the current user and root
-
divergent step: 9. defense-evasion
· T1027
the process-blocklist table (gdb, strace, ltrace, objdump, readelf, strings, radare2, iaito, ghidra, binwalk) is stored XOR'd with 0xE7 at a fixed offset so it never appears in a strings dump; identical across both builds
-
divergent step: 10. defense-evasion
· T1622
background thread every 10 seconds: self-ptrace, TracerPid check, FNV-1a memory hash against a baseline, and a scan for the 0xCC breakpoint byte; any hit kills and relaunches the process from /proc/self/exe
-
divergent step: 11. defense-evasion
· T1036.004
renames its running process to kworker/0:0, mimicking a kernel worker thread that would never hold a network socket
-
divergent step: 12. command-and-control
· T1571
hardcoded IPv4 literal and fixed port (83.168.69[.]95:9482); plain-text single-line protocol, no domain, no DNS lookup, no encryption, no fallback
-
divergent step: 13. impact
· T1498
on command, floods a named target using one of 11 methods (udpplain, syn, std, pps, ack, raknet, ssh, http, tcpstomp, minecraft, ovh)
Skynet Lost the War in 2013. Its Malware Still Doesn't Know It.
-
divergent step: 1. initial-access
· T1204.002
fake lossless-audio release on Usenet; unpacks to an executable and a 58MB random-filler blob, no media content
-
divergent step: 2. defense-evasion
· T1027.002
3.7MB code section, 13% real code, 87% random filler/zero padding, 1,684 opaque predicates
-
divergent step: 3. defense-evasion
· T1027.007
import table declares only C-runtime housekeeping; functions resolved at runtime by manually walking the PEB and parsing export tables
-
divergent step: 4. defense-evasion
· T1497.003
~483 billion computed instructions (3-8 min CPU-saturated stall) before any file/registry/network activity, outlasting default sandbox timeouts
-
divergent step: 5. execution
· T1055.012
svchost.exe started suspended, written to, resumed: manually mapped image with no OS record of the module
-
unique step: 6. credential-access
· T1056.004
ntdll.dll remapped writable in every injected process; read as ZeuS installing its own form-grabbing hooks, not anti-EDR unhooking
-
divergent step: 7. command-and-control
· T1090.003
IRC C2 over Tor v2 hidden services; per-victim inbound hidden service on non-standard port 55080
-
divergent step: 8. impact
· T1496
CGMiner GPU mining, idle-gated (starts after 2 minutes without user input, stops on touch)
Side by side
green = shared by both campaigns.
| The DDoS Zombie That Won't Let Go | Skynet Lost the War in 2013. Its Malware Still Doesn't Know It. |
|---|---|
| Procedures | |
| AV/sandbox-domain hosts-file poisoning (21 entries to 0.0.0.0)XOR-obfuscated (0xE7) anti-analysis process-block tableanalysis-tool SIGKILL on launchdownload-tool permission-zeroing (chmod 000 across 19 paths, reversible via a saved permissions list)firewall-based remote-access denial (LOCKER_INPUT chain)iterative recompilation (2 builds, 7 days apart, from the same URL)kworker process-name masquerademulti-directory, multi-tool delivery fallback (5 candidate directories, 3 download tools, 4x execution)ptrace/TracerPid/memory-hash/breakpoint-byte anti-debug with self-relaunchrival bot/miner eviction | manual-PEB-walk-api-resolutionntdll-writable-form-grab-hooksopaque-predicate-bloatprocess-hollowing:svchost.exesandbox-timer-stall |
| Toolmarks | |
| C2 registration string format: "<arch> <group> <memMB> <cpus>"build 2 only: .cron_backup/, .locker.disabled, a "stealth" line appended to /etc/modulesfile names .locker.pid / .locker.lock / .locker.ready / .watchdog.pid / .disabled.list / .iptables.rulesfirewall chain LOCKER_INPUTprocess name t.me/flylegitservice unit system-helper.service ("System Helper") | 1,684 opaque predicates over 87% paddingPEB-walk API resolution instead of import tablentdll.dll made writable for form-grabbing hookssvchost.exe process hollowing~483B-instruction sandbox-timer stall |
| C2 protocol | |
| custom plain-text TCP on port 9482: registration string "<arch> <group> <memMB> <cpus>", ping/pong keepalive, unencrypted attack-order commands, 8-second retry cadence, gives up after 450 straight failures | IRC over Tor v2 hidden services (30 addresses); per-victim inbound Tor hidden service on port 55080. All defunct since Tor removed v2 in October 2021 |
| Tooling | |
| mirai-derived custom DDoS bot (C, static uClibc, UPX-packed) | cgminertorzeus |
| Capabilities | |
| hardcoded plain-text C2 over a non-standard port; no domain, no DNS, no encryption, no fallbackon-command DDoS flood across 11 methods (udpplain, syn, std, pps, ack, raknet, ssh, http, tcpstomp, minecraft, ovh)rival-bot and rival-miner eviction to keep the host exclusiveself-defense lockdown: kills remote-access daemons, firewalls off SSH/Telnet/RDP/VNC ports, zeroes permissions on 19 download tools, kills analysis tooling the instant it launches, poisons /etc/hosts against 21 AV/sandbox vendors, deletes logs and shell historysystemd persistence (Restart=always) plus a self-relaunch-from-memory routine triggered by anti-debug checks | GPU cryptocurrency mining (CGMiner)SOCKS4/SOCKS5 proxying and denial of service, driven over IRCbanking credential theft (ZeuS core, form grabbing via ntdll hooking)per-victim Tor hidden service for inbound remote access |
| C2 | |
| 83.168.69.95:9482 (hardcoded plain-text control channel, both builds) | 28 additional Tor v2 addresses, full list published in the briefqdzjxwujdtxrjkrz.onion (ZeuS configuration server, port 80)uy5t7cus7dptkchs.onion (primary IRC C2, port 16667) |
| ASNs | |
| AS202520 (SkyPass Solutions, Warsaw, Poland — staging and C2 host, same machine on two ports) | — |
| Products | |
| Jenkins (Script Console) | — |
| Sectors | |
| — | consumer |