eBPF安全技术实战:审计和拦截权限提升操作|付代码

Linux阅码场 2024-10-24 11:33

导读:攻击者通常会通过各种手段尝试获取比当前权限更高的权限,比如利用有suid权限可以以root用户身份执行任意操作的二进制文件实现权限提升。本文将介绍如何通过eBPF提供的各种特性审计和拦截权限提升操作。

本文目录

一、  审计权限提升操作

1.  基于于eBPF LSM实现

2.  基于eBPF Kprobe实现

二、  拦截权限提升操作

三、总结

一、  审计权限提升操作

当前存在多种方法可以实现权限提升操作,下面将以基于suid权限提权的攻击操作为例,讲解如何使用eBPF技术审计权限提升操作。

因为执行拥有suid权限的二进制文件的操作中涉及读取这个二进制文件的操作,所以我们可以在前面的审计文件读写操作的eBPF程序的基础上实现审计基于suid权限提权的攻击操作的eBPF程序。

要审计读取拥有suid权限的文件的操作,关键点是如何判断被打开的文件是否拥有suid权限。在Linux内核中,struct inode是Linux文件系统的关键数据结构之一,它用于描述文件系统中的文件、目录和其他对象。inode结构体的i_mode成员是一个位掩码,它的值包含了文件类型、文件权限等信息。因此,我们可以通过检查i_mode的值来达到检查文件是否拥有suid权限的目的。比如,我们可以通过如下代码检查文件是否拥有suid权限。

#define S_IFMT  00170000


#define S_IFREG 0100000
#define S_ISUID 0004000
#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
#define S_ISSUID(m) (((m) & S_ISUID) != 0)
static bool is_suid_file(const struct file *file) {
umode_t mode = BPF_CORE_READ(file, f_inode, i_mode);
return S_ISREG(mode) && S_ISSUID(mode);
}


知道如何判断文件是否拥有suid权限后,下面来看一下具体如何实现相应的eBPF程序。

1.  基于eBPF LSM实现

(1)  file_open

由于eBPF LSM提供的file_open追踪点的参数中struct file类型的参数拥有一个类型为struct inode的成员f_inode,因此我们可以基于eBPF LSM提供的file_open追踪点审计读取suid权限文件的操作。

LSM_HOOK(int, 0, file_open, struct file *file)


通过使用前面介绍的检查文件是否拥有suid权限的方法,基于eBPF LSM提供的file_open追踪点实现审计读取suid权限文件的操作的eBPF程序的关键代码如下。

static bool is_suid_file(const struct file *file) {


umode_t mode = BPF_CORE_READ(file, f_inode, i_mode);
return S_ISREG(mode) && S_ISSUID(mode);
}
SEC("lsm/file_open")
int BPF_PROG(lsm_file_open, struct file *file) {
struct event_t event = {};
// 判断是不是拥有 suid 权限的文件
if (!is_suid_file(file))
return 0;
u32 uid = bpf_get_current_uid_gid();
event.uid = uid;
event.pid = bpf_get_current_pid_tgid() >> 32;
bpf_get_current_comm(&event.comm, sizeof(event.comm));
event.fmode = BPF_CORE_READ(file, f_mode);
get_file_path(file, event.filename, sizeof(event.filename));
bpf_perf_event_output(ctx, &events, BPF_F_CURRENT_CPU, &event, sizeof(event));
return 0;
}


(2)  bprm_check_security

对于前面使用file_open追踪点实现的审计功能大家可能会有一个疑问,这种方法会审计到只打开suid权限文件但是不去执行这个文件的操作,这种事件可能不是我们想要的。是否可以审计到execve系统调用执行的文件是否拥有suid权限?答案是肯定的,eBPF LSM提供了另一个execve系统调用会触发的追踪点bprm_check_security,我们可以基于bprm_check_security追踪点实现审计执行suid权限文件的操作的需求。

bprm_check_security追踪点的说明如下。

 这个钩子函数介入了开始执行搜索二进制处理器的操作,它允许检查在creds_for_exec调用之前被设置的 bprm->cred->security属性。

 可以从bprm中可靠地获取argv和envp列表,bprm包含linux_binprm结构。

 在执行单个execve系统调用期间,这个钩子函数可能会被调用多次。

 函数返回0表示操作成功并且权限被允许。

对应的事件处理函数或钩子函数可以获取到的参数信息如下。

LSM_HOOK(int, 0, bprm_check_security, struct linux_binprm *bprm)


知道这些信息后,就可以编写基于bprm_check_security追踪点实现审计执行suid权限文件的操作的eBPF程序了,这个eBPF程序的关键代码如下。

SEC("lsm/bprm_check_security")
int BPF_PROG(lsm_bprm_check_security, struct linux_binprm *bprm) {
struct event_t event = {};
struct file *file = BPF_CORE_READ(bprm, file);
// 判断是不是拥有 suid 权限的文件
if (!is_suid_file(file))
return 0;
// 省略部分代码
}


2.  基于eBPF Kprobe实现

由于使用eBPF LSM要求Linux系统内核版本大于或等于5.7并且部分发行版本没有默认启用eBPF LSM,因此大家可能会想,是否可以基于eBPF Kprobe通过追踪内核函数的方式实现审计权限提升操作的功能?答案是肯定的,下面以eBPF LSM提供的bprm_check_security追踪点相应的内核函数security_bprm_check为例,讲解如何基于eBPF Kprobe实现审计权限提升操作的功能。

(1)  内核函数签名

我们先来看一下内核函数security_bprm_check的函数签名。

int security_bprm_check(struct linux_binprm *bprm)


通过前面的示例可知,我们可以通过bprm参数中的file属性判断文件是否拥有suid权限。

(2)  关键代码

基于eBPF Kprobe实现审计权限提升操作的eBPF程序的核心源码可以按如下方式编写。

SEC("kprobe/security_bprm_check")
int BPF_KPROBE(kprobe_security_bprm_check, struct linux_binprm *bprm) {
struct event_t event = {};
struct file *file = BPF_CORE_READ(bprm, file);
// 判断是不是拥有 suid 权限的文件
if (!is_suid_file(file))
return 0;
u32 uid = bpf_get_current_uid_gid();
event.uid = uid;
event.pid = bpf_get_current_pid_tgid() >> 32;
bpf_get_current_comm(&event.comm, sizeof(event.comm));
get_file_path(file, event.filename, sizeof(event.filename));
bpf_perf_event_output(ctx, &events, BPF_F_CURRENT_CPU, &event, sizeof(event));
return 0;
}


二、  拦截权限提升操作

我们可以在eBPF程序中通过bpf_send_signal、bpf_override_return辅助函数或eBPF LSM特性提供的能力实现拦截操作的功能。因此,对于拦截权限提升操作,下面将以基于eBPF LSM实现作为演示,不再分别说明每种方法及相应的示例源码。

我们基于eBPF LSM提供的bprm_check_security追踪点实现了审计程序,同样也可以通过返回非0值让它支持拦截功能。改造后的基于eBPF LSM实现的拦截权限提升操作的eBPF程序的关键代码如下。

SEC("lsm/bprm_check_security")
int BPF_PROG(lsm_bprm_check_security, struct linux_binprm *bprm) {
// 省略部分代码
// 判断是不是拥有 suid 权限的文件
if (!is_suid_file(file))
return 0;
u32 uid = bpf_get_current_uid_gid();
u32 gid = bpf_get_current_uid_gid() >> 32;
// 放行 root 用户 或 root 组下的用户
if (uid == 0 || gid == 0)
return 0;
// 省略部分代码
// 拦截
return -1;
}


上面代码中除了通过返回-1实现拦截功能外,还有一个需要特别注意的点:我们需要放行root用户或root组下的用户所触发的操作,因为这些用户的权限是预期的,不属于提权操作。

三、总结

本文介绍了如何基于eBPF的LSM及Kprobe审计权限提升操作,以及如何使用eBPF LSM特性拦截权限提升操作,还提供了各个方法的关键实现代码。如果您对eBPF技术的其他落地应用感兴趣,推荐您阅读黄竹刚、匡大虎老师的新书 eBPF云原生安全:原理与实践》。

本文摘编自《eBPF云原生安全:原理与实践》(书号:978-7-111-75804-4),经出版方授权发布,转载请保留文章来源。

eBPF云原生安全:原理与实践是一本系统讲解如何使用eBPF技术构建云原生安全防线的著作,是一本面向eBPF技术爱好者和云安全领域从业者的实战宝典,从原理与实践角度详述了eBPF技术在云原生安全领域正在发生的关键作用,是作者多年构筑云原生安全纵深防御经验的总结。本书详细阐述了eBPF技术的核心原理以及在云原生安全领域的应用价值,并结合大量的代码案例分析,深入探讨了在典型的云原生安全需求场景下使用eBPF技术可以帮助实现的安全功能和实践原理,同时也讲述了可能引入的安全风险,帮助读者从零基础快速了解eBPF技术,开始eBPF安全编程。

作者简介

黄竹刚,阿里云容器服务技术专家,eBPF技术爱好者,云原生安全领域从业人员,拥有十余年软件开发经验,熟悉Python、Go等多种编程语言,热爱开源并长期活跃于开源社区。

匡大虎,阿里云容器服务高级技术专家,曾就职于IBM和华为云。专注云原生安全,有十余年的云计算和容器安全攻防经验,负责阿里云容器服务团队安全产品能力的架构设计和研发工作。


Linux阅码场 专业的Linux技术社区和Linux操作系统学习平台,内容涉及Linux内核,Linux内存管理,Linux进程管理,Linux文件系统和IO,Linux性能调优,Linux设备驱动以及Linux虚拟化和云计算等各方各面.
评论 (0)
  • 前言本文主要演示基于TL3576-MiniEVM评估板HDMI OUT、DP 1.4和MIPI的多屏同显、异显方案,适用开发环境如下。Windows开发环境:Windows 7 64bit、Windows 10 64bitLinux开发环境:VMware16.2.5、Ubuntu22.04.5 64bitU-Boot:U-Boot-2017.09Kernel:Linux-6.1.115LinuxSDK:LinuxSDK-[版本号](基于rk3576_linux6.1_release_v
    Tronlong 2025-04-23 13:59 26浏览
  •   后勤实验仿真系统平台深度解析   北京华盛恒辉后勤实验仿真系统平台依托计算机仿真技术,是对后勤保障全流程进行模拟、分析与优化的综合性工具。通过搭建虚拟场景,模拟资源调配、物资运输等环节,为后勤决策提供数据支撑,广泛应用于军事、应急管理等领域。   应用案例   目前,已有多个后勤实验仿真系统平台在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润后勤实验仿真系统平台。这些成功案例为后勤实验仿真系统平台的推广和应用提供了有力支持。   一、核心功能   (一)后勤资源模拟
    华盛恒辉l58ll334744 2025-04-23 15:39 41浏览
  • 一、行业背景与市场需求高血压作为全球发病率最高的慢性病之一,其早期监测与管理已成为公共卫生领域的重要课题。世界卫生组织数据显示,全球超13亿人受高血压困扰,且患者群体呈现年轻化趋势。传统血压计因功能单一、数据孤立等缺陷,难以满足现代健康管理的需求。在此背景下,集语音播报、蓝牙传输、电量检测于一体的智能血压计应运而生,通过技术创新实现“测量-分析-管理”全流程智能化,成为慢性病管理的核心终端设备。二、技术架构与核心功能智能血压计以电子血压测量技术为基础,融合物联网、AI算法及语音交互技术,构建起多
    广州唯创电子 2025-04-23 09:06 101浏览
  • 在科技飞速发展的当下,机器人领域的每一次突破都能成为大众瞩目的焦点。这不,全球首届人形机器人半程马拉松比赛刚落下帷幕,赛场上的 “小插曲” 就掀起了一阵网络热潮。4月19日,北京亦庄的赛道上热闹非凡,全球首届人形机器人半程马拉松在这里激情开跑。20支机器人队伍带着各自的“参赛选手”,踏上了这21.0975公里的挑战之路。这场比赛可不简单,它将机器人放置于真实且复杂的动态路况与环境中,对机器人在运动控制、环境感知和能源管理等方面的核心技术能力进行了全方位的检验。不仅要应对长距离带来的续航挑战,还要
    用户1742991715177 2025-04-22 20:42 70浏览
  •   复杂电磁环境模拟系统平台解析   一、系统概述   北京华盛恒辉复杂电磁环境模拟系统平台是用于还原真实战场或特定场景电磁环境的综合性技术平台。该平台借助软硬件协同运作,能够产生多源、多频段、多体制的电磁信号,并融合空间、时间、频谱等参数,构建高逼真度的电磁环境,为电子对抗、通信、雷达等系统的研发、测试、训练及评估工作提供重要支持。   应用案例   目前,已有多个复杂电磁环境模拟系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润复杂电磁环境模拟系统。这些成功案例为复杂电
    华盛恒辉l58ll334744 2025-04-23 10:29 94浏览
  • 一、技术背景与市场机遇在智能家居高速发展的今天,用户对家电设备的安全性、智能化及能效表现提出更高要求。传统取暖器因缺乏智能感知功能,存在能源浪费、安全隐患等痛点。WTL580-C01微波雷达感应模块的诞生,为取暖设备智能化升级提供了创新解决方案。该模块凭借微波雷达技术优势,在精准测距、环境适应、能耗控制等方面实现突破,成为智能取暖器领域的核心技术组件。二、核心技术原理本模块采用多普勒效应微波雷达技术,通过24GHz高频微波信号的发射-接收机制,实现毫米级动作识别和精准测距。当人体进入4-5米有效
    广州唯创电子 2025-04-23 08:41 89浏览
  • 文/Leon编辑/cc孙聪颖‍在特朗普政府发起的关税战中,全球芯片产业受到巨大冲击,美国芯片企业首当其冲。据报道称,英伟达本周二公布的8-K文件显示,美国政府通知该公司向中国(包括中国香港及澳门)销售尖端芯片(H20)时,需要获得美国政府的许可。文件发布后,英伟达预计会在第一季度中额外增加55亿美元的相关费用计提。随后,英伟达股价单日下跌6.9%,市值一夜蒸发约1890亿美元(约合人民币1.37万亿元)。至截稿时,至截稿时,其股价未见止跌,较前日下跌4.51%。北京时间4月17日,英伟达创始人、
    华尔街科技眼 2025-04-22 20:14 74浏览
  •   无人机结构仿真与部件拆解分析系统平台解析   北京华盛恒辉无人机结构仿真与部件拆解分析系统无人机技术快速发展的当下,结构仿真与部件拆解分析系统平台成为无人机研发测试的核心工具,在优化设计、提升性能、降低成本等方面发挥关键作用。以下从功能、架构、应用、优势及趋势展开解析。   应用案例   目前,已有多个无人机结构仿真与部件拆解分析系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润无人机结构仿真与部件拆解分析系统。这些成功案例为无人机结构仿真与部件拆解分析系统的推广和应用提
    华盛恒辉l58ll334744 2025-04-23 15:00 53浏览
  • 文/Leon编辑/cc孙聪颖‍4月18日7时,2025北京亦庄半程马拉松暨人形机器人半程马拉松正式开跑。与普通的半马比赛不同,这次比赛除了有人类选手,还有21支人形机器人队伍参赛,带来了全球首次人类与机器人共同竞技的盛况。参赛队伍中,不乏明星机器人企业及机型,比如北京人形机器人创新中心的天工Ultra、松延动力的N2等。宇树G1、众擎PM01,则是由城市之间科技有限公司购置及调试,并非厂商直接参赛。考虑到机器人的适用场景和续航力各有不同,其赛制也与人类选手做出区别:每支赛队最多可安排3名参赛选手
    华尔街科技眼 2025-04-22 20:10 79浏览
  •   卫星通信效能评估系统平台全面解析   北京华盛恒辉卫星通信效能评估系统平台是衡量卫星通信系统性能、优化资源配置、保障通信服务质量的关键技术工具。随着卫星通信技术的快速发展,特别是低轨卫星星座、高通量卫星和软件定义卫星的广泛应用,效能评估系统平台的重要性日益凸显。以下从技术架构、评估指标、关键技术、应用场景及发展趋势五个维度进行全面解析。   应用案例   目前,已有多个卫星通信效能评估系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润卫星通信效能评估系统。这些成功案例为卫
    华盛恒辉l58ll334744 2025-04-22 16:34 144浏览
  • 故障现象一辆2016款奔驰C200L车,搭载274 920发动机,累计行驶里程约为13万km。该车组合仪表上的防侧滑故障灯、转向助力故障灯、安全气囊故障灯等偶尔异常点亮,且此时将挡位置于R挡,中控显示屏提示“后视摄像头不可用”,无法显示倒车影像。 故障诊断用故障检测仪检测,发现多个控制单元中均存储有通信类故障代码(图1),其中故障代码“U015587 与仪表盘的通信存在故障。信息缺失”出现的频次较高。 图1 存储的故障代码1而组合仪表中存储有故障代码“U006488 与用户界
    虹科Pico汽车示波器 2025-04-23 11:22 20浏览
  •   电磁干扰抑制系统平台深度解析   一、系统概述   北京华盛恒辉电磁干扰抑制系统在电子技术快速发展、电磁环境愈发复杂的背景下,电磁干扰(EMI)严重影响电子设备性能、稳定性与安全性。电磁干扰抑制系统平台作为综合性解决方案,通过整合多元技术手段,实现对电磁干扰的高效抑制,确保电子设备稳定运行。   应用案例   目前,已有多个电磁干扰抑制系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润电磁干扰抑制系统。这些成功案例为电磁干扰抑制系统的推广和应用提供了有力支持。   二
    华盛恒辉l58ll334744 2025-04-22 15:27 150浏览
  •   陆地边防事件紧急处置系统平台解析   北京华盛恒辉陆地边防事件紧急处置系统平台是整合监测、预警、指挥等功能的智能化综合系统,致力于增强边防安全管控能力,快速响应各类突发事件。以下从系统架构、核心功能、技术支撑、应用场景及发展趋势展开全面解读。   应用案例   目前,已有多个陆地边防事件紧急处置系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润陆地边防事件紧急处置系统。这些成功案例为陆地边防事件紧急处置系统的推广和应用提供了有力支持。   一、系统架构   感知层:部
    华盛恒辉l58ll334744 2025-04-23 11:22 70浏览
  •   电磁频谱数据综合管理平台系统解析   一、系统定义与目标   北京华盛恒辉电磁频谱数据综合管理平台融合无线传感器、软件定义电台等前沿技术,是实现无线电频谱资源全流程管理的复杂系统。其核心目标包括:优化频谱资源配置,满足多元通信需求;运用动态管理与频谱共享技术,提升资源利用效率;强化频谱安全监管,杜绝非法占用与干扰;为电子战提供频谱监测分析支持,辅助作战决策。   应用案例   目前,已有多个电磁频谱数据综合管理平台在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润电磁频谱数
    华盛恒辉l58ll334744 2025-04-23 16:27 21浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦