
Volcador de credenciales para Linux usando eBPF
pamspy aprovecha las tecnologías eBPF para lograr un trabajo equivalente a 3snake.
Rastrea una función particular del espacio de usuario dentro de la biblioteca PAM (Módulos de Autenticación Enchufables), utilizada por muchas aplicaciones críticas para manejar la autenticación como:

pamspy está construido como un binario estático sin dependencias, y está disponible en la página de lanzamientos.
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 .
Dado que pamspy depende de libpam, debemos establecer la ruta donde está instalado libpam en su distribución. Para encontrar dónde está instalado libpam, puede ejecutar el siguiente comando:
> /usr/sbin/ldconfig -p | grep libpam.so | cut -d ' ' -f4
/lib/x86_64-linux-gnu/libpam.so.0
Una vez que tenga la ruta, puede lanzar pamspy :
> ./pamspy -p /lib/x86_64-linux-gnu/libpam.so.0
Una forma sencilla de lanzar pamspy es usar el siguiente comando :
> ./pamspy -p $(/usr/sbin/ldconfig -p | grep libpam.so | cut -d ' ' -f4)
pamspy también se puede iniciar como un demonio proporcionando un archivo de salida donde se escribirán las credenciales:
./pamspy -p $(/usr/sbin/ldconfig -p | grep libpam.so | cut -d ' ' -f4) -d /tmp/credentials
Para construir el binario estático, necesitamos programas de terceros. Para eBPF necesitamos clang para compilar el código C en código eBPF CO-RE. También dependemos de bpftool para crear un esqueleto a partir del programa eBPF e incluirlo en nuestro programa de espacio de usuario. Además, necesitamos libelf para encontrar el símbolo correcto en libpam.
sudo apt install make clang-11 gcc libelf-dev bpftool
¡Entonces solo hay que construir!
git clone https://github.com/citronneur/pamspy --recursive
cd pamspy/src
make
pamspy cargará un programa de retorno de eBPF en el espacio de usuario para enganchar la función pam_get_authtok de libpam.so.
PAM significa "Módulos de Autenticación Enchufables" y tiene un diseño flexible para gestionar diferentes tipos de autenticación en Linux.
Cada vez que un proceso de autenticación intenta verificar un nuevo usuario, llamará a pam_get_authtok, y pamspy estará allí para volcar el contenido de los secretos críticos.
¡Fácil! ¡Disfrútalo!
¡Gracias a @blendin por la herramienta 3snake!!!