eBPF运行时安全

引言

eBPF作为当前linux系统上最为炙手可热的技术,通常被用于网络流量过滤和分析、系统调用跟踪、性能优化、安全监控,当下比较知名的项目有Cilium、Falco等。

Cilium 是一个开源的容器网络和安全性项目,致力于提供高效的容器通信和强大的安全性功能,Cilium 基于eBPF、XDP、TC等技术实现了Layer 3(IP)、Layer 4(TCP/UDP)以及 HTTP 层的负载均衡和网络防护,是一款非常优秀的网络安全工具。Falco是一个开源的云原生应用安全项目,旨在提供运行时容器安全性监控和威胁检测,Falco通过监视容器运行时环境的系统调用和其他事件,检测并报告可能的异常行为和安全威胁,使系统管理员和开发人员能够更好地了解和响应与容器运行时环境相关的安全问题。

Cilium 和Falco在其各自的领域都是非常优秀的存在,但是它们在运行时安全上面都存在一些缺失,缺少对运行时进程的实时阻断能力。这是否意味着eBPF无法实现运行时的阻断?答案是否定的,在eBPF的后续不断发展的过程中,增加了对进程和内核函数的阻断能力,这让基于eBPF构建一款运行时安全产品成为可能。

Tetragon

2022年5月,Isovalent发布了基于 eBPF 的安全可观察性和运行时执行项目Tetragon,Tetragon可以根据规则在内核中同步进行过滤、阻止和响应,从而可以防止攻击,而不是异步地对其做出反应。

Tetragon是一款运行时安全执行和可观测性工具。这意味着Tetragon直接在内核中使用eBPF应用策略和过滤。它在内核中执行过滤、阻断和对事件的响应,而不是将事件发送到用户空间代理。对于可观测性用例,直接在内核中应用过滤器极大地减少了观测开销。通过避免昂贵的上下文切换和唤醒,特别是对于高频事件(如发送、读取或写入操作),eBPF减少了所需的资源。相反,Tetragon在eBPF中提供了丰富的过滤器(文件、套接字、二进制名称、命名空间/权限等),允许用户在其特定上下文中指定重要和相关的事件,并仅将这些事件传递到用户空间代理。

Tetragon可以钩入Linux内核中的任何函数,并在其参数、返回值以及Tetragon收集的有关进程(例如可执行文件名称)、文件和其他属性的关联元数据上进行过滤。通过编写跟踪策略,用户可以解决各种安全性和可观测性用例。关键是,Tetragon允许在内核深层进行挂钩,用户空间应用程序无法操纵数据结构,从而避免了系统调用跟踪中常见的问题,如错误读取数据、被攻击者恶意更改数据,或由于页面错误和其他用户/内核边界错误而丢失数据。Tetragon的许多开发人员同时也是内核开发人员。通过充分利用这一知识基础,Tetragon创建了一组可以解决许多常见可观测性和安全性用例的跟踪策略。

Tetragon通过eBPF技术可以访问Linux内核状态。然后,Tetragon可以将这个内核状态与Kubernetes感知或用户策略结合起来,以实时由内核执行的方式创建规则。这使得可以对进程命名空间和权限、进程与套接字的关系、进程文件描述符与文件名等进行注解和强制执行。例如,当应用程序更改其特权时,我们可以创建一个策略,触发警报甚至在进程有机会完成系统调用并可能运行其他系统调用之前终止该进程。

根据上述介绍,Tetragon具备了在内核中阻断的能力,那么到底Tetragon是如何进行阻断的呢?是使用了eBPF中的什么功能实现的呢?

分析Tetragon的源码发现,Tetragon在使用了send_signal()函数下发FGS_SIGKILL指令给当前进程,完成阻断动作,这个动作相当于在用户态发送kill -9指令给进程。send_signal()函数是eBPF的内置函数,在linux 5.3版本内核中引入。

除了send_signal()函数,eBPF还提供了其它的阻断方式,在linux 5.7版本内核中eBPF添加了LSM的支持,开发者可以在eBPF中基于LSM实现更细粒度的管。出于兼容性的考虑,Tetragon没有选择eBPF LSM。下面通过例子演示一下这两种阻断方式。

send_signal()

send_signal()是eBPF的一个功能,它允许用户在内核空间发送信号来干预指定的进程。这个功能是Linux 5.3内核提供的一种新的方法,用于实时响应和控制系统行为。通过直接从内核空间发送信号,避免了用户空间的额外开销,从而确保信号能够在事件发生后立即被发送,大大减少了延迟。

send_signal()的主要优势包括:

实时响应:由于减少了延迟,信号可以在事件发生后立即被发送,实现实时响应。

准确性:减少的延迟使得我们可以获得更准确的系统状态快照,对于性能分析和异常检测尤为重要。

灵活性:send_signal()提供了更多的灵活性,开发人员可以根据不同的使用场景和需求来自定义信号的发送逻辑,从而更精确地控制和管理系统行为。

我们使用kprobe配合bpf_send_signal()来阻断内核中do_sys_openat2函数,do_sys_openat2是一个Linux内核函数,用于在指定的目录下打开文件或创建文件。例如我们可以配置阻断curl,以阻止用户使用curl对网络进行访问。

当用户使用curl的时候,eBPF程序会发送bpf_send_signal(9)杀死当前进程。

eBPF LSM

上文提到,Tetragon使用send_signal()函数来杀死当前进程,以达到运行时控制的目的。那么有没有一种更细粒度的控制方式,比如只是对进程的某个函数进程控制?答案是有的,eBPF LSM可以做到这一点。

LSM(Linux Security Module)是Linux内核中的一个安全框架,它从linux2.6版本内核开始引入。LSM 提供了一系列的安全钩子(hooks),这些钩子允许安全模块在关键系统操作发生时介入。例如,文件系统操作、网络通信、进程创建等都有相应的钩子,允许模块执行安全检查和控制。

eBPF LSM是eBPF技术的扩展,于linux 5.7版本内核引入,让eBPF程序有了使用LSM框架的能力。借助LSM框架,eBPF 程序可以阻止进程执行过程中的某个特定函数,而不用将整个程序kill掉。

下面是一个LSM BPF程序,功能是对特定应用发送网络包的行为进行阻拦,选择socket_sendmsg这个LSM钩子,当使用curl请求网络包的时候,就会进行阻拦:

可以看到这里与bpf_send_signal(9)有一些不同,使用LSM BPF只是阻止了socket_sendmsg这个调用,而非直接杀死进程。

总结

借助eBPF中的阻断能力,特别是对LSM的支持,开发者现在不光可以监控内核中的活动,也可以控制内核中函数的执行。相信在未来我们会看到越来越多基于eBPF的运行时安全产品。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/331143.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【备战蓝桥杯】探索Python内置标准库collections的使用

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-q0zvWxZtAIdSGZ8R {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

大模型学习之书生·浦语大模型5——基于LMDeploy大模型量化部署实践

目录 大模型部署背景 LMDeploy部署 量化 TurboMind API server 动手实践环节 1.创建开发机 2.创建虚拟环境 3.服务部署 在线转换模型 离线转换 4.TurboMind推理 TurboMindAPI服务 提供了一些API的接口 Gradio Demo演示 API server作为后端 注意这里要同时启动API serv…

7款值得收藏的前端动画特效(附效果图在线预览)

分享7款有趣也实用的前端动画特效 其中有CSS动画、canvas动画、js小游戏等等 下面我会给出特效样式图或演示效果图 但你也可以点击在线预览查看源码的最终展示效果及下载源码资源 canvas粒子空间特效 基于canvas实现的一款粒子空间特效 该特效初始时会从四周扩散粒子并随时间…

Java_二叉树详解

前言 程序员优劣之间最明显的就是数据结构和算法的掌握程度,二叉树作为数据结构中不可缺少的一员,可见其重要程度.我们一起来简单地学习二叉树吧~ 树型结构 在我们学习二叉树前先了解一下树型结构(二叉树是树型结构中的一种) 树是一种非线性的数据结构,它是有n (n>0) 个…

条码WMS仓储管理系统的价值与优势

在全球化和数字化的时代,企业面临着诸多挑战。在复杂的运营环境中,如何提高运营效率和效果,降低成本,增强竞争力,成为企业关注的焦点。而库存管理作为企业运营的关键环节,其重要性不言而喻。本文将深入探讨…

【PyTorch】PyTorch之Tensors索引切片篇

文章目录 前言一、ARGWHERE二、CAT、CONCAT、CONCATENATE三、CHUNK四、GATHER五、MOVEDIM和MOVEAXIS六、PERMUTE七、RESHAPE八、SELECT九、SPLIT十、SQUEEZE十一、T十二、TAKE十三、TILE十四、TRANSPOSE十五、UNBIND十六、UNSQUEEZE十七、WHERE 前言 介绍常用的PyTorch之Tenso…

【DC-DC】APS54085降压恒流 高辉度调光降压恒流芯片

产品描述 APS54085 是一款 PWM 工作模式,高效率、 外围简单、内置功率 MOS 管,适用于 5-100V 输入的高精度降压 LED 恒流驱动芯片。最大电流 2.0A。 APS54085 可实现线性调光和 PWM 调光, 线性调光有效电压范围 0.52-2.55V. PWM 调光频率范围 100…

山西电力市场日前价格预测【2024-01-19】

日前价格预测 预测说明: 如上图所示,预测明日(2024-01-19)山西电力市场全天平均日前电价为499.01元/MWh。其中,最高日前电价为898.49元/MWh,预计出现在18:00。最低日前电价为373.35元/MWh,预计…

elasticsearch 中热词使用遇到的坑

在使用es检索时,一般会创建索引以及索引下mapping和setting一样配置,如下: 命令创建配置方式: PUT /my_index { "settings": { "number_of_shards": 1 }, "mappings": { "properties": { "title": { …

k8s的对外服务--ingress

service作用体现在两个方面 1、集群内部 不断跟踪pod的变化,更新endpoint中的pod对象,基于pod的IP地址不断变化的一种服务发现机制 2、集群外部 类似负载均衡器,把流量ip端口,不涉及转发url(http,https&a…

Docker-02-镜像项目部署

Docker-02-镜像&项目部署 文章目录 Docker-02-镜像&项目部署一、镜像①:镜像结构②:Dockerfile③:构建镜像01:构建02:查看镜像列表03:运行镜像 二、网络①:容器的网络IP地址②&#xff…

《如何制作类mnist的金融数据集》——0.背景

0.背景 最近在金融人工智能领域进行了研究。由于金融领域数据集的欠缺,因此需要根据其领域中的各种数据的特征进行相应数据集的制作。 下图所示是一篇关于金融与预测的论文,题目为:《预测自动交易的财务信号:一个可解释的方法》。…

分享用is_sorted()解决单调数列问题

题目名称 896. 单调数列 目录 题目名称 896. 单调数列 1.题目 2.题目分析 3.题目知识 3.1 is_sorted() 3.2.迭代器与反向迭代器 3.2.1理解迭代器 3.2.2正向迭代器 3.2.3反向迭代器 最后🍨 推荐阅读顺序: 1.题目->2.题目分析->3.题目知识点 1.题目 如…

AI新工具(20240118):AlphaGeometry解答国际数学奥林匹克竞赛中的几何问题

AlphaGeometry AlphaGeometry是由谷歌旗下的DeepMind团队开发的一款人工智能系统,它能够解决国际数学奥林匹克竞赛(IMO)的几何题。AlphaGeometry模型通过神经语言模型和符号推理引擎相结合的方式,实现了复杂的几何定理证明。该模…

My CUDA Note

1. CUDA中的grid和block基本的理解 Kernel: Kernel不是CPU,而是在GPU上运行的特殊函数。你可以把Kernel想象成GPU上并行执行的任务。当你从主机(CPU)调用Kernel时,它在GPU上启动,并在许多线程上并行运行。 Grid: 当你…

Chondrex:Glycosaminoglycans Assay Kit(糖胺聚糖检测试剂盒)

糖胺聚糖(glycosaminoglycans,GAGs)是一种携带负电荷的多糖链,位于大多数结缔组织和许多不同类型细胞的细胞外基质(extracellular matrices, ECM)中以及细胞表面上。由重复双糖单位复合构成的糖胺聚糖可分为…

动态住宅代理IP是什么?如何配置使用?

动态住宅代理IP,作为一种高效的网络工具,不仅能够为您的在线活动提供额外的保护层,还能增强匿名性和数据安全。接下来将深入探讨动态住宅代理IP的定义、设置步骤、以及它如何有效保护您的网络隐私和安全。 一、动态住宅代理是什么&#xff1f…

尚硅谷Nginx高级配置笔记

写在前面:本笔记是学习尚硅谷nginx可成的时候的笔记,不是原创,如有需要,可以去官网看视频,以下是pdf文件 Nginx高级 第一部分:扩容 通过扩容提升整体吞吐量 1.单机垂直扩容:硬件资源增加 云…

前端react入门day04-useEffect与Hook函数

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 useEffect 的使用 useEffect 的概念理解 useEffect 依赖项参数说明 useEffect — 清除副作用 自定义Ho…

小程序中使用上传图片,显示、删除、预览

一、功能介绍 需要哦用户点击加号上传图片&#xff0c;并展示所上传图片和能够删除和预览 二、功能实现 采用的uniapp&#xff0c;创建了一个view容器包裹加号图标和展示的图片。 内部展示图片超过9张时候&#xff0c;加号图片隐藏 <view class"img-list">/…