KRIe:一款带有eBPF的Linux内核运行时安全检测工具

发表于:2023-1-31 09:25

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Alpha_h4ck    来源:FreeBuf

  关于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开源许可证协议。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号