Bhunter - wir hacken Botnetz-Knoten

Virusanalytiker und Computer-Sicherheitsexperten versuchen, so viele Proben neuer Botnets wie möglich zu sammeln. Zu diesem Zweck verwenden sie Honeypots.… Aber was ist, wenn man einen Malware-Angreifer unter realen Bedingungen beobachten möchte? Soll man seinen eigenen Server, Router oder ein anderes Gerät ins Visier nehmen? Und was ist, wenn man kein passendes Gerät hat? Diese Fragen führten mich zur Entwicklung von bhunter – einem Werkzeug, das den Zugang zu Knoten von Bot-Netzen ermöglicht.

Bhunter - wir hacken Botnetz-Knoten

Die Grundidee

Es gibt viele Möglichkeiten, Malware zu verbreiten, um Bot-Netze zu erweitern: angefangen von Phishing bis hin zur Ausnutzung von 0-Day-Schwachstellen. Die gängigste Methode bleibt jedoch bis heute das Brute-Force-Angreifen von SSH-Passwörtern.

Die Idee ist sehr einfach. Wenn von einem Bot-Netz-Knoten aus Brute-Force-Angriffe auf Ihren Server unternommen werden, dann ist es wahrscheinlich, dass dieser Knoten selbst durch Brute-Force-Angriffe mit einfachen Passwörtern übernommen wurde. Das bedeutet, um Zugang zu erhalten, müssen Sie ihm einfach mit "Gegenseitigkeit" antworten.

So funktioniert bhunter. Es lauscht auf Port 22 (SSH-Dienst) und sammelt alle Logins und Passwörter, die versuchen, sich damit zu verbinden. Anschließend versucht es, mithilfe der gesammelten Passwörter eine Verbindung zu den angreifenden Knoten herzustellen.

Betriebsalgorithmus

Das Programm kann grob in zwei Hauptbestandteile unterteilt werden, die in getrennten Threads arbeiten. Der erste – Honeypot. Er verarbeitet Anmeldeversuche, sammelt einzigartige Logins und Passwörter (in diesem Fall wird das Paar Login+Passwort als Einheit betrachtet) und fügt IP-Adressen, die eine Verbindung versucht haben, zur Warteschlange für einen späteren Angriff hinzu.

Der zweite Teil ist direkt für den Angriff verantwortlich. Dabei wird der Angriff in zwei Modi durchgeführt: BurstAttack (Angriff mit Warteschlange) – das Brute-Forcen von Logins und Passwörtern aus einer allgemeinen Liste und SingleShotAttack (Einzelangriff) – das Brute-Forcen von Passwörtern, die von dem angegriffenen Knoten verwendet wurden, jedoch noch nicht zur allgemeinen Liste hinzugefügt wurden.

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

Benutzeroberfläche

Es sind mehrere Möglichkeiten zum Starten von bhunter vorgesehen:

Einfach per Befehl

sudo bhunter

Bei diesem Start haben Sie die Möglichkeit, bhunter über sein Textmenü zu steuern: Logins und Passwörter für den Angriff hinzuzufügen, Datenbank von Logins und Passwörtern zu exportieren und das Ziel für den Angriff anzugeben. Alle gehackten Knoten sind in der Datei /var/log/bhunter/hacked.log zu sehen.

Mit tmux

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

Tmux ist ein terminalbasierter Multiplexer, ein sehr nützliches Werkzeug. Er ermöglicht es, innerhalb eines Terminals mehrere Fenster zu erstellen und die Fenster in Panels aufzuteilen. Mit seiner Hilfe kann man das Terminal schließen und später zurückkehren, während die laufenden Prozesse nicht unterbrochen werden.

Das Skript bhunter-ts erstellt eine tmux-Sitzung und teilt das Fenster in drei Panels auf. Im ersten, dem größten, befindet sich das Textmenü. Das obere rechte Panel enthält die Protokolle des Honeypots, dort kann man Nachrichten über Zugriffsversuche auf den Honeypot sehen. Im unteren rechten Panel werden Informationen über den Verlauf der Angriffe auf Bot-Netzknoten und über erfolgreiche Hacks angezeigt.

Der Vorteil dieser Methode gegenüber der ersten besteht darin, dass wir das Terminal bedenkenlos schließen und später zurückkehren können, während bhunter seine Arbeit nicht stoppt. Für diejenigen, die mit tmux wenig vertraut sind, empfehle ich diesen Spickzettel.

As a service

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.

Effektivität

Während meiner Arbeit an bhunter konnte ich auf völlig unterschiedliche Geräte zugreifen: raspberry pi, Router (insbesondere mikrotik), Web-Server, und einmal sogar auf eine Mining-Farm (leider war der Zugriff nur für einen Tag möglich, daher gab es keine interessante Geschichte). Hier ist ein Screenshot des Programms, auf dem die Liste der gehackten Knoten nach mehreren Tagen Arbeit zu sehen ist:

Bhunter - wir hacken Botnetz-Knoten

Leider hat die Effektivität dieses Werkzeugs meine Erwartungen nicht erfüllt: bhunter kann mehrere Tage lang Passwörter zu Knoten ausprobieren, ohne Ergebnisse zu erzielen, oder innerhalb von ein paar Stunden mehrere Ziele hacken. Aber für einen kontinuierlichen Zustrom neuer Botnetz-Muster ist dies ausreichend.

Die Effektivität wird durch Faktoren wie das Land, in dem sich der Server mit bhunter befindet, das Hosting und den диапазон, aus dem die IP-Adresse zugewiesen wurde, beeinflusst. Aus meiner Erfahrung gab es einen Fall, in dem ich zwei virtuelle Server bei demselben Hosting-Anbieter gemietet habe, und einer von ihnen wurde zwei Mal häufiger von Bot-Netzen angegriffen.

Bugs, die ich bisher nicht behoben habe

Bei Angriffen auf infizierte Knoten lässt sich in einigen Situationen nicht eindeutig bestimmen, ob das Passwort richtig 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 unzuverlässig: Es geht in eine endlose Wartezeit auf eine Antwort vom Knoten, wenn es versucht, sich mit ihm zu verbinden. Ich habe mit Timern experimentiert, aber das gewünschte Ergebnis nicht erzielt.

Woran muss sonst 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. Dieser Name befindet sich im Feld „SERVICE NAME“, das sowohl in der Anfrage des Clients als auch in der Antwort des Servers enthalten ist. Das Feld ist eine Zeichenkette, und sein Wert kann mit Wireshark oder nmap ermittelt werden. Hier ein Beispiel für OpenSSH:

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

Im Fall von Paramiko enthält dieses Feld jedoch eine Zeichenfolge wie „Paramiko Python sshd 2.4.2“, was Botnetze abschrecken kann, in denen „Umgehung“ von Fallen programmiert ist. Daher halte ich es für notwendig, diese Zeichenfolge durch etwas Neutraleres zu ersetzen.

Weitere Vektoren

SSH ist nicht das einzige Mittel zur Fernsteuerung. Es gibt auch Telnet, RDP. Man sollte auch einen Blick darauf werfen.

Erweiterung

Es wäre großartig, mehrere Fallen in verschiedenen Ländern zu haben und zentral Logins, Passwörter und gehackte Knoten 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

60GB SSD 8Gb DDR4