Get Boated: Docker-Delivered Mirai-Linked Malware With EtherHiding C2
85[.]137[.]54[.]178- ASN
- AS43641
- Provider
- SOLLUTIUM EU
- Netblock
- 85[.]137[.]52[.]0/22
- Location
- Netherlands (Amsterdam colocation, VSYS-AMS-COLO)
One address delivered Boatnet three ways
85[.]137[.]54[.]178 was the source of SSH, Docker, and n8n activity between the 13th and 21st of September 2026. During the Docker phase, the source sent 3,761 API requests, including 578 container-creation requests and 295 archive uploads, and rotated through six packed Boatnet builds. The source also served the payloads over HTTP and HTTPS and was Boatnet's primary C2 on TCP/443.
Captured requests show three phases: URL-based downloads into host-mounted /dev/shm; delivery to host /var/cache/.dk with host-binary download fallbacks; then Docker archive uploads of .dkprobe write/read probes and packed Boatnet .dk ELFs, with setsid execution requests for container-local /tmp/.dk. Every captured execution command specified 应用-docker.
Six packed builds shared one suffix
All six packed builds shared the 16-byte suffix BN4/mG7otq7uVCjF. Removing it allowed UPX unpacking. Every unpacked image contained # boatnet-unit-v2, the same Polygon smart contract (0x5D5abC33a4e5C602a002815d93806b204324D1a1), three RPC providers, and systemd service references. VirusTotal labels the original and final builds as Linux DDoS malware, two of the three samples as Mirai.
Polygon contract rotated the C2 list
Boatnet's native Linux build 6 invokes EtherHiding when its configured C2 address is zero, reading an AES-128-GCM-encrypted C2 list from an owner-updatable Polygon contract through public RPC providers. The contract controller deployed the contract five hours before the Docker activity. After the Docker activity ended, the contract controller rewrote the C2 list five times, rotating secondary endpoints on port 18082 in China (1[.]13[.]185[.]53, 36[.]138[.]220[.]98), Germany (164[.]68[.]109[.]244), and the Netherlands (80[.]87[.]206[.]86).
The source returned for n8n
Three days after the Docker campaign, the same source returned and targeted n8n on port 5678 with CVE-2026-21858 file-read attempts (files.filepath=/etc/passwd). The twelve file-read POST requests received 404 responses.
Defender-visible markers
Search for the six packed hashes, the BN4/mG7otq7uVCjF suffix, /dev/shm/b1, /var/cache/.dk, /tmp/.dkprobe, hidden files under /etc, /var/cache, /var/lib, /usr/bin, and ~/.cache containing the packed-build marker, and host-namespace userland processes named kworker/1:1 whose parent PID isn't 2. The Full Report provides two YARA rules, two Suricata signatures, and host hunt commands.
- file_path/etc/systemd/system/<kernel_name>.serviceSystemd persistence unit (e.g. kworker042.service, containing `# boatnet-unit-v2`)
- file_path/etc/.upd_boatSelf-update download candidate fallback
- file_path/host/dev/shm/b1Initial host-mounted payload path
- file_path/host/tmp/.dkprobeHost-mount probe path
- file_path/host/var/cache/.dkHost-cache payload path
- file_path/tmp/.bot_updatingUpdate-in-progress lock marker
- file_path/tmp/.dkArchive-upload execution path (container)
- file_path/tmp/.X-lockSingle-instance mutex
- file_path/var/cache/.upd_boatSelf-update download candidate
- ip1[.]13[.]185[.]53On-chain C2 (TCP/18082), contract updates 1-3
- ip164[.]68[.]109[.]244On-chain C2 (TCP/18082), contract updates 3-4
- ip36[.]138[.]220[.]98On-chain C2 (TCP/18082), contract updates 3-4
- ip80[.]87[.]206[.]86Secondary C2 failover (TCP/18082), contract update 5
- ip85[.]137[.]54[.]178Docker API source, HTTP/HTTPS payload host, primary C2 (TCP/443), and n8n file-read source
- sha256
- sha256180d8f8d3a84db1bf312635df988fa9b23f93aaa8c0ad2d4a0cfdf4fd37f75ffSelf-issued TCP/8443 certificate
- sha256
- sha2562e8c2aa2f8a8906a3ad91e77983692df8996b5a32ebcf07aa3c4d7ec6852bb07Self-updated build (.upd_boat, 682 KB)
- sha25636d7e5f00878dafebc74bf2f3e0ca0cb614a7e5d3b7400e8a685b30d5e89cdfbUnpacked build 5
- sha256
- sha256448fcc12cbc34e670318dd07c64e61bf91784969e8153e696db58523f77bacadRelated build (.rcu_sched40)
- sha2564945f4bfa669258f13e4201c1822c608f51a704e67f8b9e66ff73845b410526eSelf-updated build (.upd_boat, 1 MB)
- sha256497eb762135d408d0a2b4150797dda885fd429e7cdf5ec861bc7973bc0827f03Unpacked build 1
- sha25660f4ab1965da5f8f8ce9bf5cc70b9ea02d8a5db4ddbcb85d1e8b7d229431e681Unpacked build 3
- sha256
- sha256843adf9a7338cb0bbe96930a07d370ebe707990a330dd5cae4d39d635564b51fUnpacked build 4
- sha2569a492f67a1f242338b0b07b0496d5b08ec32f3be23c2a04595e6484e55e82f7cRelated build (.kswapd768)
- sha2569c47bda7b9ad9aaff10af520fbd2a6a0daa35368d5748d9a1fc3e02cf4efc300Unpacked build 6
- sha2569c62d7a7a8df99fa597412bd404e983a425107efdb6d32057625045f74a737d6Related build (.kswapd783)
- sha256
- sha256b68d9fb8ea9d7acb41fe78bd3a1372d8a4fae3c3ea2d348a7eb1c521019f3900Related build (.kswapd7681)
- sha256
- sha256
- sha256e2179ab050fe54713210f599229fc6115f6cdb8c42a0da1505d80f1eb038c2f3Related build (.kswapd768)
- sha256e95c20d4a03024574bbfd94bc13b3e0d96cbc2cb3f2d23f17a8fe39f447d3f64Unpacked build 2
- sha256e973567fb5e8dd6a1aafcd9076f7b9f30b9bb8e54728f328f418d1844c802e3bRelated build (.kswapd768)
- sha256ee703ccef609ac023d610f6b43d2c884b25725f46bb87e6ea374c43ba7eb2075Related build (.scsi_eh5580)
- sha256f56abcc5b7ad449f76f65fff43be88fa7b25291cb9751e0696f5b9d31f0e4b85Related build (.kswapd783)
- string0x5D5abC33a4e5C602a002815d93806b204324D1a1Polygon EtherHiding contract
- string0xc9601CAAd74E0D8C41e5bdA33427Ad193322B0b1Contract controller wallet
- string6d4ce63cget() selector
- string7022c563de38_7022c563de38_50951df55ccbTCP/8443 certificate JA4X
- string805c5098c496b1e3ee6b2f8a00adf088AES-128-GCM key for on-chain C2 decryption
- stringBN4/mG7otq7uVCjFShared 16-byte packed-file suffix
- stringboatnet-unit-v2Family marker and systemd service comment
- stringcf4b2a7c8c25780c40af7fd788e267deC2 MD5 authentication token
- string--self-checkPre-flight binary verification argument
- string应用-dockerBoatnet execution argument
- urlhxxp://85[.]137[.]54[.]178:8080/1Initial HTTP payload path
- urlhxxp://85[.]137[.]54[.]178:8080/bins/1Host-cache payload path
- urlhxxps://85[.]137[.]54[.]178:8443/bins/1HTTPS payload path
- user_agentDocker-Client/24[.]0[.]0Campaign client identity