LSN โ€” Local Sovereign Network

๐ŸŸ  ACTIVE โ€” Twin-libssh Scanner Botnet ยท 1,650+ Distributed Nodes ยท 80+ ASNs ยท Pre-Deployment Posture

TI-2026-009 โ€” "The Twin-libssh Operator" โ€” One Operator, Two Scanner Families, 1,650 Nodes, 44 Days

A single operator running two parallel SSH brute-force scanners built on libssh (versions 0.11.1 and 0.12.0). HASSH clustering reveals two distinct toolkit fingerprints (03a80b21โ€ฆ + af8223acโ€ฆ); cross-family infrastructure overlap (two pivot IPs operating in both clusters) and a byte-identical 8-command post-success recon block prove they share an operator and codebase. The operator deploys non-malicious sentinel sha256 payloads (including SHA-256("Hello World!\n")) to verify the download primitive โ€” pre-deployment behavior. The malware-delivery phase has not been triggered against this honeypot. Campaign window 2026-03-28 โ†’ 2026-05-03 (ongoing).
๐Ÿงฌ Twin-Family HASSH Clusters libssh_0.11.1 + libssh_0.12.0 1,650 Distributed Nodes 80+ ASNs / 5 Continents Cloud-VPS Operator (Microsoft, Tencent, OVH, IONOS, Hetzner) Sentinel Payload Verification Deterministic 8-Command Recon Pre-Deployment

Between 2026-03-28 and 2026-05-03 (still running as this dossier publishes) the Cowrie SSH honeypot captured two parallel SSH brute-force scanner families with distinct HASSH fingerprints. At first they look like two unrelated botnets. They are not. They are two libssh-version variants of the same scanner, controlled by one operator, running on 1,650+ distributed nodes across at least 80 ASNs and 5 continents. The attribution rests on three independent cross-family signals: (1) two infrastructure pivot IPs that appear in both clusters with identical behavior, (2) a byte-deterministic 8-command post-success recon sequence shared across both families, and (3) two non-malicious sentinel sha256 payloads downloaded after authentication โ€” used to verify the operator's download primitive before any real malware is delivered.

This is a pre-deployment posture. We are observing scanner-development traffic. When the sentinel sha256 changes to actual malware, the campaign goes live. Until then, the dossier documents the toolkit fingerprint precisely enough that defenders can detect the operator before the deployment phase.

๐Ÿฏ Honeypot Collection โ€” 44 days, ongoing
1,650+
Distinct member IPs (both families)
2
HASSH toolkit clusters
80+
Origin ASNs
44+
Days active (continuous)
0
Real malware payloads (yet)

HASSH is the MD5 hash of the SSH client's KEX-algorithm preference list โ€” a deterministic toolkit fingerprint that varies by SSH library version. Our honeypot's session-fingerprint table groups every connection by HASSH. Two clusters dominate the dataset:

Family HASSH Banner IPs Sessions First seen
A 03a80b21afa810682a776a7d42e5e6fb SSH-2.0-libssh_0.11.1 1,262 34,418 2026-03-28
B af8223ac9914f509afdadfaf5f7ee94e SSH-2.0-libssh_0.12.0 388 10,190 2026-04-21

The HASSHes differ because the libssh 0.11โ†’0.12 release re-ordered KEX algorithms. Everything else about the toolkits is identical โ€” including the post-authentication behavior, which makes attribution unambiguous.

1. Cross-family pivot IPs

Two IPs appear in both HASSH families with identical post-authentication behavior:

  • 91.99.110.230 โ€” Hetzner DE, AS24940. Ran identical 8-command recon across both Family A and Family B sessions. Downloaded the same sha256 sentinel in both contexts.
  • 94.232.41.236 โ€” RocketCloud (RU/KG), AS64439. Top attacker in both families' top-10 (by login-attempt volume). Same target dictionary, same session pattern.

Two independent infrastructure pivots is enough on its own to rule out coincidence. One node could be a false-positive cross-overlap. Two nodes running both libssh versions, on completely different ASNs and continents, with identical behavior โ€” that's tooling reuse, not coincidence.

2. Byte-identical 8-command recon block

For every authenticated session in either family, the operator's tool runs exactly this 8-command sequence in this order โ€” no deviation, no interactive activity follows:

whoami
which ls
w
uname -m
uname -a
uname
top
lscpu | grep Model

Sessions average 1.5โ€“3 seconds. No chmod +x, no crontab, no ~/.ssh/authorized_keys writes. This is a behavioral fingerprint stronger than HASSH itself: the network fingerprint changes every time libssh ships a new release; the command sequence does not change unless the operator rebuilds their tool.

3. Shared sentinel payloads

Two sha256 hashes are downloaded across both families immediately after authentication. Neither is malware:

sha256 Hosts seen Identification
a8460f446be540410004b1a8db4083773fa46f7fe76fa84219c93daa1669f8f2 32 Sentinel test payload
01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b 26 SHA-256 of "Hello World!\n" โ€” universal smoke-test fixture

Operators use sentinel downloads to verify their exfil channel works (does wget reach the C2? is outbound HTTP open? is there a captive-portal blocking traffic?) before shipping the second-stage payload. The fact that we see "Hello World!" being downloaded โ€” a literal CI/CD test fixture โ€” and nothing else means we are observing the operator's pre-deployment checkout, not the actual campaign. When the sentinel sha256 flips to an unknown blob, the campaign has gone live.

Both families share the same target list and password dictionary (sample of 600 of 1,650 member IPs):

Top usernames (combined)
  • root โ€” 11,446 attempts
  • ubuntu โ€” 1,351
  • user โ€” 452
  • test โ€” 419
  • admin โ€” 389
Top passwords (combined)
  • 123456 โ€” 461
  • 123 โ€” 210
  • 1234 โ€” 121
  • 12345678 โ€” 103
  • 12345 โ€” 80
  • password โ€” 53
  • P@ssw0rd โ€” 31

Top 10 passwords account for ~70% of all attempts. No targeted credential-stuffing, no leaked-database tests, no SSH-key auth attempts. Pure dictionary brute force against the standard root/ubuntu/admin trinity. This is not a sophisticated targeting operation โ€” it is reach maximization.

Family A โ€” libssh_0.11.1 (1,262 IPs)
Top countries
US ยท SG ยท CN ยท RU ยท DE
Top ASNs
  • AS132203 โ€” Tencent Cloud (CN/SG)
  • AS8075 โ€” Microsoft Azure
  • AS8560 โ€” IONOS (DE)
  • AS4134 โ€” China Telecom
Family B โ€” libssh_0.12.0 (388 IPs)
Top countries
US ยท RU ยท DE ยท HK ยท FR
Top ASNs
  • AS8075 โ€” Microsoft Azure
  • AS135377 โ€” UCloud Hong Kong
  • AS8560 โ€” IONOS (DE)
  • AS16276 โ€” OVH (FR)
  • AS4766 โ€” Korea Telecom

The two families share 65 of their top-100 ASNs. The set is dominated by major commercial cloud providers โ€” Microsoft Azure, Tencent, UCloud, OVH, IONOS, Hetzner. This operator is renting and burning short-lived cloud-VPS instances at scale, not using a residential or compromised-IoT botnet. Different operational economics, different takedown profile.

Full live IOC bundle (1,650+ IPs, all observed sentinels, every HASSH attribution) is reproducible from the SOC platform โ€” see Methodology below for the live URLs. The samples here are illustrative of the campaign's spread.

Family IP Attempts CC ASN AS Org
A94.232.41.236 ๐Ÿ”77KGAS64439RocketCloud.ru, RU
A95.90.13.16851DEAS3209VODANET (Vodafone DE backbone)
A99.92.204.9848USAS7018AT&T Enterprises, US
A95.208.74.8345DEAS3209VODANET (Vodafone DE backbone)
A98.26.115.5225USAS11426Charter Communications
A94.156.221.4625BGAS34224NETERRA-AS, BG
A118.26.36.19520HKAS135377UCloud Hong Kong
A95.85.240.2420CZAS214891CLOUDRIX, RU
A94.180.238.11620RUAS41668ERTH-KAZAN-AS, RU
B61.72.55.13095KRAS4766Korea Telecom
B80.253.31.23291RUAS39153SETEL-AS1 / TELEKONIKA, RU
B91.205.128.17082RUAS47895R-LINE-AS, RU
B62.3.56.18780IQAS210513MASARAT-ALIRAQ, IQ
B94.232.41.236 ๐Ÿ”77KGAS64439RocketCloud.ru, RU
B72.253.251.777USAS36149Hawaiian Telcom Services
B87.106.35.22776DEAS8560IONOS, DE
B62.193.106.22755EGAS36992ETISALAT-MISR, EG
B74.91.224.22954USAS31898Oracle Corporation, US
B91.99.110.230 ๐Ÿ”52DEAS24940HETZNER-AS, DE

๐Ÿ” = IP appears in both family clusters. Cross-family pivots are the strongest infrastructure-level attribution signal in the bundle.

Equally important to what they are doing:

  • No persistence. No chmod +x, no crontab, no rc.local edits, no systemd unit drops, no ~/.ssh/authorized_keys writes. Sessions average 1.5โ€“3 seconds.
  • No live malware deployment. The two sha256s observed are smoke-test fixtures, not malware. The operator is in a testing or pre-deployment posture.
  • No targeted credentials. No SSH-key auth attempts. No certificate stuffing. Pure dictionary brute force against the universal root/ubuntu trinity.
  • No lateral movement. No ssh-keygen, no ~/.ssh/authorized_keys reads, no ~/.bash_history exfil.

Interpretation: this is scanner-development traffic or a toolkit operator validating reach. They've built a 1,650-node distributed scanner using libssh (rather than OpenSSH or pure-Python paramiko) and they're stress-testing it. The real campaign โ€” when the sentinel sha256 changes to actual malware โ€” will signal go-live.

  1. HASSH-based blocklist at the SSH gateway. Block any inbound SSH session whose KEX-list MD5 matches either 03a80b21afa810682a776a7d42e5e6fb or af8223ac9914f509afdadfaf5f7ee94e. False-positive risk is low โ€” libssh is rare for interactive SSH; most legitimate clients are OpenSSH-based with different HASSHes.
  2. Banner-string match. SSH-2.0-libssh_0.11.1 and SSH-2.0-libssh_0.12.0 on inbound connections to your management plane should be flagged regardless of authentication outcome.
  3. Recon-sequence regex on TTY/audit log. The 8-command sequence is byte-deterministic. The pattern whoami; which ls; w; uname -m; uname -a; uname; top; lscpu within 2 seconds of a session opening is the strongest behavioral signal โ€” an order of magnitude harder for the operator to randomize than the network fingerprint.
  4. DNS / outbound monitoring for sentinel exfil paths. Look for outbound HTTP/HTTPS to fresh infrastructure within seconds of a successful SSH auth โ€” the operator is testing exactly this primitive. The two sha256 fixtures are non-malicious, so don't use them as a malware indicator; instead detect the pattern of post-auth fetch.

All data is post-rebuild (commit 0d20547, 2026-05-02), so cowrie events from 2026-03-21 onward are complete (a previous 14-day backfill gap masked Family A's first three weeks). Fingerprint extraction (commit 360372f) populates session_fingerprints from cowrie's cowrie.client.kex events; HASSH itself is computed by cowrie, not derived. WHOIS / ASN / BGP-prefix attribution comes from Team Cymru bulk WHOIS over whois.cymru.com:43, no auth required.

Cluster expansion was performed entirely through SOC API endpoints โ€” /api/honeypot2/fingerprints, /similar, /ip/{ip}, /downloads, /timeline_bucket. No privileged DB access. The same intelligence is reproducible from any client with read access to the honeypot. Operators (and analysts) who want the full live IOC bundle can query the SOC platform at the URLs below โ€” the published JSON / CSV / AbuseIPDB-format bundles are regenerated on every request and reflect the current honeypot state.

Live IOC bundle endpoints (require pentesting.home.lsn access)
  • GET /api/honeypot2/ioc?format=json&since_hours=999999&min_attempts=1
  • GET /api/honeypot2/ioc?format=csv&since_hours=999999&min_attempts=1
  • GET /api/honeypot2/ioc?format=abuseipdb&since_hours=999999&min_attempts=1 (drops directly into AbuseIPDB bulk-report import)
Investigation Period: 2026-03-28 โ†’ 2026-05-03 (ongoing, 44+ days) ยท Analyst: Liศ™neanu Dumitru-Cristian + Claude Opus 4.7 (1M context) ยท Classification: TLP:WHITE โ€” Public ยท Data Source: Cowrie SSH Honeypot (post-rebuild dataset, 401k events, 74k fingerprinted sessions) ยท Attribution: Team Cymru bulk WHOIS for ASN / country / BGP prefix; cowrie's native HASSH computation for toolkit fingerprinting; cross-family pivot detection via /api/honeypot2/similar. Editorial principle: every claim in this dossier is reproducible from the SOC platform's public-facing endpoints. The sentinel sha256s are non-malicious test fixtures; their presence is evidence of pre-deployment posture, not of active compromise. The honeypot caught what it caught.

โž• Update โ€” 2026-07-04: the twin became a triplet

Append-only enrichment; nothing above is altered. This dossier documented two parallel libssh scanner families under one operator. Continued tracking shows the same behavioural operator cluster (actor-39bc7b3c3ae5, which controls Family A / libssh 0.11.x, HASSH 03a80b21โ€ฆ) subsequently ran a third libssh generation:

libssh 0.12.0 โ€” HASSH af8223ac9914f509, 607 IPs across 71 countries, first observed 2026-04-21 (within/just after this dossierโ€™s 2026-03-28โ†’-05-03 window). The operator progresses through libssh releases (0.9.6 โ†’ 0.11.x โ†’ 0.12.0) while keeping the same credential dictionary and recon block โ€” a single hand upgrading its toolkit over time, not independent actors.

Cross-reference: TI-2026-026M (The 1,313 Machines) documents the libssh 0.11.x fleet in depth; the three-generation span is analysed there.

Added by platform-wide correctness audit, 2026-07-04. Source: live honeypot HASSH campaign records (actor cluster actor-39bc7b3c3ae5).

โš  Personal capacity. Research published independently โ€” not reflecting employer views. Derived from passive observation of attacks against personal infrastructure. Full disclaimer โ†’
โ† Previous Honeypot Field Reports โ€” 10 / 20 Next โ†’