freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

KRIe:一款带有eBPF的Linux内核运行时安全检测工具
2023-01-15 07:36:28
所属地 广西

关于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

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内核 # ebpf
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录