SSH Honeypot — Research Report

Cowrie medium-interaction honeypot on a public Linux VPS. 8 days of capture, cross-referenced with 100+ public threat-intel sources.

Period · 2026-05-08 → 2026-05-15 Software · Cowrie Public port · 22 → NAT → 2222 Mgmt port · 49222 Sessions · 37,477

01 Overview

8 days · 37k sessions · 1.5k unique attacker IPs · 794 malware drops.

37,477
Sessions
1,582
Unique IPs
14,968
Failed Logins
22,720
Logins to Shell
21,968
Commands
794
File Drops
159
External Refs

02 Architecture

Cowrie on an isolated user, public-internet tcp/22 NAT'd to 2222, real SSH moved to 49222.

Attacker / Bot internet tcp/22 Legitimate Admin private SSH key tcp/49222 Rented Linux VPS · public IP iptables NAT PREROUTING redirect 22 → 2222 (cowrie) 49222 → real sshd Cowrie Honeypot unprivileged user `cowrie` python venv · simulated FS Fake shell · TTY recorded creds · commands · payloads listening: 0.0.0.0:2222 Real OpenSSH moved off port 22 listening: 0.0.0.0:49222 redirected tcp/49222
Attackers hit tcp/22 and silently land in the sandbox. Admin keeps a separate path on tcp/49222.

Low-priv user cowrie

Runs as a system user with no sudo, no shell. Worst-case compromise gains no host access.[112,118]

Python venv venv

Pinned, isolated dependency tree. System Python untouched.[113,114]

Simulated FS fake fs

Ephemeral filesystem overlay. Attacker writes never touch the real disk.[50,53]

iptables NAT 22 → 2222

Kernel rewrites inbound tcp/22 to 2222. Cowrie stays on a high port, deception is transparent.[95,96,100,104]

Mgmt port move tcp/49222

Real sshd listens on 49222 — off the spray. Brute-force noise against the real daemon → zero.[75,77,80]

Full capture TTY + DL

Keystrokes, commands, and downloaded payloads logged with timestamps + session IDs.[50,117]

03 Statistics

Daily activity scales 10× once Cowrie accepts more credential pairs — the post-login phase is where the threat intel sits.

Daily activity (stacked)
CONNECT · LOGIN FAILED/SUCCESS · CMD · FILE
Attacks by hour of day
Server local time · all 8 days summed
Top source countries — by attempts
CONNECT + LOGIN attribution by IP block (best-effort)
Top source countries — by unique IPs
Distinct addresses per region

Top source IP addresses

12 noisiest attackers
A handful of hosts produced the bulk of traffic.
#IPCountryNetworkEvents
Top usernames
root dominates ≈ 20×
Top passwords
"123456" still wins · botnet-keyed strings follow

Top successful credential pairs · top commands · top payloads

Credentials that produced a shell
"3245gs5662d34" is a known SSH-spreader signature[32,36,60]
UserPassword#
Captured payloads
Redtail = 4-arch cryptominer ELF[1,4,8,10]
FilenameType#
Most common shell commands
echo "ok" liveness probe · uname recon · authorized_keys implant · dropper scripts
#Command#

Real captured sessions

① Mirai-style liveness probe — root:210488 @ 111.72.138.102
CONNECT port 2222 root:210488 CMD $ echo -e "\x6F\x6B" # "\x6F\x6B" = "ok". Classic Mirai/IoT botnet shell-alive probe.[21,22,29,30]
② SSH-key implant (mdrfckr) — root:Asd12345 @ 102.210.149.105
CONNECT port 2222 root:Asd12345 CMD $ cd ~; chattr -ia .ssh; lockr -ia .ssh CMD $ rm -rf .ssh && mkdir .ssh && echo "ssh-rsa AAAA...mdrfckr" >> .ssh/authorized_keys # mdrfckr = well-known IOC, ~13,000 botnet operations since 2018-07.[11,12,16,18]
③ Redtail cryptominer drop — root:P @ 130.12.180.51
CONNECT port 2222 root:P CMD $ chmod +x clean.sh; sh clean.sh; sh setup.sh; ... FILE clean.sh · setup.sh FILE redtail.arm7 · redtail.arm8 · redtail.i686 · redtail.x86_64 # 4 archs shipped together: ARMv7/v8 routers+IoT, x86 boxes. XMRig Monero miner.[1,4,8,10]

04 Threat Intel Cross-Check

Every notable pattern in our data matches a documented public campaign or family.

Top attacker IPs — public-attribution notes

What public sources say about the networks behind these IPs
Hosts mapped by ASN/CIDR; categorization drawn from cited threat-intel reports
IPCountryNetworkDocumented useRefs

Our numbers vs. the public baseline

MeasureThis honeypotPublic baselineSource
Most-tried usernameroot (95%)root (≈50%)[34]
Top password123456123456[32]
Top "root" password tried3245gs5662d34 (491)345gs5662d34[32]
Multi-arch dropperredtail.arm7/8/i686/x86_64RedTail (4 archs)[1] [4] [10]
SSH-key persistencemdrfckr (497x)~13,000 ops since 2018[11] [12]
Liveness probeecho "\x6F\x6B" (18.4k)Mirai-family marker[22] [29]
Single host share of traffic47.242.70.231 = 22%one Cisco-Talos host ≈ 33% of all internet SSH[127]
Port 22 internet exposureour 1 box~22M hosts globally[75] [80]

05 Why

Each design choice and each pattern in the data — answered with the number that proves it.

Architecture
22M
hosts globally expose SSH
Why move sshd to 49222?
tcp/22 is the single most brute-forced port on the internet[75,80,82]. Off-22 means no spray on the real daemon.
<1024
privileged port boundary
Why iptables NAT, not Cowrie on 22?
Binding under 1024 needs root, defeating the whole point of the unprivileged cowrie user[112,118]. NAT is transparent to the attacker[95,96].
0
host privileges granted to cowrie
Why an unprivileged user?
Worst-case sandbox compromise gains no host access. Standard hardening across every reference Cowrie deployment[50,112,118].
1
isolated dependency tree
Why a Python venv?
Pinned deps · clean teardown · zero interference with system Python. Cowrie's documented install path[50,113].
file ops survived (in the overlay)
Why simulate the filesystem?
Goal is not to block — it's to watch. Attackers proceed; the host stays untouched[53,57].
37k
sessions captured in 8 days
Why full TTY capture?
Post-login behaviour is where the threat intel lives. Replayable sessions let TTPs be matched to known campaigns[50,117,151].
Observed data
60%
of attempts from CN + HK
Why so much Hong Kong / China?
Alibaba HK allows default password-root SSH[72,154]; ChinaNet broadband still hosts the same compromised pool that fed Mirai in 2016[22,155]. Source ≠ actor.
95%
of attempts use root
Why almost always root?
Bots target IoT / router firmware defaults where root is the only account[22,34,39]. Failure costs microseconds; success yields full control.
491×
root:3245gs5662d34 seen
Why does this exact password keep "succeeding"?
Campaign signature. The bot logs in with it, drops payload, sets the same password back for re-entry[32,60,67]. Cowrie accepts it to capture follow-on behaviour.
18,391
echo "\x6F\x6B" probes
Why the same 3-byte probe 18k times?
"\x6F\x6B" = "ok". Mirai-family liveness check: bot writes "ok", waits to see it echoed, confirms a real shell, ships payload[21,22,29].
4
redtail binary architectures shipped together
Why ship 4 binaries in one drop?
arm7=routers · arm8=IoT · i686=legacy x86 · x86_64=servers. Covers the whole compromisable HW universe[1,4,8,10].
10×
jump in CMD events on 2026-05-13
Why the 05-13 activity spike?
Accept-policy tuning. CONNECT volume held; more bots reached the shell phase, so CMD count multiplied 10×. Brute-force is noisy; post-login is where intel lives.
497
mdrfckr key implants
Why do bots install a key after they're already in?
Persistence. Passwords change; keys outlive them. The same mdrfckr key has been observed since 2018[11,12,16].
00–04
UTC peak attack window
Why most attacks at night?
Night here = daytime in East Asia, where the loudest source IPs live. Botnets are still operated, even if loosely, by humans on a workday.

06 Conclusion

Five things this dataset shows that you cannot see from the raw counts. Each is grounded in the captured numbers and in the public literature.

01 · Geography

Most traffic comes from China and Hong Kong — but the obvious reading is wrong.

The intuitive reading — "China is attacking us" — collapses on inspection. The data measures where compromised SSH-spreader infrastructure currently lives, not where the operators sit. Three structural conditions concentrate that infrastructure in CN + HK network space, and each is well-documented in the literature.

First, Alibaba Cloud HK uniquely permits password-based root SSH login on instances by default — a permissive posture repeatedly observed by Trend Micro[72] and SonicWall[154]. Cheap HK instances become trivially compromised and immediately convert into spreader nodes. Three of our top-15 attacker IPs sit in Alibaba Cloud HK; together they emit 33% of all events.

Second, the consumer-broadband pool that fed the original Mirai botnet in 2016 — millions of always-on, default-credential routers and ONTs — has not measurably shrunk in a decade. Antonakakis et al. measured 600k Mirai infections at peak[22,155]; our 111.72.138.102 (ChinaNet broadband, 20,663 events) is a textbook 2026 example of the same population still being recruited.

Third, source-IP geolocation is a victim measurement, not an actor measurement. The IMC 2025 long-term SSH honeynet study[151] makes this explicit: top source ASNs correlate with cloud-provider permissive defaults far more strongly than with country-of-operator. Blocking by country buys little; blocking by CIDR or ASN is what defeats the campaign.

02 · Monetization

Every captured payload is a cryptominer — and specifically a Monero one. That is not coincidence.

The Mirai era (2016–2017) monetized compromised devices primarily through DDoS-for-hire and click fraud[22,29,155]. From 2018 onward, the dominant payload shifted to Monero (XMR) mining via XMRig — a transition Pastrana & Suarez-Tangil documented at scale across 4.5M malware samples, attributing ~4.4% of all circulating XMR (≈$58M USD at the time of their measurement) to mining-malware campaigns[149,150,158]. Our sensor captured the current dominant strain in that lineage: Redtail[1,4,8,10].

The economic logic of choosing Monero over Bitcoin is unambiguous. XMR is CPU-mineable, so every captured architecture contributes revenue — a router, an IoT camera, and a server all become productive workers in the same pool. The chain is privacy-preserving by construction (ring signatures, stealth addresses), so the revenue stream is untraceable. And mining is entirely passive: no victim interaction, no extortion, no headline. The victim's only observable signal is a higher electricity bill weeks or months later.

Compared to ransomware — high per-host revenue but immediate incident response — cryptojacking has lower revenue per host but materially higher operator ROI at scale. Akamai's analysis of the long-running dhpcd miner shows the model: pennies per host per day, sustained across thousands of hosts, undetected for four years[87]. Red Canary's 2024 detection-trends report names Linux coinminers as the single most prevalent threat against Linux hosts they observe[94]. The four-architecture dropper our sensor caught is not an aberration — it is the modal payload of the current SSH-brute-force economy.

03 · Credentials

95% of login attempts still target root — a decade after distros disabled it.

Modern Debian, Ubuntu and RHEL ship PermitRootLogin prohibit-password or stricter by default. So why do bots still try root in 22,814 out of every 24,000 attempts on this sensor — a pattern reproduced in honeypot study after honeypot study[34,39,151,153]?

The brute-force economy is not tuned for hardened Linux servers. It is tuned for the firmware defaults of consumer routers, IoT, surveillance gear and legacy embedded systems, where root is frequently the only account that exists[22,155]. Antonakakis et al. showed Mirai's success was driven entirely by ~60 default credential pairs against this exact population. Eight years later, the population has not been replaced.

The cost-benefit math also favors always-try-root regardless of target. A failed SSH attempt costs the attacker microseconds and a TCP handshake. A successful root login yields full control with no privilege-escalation step. When attempts are effectively free, the optimal bot strategy is to maximise the upside of the rare success — and the maximum upside is always root.

The mirror-image conclusion is the operationally important one: disabling root SSH on the production daemon would have blocked 95% of volume on this sensor. The data confirms what the Mirai literature warned in 2017 — bots have not adapted to that single mitigation in nearly a decade. The defender's cost is one sshd_config line; the attacker's cost of working around it is the entire economic model.

04 · Operator behavior

Attacker IPs cluster in /22 and /24 ranges inside specific bulletproof hosters.

The top-15 attacker list contains three IPs from 45.153.34.0/22 plus a fourth from the adjacent 45.156.84.0/22 — all assigned to IT7 Networks Bulgaria[105,106], all running identical credential lists and identical command sequences. Two further entries (176.65.132.24 and 185.217.1.246) sit inside Aeza Group, the Russian bulletproof hoster sanctioned by the US Treasury and the UK NCA in July 2025[40,41,44].

This is the signature of bulk VPS provisioning: an operator rents an entire CIDR slice from a hoster and launches the same bot from every address in it. The selection of hoster is not incidental. Aeza was explicitly sanctioned because its terms of service refused takedown requests — a structural feature, not an oversight[42,46,48]. IT7 Networks has been ThreatFox-tagged for the same pattern[105].

The implication for defensive feeds is direct: IP-level blocklists decay rapidly because the operator simply moves to the next /32 in the same block. ASN- and CIDR-level filtering remains effective for weeks to months, because the operator's cost of switching hosters is materially higher than the cost of recycling individual IPs. This is the empirical reasoning behind the Spamhaus and abuse.ch listing model[105,108], and our 8-day dataset reproduces it cleanly.

05 · Research economics

One rented VPS produces data corroborated by 159 industry and academic sources.

The SSH brute-force ecosystem on the public internet is so concentrated — a small set of campaigns, a small set of operators, a small set of hosting networks — that a single sensor independently reproduces findings published by Cisco Talos[127] (12M brute-force attempts in 11 days, single actor briefly ≈ 33% of all internet SSH activity), Akamai[10,87], Forescout[1], Elastic Security Labs[3], GreyNoise[120,122], Shadowserver[80], SANS ISC[4,32,34,156], MITRE ATT&CK[16,18,137,138], and the IMC academic studies of 2019 and 2025[149,151].

For research practice this matters: SSH-honeypot findings generalize. The marginal cost of becoming a contributing node in the public IOC ecosystem is one VPS-month of compute — effectively zero. The "Analysis of Honeypots" arXiv survey[152] makes this explicit as a reproducibility property: even a single sensor produces statistically stable distributions for the top campaigns within days.

For operational security the implication is sharper. Internal-network honeypots — deployed alongside, not in place of, commercial threat-intel feeds — are cheap, evidence-rich, and produce locally-grounded IOCs that commercial feeds cannot supply, because they do not see local traffic. The recent IMC 2025 long-term honeynet paper[151] argues directly that the marginal value of organisation-internal honeypots has been consistently underestimated by enterprise security programs. The data presented here is a small confirmation of that thesis.

Bottom Line
The SSH brute-force ecosystem on tcp/22 is industrial-scale, a decade old, and operationally monocultural. The same campaigns (Redtail · Mirai-family · mdrfckr SSH-spreader) cycle through the same hosting infrastructure (Alibaba HK, ChinaNet broadband, IT7 Networks BG, Aeza Group RU) using the same credential lists against the same victim population (IoT, routers, default-root Linux). Nothing observed here is novel; everything observed here is independently documented in the public literature back to 2017[22,149,151].
For defenders
Disable root SSH, move off port 22, ingest public threat-intel feeds. Each is a 30-second configuration change that demonstrably defeats the bulk of the threat. The bots have not adapted around any of them in eight years[22,75,80,127].
For research & operations
A single $5/month sensor is empirically sufficient to reproduce industry-wide findings. The marginal cost of contributing evidence-grade telemetry to the public IOC ecosystem is effectively zero — and the marginal value of doing so internally, against your own traffic, is higher than any commercial feed[151,152].

07 References · 159 sources

Filter by topic. Numbers match the inline citations above.