slatterysec.com/reports/2026/08/2026-08-11_2026-08-15-honeypot-report.html
sensors 8 up last session 4m ago 24h captures 312 unique src 87

slattery@sec:~/reports$ cat 2026-08-11_2026-08-15-honeypot-report.md

HONEYPOT REPORT  //  2026-08-11 – 2026-08-15

2026-08-11 – 2026-08-15 — SSH, Telnet + Web Honeypot Report

period   2026-08-11 – 2026-08-15
sensors   Cowrie SSH/telnet + web deception panel
host   VPS · containerized
SSH TELNET WEB HONEYTOKEN FIRED GO WORM C2 CALLBACK
SSH + TELNET SESSIONS
25,228
5 days
UNIQUE SOURCES
1,928
shell sensor
AUTH ATTEMPTS
23,347
2,427 succeeded
PAYLOADS CAPTURED
985
42 unique samples
WEB REQUESTS
47,985
660 unique sources
HONEYTOKEN ALERTS
27
from 3 distinct consumers

SSH and telnet volume by day

2,595
08-11
3,318
08-12
6,929
08-13
5,790
08-14
6,596
08-15

The shell sensor was restored on 2026-08-11; the first day is partial.

Executive summary

Two changes landed at the start of this period. The shell sensor came back after a six-day outage, and the web panel began answering config-file probes with plausible content instead of 404s. The second change produced the period's central finding within ninety-two seconds of the first request.

Ninety-two seconds. At 18:16:08 UTC on 2026-08-11, a Google Cloud host retrieved a fabricated .env file containing an AWS key. At 18:20 UTC the same address used that key against Amazon Bedrock, calling Converse — the API for invoking a chat model. Not GetCallerIdentity, not S3 enumeration. It went straight for LLM inference.

That is not credential validation. It is credential monetisation: stolen model access is resold or used to run inference on someone else's account. The pipeline treats an AWS key as a product with one specific use, and it tests for that use first.

The scraper is worth as much attention as the outcome. In fifty-eight seconds it made 283 requests while rotating through ten forged user-agents, all impersonating AI companies' crawlers: OAI-SearchBot, PerplexityBot, Amazonbot, Amzn-SearchBot, Google-Extended, and Cohere. Requests for /.aws/credentials and /proc/self/environ arrived under the banner of a search indexer. The disguise is chosen to match the theft: a bot harvesting keys for model access dresses as the crawlers that would plausibly be reading the whole internet.

Twenty-seven token alerts followed over five days, from three unrelated consumers — the Go client above, a Windows Boto3 installation, and a Python aiohttp script calling ListAttachedUserPolicies. Different tooling, different platforms, staggered over days. One planted credential entered circulation and was picked up repeatedly by parties who never touched the sensor that issued it.

On the shell side, the restored sensor immediately captured what six days of silence had cost. 985 payload retrievals produced 42 unique samples spanning eleven CPU architectures. The coordinated brute-force quota pattern first seen in July persists unchanged: eight addresses at exactly 773 sessions each.

Notable sessions — web

2026-08-11 18:16:08 → 18:20 TOKEN CHAIN 34.139.95.215
Full scrape-to-monetisation chain captured end to end: config decoy retrieved, AWS key extracted, Bedrock inference called four minutes later.
scrape window: 18:16:08 → 18:17:06 — 283 requests in 58 seconds
decoys taken: /.env, /.env.local, /.env.production, /.env.development, /api/.env, /backend/.env, /app/.env, /config.json, /.aws/credentials
forged user-agents: 10 distinct, impersonating OAI-SearchBot, PerplexityBot, Amazonbot, Amzn-SearchBot, Google-Extended, Cohere
token used: 2026-08-11 18:20 UTC
api call: bedrock:Converse — LLM inference, not enumeration
elapsed: 92 seconds from key delivery to use
2026-08-14 02:29 TOKEN REUSE 80.96.113.38
Second consumer, unrelated tooling and platform, using the same credential three days later.
user-agent: Boto3/1.40.40 Botocore/1.40.40 · Python 3.13 · Windows 11 · amd64
note: never contacted the sensor; the credential reached it by another route
2026-08-16 07:58 TOKEN REUSE 181.214.70.101
Third consumer, enumerating permissions rather than invoking a service.
user-agent: Python/3.13 aiohttp/3.9.5
api call: iam:ListAttachedUserPolicies
assessment: assessing what the key can reach — a different objective from the first consumer
2026-08-11 → 08-15 CRAWLER ABUSE 34.22.193.156
A single Google Cloud host sweeping the full ten-path config list every 10-15 minutes for days, identifying as Cohere's crawler.
requests: 1,729 decoy fetches — 89% of all decoy traffic
user-agent: Mozilla/5.0 (compatible; cohere-ai/1.0; +https://cohere.com)
note: a legitimate training crawler has no reason to request /.aws/credentials, or to re-fetch the same paths hourly

Notable sessions — SSH and telnet

2026-08-11 13:58 GO BACKDOOR 121.125.67.137
A binary named sshd, uploaded fourteen times in July and never executed, was run for the first time. Static analysis follows below.
command: chmod +x ./.5939627165036659097/sshd; nohup ./.5939627165036659097/sshd &
sha256: 94f2e4d8d4436874785cd14e6e6d403507b8750852f7f2040352069a75da4c00
size: 30.3 MB, Go 1.18, x86-64, links libpam and libc
2026-08-11 11:07:12 → 11:07:15 C2 CALLBACK 77.90.185.66
The payload host connects back to the sensor within three seconds of any victim fetching from it. Observed fourteen times across the period.
pattern: victim fetches http://77.90.185.66/wget → 77.90.185.66 opens a telnet session to the fetching host, 2-4 seconds later
repeats: 11:07, 12:06, 12:23, 12:39, 12:43, 13:47, 15:08, 17:13, 17:56, 18:15, 18:34, 18:51, 19:19, 19:41
payload: Mirai variant, five architectures, written to dvrHelper
assessment: loader reports the fetch; C2 immediately probes the fetching address
2026-08-11 15:04 PRE-DEPLOY CHECK 23.160.56.10
The most careful session in the period: writability testing across five directories, then a check for an existing infection marker before deploying anything.
client banner: SSH-2.0-PUTTY
write test: /dev/shm, /tmp, /var/tmp, /home, /root — touch, chmod +x, remove
marker check: ls -la /var/run/gcc.pid
note: checking whether the host is already owned before spending a payload on it
2026-08-11 15:02 → 16:05 SORTED WORDLIST 92.118.39.49
Sixteen sessions three minutes apart, walking a credential list in exact ASCII sort order.
order: 1234, 123456, 12345678, P@ssw0rd, admin, admin123, changeme, default, letmein, passw0rd, password, qwerty, root, root123, system, toor
client: SSH-2.0-Go
note: 195.178.110.228 repeats the same sorted walk; 110.38.194.125 and 110.36.78.197 share a different list in identical non-alphabetical order

Static analysis — the sshd backdoor

This binary was uploaded fourteen times in July and never run, which left it unexplained. On 2026-08-11 it was executed for the first time, and the captured sample is a 30 MB Go 1.18 executable that is considerably more than a mining dropper.

The name is not incidental. It links libpam.so.0 and imports the full PAM authentication interface — pam_authenticate, pam_acct_mgmt, pam_chauthtok, pam_open_session. It also embeds an SSH and SFTP server implementation. It replaces the system SSH daemon with one that authenticates users normally and captures their credentials in the process.

slattery@sec:~/samples$ strings sshd | grep -oE '^main\.[a-zA-Z_]+' | sort -u

main.antikill            main.p2p                 main.spreader
main.antitaskmanager     main.p2phandleclient     main.sshtry
main.forever             main.p2phandleconnection main.startupmanager
main.healthchecker       main.protector           main.updater
main.killnbminer         main.randomIP            main.miner
main.killxmrig           main.loadpayload         main.getMyIP

The function names describe the whole design. randomIP and sshtry feeding a spreader makes it a worm. p2p with connection handlers means peer-to-peer command and control rather than a fixed C2. antikill, antitaskmanager and protector are anti-removal. killxmrig and killnbminer remove competitors' miners before installing its own.

Two things stand out in the configuration. It carries presets for both XMRig and NBMiner — pool address, user, password and algorithm for each, with a NiceHash toggle — so it mines on either CPU or GPU depending on what it lands on. And it exfiltrates through a Discord webhook, using a consumer chat platform as C2 to blend with ordinary HTTPS traffic.

A main.credential struct and an attackqueue of the same type confirm the loop: harvest credentials via PAM, queue them, spread using them.

One binary combining credential theft, worm propagation, P2P C2, competitor eviction, dual-miner payloads and Discord exfiltration. The July observation that it was uploaded but never executed now reads differently — the operator was staging it, not testing it.

Other captured samples

Forty-two unique samples across eleven architectures: x86-64, i386, ARM (v4 through v7 and aarch64), MIPS big- and little-endian, PowerPC, SPARC, m68k, SH4 and RISC-V. Three of note:

A 2017 worm, still running. One 4.7 KB bash script is Linux.MulDrop.14, the Raspberry Pi worm from 2017. It still hard-codes the pi user, still sets the same password hash, still adds the same author key to /root/.ssh/authorized_keys, and still blackholes bins.deutschland-zahlung.eu in /etc/hosts to lock out its own earlier versions. Nine years on, unmodified.

An eleven-architecture spray. Exodus.sh from 176.65.139.228:6677 fetches every binary in its /bins/ directory — x86, x32, mips, mipsel, arm4 through arm7, sh4, ppc, m68k — chmods all eleven, launches all eleven in the background with || true, sleeps ten seconds, deletes everything and clears history. No architecture detection at all: run them all and let ten fail.

An attacker's own private key. A 399-byte OpenSSH Ed25519 private key was uploaded to the sensor, comment dlr@sftp. Not a public key planted for persistence — a private key, presumably transferred by mistake or as part of tooling that expects to authenticate onward from the victim.

Indicators

Payload hosts

hostservesretrievals
2.26.136.128twget.sh — STC/TOASTER Mirai fork244
185.93.89.72/wget over HTTP and /ftpget over FTP111
77.90.185.66Mirai, 5 architectures — also calls back to fetchers30
5.182.210.174/ok plus six-hex-character rotating filenames15
176.65.139.228:6677Exodus.sh and an 11-architecture /bins/ tree10
205.237.110.2325 architectures written to random 6-letter filenames1
83.168.69.141loader1

Busiest shell sources

sourcesessionsnote
160.153.175.111,111single highest talker
91.92.42.133773quota group
91.92.42.147773quota group
45.153.34.137773quota group
77.239.124.239773quota group
45.156.87.253773quota group — also active in July
45.153.34.167773quota group
77.239.124.251772quota group
Seven addresses at exactly 773 sessions and one at 772, spread across four netblocks. The same quota pattern appeared in July at 773 and 762 sessions per host. A scheduler is dividing a target list into equal shares; the value has not changed in a month.

Honeytoken consumers

sourcefirst seentoolingAPI call
34.139.95.2152026-08-11 18:20Go-http-client/1.1bedrock:Converse
80.96.113.382026-08-14 02:29Boto3 1.40.40 · Python 3.13 · Win11
181.214.70.1012026-08-16 07:58Python 3.13 aiohttp 3.9.5iam:ListAttachedUserPolicies

Payload hashes

sha256what it is
94f2e4d8d4436874785cd14e6e6d403507b8750852f7f2040352069a75da4c00
virustotal →
sshd — Go worm, PAM credential theft, dual miner, Discord C2
6d1fe6ab3cd04ca5d1ab790339ee2b6577553bc042af3b7587ece0c195267c9b
virustotal →
Linux.MulDrop.14 — 2017 Raspberry Pi worm, unmodified
e4eaae680e23b413ec82a1cb66b4704f2d5df913520700f15e1a65c4ce10d322
virustotal →
Exodus.sh — 11-architecture spray loader
e4e6d77040f6a91d42292fe7b8fbf9e6ca5722c940097e21a345d03b522af43d
virustotal →
Mirai stager → dvrHelper, 5 architectures
1e70b63472772e3f5092ffe9c3573470e73590e6ab6d93fdcede1d368a5fd72d
virustotal →
Redtail installer — noexec-aware, random filenames
3f3a11bafabb1a35db913cfe51995f2e357d049e268860175876ae5a93d23892
virustotal →
Redtail clean.sh — competitor and cron eviction
43728fbfb98bb39ff61a2db0fc2905bd6937997062b05b9ab8b186fdee18c09a
virustotal →
OpenSSH Ed25519 private key, comment dlr@sftp

Hashes link to VirusTotal rather than carrying transcribed detection counts, which go stale.

MITRE ATT&CK mapping

IDtechniqueobserved as
T1552.001Unsecured Credentials: Credentials In Files1,934 retrievals of fabricated .env, .git/config and .aws/credentials files across 41 sources
T1078.004Valid Accounts: Cloud AccountsA planted AWS key used against Bedrock 92 seconds after retrieval, and by two further parties over the following five days
T1036.005Masquerading: Match Legitimate Name or LocationA Go worm named sshd; ten forged AI-crawler user-agents from a single scraping host
T1556.003Modify Authentication Process: Pluggable Authentication ModulesThe sshd sample links libpam and imports the full authentication interface to harvest credentials in transit
T1102.001Web Service: Dead Drop ResolverDiscord webhook embedded as the exfiltration channel
T1105Ingress Tool Transfer985 retrievals from seven hosts; Exodus.sh fetches eleven architectures with no detection
T1021.004Remote Services: SSHrandomIP + sshtry + spreader worm loop in the captured backdoor
T1562.001Impair Defenses: Disable or Modify Toolskillxmrig, killnbminer, antikill, antitaskmanager; Redtail's cron-stripping clean.sh
T1496Resource HijackingDual XMRig and NBMiner presets with NiceHash toggle; stolen cloud credentials used for LLM inference
T1583.003Acquire Infrastructure: Virtual Private ServerEight hosts across four netblocks at exactly 773 sessions each
T1071.001Application Layer Protocol: Web ProtocolsPayload delivery over HTTP, HTTPS with certificate validation disabled, and anonymous FTP