关于KRIe
KRIe是一款功能强大的带有eBPF的Linux内核运行时安全检测工具,该工具旨在利用eBPF的功能来检测Linux内核中的安全问题。KRle远远不止是一种防御策略那么简单,该项目的主要目标是增加攻击者的攻击难度,并防止那些开箱即用的漏洞利用策略直接在目标设备内核上发挥作用。
KRIe是一种使用CO-RE(编译一次-到处运行)策略开发的工具,因此它可以与大多数内核版本肩痛。如果你的内核导出其BTF调试信息,KRIe将尝试从BTFHub自动下载它。如果你的内核在BTFHub上不可用,但你已经能够手动生成内核的BTF数据,那么你就可以在配置文件中提供这些数据。
系统要求
该项目使用Ubuntu Focal 20.04(Linux内核版本5.15)平台进行开发,并已在低至Ubuntu Bionic 18.04(Linux内核版本4.15)的平台上进行过完整测试。
除此之外,该工具的正常使用还需要下列环境或依赖组件:
1、Golang v1.18 ; 2、(可选)内核Header需要安装在lib/modules/$(uname -r),并使用对应的路径信息更新Makefile; 3、(可选)clang & llvm 14.0.6 ;
注意,其中的可选部分主要用于对eBPF程序的重新编译。
项目下载
广大研究人员可以使用下列命令将该项目源码克隆至本地:
代码语言:javascript复制git clone https://github.com/Gui774ume/krie.git
(向右滑动,查看更多)
项目构建
由于KRle使用了CO-RE策略进行开发和构建,因此我们不需要重新构建eBPF程序。也就是说,如果你仍然想重新构建eBPF程序的话,你可以直接使用下列命令:
代码语言:javascript复制# ~ make build-ebpf
接下来,运行下列命令即可构建KRle:
代码语言:javascript复制# ~ make build
完成项目构建后,即可使用下列命令安装KRIe(需拷贝至/usr/bin/krie):
代码语言:javascript复制# ~ make install
工具使用
接下来,使用root权限运行KRIe即可。sudo krie -h命令可以直接获取工具的帮助信息:
代码语言:javascript复制# ~ krie -h
Usage:
krie [flags]
Flags:
--config string KRIe config file (default "./cmd/krie/run/config/default_config.yaml")
-h, --help help for krie
(向右滑动,查看更多)
工具配置
代码语言:javascript复制
## 设置日志等级,可选项:panic, fatal, error, warn, info, debug或trace
log_level: debug
## JSON输出文件,留空表示禁用JSON输出
output: "/tmp/krie.json"
## 针对当前内核的BTF信息,格式为.tar.xz
vmlinux: ""
## 事件配置
events:
## 当检测到一个init_module事件时要执行的操作
init_module: log
## 当检测到一个delete_module事件时要执行的操作
delete_module: log
## 当检测到一个bpf 事件时要执行的操作
bpf: log
## 当检测到一个bpf_filter事件时要执行的操作
bpf_filter: log
## 当检测到一个ptrace 事件时要执行的操作
ptrace: log
## 当检测到一个kprobe 事件时要执行的操作
kprobe: log
## 当检测到一个sysctl 事件时要执行的操作
sysctl:
action: log
## 针对sysctl程序的默认配置 (kernel 5.2 only)
sysctl_default:
block_read_access: false
block_write_access: false
## 针对systrl程序的自定义配置 (kernel 5.2 only)
sysctl_parameters:
kernel/yama/ptrace_scope:
block_write_access: true
kernel/ftrace_enabled:
override_input_value_with: "1n"
## 当检测到一个hooked_syscall_table事件时要执行的操作
hooked_syscall_table: log
## 当检测到一个hooked_syscall事件时要执行的操作
hooked_syscall: log
## kernel_parameter事件配置
kernel_parameter:
action: log
periodic_action: log
ticker: 1 # sends at most one event every [ticker] second(s)
list:
- symbol: system/kprobes_all_disarmed
expected_value: 0
size: 4
# - symbol: system/selinux_state
# expected_value: 256
# size: 2
# sysctl
- symbol: system/ftrace_dump_on_oops
expected_value: 0
size: 4
- symbol: system/kptr_restrict
expected_value: 0
size: 4
- symbol: system/randomize_va_space
expected_value: 2
size: 4
- symbol: system/stack_tracer_enabled
expected_value: 0
size: 4
- symbol: system/unprivileged_userns_clone
expected_value: 0
size: 4
- symbol: system/unprivileged_userns_apparmor_policy
expected_value: 1
size: 4
- symbol: system/sysctl_unprivileged_bpf_disabled
expected_value: 1
size: 4
- symbol: system/ptrace_scope
expected_value: 2
size: 4
- symbol: system/sysctl_perf_event_paranoid
expected_value: 2
size: 4
- symbol: system/kexec_load_disabled
expected_value: 1
size: 4
- symbol: system/dmesg_restrict
expected_value: 1
size: 4
- symbol: system/modules_disabled
expected_value: 0
size: 4
- symbol: system/ftrace_enabled
expected_value: 1
size: 4
- symbol: system/ftrace_disabled
expected_value: 0
size: 4
- symbol: system/sysctl_protected_fifos
expected_value: 1
size: 4
- symbol: system/sysctl_protected_hardlinks
expected_value: 1
size: 4
- symbol: system/sysctl_protected_regular
expected_value: 2
size: 4
- symbol: system/sysctl_protected_symlinks
expected_value: 1
size: 4
- symbol: system/sysctl_unprivileged_userfaultfd
expected_value: 0
size: 4
(向右滑动,查看更多)
许可证协议
本项目的开发与发布遵循Apache-2.0开源许可证协议。
项目地址
KRIe:https://github.com/Gui774ume/krie
参考资料
https://facebookmicrosites.github.io/bpf/blog/2020/02/19/bpf-portability-and-co-re.html https://github.com/aquasecurity/btfhub https://www.blackhat.com/us-22/briefings/schedule/index.html#return-to-sender---detecting-kernel-exploits-with-ebpf-27127