实现这个功能需要使用到 eBPF 的 bpf_probe_write_user 功能,它可以修改用户空间的内存,因此能用来修改 getdents64 返回的结果。 下面,我们会详细介绍如何在内核态和用户态编写 eBPF 程序来实现进程隐藏。 内核态 eBPF 程序实现 接下来,我们将详细介绍如何在内核态编写 eBPF 程序来实现进程隐藏。首先是 eBPF 程序...
eBPF提供了一个叫bpf_probe_write_user的接口,允许开发人员对用户态的数据进入写入修改操作,但是,出于安全的考虑,并没有提供内核数据修改与内核/用户代码的修改功能。这意味着,默认情况下,要想实现数据的修改,只能使用bpf_probe_write_user。经过一段时间的研究,我也研究出了一些玩法,并在eBPF第四季里面加入了相应...
(1)bpf_probe_read:安全地从内核空间读取数据 (2)bpf_probe_write_user:尝试以一种安全的方式向用户态空间写数据 (3)bpf_override_return:用于error injection,可以用于修改kprobe监控的函数返回值 这些helper提供了读写整个机器上任意进程用户态空间的功能,同时提供了内核空间的读取数据功能,当攻击者能向内核加载eB...
在这个过程中,我们用到了bpf_probe_read_user、bpf_probe_read_user_str、bpf_probe_write_user这几个函数来读取和写入用户空间的数据。这是因为在内核空间,我们不能直接访问用户空间的数据,必须使用这些特殊的函数。 在我们完成隐藏操作后,我们会向一个名为rb的环形缓冲区发送一个事件,表示我们已经成功地隐藏了一...
应用发起read/write/connect等系统调用 TCP 发生重传 网络包达到网卡 这很类似hook系统函数的行为,我们知道hook系统函数修改原有逻辑很容易会造成系统崩溃,那么 Linux 内核是如何实现 eBPF 程序的安全和稳定的呢? 首先,ebpf程序并不是传统意义上的一个ELF执行程序,而是一段BPF字节码,这段字节码会交给内核的ebpf虚拟机...
bpf() syscall eBPF应用程序通过唯一的系统调用接口与kernel通信。 SYSCALL_DEFINE3(bpf, int, cmd, union bpf_attr __user *, uattr, unsigned int, size) cmd 参数指定执行的操作 enumbpf_cmd{BPF_MAP_CREATE,// 创建一个mapBPF_MAP_LOOKUP_ELEM,// 查询一个map 元素BPF_MAP_UPDATE_ELEM,// 更新一个...
在DEF CON29峰会上,安全研究员Pat Hogan也分享了一篇关于eBPF的恶意利用案例:《Warping Reality – creating and countering the next generation of Linux rootkits using eBPF》,介绍了eBFP rootkit的应用场景,包括网络、运行时等,以及如何检测eBPF的恶意利用等。代码在https://github.com/pathtofile/bad-bpf。
在我们的例子中,我们使用 eBPF 来 hook ssl_read 和 ssl_write 函数,从而在数据读取或写入 SSL 连接时执行自定义操作。 数据结构 首先,我们定义了一个数据结构 probe_SSL_data_t 用于在内核态和用户态之间传输数据: #defineMAX_BUF_SIZE 8192 #defineTASK_COMM_LEN 16 ...
SEC("uprobe/examples/btf-base:add_test") intBPF_UPROBE(add_test, struct data *d) { inta =0, c =0; bpf_probe_read_user(&a,sizeof(a), &d->a); bpf_probe_read_user(&c,sizeof(c), &d->c); bpf_printk("add_test(&d) %d + %d = %d\n", a, c, a + c); ...
bpf_probe_write_user eBPF programs have access to a limited set of helper functions. These functions are built into the kernel. One helper that has been utilized by eBPF-based malware is bpf_probe_write_user. This function allows an eBPF program to write to the user-space memory of the ...