LSN โ€” Local Sovereign Network

โš™๏ธ Series 050 โ€” The Toolmakers

The Other Swarm

TI-2026-050A ยท Letter 1 of 5 ยท Page 297

While 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.

320
Unique IPs
43
Countries
4.68%
Success Rate
44ร—
vs libssh Rate
7,115
Total Attempts
333
Successes

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.

HASSH Fingerprint Go_SSH Fleet: 16443846184eafde
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.

MetricGo_SSHlibssh SwarmRatio
Unique IPs3202,3410.14ร—
Countries43840.51ร—
Total Attempts7,11584,7260.08ร—
Successes333903.7ร—
Success Rate4.68%0.11%44ร—
Attempts per IP22.236.20.61ร—
Actor ClusterNoneactor-6285990cc704โ€”
First SeenMarch 24March 284 days earlier
Last SeenMay 21May 21Same day
Top ASN RegionEurope (DE/US)Asia (SG/HK/CN)Opposite
IP OverlapZERO

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.

RankGo_SSH ASNIPslibssh ASNIPs
1AS14061 ยท DigitalOcean ๐Ÿ‡บ๐Ÿ‡ธ47AS132203 ยท Aceville Pte ๐Ÿ‡ธ๐Ÿ‡ฌ157
2AS51167 ยท Contabo ๐Ÿ‡ฉ๐Ÿ‡ช33AS4808 ยท Volcano Engine ๐Ÿ‡จ๐Ÿ‡ณ141
3AS24940 ยท Hetzner ๐Ÿ‡ฉ๐Ÿ‡ช18AS135377 ยท UCloud ๐Ÿ‡ญ๐Ÿ‡ฐ135
4AS211298 ยท Unknown ๐Ÿ‡ช๐Ÿ‡บ15AS14061 ยท DigitalOcean ๐Ÿ‡บ๐Ÿ‡ธ74
5AS8560 ยท IONOS ๐Ÿ‡ฉ๐Ÿ‡ช9AS132839 ยท 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:

IP Cross-Reference Go_SSH IPs checked: 320
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.

libssh Swarm
2,341 IPs ยท 84 countries
84,726 attempts ยท 90 successes
Rate: 0.11%
Cluster: actor-6285990cc704
3 versions ยท Asian cloud
Go_SSH Fleet
320 IPs ยท 43 countries
7,115 attempts ยท 333 successes
Rate: 4.68%
Cluster: unattributed
Static binary ยท European VPS
libssh2 Recon
628 IPs ยท 48 countries
16,253 attempts ยท 0 successes
Rate: 0.00%
Cluster: actor-0d9fdff8bb3d
Pure scanning ยท no auth
AsyncSSH
92 IPs ยท 1 country
4,044 attempts ยท 526 successes
Rate: 13.0%
Cluster: unattributed
Python ยท single-country
Paramiko
63 IPs ยท 27 countries
67 attempts ยท 67 successes
Rate: 100%
Cluster: unattributed
Python ยท targeted
go_scanner
17 IPs ยท 3 countries
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:

Success Rate Hierarchy โ–  go_scanner: 100.0% ยท 3,518/3,518 ยท Pre-verified targets
โ–  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.

libssh2 Reconnaissance Fleet HASSH: 14b2ddda386a4d10
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

โš  Personal capacity. Research published independently โ€” not reflecting employer views. Derived from passive observation of attacks against personal infrastructure. Full disclaimer โ†’
โ† Previous The Toolmakers โ€” 1 / 5 Next โ†’