Bhunter — wir brechen in Botnetz-Knoten ein

Virusanalytiker und IT-Sicherheitsexperten versuchen, so viele Proben neuer Botnetze wie möglich zu sammeln. Zu diesem Zweck nutzen sie Honeypots.… Aber was, wenn man Schadsoftware unter realen Bedingungen beobachten möchte? Möchte man seinen eigenen Server oder Router gefährden? Und was, wenn keine geeigneten Geräte zur Verfügung stehen? Diese Fragen führten mich zur Entwicklung von bhunter — einem Tool, das Zugang zu Botnetz-Knoten bietet.

Bhunter — wir brechen in Botnetz-Knoten ein

Die Grundidee

Es gibt viele Wege, wie Schadsoftware verbreitet wird, um Botnetze zu vergrößern: angefangen bei Phishing bis hin zur Ausnutzung von 0-Day-Schwachstellen. Doch die häufigste Methode bleibt nach wie vor das Erraten von SSH-Passwörtern.

Die Idee ist ganz einfach. Wenn von einem Botnetz-Knoten aus versucht wird, Passwörter für Ihren Server zu erraten, wurde dieser Knoten wahrscheinlich selbst durch das Erraten einfacher Passwörter übernommen. Das bedeutet, um Zugriff zu erhalten, muss man ihm einfach mit 'Gegenseitigkeit' antworten.

So funktioniert bhunter. Es überwacht den Port 22 (SSH-Dienst) und sammelt alle Logins und Passwörter, mit denen versucht wird, eine Verbindung herzustellen. Anschließend versucht es, unter Verwendung der gesammelten Passwörter, sich mit den angreifenden Knoten zu verbinden.

Funktionsweise

Die Software lässt sich grob in zwei Hauptteile unterteilen, die in separaten Threads arbeiten. Der erste Teil ist das Honeypot. Er verarbeitet die Anmeldeversuche, sammelt einzigartige Logins und Passwörter (in diesem Fall wird das Login-Passwort-Paar als Einheit betrachtet) und fügt die IP-Adressen, die versucht haben, sich zu verbinden, zur weiteren Attacke in die Warteschlange.

Der zweite Teil ist direkt für den Angriff verantwortlich. Der Angriff erfolgt in zwei Modi: BurstAttack (Angriff in der Warteschlange) — Durchgehen der Logins und Passwörter aus einer allgemeinen Liste und SingleShotAttack (Einzelangriff) — Durchgehen der Passwörter, die vom angegriffenen Knoten verwendet wurden, aber noch nicht zur allgemeinen Liste hinzugefügt wurden.

Um sofort eine gewisse Basis an Logins und Passwörtern nach dem Start zu haben, wird bhunter mit einer Liste aus der Datei /etc/bhunter/defaultLoginPairs initialisiert.

Benutzeroberfläche

Es sind mehrere Möglichkeiten vorgesehen, bhunter zu starten:

Einfach mit dem Befehl

sudo bhunter

Mit diesem Start haben Sie die Möglichkeit, bhunter über sein textbasiertes Menü zu steuern: Sie können Anmeldungen und Passwörter für Angriffe hinzufügen, die Datenbank von Anmeldungen und Passwörtern exportieren und Ziele für Angriffe angeben. Alle gehackten Knoten können in der Datei /var/log/bhunter/hacked.log eingesehen werden.

Verwendung von tmux

sudo bhunter-ts # Befehl zum Starten von bhunter über tmux 
sudo tmux attach -t bhunter # Verbindung zur Sitzung herstellen, in der bhunter läuft

Tmux ist ein Terminal-Multiplexer, ein sehr nützliches Tool. Es ermöglicht, mehrere Fenster innerhalb eines Terminals zu erstellen und diese Fenster in Paneele zu unterteilen. Mit tmux können Sie das Terminal schließen und später zurückkehren, ohne laufende Prozesse zu unterbrechen.

Das Skript bhunter-ts erstellt eine tmux-Sitzung und teilt das Fenster in drei Paneele auf. In der größten, der ersten Paneele, befindet sich das textbasierte Menü. Die obere rechte Paneele enthält die Protokolle des Honeypots, wo Sie Nachrichten über Anmeldeversuche auf dem Honeypot sehen können. In der unteren rechten Paneele wird die Information über den Fortschritt der Angriffe auf Bot-Netzknoten und erfolgreiche Hacks angezeigt.

Der Vorteil dieser Methode gegenüber der vorherigen besteht darin, dass wir das Terminal ruhig schließen und später darauf zurückkommen können, ohne dass bhunter seine Arbeit unterbricht. Für diejenigen, die wenig mit tmux vertraut sind, empfehle ich dieses Handbuch.

Als Dienst

systemctl enable bhunter
systemctl start bhunter

In diesem Fall aktivieren wir den Autostart von bhunter beim Systemstart. In dieser Methode ist keine Interaktion mit bhunter vorgesehen, und die Liste der gehackten Knoten kann aus /var/log/bhunter/hacked.log abgerufen werden.

Effizienz

Während meiner Arbeit an bhunter konnte ich auf ganz unterschiedliche Geräte zugreifen: Raspberry Pi, Router (insbesondere Mikrotik), Webserver und einmal sogar auf eine Mining-Farm (leider war der Zugang nur einen Tag lang verfügbar, daher ist die Geschichte nicht besonders spannend). Hier ist ein Screenshot des Programms, der die Liste der gehackten Knoten nach ein paar Tagen Arbeit zeigt:

Bhunter — wir brechen in Botnetz-Knoten ein

Leider hat die Effektivität dieses Werkzeugs meine Erwartungen nicht erfüllt: bhunter kann Passwörter für Knoten tagelang ohne Erfolg testen, kann aber in wenigen Stunden mehrere Ziele kompromittieren. Dennoch reicht es für einen regelmäßigen Zustrom neuer Botnet-Proben.

Die Effizienz wird durch Parameter wie das Land, in dem der Server mit bhunter steht, das Hosting und den Bereich, aus dem die IP-Adresse zugewiesen wird, beeinflusst. Aus meiner Erfahrung gab es einen Fall, in dem ich zwei virtuelle Server bei demselben Anbieter gemietet habe, und einer von ihnen wurde doppelt so häufig von Botnets angegriffen.

Bugs, die ich bisher nicht behoben habe

Bei Angriffe auf infizierte Knoten kann es in einigen Situationen schwierig sein, eindeutig zu bestimmen, ob das Passwort korrekt war oder nicht. Die Protokollierung solcher Fälle erfolgt in der Datei /var/log/debug.log.

Das Paramiko-Modul, das für die Arbeit mit SSH verwendet wird, verhält sich manchmal inkorrekt: Es geht in eine endlose Warteschleife, wenn es versucht, sich mit dem Knoten zu verbinden. Ich habe mit Timern experimentiert, aber das gewünschte Ergebnis nicht erzielt.

Woran muss noch gearbeitet werden?

Service-Name

Gemäß RFC-4253 tauschen Client und Server vor der Verbindung die Namen der Dienste aus, die das SSH-Protokoll implementieren. Der Name befindet sich im Feld „SERVICE NAME“, das sowohl in der Anfrage des Clients als auch in der Antwort des Servers enthalten ist. Dieses Feld ist ein String, und seinen Wert kann man mit Wireshark oder Nmap ermitteln. Hier ein Beispiel für OpenSSH:

$ nmap -p 22 ***.**.***.** -sV
Starte Nmap ...
PORT   STATUS DIENSTLEISTUNG VERSION
22/tcp offen  ssh     <b>OpenSSH 7.9p1 Debian 10+deb10u2</b> (Protokoll 2.0)
Nmap abgeschlossen: 1 IP-Adresse (1 Host aktiv) in 0,47 Sekunden gescannt

Im Falle von Paramiko enthält dieses Feld jedoch eine Zeichenfolge wie «Paramiko Python sshd 2.4.2», die Botnets abschrecken kann, die mit «Vermeidung» von Fallen ausgestattet sind. Daher halte ich es für notwendig, diese Zeichenfolge durch etwas Neutraleres zu ersetzen.

Weitere Vektoren

SSH ist nicht das einzige Mittel zur Fernverwaltung. Es gibt auch Telnet und RDP, die ebenfalls in Betracht gezogen werden sollten.

Erweiterung

Es wäre großartig, mehrere Fallen in verschiedenen Ländern zu haben und zentral Logins, Passwörter und gehackte Nodes in einer gemeinsamen Datenbank zu sammeln.

Wo herunterladen?

Zum Zeitpunkt des Schreibens des Artikels ist nur eine Testversion verfügbar, die heruntergeladen werden kann von dem Repository auf Github.

Quelle: habr.com

Erwerben Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster