HONEYPOT REPORT // 2026-08-16 – 2026-08-20
2026-08-16 – 2026-08-20 — SSH, Telnet + Web Honeypot Report
SSH and telnet volume by day
Executive summary
A single fabricated AWS key, planted in a fake .env file, was used 22,818 times by 84 distinct sources over four days. That is the whole story of this period, and it is a different story from the one the first alert suggested.
The credential did not simply leak into one operator's hands. Sorting the consumers by which API calls they made produces seven distinct behavioural groups, each wanting something different from the same key:
| objective | sources | hits | what they called |
|---|---|---|---|
| Spam capability | 26 | 22,342 | GetSendQuota, ListIdentities, GetSMSAttributes |
| Account profiling | 22 | 34 | GetAccount, GetContactInformation, DescribeOrganization |
| LLM abuse | 19 | 170 | ListFoundationModels, Converse, InvokeModel |
| Identity check | 5 | 194 | GetCallerIdentity only |
| Compute hijack | 5 | 41 | RunInstances, CreateSecurityGroup, DescribeImages |
| Recon | 5 | 31 | ListUsers, ListRoles, SimulatePrincipalPolicy |
| Persistence | 2 | 6 | CreateUser, CreateGroup, CreatePolicy |
The dominant consumer by four orders of magnitude is 192.253.248.142 (AS213790, Kerkrade NL), which made 21,931 calls — 94% of all activity — almost entirely ses:GetSendQuota. That API returns how many emails an account may send per day. It is the single number that determines whether a compromised account is worth anything to a spam operation.
It ran for 99 consecutive hours without a gap, averaging 230 calls per hour, and it has not stopped. More interesting: it re-fetched the source .env file from the web sensor 3,248 times during the same window. It is not working from a stored copy. Every check re-reads the credential from the origin, which means the operator treats the source URL as the record rather than the key itself.
Two consumer groups are worth separating from the noise. Nineteen sources went after Bedrock, calling ListFoundationModels to enumerate available models before attempting Converse or InvokeModel. And a cluster of 24 hits arrived from 24 different US consumer mobile addresses — T-Mobile, AT&T, Verizon, Charter — inside 41 minutes, all calling GetAccount, all with the same Boto3 user-agent down to the kernel version. One tool, distributed across residential mobile IPs, presumably to avoid the rate-limiting a single address would attract.
On the shell sensor, the PUBKEY signal fired 64 times having fired zero times in eight days of July baseline. Two separate causes, described below, and one of them is the return of a key first seen in July.
Notable sessions — honeytoken
GetSendQuota, 1,293 GetCallerIdentityrate: 230/h sustained, active in all 99 hours of the window
decoy fetches: 3,248 — re-reads the source
.env rather than caching the keyclient: aws-cli/1.45.46, Botocore 1.43.46, Python 3.10.12, Linux 5.15.0-187 (Ubuntu 22.04)
network: AS213790 Limited Network LTD, Kerkrade NL, ASN domain btcloud.ro, hosting
fingerprint: the Botocore
m/ field reorders on every call — each request is a freshly spawned CLI process, consistent with a shell loop over a credential fileevent:
GetAccount on all but threeuser-agent: Boto3/1.43.40 Botocore/1.43.42, Python 3.10.12, Linux 5.15.0-46 — byte-identical across all 24
assessment: one operator distributing calls across residential mobile addresses; a single source making the same 24 calls would be trivially rate-limited
ListFoundationModels (63) → GetUseCaseForModelAccess (6) → Converse (10) / InvokeModel (1)clients: Boto3 on Windows 10, 11 and Windows-on-ARM; one Go-http-client; 22 hits with no user-agent at all
note: the enumerate-then-invoke ordering is the same shape as the single Bedrock consumer observed in the previous period, now at scale
Notable sessions — SSH and telnet
interval: exactly 60.0 minutes between offers
client: SSH-2.0-Go on every session
commands: none — not one session issued a command
assessment: not brute force; a new key cannot be guessed. Reads as an availability or reachability monitor that generates a throwaway key each cycle
sources: 139.19.117.129, 185.220.101.128, 192.42.116.100, 192.42.116.107
client: OpenSSH_10.4 and OpenSSH_10.5
behaviour: offer key as root → fail → fall back to password → succeed → run nothing → disconnect
note: unchanged from July. Somebody is still checking whether this key opens this host
# Flutter Botnet — Downloader + Persistencec2: base64-encoded in the script:
dnBzLmF0bGFzMTAxLnVzLmtnOjc3Njg= → vps.atlas101.us.kg:7768fallback chain: HTTP → TFTP → FTP, then
memfd_create execution to avoid touching diskarchitectures: 11 — x86_64, x86, arm, arm7, arm8, mips, mipsel, ppc, sparc, sh4, m68k
persistence: cron @reboot and */5, /etc/rc.local, a systemd unit named
bot.service, and a watchdog loop respawning every 30spool: rx.unmineable.com:3333
worker tag:
XMR:%s.Milan-Bot-%snote: using the upstream signed release rather than a repacked binary; the only custom code is the installer and the worker naming
What the decoys are actually catching
3,585 config-file retrievals from 56 sources this period, against zero in the six days before the decoys existed. The distribution is lopsided in the same way the token activity is: 3,384 of them are /.env, and 3,248 of those are the SES checker re-reading its own source.
Excluding that host leaves roughly 340 retrievals from 55 sources — about 70 per day from genuinely distinct actors. That is the honest measure of how often an exposed .env is picked up on a host nobody has any reason to target.
Indicators
Honeytoken consumers by objective
| source | objective | hits | network |
|---|---|---|---|
| 192.253.248.142 | spam capability | 21,931 | AS213790 Limited Network LTD, NL |
| 185.177.72.3 | identity check | 188 | AS211590 Bucklog SARL, FR |
| 74.0.32.57 | persistence + spam | 118 | AS399486, GB |
| 179.61.227.59 | broad recon | 87 | AS399486, FR |
| 91.92.40.175 | spam capability | 50 | AS197170 TechTies Inc., NL |
| 80.87.206.148 | persistence | 47 | AS16276 OVH SAS, FR |
| 34.96.49.34 | spam capability | 39 | Google Cloud, US |
| 34.140.252.27 | LLM abuse | 4 | Google Cloud, US |
TechTies Inc. also hosts the coordinated SSH brute-force quota group observed since July.
Payload hosts
| host | serves | retrievals |
|---|---|---|
| 2.26.136.128 | twget.sh — STC/TOASTER Mirai fork | 109 |
| 185.93.89.72 | /wget, also scans the sensor itself | 57 |
| 5.182.210.174 | /ok plus six-hex rotating filenames | 31 |
| vps.atlas101.us.kg:7768 | Flutter Botnet, 11 architectures | 4 |
| 176.65.139.228:6677 | Exodus.sh and an 11-arch /bins/ tree | 4 |
Busiest shell sources
| source | sessions | note |
|---|---|---|
| 164.92.115.22 | 5,073 | single highest talker |
| 92.204.128.149 | 2,973 | |
| 92.204.138.142 | 2,738 | |
| 208.109.189.59 | 1,731 | |
| 45.153.34.137 | 773 | quota group — unchanged since July |
| 91.92.42.10 | 773 | quota group |
| 45.156.87.34 | 773 | quota group |
Payload hashes
| sha256 | what it is |
|---|---|
| 6b2c65448b82ed4002ae3f37c35ad6721c6f65e299241ba724db6c1422ddacde virustotal → | Flutter Botnet downloader — 11 arch, HTTP/TFTP/FTP fallback, memfd exec, 4-way persistence |
| 156ee410363b67810416d16a797225ffbaa01cf80daeaff346dabf199f75cbed virustotal → | Go dropper — installs upstream XMRig 6.18.0, worker tag Milan-Bot |
| 367fcbdb9f0699342d143b1123db176c38b95b1ccee2a80286a58ef69dbe38da virustotal → | Redtail stager — 20 rotating six-hex filenames from a single host |
| 3f3bf218089d1488617d37f8a5116bb2791eb39ce06a1b5bc9a4cdfe5e94dd39 virustotal → | UPX-packed RISC-V ELF — 1.7 MB |
| 6d1fe6ab3cd04ca5d1ab790339ee2b6577553bc042af3b7587ece0c195267c9b virustotal → | Linux.MulDrop.14 — 2017 Raspberry Pi worm, still unmodified |
| 94f2e4d8d4436874785cd14e6e6d403507b8750852f7f2040352069a75da4c00 virustotal → | sshd — Go worm, PAM credential theft, dual miner, Discord C2 |
MITRE ATT&CK mapping
| ID | technique | observed as |
|---|---|---|
| T1078.004 | Valid Accounts: Cloud Accounts | One planted key exercised 22,818 times by 84 sources across seven distinct objectives |
| T1580 | Cloud Infrastructure Discovery | DescribeInstances, DescribeVpcs, DescribeImages, ListClusters from five sources |
| T1526 | Cloud Service Discovery | ListFoundationModels and GetUseCaseForModelAccess preceding inference attempts |
| T1136.003 | Create Account: Cloud Account | CreateUser, CreateGroup, CreatePolicy from two sources attempting a foothold |
| T1069.003 | Permission Groups Discovery: Cloud Groups | SimulatePrincipalPolicy, ListAttachedUserPolicies, ListRoles |
| T1496 | Resource Hijacking | SES quota checks at 230/h; Bedrock inference attempts; XMRig installed from upstream release and tagged Milan-Bot |
| T1090.002 | Proxy: External Proxy | 24 hits from 24 US mobile carrier addresses in 41 minutes running one identical client |
| T1552.001 | Unsecured Credentials: Credentials In Files | 3,585 config decoy retrievals from 56 sources; the top consumer re-fetches the source rather than caching |
| T1547.006 | Boot or Logon Autostart: Kernel Modules and Extensions | Flutter Botnet installs cron, rc.local, a systemd unit and a 30-second watchdog |
| T1620 | Reflective Code Loading | memfd_create execution in the Flutter downloader to avoid writing to disk |
| T1027.002 | Obfuscated Files: Software Packing | UPX-packed RISC-V ELF; base64-encoded C2 address in the Flutter script |
| T1021.004 | Remote Services: SSH | 59 distinct throwaway public keys offered on a strict hourly schedule from a single host |