本文作者:uiop@360SRC
看到越来越多使用eBPF的文章,奈何手边没有高版本的手机,只能使用开发版进行体验,踩了许多坑之后记录一下简单使用过程。
eBPF 是一项革命性的技术,起源于 Linux 内核,可以在操作系统的内核中运行沙盒程序。它被用来安全和有效地扩展内核的功能,而不需要改变内核的源代码或加载内核模块。
eBPF 通过允许在操作系统内运行沙盒程序,应用程序开发人员可以在运行时,可编程地向操作系统动态添加额外的功能。然后,操作系统保证安全和执行效率,就像在即时编译(JIT)编译器和验证引擎的帮助下进行本地编译一样。eBPF 程序在内核版本之间是可移植的,并且可以自动更新,从而避免了工作负载中断和节点重启。
eBPF 程序在事件触发时由内核运行,所以可以被看作是一种函数挂钩或事件驱动的编程形式。从用户空间运行按需 eBPF 程序的价值较小,因为所有的按需用户调用已经通过正常的非 VM 内核 API 调用(“syscalls”)来处理,这里 VM 字节码带来的价值很小。事件可由 kprobes/uprobes、tracepoints、dtrace probes、socket 等产生。这允许在内核和用户进程的指令中钩住(hook)和检查任何函数的内存、拦截文件操作、检查特定的网络数据包等等。
Linux内核的主要目的是抽象硬件或虚拟硬件并提供一致的API(系统调用),允许应用程序运行和共享资源。为了实现这一目标,需要维护大量的子系统和层来分配这些职责。每个子系统通常允许某种级别的配置来满足用户的不同需求。如果无法配置所需的行为,则需要更改内核,从历史上看,留下两个选项:
使用rk3588开发版armbian系统+redroid作为开发环境按照官方wiki刷好最新的armbian系统0e9K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4K9h3E0A6i4K6u0W2M7X3q4V1P5r3q4Q4x3X3g2U0L8$3#2Q4x3V1k6d9L8$3y4C8y4g2)9J5c8U0g2T1i4K6u0r3k6$3g2@1N6r3W2F1k6#2)9#2b7#2)9#2k6Y4y4@1j5i4u0@1k6h3b7`.在armbian上使用redroid(新版armbian内核直接可以使用redroid了,也可以直接使用cuttlefish)
$ sudo apt
-
get update
get upgrade
$ curl
fsSL test.docker.com
o get
docker.sh && sh get
docker.sh
$ sudo usermod
aG docker $USER
$ docker run
itd
rm
privileged \
pull always \
v ~
/
data:
data \
p
5555
:
\
redroid
redroid:
12.0
.
0
arm64
编译支持ebpf功能的内核(如果是ubuntu可以按照官方教程编译)
get install
y git device
tree
compiler libncurses5 libncurses5
dev build
essential libssl
dev mtools bc python3 dosfstools bison flex rsync u
boot
tools make
$ cd
usr
local
lib
$ sudo wget https:
432K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4m8&6N6r3S2G2L8W2)9J5k6h3!0J5k6H3`.`.
ftp
python
2.7
Python
.tgz
$ sudo tar
zxvf Python
$ sudo ln
snf
bin
python2
$ sudo apt install linux
source
5.10
110
legacy
rockchip
rk3588
$ mkdir kernel
$ cd kernel
$ tar
xf
src
linux
rk3588.tar.xz
$ sudo xz
d
legacy_5.
10.110_23
02.2_config
.xz
$ cp
.config
$ make mrproper
$ nano .config
CONFIG_IKHEADERS
=
y
CONFIG_ASHMEM
CONFIG_ANDROID_BINDERFS
CONFIG_KPROBES
CONFIG_KRETPROBES
$ make
j8
$ sudo make modules_install
$ sudo make install
$ sudo mv Image Image.old
s vmlinuz
Image
最后重启即可
如果出现warning错误而导致的error, forbidden warningkernel/scripts/gcc-wrapper.py
1. 切换docker的bridge网络模式为macvlan创建macvlan注意修改网段及网卡名为自己的
$ docker network create
d macvlan
subnet
192.168
0.0
24
gateway
0.1
o parent
enP4p65s0
o macvlan_mode
bridge mymacvlan
重新分配ip并启动redroid
net
mymacvlan
ip
0.100
latest \
androidboot.redroid_width
1080
androidboot.redroid_height
1920
androidboot.redroid_dpi
480
2. 根据以下两篇文章完成bcc开发环境搭建b0eK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1L8r3!0Y4i4K6u0W2M7$3g2W2k6X3I4G2N6$3g2J5i4K6u0W2k6r3g2$3i4K6u0r3j5i4u0U0K9r3W2$3k6i4y4Q4x3V1j5I4x3K6S2Q4x3V1j5`.9c8K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1L8r3!0Y4i4K6u0W2M7$3g2W2k6X3I4G2N6$3g2J5i4K6u0W2k6r3g2$3i4K6u0r3j5i4u0U0K9r3W2$3k6i4y4Q4x3V1j5I4x3e0q4Q4x3V1j5`.修改配置不同处 3. 最后可以获取这样的效果
1. 执行execsnoop来查看rootbeer的检测点
2. 编写ebpf程序,并绕过root检测简单看来直接在exec基础上修改系统调用的参数即可绕过检测
da2K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1L8r3!0Y4i4K6u0W2M7$3g2W2k6X3I4G2N6$3g2J5i4K6u0W2k6r3g2$3i4K6u0r3j5$3q4@1k6h3N6G2M7Y4W2Q4x3V1k6W2b7W2m8r3i4K6u0r3ffdK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6W2j5Y4m8X3i4K6u0W2K9h3!0Q4x3V1k6*7K9q4)9J5k6r3y4F1i4K6u0r3N6$3S2S2N6q4)9J5k6r3W2K6i4K6u0V1k6h3u0H3k6W2)9J5c8R3`.`.f65K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6@1K9h3q4F1L8W2)9J5c8X3u0U0j5#2)9J5c8Y4c8J5k6h3g2Q4x3V1k6E0j5i4y4@1k6i4u0Q4x3V1k6@1L8$3!0D9M7H3`.`.
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课