KRIe:一款带有eBPF的Linux内核运行时安全检测工具
关于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程序的重新编译。
项目下载
广大研究人员可以使用下列命令将该项目源码克隆至本地:
git clone https://github.com/Gui774ume/krie.git
(向右滑动,查看更多)
项目构建
由于KRle使用了CO-RE策略进行开发和构建,因此我们不需要重新构建eBPF程序。也就是说,如果你仍然想重新构建eBPF程序的话,你可以直接使用下列命令:
# ~ make build-ebpf
接下来,运行下列命令即可构建KRle:
# ~ make build
完成项目构建后,即可使用下列命令安装KRIe(需拷贝至/usr/bin/krie):
# ~ make install
工具使用
接下来,使用root权限运行KRIe即可。sudo krie -h命令可以直接获取工具的帮助信息:
# ~ krie -h
Usage:
krie [flags]
Flags:
--config string KRIe config file (default "./cmd/krie/run/config/default_config.yaml")
-h, --help help for krie
(向右滑动,查看更多)
工具配置
## 设置日志等级,可选项: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: "1\n"
## 当检测到一个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
相关文章
- 行Linux开发之命令行魔法(linux开发命令)
- Linux如何安全删除用户(linux如何删除用户)
- Linux下如何重置忘记的用户密码(linux忘记用户密码)
- 用Linux实现安全访问:建立堡垒机(linux堡垒机)
- 加固Linux服务器,实现安全防护(linux服务器安全加固)
- Linux内核学习——探索技术论坛(linux内核学习论坛)
- Linux去重:快速摆脱重复问题(linux排重)
- 招聘Linux系统工程师抓住机会,与我们一起探索未来!(linux系统工程师招聘)
- Linux中快速删除文件的指令(linux指令删除文件)
- Linux的发展史:从分支到发展(linux的分支)
- 25字中文文章标题:Linux内核移植指南(linux内核的移植)
- 世界Linux内核:拯救世界的力量(linux内核保存)
- 分区快速轻松修改Linux系统的Swap分区(linux修改swap)
- Linux操作:安全的端口扫描(linux端口扫描)
- Linux内核编译:搭建你的操作系统(linux系统内核编译)
- Linux系统修复:快速解决您的问题(系统修复linux)
- 探索Linux内核源代码树的奥秘(linux内核源代码树)
- 如何编写和安装Linux内核驱动.ko(linux.ko驱动)
- Linux远程登录花生壳安全门禁(花生壳 linux 登录)
- Linux系统中运用查杀软件安全防护(linux查杀软件)
- 「教程」Linux服务器搭建指南(linux下搭建服务器)
- 25字中文标题:Linux内核学习入门攻略(linux内核学习入门)
- 原理Linux内核:深入理解实现原理(linux内核实现)
- Linux下快速修改IP地址(linux下修改ip)
- Linux让内网更安全更便利地访问(linux访问内网)
- Linux服务器:让外界与我们的相连接的出口IP(linux服务器出口ip)