0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

分享一个使用BPF事件捕获rootkit的案例

Linux阅码场 来源:人人都是极客 作者:许庆伟 2022-07-13 09:03 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

如今,云原生平台越来越多的使用了基于eBPF的安全探测技术。这项技术通过创建安全的Hook钩子探针来监测内部函数和获取重要数据,从而支持对应用程序的运行时做监测和分析。Tracee是用于Linux的运行时安全和取证的开源项目,它基于eBPF实现,所以在安全监测方面效果更加优化。

在本文中,我们将探索控制eBPF事件的方法,并研究一个使用BPF事件捕获rootkit的案例。Rootkit是一种存在于内核中复杂类型的恶意漏洞攻击,并将介绍Tracee用于检测Syscall 钩子的新特性,它实现了在内核中使用eBPF事件的独特方式。

eBPF: 不只是用来跟踪

eBPF是一种Linux内核技术,它允许在不更改内核源代码或添加新模块的前提下,在Linux内核中运行沙盒程序。因此,eBPF可以支持安全的Hook到事件上,而不会造成内核崩溃的风险。

具体来说,eBPF程序使用内核机制(如kprobes、kretprobes、Linux安全模块(LSM) Hooks、uprobes和traceponits)来创建和设置钩子,并加以验证代码不会使内核崩溃。eBPF有一个Verifier验证器,其目标是确保eBPF程序安全运行(而不是通过加载内核模块来与内核交互,如果操作不当,会导致系统崩溃)。

攻击者为何喜欢Hook内核函数?

目前使用rootkit的复杂攻击往往是针对内核空间,这是因为攻击者试图避免被安全防御方案,以及监控用户空间事件或分析基本系统日志的取证工具检所测到。此外,在内核空间中嵌入恶意软件也会使得安全研究员和响应团队更难找到它。恶意软件越接近于底层,检测起来就越困难。

下面,我们将看看TNT团队的例子,并查看他们是如何利用Diamorphine 这个rootkit,以及Tracee如何检测到它。

内核中的函数操作

攻击者为了自身利益最大化,会寻找内核级别的目标函数。常用的一种方法是函数钩子,旨在通过操纵内核中的函数来隐藏恶意活动。这样做的原因是内核函数执行的是来自用户空间的任务。如果它们被破坏,攻击者即可控制所有用户空间程序的行为。

当攻击者试图Hook系统调用(syscall)函数时,这就是函数钩子的一个很好示例。这些高级内核函数用于执行来自用户空间的任务,Hook住它们主要目的是隐藏恶意行为。例如,攻击者将getdents系统调用Hook起来,以隐藏用于列出文件命令(如ps、top和ls)的恶意文件和进程。

通常,通过读取系统调用表并获取系统调用函数的地址来Hook他们。一旦获得系统调用函数地址,攻击者将保存原始地址,并试图用包含恶意代码的新函数覆盖它。

攻击者如何Hook内核函数?

现在,让我们研究一下攻击者如何在真实环境下的网络攻击中劫持内核函数。

为了Hook内核函数,必须首先获得想要钩住的对象访问权。例如,它可以是保存所有系统调用函数地址的系统调用表。然后,保存函数的原始地址并覆盖它。在某些情况下,由于当前位置的内存权限,还需要获取CPU中控制寄存器的权限。

接下来是TNT团队使用Diamorphine隐藏加密的活动,这作为他们攻击的一部分可以很好的解释这样的方法:

92d4cd9e-0240-11ed-ba43-dac502259ad0.png

使用内存边界技术检测Syscall钩子

现在我们已经确定了攻击者的动机以及他们如何修改内核行为,问题是,我们该如何检测这种活动? 明确的目标是找到一种方法,以区分内核中的原始内部函数(或与核心内核关联的syscall)和新的内核模块代码(或换句话说,被攻击后的函数)。

我们可以通过内核的core_text边界检测来实现这一点。内核中的内存被分为几个部分。其中一个是core_text段,它保存内核中的原始函数。此部分注册在特定的内存映射区域中,该区域不受更改或操作的影响。此外,如果我们加载一个新的内核模块--也就是说,编写一个新函数或覆盖原始函数——这个新函数将写入另一个专门为新函数保留的内存区域。可以在下面的虚拟内存映射中看到这一点。注意,分配给原始内核代码的地址范围(文本部分,又名“核心内核文本”)和分配给新内核模块的地址范围是不同的。

92fbcd90-0240-11ed-ba43-dac502259ad0.png

因此,当前的目标是获取一个系统调用地址,然后将其与内核core_text边界进行比较,正如我们所看到的,core_text边界表示原始内核源的范围。

使用Tracee检测Syscall钩子

现在,我们已经了解了恶意软件如何以及为什么以内核函数为目标,以及如何检测被钩住的内核函数,接下需要知道如何使用eBPF来提取函数的地址。使用Tracee可以确定函数是否被钩住,即使钩子是在Tracee执行之前放置的。

首先创建一个在用户空间中触发的BPF程序,并在内核空间中捕获相应BPF事件。如果内核程序需要来自用户空间的信息,可以通过BPF映射来进行传递。

例如在Tracee中创建一个事件,该事件将从系统调用表中获取系统调用地址,接下来确认系统调用是否被内核模块钩住了。如果它被钩住了,继续将创建一个派生事件(由内核另一个事件而创建的事件),它将提示系统调用钩住的情况,如下:

931ea2e8-0240-11ed-ba43-dac502259ad0.png

先使用libbpfgo的helper来获取系统调用表地址,并将其添加到事件内核符号依赖项中。

注意,detect_hooked_sycalls事件是派生事件。这意味着在我们接收到系统调用的地址并检查它们之后,我们将创建一个新的detect_hooked_sycalls事件。

93321468-0240-11ed-ba43-dac502259ad0.png

然后,我们将它与系统调用号一起传递,以便使用BPFMap检查内核空间。

934924dc-0240-11ed-ba43-dac502259ad0.png

为了检查内核空间中的那些系统调用,基于security_file_ioctl上的kprobe创建一个事件,它是ioctl系统调用的一个内部函数。这样我们就可以通过使用用户空间的特定参数触发系统调用来控制程序流,接下来用一个特定的命令触发ioctl:

935f35b0-0240-11ed-ba43-dac502259ad0.png

此时,在内核空间中开始检查ioctl命令是否相同,以及调用该系统调用的进程是否为Tracee。这样就可以验证只有当用户要求Tracee检查时才会发生检测的需求。

93845eda-0240-11ed-ba43-dac502259ad0.png

检测代码很简单,遍历系统调用映射,通过使用READ_KERN()来获取系统调用表的地址如下:

9392fc2e-0240-11ed-ba43-dac502259ad0.png

然后在用户空间中,我们将这些地址与libbpfgo helpers进行比较:

93a88378-0240-11ed-ba43-dac502259ad0.png

狩猎时间: 用eBPF检测Diamorphine rootkit

现在,开始运行Tracee,来看看它将如何检测出Diamorphine rootkit。

使用insmod函数加载Diamorphine (.ko)的内核对象文件。目标是看看Tracee的探测结果。通常,在加载一个内核模块的情况下启动Tracee,如果选择了detect_hooked_sycall事件,Tracee将发送一个hooked_sycalls事件,以确保系统没有被破坏:

93b901da-0240-11ed-ba43-dac502259ad0.png

Tracee检测到getdents和getdents64这些挂起的系统调用。TNT团队使用它们来隐藏大量加密活动导致的CPU负载过高,以及通常用于从用户空间发送命令来杀死进程的kill函数。在这种情况下,rootkit使用kill -63作为用户空间和内核空间之间的通信通道。同样,如果再次运行Diamorphine和Tracee使用json输出,参数将显示Diamorphine的恶意钩子:

93cac258-0240-11ed-ba43-dac502259ad0.png

如果运行Tracee-rules,我们可以看到detect_hooked_sycall事件的新签名:

93e596b4-0240-11ed-ba43-dac502259ad0.png

结论

现代攻击者的目标是包括内核层的操作系统各个层级,此外,由于开源项目(如Diamorphine)的流行,攻击性网络工具变得越来越容易获得。因此,安全研究员需要提高自身的防御能力知识,开发出合适的检测方法。


审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux系统
    +关注

    关注

    4

    文章

    618

    浏览量

    30236
  • rootkit
    +关注

    关注

    0

    文章

    8

    浏览量

    2955
  • BPF
    BPF
    +关注

    关注

    0

    文章

    26

    浏览量

    4764

原文标题:利用eBPF探测Rootkit漏洞

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    JY-BPF-A75+ 带通滤波器:72-78MHz 窄带射频链路的“电磁隔离屏障”

    在军事通信、谐波抑制及收发设备中,窄带信号极易受到邻道干扰、谐波杂散与带外噪声的侵蚀,轻则降低通信质量,重则导致系统失效。JY-BPF-A75+ 带通滤波器,以75MHz为中心频率,为
    的头像 发表于 04-28 13:50 111次阅读

    瑞萨RA系列FSP库开发实战指南之使用GPT输入捕获进行脉宽和周期测量实验

    一个实验使用了GPT的输出功能,本次实验要使用GPT的输入功能,通过GPT的输入捕获进行脉宽和周期测量。其测量的原理如下图所示。
    的头像 发表于 04-24 10:49 6571次阅读
    瑞萨RA系列FSP库开发实战指南之使用GPT输入<b class='flag-5'>捕获</b>进行脉宽和周期测量实验

    利用鉴相鉴频器扩展锁相环的捕获范围

    本文将了解如何用鉴相/鉴频器(PFD)替代普通鉴相器,以扩展锁相环(PLL)的捕获范围。
    的头像 发表于 04-22 14:28 3004次阅读
    利用鉴相鉴频器扩展锁相环的<b class='flag-5'>捕获</b>范围

    车载网络链路数据捕获方案推荐:智能汽车测试的核心支撑

    整车研发阶段的协议兼容性测试,还是量产阶段的故障诊断与数据分析,套高效可靠的车载网络链路数据捕获方案,都是整车厂、Tier1 供应商及测试机构不可或缺的技术支撑。 、行业痛点:车载网络链路数据
    的头像 发表于 02-05 11:53 306次阅读

    深入解析WE-BPF多层芯片带通滤波器:设计、特性与应用考量

    深入解析WE-BPF多层芯片带通滤波器:设计、特性与应用考量 在电子设备的设计中,滤波器是保障信号质量和系统稳定性的关键组件。今天,我们将详细剖析Würth Elektronik eiSos
    的头像 发表于 01-29 16:45 366次阅读

    深入了解WE - BPF多层芯片带通滤波器:从规格到应用注意事项

    Elektronik eiSos公司的WE-BPF多层芯片带通滤波器(型号748351124),起看看它的各项特性和使用时的注意要点。 文件下载: 748351124.pdf 规格参数解读 电气特性 该
    的头像 发表于 01-07 18:10 919次阅读

    详解WE - BPF多层芯片带通滤波器:从参数到使用注意事项

    详解WE - BPF多层芯片带通滤波器:从参数到使用注意事项 在电子产品的设计中,滤波器是至关重要的组件,它能够帮助我们精确地筛选出所需频率的信号,抑制不需要的干扰。今天,我们就来详细了解
    的头像 发表于 12-29 15:55 570次阅读

    普源示波器DHO5108波形捕获率评测:高性能与性价比的平衡之选

    示波器中展现出强劲竞争力。本文将从技术原理、实际应用及对比评测三维度,深入探讨DHO5108的波形捕获能力及其应用场景。   、技术解析:高捕获率背后的硬件支撑 DHO5108的高
    的头像 发表于 12-17 16:14 515次阅读
    普源示波器DHO5108波形<b class='flag-5'>捕获</b>率评测:高性能与性价比的平衡之选

    JY-BPF-C4R5+带通滤波器技术解析:2-7MHz频段的航空与通信系统核心组件

    、优异的VSWR特性及小型化屏蔽封装,成为该频段航空与通信系统的关键器件。本文将从技术参数、设计优势、应用场景等维度,对其进行专业深度剖析。  、电气性能与技术指标的专业解构  JY-BPF-C4R5+的中心频率典型值为4.5MHz,通带覆盖2-7MHz,这
    的头像 发表于 11-17 15:05 621次阅读
    JY-<b class='flag-5'>BPF</b>-C4R5+带通滤波器技术解析:2-7MHz频段的航空与通信系统核心组件

    定时器输入捕获模式

    AT32F4xx定时器输入捕获模式 支持型号: AT32F 系列 主要使用外设: TIMER、 USART 获取示例 1 快速使用方法 1.1 硬件资源 AT-START-F403A V1.0
    发表于 09-22 09:58

    普源DHO1000示波器波形捕获率评测

    作为普源精电(RIGOL)旗下新代高分辨率数字示波器,DHO1000系列凭借自研“半人马座”芯片组的加持,在波形捕获率这核心指标上实现了质的飞跃。本文将从技术原理、实测数据、应用场景三
    的头像 发表于 08-27 17:43 810次阅读
    普源DHO1000示波器波形<b class='flag-5'>捕获</b>率评测

    如何捕获PWM信号?

    我们现在有需求,DSP在正常工作时会输出1khz的PWM信号,异常时PWM信号会停止。 芯片需要捕获DSP输出的PWM信号,来检测DSP的状态。 如果DSP异常没有输出PWM信号,芯片需要在这5S
    发表于 08-08 06:47

    示波器波形捕获率的定义和作用

    波形捕获率(Waveform Capture Rate)是数字示波器的关键指标之,指单位时间内示波器能够捕获并显示波形的次数,通常以“次/秒”或“帧/秒”为单位。其本质是衡量示波器在单位时间内对信号变化的响应能力。
    的头像 发表于 08-04 15:20 1902次阅读

    普源DHO5104波形捕获率对偶发故障诊断的影响

    、偶发故障诊断的挑战与波形捕获率的核心价值 偶发故障(Intermittent Fault)具有随机性强、持续时间短、复现概率低等特点,传统示波器常因波形捕获速率不足而难以捕捉到关键信号异常。例如
    的头像 发表于 06-19 15:14 769次阅读
    普源DHO5104波形<b class='flag-5'>捕获</b>率对偶发故障诊断的影响

    泰克示波器高级触发功能捕获异常信号的5种方法

    ,结合原理、应用场景及操作步骤,为用户提供实践参考。   、边沿触发:精准定位信号跳变点 边沿触发是示波器最基础的触发方式之,但在高级应用中,通过灵活设置参数可捕获异常信号。例如,当信号存在突变或毛刺时,边
    的头像 发表于 05-29 09:38 1723次阅读
    泰克示波器高级触发功能<b class='flag-5'>捕获</b>异常信号的5种方法