The Other Swarm
TI-2026-050A ยท Letter 1 of 5 ยท Page 297While we spent six letters dissecting the libssh swarm โ 2,341 IPs, 84 countries, three library versions braided into one organism โ something else was scanning alongside it. Something quieter. Something better at its job.
The Go_SSH fleet appears in the same observation window as the libssh swarm. Same target space: internet-facing SSH servers. Same observation period: spring 2026. Same honeypot catching both. But where the libssh swarm is industrial โ massive, noisy, firing 84,726 attempts to achieve 90 successes โ the Go_SSH fleet operates differently. 320 IPs. 7,115 attempts. 333 successes.
That success rate โ 4.68% โ is forty-four times higher than the libssh swarm's 0.11%.
This is not a difference in degree. It is a difference in kind.
I. The Fingerprint
Every SSH client announces itself through its handshake โ the key exchange algorithms it offers, the ciphers it supports, the MAC and compression methods it proposes. The HASSH algorithm hashes these parameters into a single fingerprint, an unforgeable signature of the software at the other end of the connection.
Library: Go x/crypto/ssh (golang.org/x/crypto/ssh)
Compilation: static binary, no runtime dependencies
Concurrency model: goroutines (lightweight threads, thousands per process)
Cross-compilation: any target OS/arch from any build machine
Go is not a scripting language. You don't write Go SSH scanners casually. The x/crypto/ssh package is part of Go's extended standard library โ maintained by the Go team at Google, reviewed, tested, production-grade. Choosing Go for a scanner is a deliberate engineering decision. It says: the person who built this tool thinks about deployment, about binary distribution, about concurrent I/O at scale. They think about goroutines โ Go's lightweight threads that let a single process manage thousands of simultaneous SSH connections with minimal memory overhead.
Compare this with libssh. The C library. Lower-level, more flexible, but requiring compilation against system libraries, managing memory manually, linking against OpenSSL or GnuTLS. The libssh operator distributes scanners as compiled binaries for specific architectures. The Go_SSH operator distributes a single static binary that runs anywhere.
Engineering Philosophy
The tool choice reveals the operator profile. libssh says: systems programmer, Unix heritage, performance-first. Go says: cloud engineer, DevOps background, deploy-anywhere pragmatism. These are different people, from different professional cultures, solving the same problem with different philosophies.
II. The Numbers That Don't Lie
Strip away interpretation. Look at the raw comparison.
| Metric | Go_SSH | libssh Swarm | Ratio |
|---|---|---|---|
| Unique IPs | 320 | 2,341 | 0.14ร |
| Countries | 43 | 84 | 0.51ร |
| Total Attempts | 7,115 | 84,726 | 0.08ร |
| Successes | 333 | 90 | 3.7ร |
| Success Rate | 4.68% | 0.11% | 44ร |
| Attempts per IP | 22.2 | 36.2 | 0.61ร |
| Actor Cluster | None | actor-6285990cc704 | โ |
| First Seen | March 24 | March 28 | 4 days earlier |
| Last Seen | May 21 | May 21 | Same day |
| Top ASN Region | Europe (DE/US) | Asia (SG/HK/CN) | Opposite |
| IP Overlap | ZERO | ||
Read across each row. The Go_SSH fleet is smaller on every dimension except the one that matters: successful compromises. It gets 3.7 times more shells with 12 times fewer attempts from 7 times fewer IPs.
The libssh swarm is a firehose. The Go_SSH fleet is a rifle.
What 44ร Means
A 44-fold difference in success rate demands explanation. Four hypotheses:
Hypothesis 1: Better Credentials
The Go_SSH operator has a superior credential dictionary โ perhaps harvested from prior breaches, purchased from access brokers, or accumulated through earlier scanning campaigns. Where the libssh swarm sprays admin:123456 at everything, the Go_SSH fleet may be using credentials specific to each target.
Hypothesis 2: Pre-Screened Targets
The lower attempts-per-IP (22.2 vs 36.2) suggests the Go_SSH operator may not be scanning randomly. If they're working from a target list โ SSH servers already known to be running default credentials, or IPs previously identified as vulnerable โ each attempt is more likely to succeed because the target selection is better.
Hypothesis 3: Honeypot Interaction Differential
The honeypot may accept Go SSH client connections differently than libssh connections. If Go's SSH handshake triggers the honeypot's accept logic more readily, the higher success rate could be partly an artifact of measurement. This doesn't eliminate the signal โ it modulates it.
Hypothesis 4: Smaller, Smarter Operation
The Go_SSH operator runs a tighter operation: fewer IPs, fewer attempts, but each one counts. This is the professional versus the industrialist. The libssh swarm compensates for low quality with overwhelming volume. The Go_SSH fleet doesn't need to.
The evidence supports a combination. The infrastructure profile (next section) suggests Hypothesis 4 โ this is a professional operation, not a mass campaign. But Hypotheses 1 and 2 likely contribute: better targeting and better credentials are the how of that professionalism.
III. The Infrastructure Tells the Story
Where you rent your servers reveals who you are. Or at least, who your procurement department is.
| Rank | Go_SSH ASN | IPs | libssh ASN | IPs |
|---|---|---|---|---|
| 1 | AS14061 ยท DigitalOcean ๐บ๐ธ | 47 | AS132203 ยท Aceville Pte ๐ธ๐ฌ | 157 |
| 2 | AS51167 ยท Contabo ๐ฉ๐ช | 33 | AS4808 ยท Volcano Engine ๐จ๐ณ | 141 |
| 3 | AS24940 ยท Hetzner ๐ฉ๐ช | 18 | AS135377 ยท UCloud ๐ญ๐ฐ | 135 |
| 4 | AS211298 ยท Unknown ๐ช๐บ | 15 | AS14061 ยท DigitalOcean ๐บ๐ธ | 74 |
| 5 | AS8560 ยท IONOS ๐ฉ๐ช | 9 | AS132839 ยท Power Up ๐ธ๐ฌ | 64 |
The pattern is stark. The Go_SSH operator buys European VPS โ 60 of 320 IPs (19%) sit on German hosting alone (Contabo, Hetzner, IONOS). Add DigitalOcean and you have 107 IPs (33%) on four Western providers. These are the โฌ5-10/month servers that any developer can provision with a credit card and an email address.
The libssh operator inhabits a different world entirely. Aceville Pte Ltd (Singapore), ByteDance/Volcano Engine (China), UCloud (Hong Kong) โ Asian cloud platforms with different payment systems, different abuse-handling cultures, different jurisdictions. The libssh swarm's infrastructure screams East Asian cloud procurement.
Read Between the Lines
Different procurement channels mean different organizations. Not just different teams โ different accounting departments, different payment methods, different risk profiles. The Go_SSH operator pays in euros with European payment cards. The libssh operator pays in yuan, or through Asian cloud credit systems. These are parallel businesses sharing a market, not divisions of the same enterprise.
The German Preference
Contabo, Hetzner, IONOS โ three German hosting providers hosting 60 Go_SSH nodes. Germany offers a specific value proposition for illicit scanning: strong privacy laws (GDPR/BDSG), historically slow abuse response from budget providers, and excellent network connectivity to the rest of Europe. Contabo in particular is known for providing remarkably cheap VPS (โฌ4.99/month for a capable instance) with minimal verification. It's the infrastructure of choice for operators who need disposable compute.
Not a single Contabo, Hetzner, or IONOS IP appears in the libssh campaigns. This infrastructure is exclusive to Go_SSH.
IV. Zero Overlap
We cross-referenced every Go_SSH IP against every libssh IP across all three campaigns (0.9.6, 0.11.x, 0.12.0). The result:
libssh IPs checked: 2,341 (all campaigns)
Shared IPs: 0
Shared actor cluster: None
Shared HASSH: None
Shared ASN preference: Opposite hemispheres
Zero. Not one IP appears in both ecosystems. Combined with the absence of a shared actor cluster (the automated attribution system found no link), different HASSH fingerprints (different software), and opposing geographic preferences (Europe vs. Asia), the evidence is unambiguous: the Go_SSH fleet and the libssh swarm are operationally independent.
They are competitors, not collaborators. They fish in the same ocean but dock at different ports.
The Coincident End Date
Both ecosystems went quiet around May 20-21, 2026. Go_SSH started March 24. libssh started March 28. Both stopped within 24 hours of each other, eight weeks later.
Three explanations:
1. Coincidence. Two months is a natural scanning campaign lifecycle. Infrastructure gets flagged, abuse reports accumulate, blocklists catch up. Both operators hit the same diminishing-returns threshold independently.
2. Shared target exhaustion. If both operators are scanning the same target list (the internet's SSH servers), they might exhaust accessible targets at roughly the same rate. The target space is finite; two predators deplete the same prey population.
3. External event. A major hosting provider crackdown, a law enforcement operation, or a significant blocklist update could disrupt both ecosystems simultaneously โ even though they use different infrastructure โ if the disruption targeted the target side rather than the source side.
We don't know which. The coincidence is noted. The investigation continues.
V. The Ecosystem Map
Go_SSH and libssh are not alone. The honeypot identifies at least six distinct SSH scanning ecosystems operating simultaneously in the same observation window. Each has its own HASSH fingerprint, its own infrastructure, its own operator.
84,726 attempts ยท 90 successes
Rate: 0.11%
Cluster: actor-6285990cc704
3 versions ยท Asian cloud
7,115 attempts ยท 333 successes
Rate: 4.68%
Cluster: unattributed
Static binary ยท European VPS
16,253 attempts ยท 0 successes
Rate: 0.00%
Cluster: actor-0d9fdff8bb3d
Pure scanning ยท no auth
4,044 attempts ยท 526 successes
Rate: 13.0%
Cluster: unattributed
Python ยท single-country
67 attempts ยท 67 successes
Rate: 100%
Cluster: unattributed
Python ยท targeted
3,518 attempts ยท 3,518 successes
Rate: 100%
Cluster: unattributed
Go variant ยท distinct HASSH
Six ecosystems. Three confirmed actor clusters. Three unattributed operators. The total landscape: 3,464+ IPs from at least six different organizations scanning SSH simultaneously.
The Competitive Market
SSH scanning is not a monopoly. It's a competitive market with multiple players, each optimized differently. The libssh swarm dominates by volume. Go_SSH wins on efficiency. AsyncSSH concentrates from a single country with high precision. Paramiko and go_scanner achieve 100% success rates โ likely targeting pre-verified hosts. And the libssh2 fleet doesn't even try to authenticate โ it's pure reconnaissance, mapping the landscape that others exploit.
The Success Rate Spectrum
The six ecosystems arrange themselves along a spectrum from mass scanning to precision targeting:
โ Paramiko: 100.0% ยท 67/67 ยท Targeted access
โ AsyncSSH: 13.0% ยท 526/4,044 ยท High-confidence spray
โ Go_SSH: 4.68% ยท 333/7,115 ยท Efficient scanning
โ libssh: 0.11% ยท 90/84,726 ยท Industrial volume
โ libssh2: 0.00% ยท 0/16,253 ยท Reconnaissance only
The spectrum reveals the division of labor in the SSH threat ecosystem. At the bottom, libssh2 maps the terrain โ which ports respond, which services run. Above it, the libssh swarm performs mass credential testing at industrial scale. Go_SSH operates more efficiently in the middle. AsyncSSH runs a concentrated operation from a single country. At the top, Paramiko and go_scanner target only hosts they know they can access โ working from pre-validated credential lists.
This isn't chaos. This is specialization.
VI. The First Four Days
Go_SSH appeared on March 24, 2026. The libssh swarm's first component (0.11.x) appeared four days later on March 28.
Four days is not much. But in scanning operations, four days is meaningful. A scanner that starts first has first-mover advantage: it reaches default-credential hosts before they're compromised (or patched) by competitors. The hosts that accept root:password on Monday may have their password changed by Thursday โ by the first attacker who got in.
Go_SSH's higher success rate may be partly explained by timing: it reached some fraction of targets while they were still pristine. By the time the libssh swarm's 2,341 nodes began their 84,726 attempts, the easy targets were already taken โ claimed by Go_SSH's 320 precision scanners.
The Timeline Question
Did the Go_SSH operator know the libssh swarm was coming? Did they start early to get ahead of the competition? Or was the timing coincidental โ two independent operations launching in the same week because of some external trigger (a new vulnerability disclosure, a target list release, a seasonal pattern)?
The evidence doesn't distinguish. But the coincidence is notable. And in this business, coincidences are usually the questions we haven't answered yet.
VII. The Third Actor
The libssh2 fleet (HASSH 14b2ddda386a4d10) deserves special attention. 628 IPs โ larger than Go_SSH โ across 48 countries. 16,253 connection attempts. Zero successes.
Zero is not failure. Zero is the intended outcome.
The libssh2 fleet never sends credentials. It connects, completes the SSH handshake to identify the server's software, algorithms, and capabilities โ then disconnects. This is pure service enumeration. The output is not compromised hosts but intelligence: a database of every SSH server that responded, what version it runs, what algorithms it supports, what it reveals about itself.
This intelligence has value. To the libssh2 operator, obviously โ it informs their own future operations. But also to others. A curated list of SSH servers with their version strings and supported algorithms is a product. It can be sold, traded, or used to build targeted credential lists.
Library: libssh2 1.11.0
Actor: actor-0d9fdff8bb3d (269 IPs attributed, total 628 in campaign)
Attempts: 16,253 ยท Successes: 0 ยท Success rate: 0.00%
Countries: 48
Purpose: SSH service enumeration and fingerprinting
Output: target intelligence, not compromised hosts
The three confirmed actor clusters โ actor-6285990cc704 (libssh), actor-0d9fdff8bb3d (libssh2), and the unattributed Go_SSH operator โ form a triad. Scanner, mapper, and precision striker. Whether they collaborate or merely coexist, their combined effect is a comprehensive assault on the SSH ecosystem.
VIII. What Go Reveals
The choice of Go tells us about the operator's background. Go is not a language you learn in a hacking forum. It's a language you learn in a DevOps team, a cloud infrastructure company, a software engineering organization. Go's adoption profile is professional: Kubernetes, Docker, Terraform, Prometheus โ all written in Go. The people who write Go SSH scanners are the same people who write cloud infrastructure tools.
This means the Go_SSH operator is likely:
โข A professional software developer with experience in cloud infrastructure. Not a script kiddie adapting downloaded tools, but someone who designs, compiles, and deploys custom scanning software.
โข Familiar with DevOps workflows. The choice of static binaries, European VPS, and efficient scanning patterns suggests someone who thinks in terms of deployment pipelines, infrastructure-as-code, and operational efficiency.
โข Operating as a business. The precision of the operation โ fewer IPs, higher success, European infrastructure โ suggests someone minimizing costs while maximizing returns. This is not ideology or curiosity. This is economics.
The Operator Profile
If the libssh swarm's operator runs a factory โ maximum output, accept the waste rate โ then the Go_SSH operator runs a boutique. Fewer servers, better targeting, higher success. The factory makes its money on volume. The boutique makes its money on efficiency. Both are profitable. Both are threats. But they require very different skills, very different organizations, and very different mindsets to operate.
IX. The Thread Forward
This letter maps the terrain. Six scanning ecosystems. Three known actors. One unattributed operator running Go-compiled precision scanners from German VPS providers with a success rate 44 times higher than the largest swarm.
The next letter drills into what the Go_SSH fleet does after it gets in. 333 successes means 333 post-authentication sessions. What commands run after the shell opens? What gets downloaded? What gets exfiltrated? The credential testing is the front door. The command sequences are the floor plan.
The libssh swarm had two command families โ the 19-command reconnaissance script and the sentinel-download sequence. Does Go_SSH show the same patterns? Different ones? Or something entirely new?
333 shells. 333 stories. Letter B opens them.
TI-2026-050A ยท The Other Swarm ยท Series: The Toolmakers (1/5)
Classification: TLP:GREEN ยท Confidence: HIGH
Sources: Cowrie honeypot, threat_intel entity links, HASSH fingerprint database, campaign attribution engine
Cross-references: TI-2026-049A, TI-2026-049F
Published: June 30, 2026 ยท shuffle-on.com