Kairos: new Go-based Linux DDoS botnet exhausts servers with thousands of idle TCP connections
Nozomi Networks Labs has documented Kairos, a previously undocumented Go-based DDoS bot targeting Linux devices. Infected hosts open thousands of legitimate but idle TCP sessions against a target to exhaust its connection capacity, rather than using spoofed SYN floods. Initial access in observed honeypot cases came via Telnet with the default root user and an empty password, followed by a shell loader from /tmp that retrieved architecture-matched payloads. Three builds were captured differing only in hard-coded C2 address and Go compiler version (1.27.0/1.27.1), suggesting a build-per-C2 distribution model. A YARA hunt on VirusTotal surfaced six additional samples for ARM, MIPS (BE/LE) and 32-bit x86, all using C2 172[.]86[.]85[.]39.
Detalhes técnicos
- Loader chain tries wget, curl, BusyBox wget and TFTP, with
chmod 777and background execution; payload hosted on TCP/8080, C2 on TCP/9999. - Plaintext beacon
REGISTER linux amd64 <NumCPU>over TCP/9999, keepalive newline every 2s, redial every 5s with no jitter or retry limit. - Three commands only:
hold <host> <port> <seconds>,!ka(cancel/pause),!ku(resume). - Spawns 128 workers per CPU core (minimum 256); a 16-core host opens 2,048 concurrent connections. Each worker completes a real TCP handshake (5s timeout) and sends a single space
0x20every 5s to hold the socket; failed connects retry every 100ms, producing a connect storm. - No persistence, self-propagation, command execution, download capability or anti-analysis. Intact
.gopclntabexposeskairos/methods.HoldFloodandkairos/methods.holdConn. - Masquerades by rewriting
os.Args[0]to[kworker/0:1], but does not alter original argv memory or callprctl(PR_SET_NAME), so/proc/<pid>/cmdline,commandpsreveal the real binary. - Because the victim sees the real source IP, operators expose infected hosts; large attacks can exhaust the bot's own file descriptors. Kairos is minimal compared with Mirai derivatives such as Evooo1Bot.
Remediação
- Block egress to 91[.]92[.]42[.]84, 172[.]86[.]85[.]39 and 85[.]11[.]167[.]41 on ports 9999 and 8080; block attacker IPs 103[.]124[.]165[.]53, 45[.]129[.]56[.]140, 45[.]129[.]56[.]222.
- Add an IDS signature for the plaintext
REGISTER linuxbeacon on TCP/9999. - Disable Telnet and replace default or empty credentials.
- Deploy the YARA rule for file and memory scanning (ELF containing both
[kworker/0:1]and build pathkairos/bot); alert on "kernel worker" processes holding many outbound TCP connections. Code-based signatures outlive IP blocks given the build-per-C2 model.
Linha do tempo
-
Kairos: new Go-based Linux DDoS botnet exhausts servers with thousands of idle TCP connections
ler a análise desta fonte ocultar
Nozomi Networks Labs has documented Kairos, a previously undocumented Go-based DDoS bot targeting Linux devices. Infected hosts open thousands of legitimate but idle TCP sessions against a target to exhaust its connection capacity, rather than using spoofed SYN floods. Initial access in observed honeypot cases came via Telnet with the default
rootuser and an empty password, followed by a shell loader from/tmpthat retrieved architecture-matched payloads. Three builds were captured differing only in hard-coded C2 address and Go compiler version (1.27.0/1.27.1), suggesting a build-per-C2 distribution model. A YARA hunt on VirusTotal surfaced six additional samples for ARM, MIPS (BE/LE) and 32-bit x86, all using C2 172[.]86[.]85[.]39.Technical Details
- Loader chain tries wget, curl, BusyBox wget and TFTP, with
chmod 777and background execution; payload hosted on TCP/8080, C2 on TCP/9999. - Plaintext beacon
REGISTER linux amd64 <NumCPU>over TCP/9999, keepalive newline every 2s, redial every 5s with no jitter or retry limit. - Three commands only:
hold <host> <port> <seconds>,!ka(cancel/pause),!ku(resume). - Spawns 128 workers per CPU core (minimum 256); a 16-core host opens 2,048 concurrent connections. Each worker completes a real TCP handshake (5s timeout) and sends a single space
0x20every 5s to hold the socket; failed connects retry every 100ms, producing a connect storm. - No persistence, self-propagation, command execution, download capability or anti-analysis. Intact
.gopclntabexposeskairos/methods.HoldFloodandkairos/methods.holdConn. - Masquerades by rewriting
os.Args[0]to[kworker/0:1], but does not alter original argv memory or callprctl(PR_SET_NAME), so/proc/<pid>/cmdline,commandpsreveal the real binary. - Because the victim sees the real source IP, operators expose infected hosts; large attacks can exhaust the bot's own file descriptors. Kairos is minimal compared with Mirai derivatives such as Evooo1Bot.
Remediation
- Block egress to 91[.]92[.]42[.]84, 172[.]86[.]85[.]39 and 85[.]11[.]167[.]41 on ports 9999 and 8080; block attacker IPs 103[.]124[.]165[.]53, 45[.]129[.]56[.]140, 45[.]129[.]56[.]222.
- Add an IDS signature for the plaintext
REGISTER linuxbeacon on TCP/9999. - Disable Telnet and replace default or empty credentials.
- Deploy the YARA rule for file and memory scanning (ELF containing both
[kworker/0:1]and build pathkairos/bot); alert on "kernel worker" processes holding many outbound TCP connections. Code-based signatures outlive IP blocks given the build-per-C2 model.
- Loader chain tries wget, curl, BusyBox wget and TFTP, with