草庐IT

eBPF-AntiRootkit

Senber 2023-03-28 原文

背景:

针对最近几年频繁出现的通过eBPF进行容器逃逸、rootkit等攻击,需要考虑如何收敛服务器ebpf相关权限,防止被黑客利用。

静态方案:

宿主机层面:

  1. 非root用户不赋予CAP_BPF及CAP_SYS_ADMIN
    注:3.15 - 5.7 内核不赋予CAP_SYS_ADMIN即可 5.8及以后内核需要同时不存在CAP_BPF及CAP_SYS_ADMIN权限
  2. 非root用户禁止调用ebpf功能 /proc/sys/kernel/unprivileged_bpf_disabled 设置为1
    1. 值为0表示允许非特权用户调用bpf
    2. 值为1表示禁止非特权用户调用bpf且该值不可再修改,只能重启后修改
    3. 值为2表示禁止非特权用户调用bpf,可以再次修改为0或1
  3. 添加签名机制,只有经过签名的ebpf程序才可以加载(参考MTOS热补丁验签机制)

容器层面:

  1. seccomp设置禁止bpf系统调用
  2. 容器启动时禁止携带privilege参数
  3. 非root用户不赋予CAP_BPF及CAP_SYS_ADMIN
  4. 非root用户禁止调用ebpf功能 /proc/sys/kernel/unprivileged_bpf_disabled 设置为1

动态方案:

  1. hook bpf / bpf_probe_write_user 等敏感函数,监控主机bpf事件
  2. 枚举已经加载的bpf程序及map(此种方案只能针对普通bpf程序,如果bpf程序实现了rootkit对自身进行隐藏,那此种方案就无法生效)

本文由博客一文多发平台 OpenWrite 发布!

有关eBPF-AntiRootkit的更多相关文章

  1. eBPF verifier常见错误整理 @龙蜥社区eBPF SIG - 2

    如今eBPF程序的编写,很多都是基于bcc或者bpftrace进行,也有开发者直接基于libbpf库进行,但是不管怎样,编写的xx.bpf.c程序,在加载到内核时,都必须经过内核的verifier校验器进行各种边界和内存检查,经常会碰到各种奇奇怪怪的verifier报错,导致eBPF程序加载失败。有些错误,开发者可能要花费大量的时间去分析并修改程序,并祈祷程序能够加载成功。特别是在低版本的内核运行低版本Clang编译器编译的eBPF程序,错误提示非常糟糕,经常找不到出错点,这就大大增加了开发难度。为此,本文梳理了一些常见的eBPFverifier报错,避免更多的人走弯路,写出能成功加载的eBP

  2. 基于 eBPF 的 Kubernetes 可观测实践 - 2

    可观测是为了解决问题,所以在聊可观测之前,应先对问题排查的普适原则进行了解。背景介绍问题排查的原则以排查系统问题为例,要理解系统,要先关注基础知识,理解编程语言基本的计算机科学知识,关注系统大图比如架构部署和重大流程,要关注运行细节,要对核心功能的算法和数据结构了然于心,还要关注系统的运维工具,能够了解发布、回滚和监控。在理解的基础上,还要能够复现问题,主要关注问题发生的触发条件以及问题发生时数据现场的保留,包含指标、链路、日志、事件等。有了现场再加之对于系统的,才可以定位问题。通过现场保留的数据,进行关联分析;基于理解,可以快速用二分定位到根因。在定位的过程中,尤其要关注变更,因为有大量的系

  3. 借助 ChatGPT 编写的 libbpf eBPF 工具开发实践教程: 通过例子学习 eBPF - 2

    这是一个基于CO-RE(一次编译,到处运行)的libbpf的eBPF的开发教程,提供了从入门到进阶的eBPF开发实践指南,包括基本概念、代码实例、实际应用等内容。我们主要提供了一些eBPF工具的案例,帮助开发者学习eBPF的开发方法和技巧。教程内容可以在目录中找到,每个目录都是一个独立的eBPF工具案例。在学习eBPF的过程中,我们受到了tutorial_bcc_python_developer的许多启发和帮助,但从2022年的角度出发,使用libbpf开发eBPF的应用是目前相对更好的选择。但目前似乎很少有基于libbpf和BPFCO-RE出发的、通过案例和工具介绍eBPF开发的教程,因此我

  4. 借助 ChatGPT 编写的 libbpf eBPF 工具开发实践教程: 通过例子学习 eBPF - 2

    这是一个基于CO-RE(一次编译,到处运行)的libbpf的eBPF的开发教程,提供了从入门到进阶的eBPF开发实践指南,包括基本概念、代码实例、实际应用等内容。我们主要提供了一些eBPF工具的案例,帮助开发者学习eBPF的开发方法和技巧。教程内容可以在目录中找到,每个目录都是一个独立的eBPF工具案例。在学习eBPF的过程中,我们受到了tutorial_bcc_python_developer的许多启发和帮助,但从2022年的角度出发,使用libbpf开发eBPF的应用是目前相对更好的选择。但目前似乎很少有基于libbpf和BPFCO-RE出发的、通过案例和工具介绍eBPF开发的教程,因此我

  5. 一篇带给你eBpf开源项目解析 - 2

    前置知识:WASM:WebAssembly(缩写为Wasm)是一种低级的、与平台无关的二进制指令格式,是一种新型的虚拟机技术,可以在现代Web浏览器中运行,并且可以与JavaScript等其他Web技术一起使用。它被设计为一种可移植的编译目标,能够将不同编程语言的代码编译成WebAssembly字节码,这些字节码可以在Web浏览器中快速加载和执行。WebAssembly的设计目标是为了解决Web上应用程序的性能问题,尤其是在使用JavaScript等高级语言编写的复杂Web应用中。相比于JavaScript等脚本语言,WebAssembly的执行速度更快,且能够提供更好的性能和安全性,同时也更

  6. 一篇带给你eBpf开源项目解析 - 2

    前置知识:WASM:WebAssembly(缩写为Wasm)是一种低级的、与平台无关的二进制指令格式,是一种新型的虚拟机技术,可以在现代Web浏览器中运行,并且可以与JavaScript等其他Web技术一起使用。它被设计为一种可移植的编译目标,能够将不同编程语言的代码编译成WebAssembly字节码,这些字节码可以在Web浏览器中快速加载和执行。WebAssembly的设计目标是为了解决Web上应用程序的性能问题,尤其是在使用JavaScript等高级语言编写的复杂Web应用中。相比于JavaScript等脚本语言,WebAssembly的执行速度更快,且能够提供更好的性能和安全性,同时也更

  7. 什么场景下不适用eBPF? - 2

    译者| 陈豪策划|云昭ExtendedBerkeleyPacketFilter(eBPF)是Linux内核的一个相对较新的特性,它让许多DevOps专业人士、SRE和工程师兴奋不已。eBPF甚至可以与标准的Linuxiptables相提并论。但是,它真能成为满足所有Linux内核需求的“一站式商店”呢?eBPF正当时过去,对内核进行更改是很困难的。开发者虽然可以调用API来获取数据,但却无法影响内核内部的执行代码。相反,你必须向Linux社区提交补丁并等待其获得批准。使用eBPF,可以将程序加载到内核中,并在例如看到某个数据包或发生其他事件时指示内核执行程序。eBPF是Linux内核中提供的一

  8. 什么场景下不适用eBPF? - 2

    译者| 陈豪策划|云昭ExtendedBerkeleyPacketFilter(eBPF)是Linux内核的一个相对较新的特性,它让许多DevOps专业人士、SRE和工程师兴奋不已。eBPF甚至可以与标准的Linuxiptables相提并论。但是,它真能成为满足所有Linux内核需求的“一站式商店”呢?eBPF正当时过去,对内核进行更改是很困难的。开发者虽然可以调用API来获取数据,但却无法影响内核内部的执行代码。相反,你必须向Linux社区提交补丁并等待其获得批准。使用eBPF,可以将程序加载到内核中,并在例如看到某个数据包或发生其他事件时指示内核执行程序。eBPF是Linux内核中提供的一

  9. eBPF-AntiRootkit - 2

    背景:针对最近几年频繁出现的通过eBPF进行容器逃逸、rootkit等攻击,需要考虑如何收敛服务器ebpf相关权限,防止被黑客利用。静态方案:宿主机层面:非root用户不赋予CAP_BPF及CAP_SYS_ADMIN注:3.15-5.7内核不赋予CAP_SYS_ADMIN即可5.8及以后内核需要同时不存在CAP_BPF及CAP_SYS_ADMIN权限非root用户禁止调用ebpf功能/proc/sys/kernel/unprivileged_bpf_disabled设置为1值为0表示允许非特权用户调用bpf值为1表示禁止非特权用户调用bpf且该值不可再修改,只能重启后修改值为2表示禁止非特权用

  10. eBPF-AntiRootkit - 2

    背景:针对最近几年频繁出现的通过eBPF进行容器逃逸、rootkit等攻击,需要考虑如何收敛服务器ebpf相关权限,防止被黑客利用。静态方案:宿主机层面:非root用户不赋予CAP_BPF及CAP_SYS_ADMIN注:3.15-5.7内核不赋予CAP_SYS_ADMIN即可5.8及以后内核需要同时不存在CAP_BPF及CAP_SYS_ADMIN权限非root用户禁止调用ebpf功能/proc/sys/kernel/unprivileged_bpf_disabled设置为1值为0表示允许非特权用户调用bpf值为1表示禁止非特权用户调用bpf且该值不可再修改,只能重启后修改值为2表示禁止非特权用

随机推荐