pamspy 利用 eBPF 技术实现与 3snake 等效的功能。
它将追踪 PAM(可插拔认证模块)库中的一个特定用户态函数,许多关键应用都使用该库来处理认证,例如:

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 程序,以 Hook libpam.so 中的 pam_get_authtok 函数。PAM 代表“可插拔认证模块”,其设计灵活,能够管理 Linux 上不同类型的认证。
每当认证进程尝试检查新用户时,它会调用 pam_get_authtok,而 pamspy 就会在这里转储关键秘密的内容!
简单吧!尽情使用!
感谢 @blendin 的 3snake 工具!!!