Alpha_h4ck
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
关于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:【GitHub传送门】
参考资料
https://facebookmicrosites.github.io/bpf/blog/2020/02/19/bpf-portability-and-co-re.html
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)