LWN: 要继续做unprivileged BPF这个方向吗?

Linux 可观测性 BPF&eBPF 以及 BCC&bpftrace 认知 博文内容为读书笔记整理,对原书内容做了摘要博文内容涉及:BPF和eBPF认知BCC和bpftrace认知BCC和bpftrace工具简单认知理解不足小伙伴帮忙指正对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》BCC和bpftrace。它们运行需的动态和静态插桩(跟踪)技术。 阅读详情

640

点击上方蓝色“Linux News搬运工”关注我们~

Reconsidering unprivileged BPF

By Jonathan Corbet

Kernel内部的BPF虚拟机在过去几年经历了很多修改,与此同时,也有越来越多的kernel子系统开始使用BPF。过去这些patch的其中一个目标就是能允许非特权用户(unprivileged)来加载某些类型的BPF program到kernel,并且不破坏系统的安全性。最近的一次讨论最终明确下来需要放弃这个不可能实现的目标,今后所有这方面的patch都不会被BPF维护者接受。

BPF verifiery已经做了很多工作来尽量确保加载进kernel的BPF program是不会导致安全问题的。包括检查memory的访问,以及模拟执行流程来确保program会在有限时间内结束,等等。其中很多检查都有助于确保program是安全的,能避免某些类型的bug,其他的检查都是专门为了排查恶意program的,如果kernel允许接受非特权用户的BPF program的话,这些检查都是必须的。

大多数这类恶意program的检查工作都是在2015年的4.4 kernel里实现的。尤其是其中很多工作是为了阻止BPF program把kernel指针值泄露给user space。这些指针对攻击者会很有用,因为他们可以被用来推算出某些特定的数据结构或者代码的位置。所以我们一定要避免被非特权的进程拿到这些指针数据。在kernel 4.7里面增加了"Constant blinding",这个机制本质上会对program里面的常量值同一个随机数进行特定的OR操作,这个操作在运行时每次用到这个常量值的时候都会进行一次,可以避免攻击者把BPF代码假扮成常量值来进行攻击。其他还有一些patch是用来避免BPF program里的预测执行(speculative-execution)类型的攻击。

所以这些工作都完成之后,还是有个地方希望非特权用户能加载BPF program的,那就是在网络socket上增加filter。在2015年,BPF维护者Alexei Starovoitov宣布说“我认为现在已经可以让eBPF不再依赖CAP_SYS_ADMIN了”。不过4年过去了,这个目标还没有达到,近期的工作目标已经转为了希望能给系统管理员更多控制选项,来控制谁可以加载BPF program,例如尚未合入的/dev/bpf改动就是一个例子。

一句话来说,Starovoitov已经不再继续为非特权用户添加支持了。其他人还是没有完全放弃。事情是这样的:

Andy Lutomirski最近提出一组patch希望能让BPF更加适合这种用法,主要是实现了对BPF maps的访问权限控制,增加了一个方法能专门标记哪些BPF函数需要特权用户才能访问,以及允许特权用户加载所有类型的BPF program。他提出“这组patch可以让你在test mode下面运行program了,其他情况下不能执行program,所以它肯定是安全的”。这组patch还没有任何review意见。

不过,在一直持续进行的/dev/bpf改动的相关讨论中,Starovoitov说了一句让大家有些意外的话:“非特权用户的bpf其实是应该废弃的一个工作”。然后不出意料,Lutomirski站出来反对这个说法:“不应该啊,现在就有一些setsockopt用户场景有需要,还有今后的seccomp肯定也需要。尤其是container里面运行bpf的话肯定是非特权用户的场景,因为在大多数情况下,host都不信任container容器。”。

Starovoitov的回应是“Linux事实上已经成为了一个单用户系统”,任何人都能运行任何代码从而破出限制并且获取root权限。他认为这整个非特权用户BPF的概念都是一个错误:“我们在提到unprivileged bpf的时候,我们指的其实希望运行各种恶意bpf program而不出问题。这会一直带来各种问题。之前做的constant blinding, randomization, verifier speculative analysis,包括spectre v1, v2, v4修复,都对系统带来了更多负面影响,不值得。这些代码都非常复杂而且没有多少人想用它。我都想不到哪怕一个使用场景,会有人希望能允许恶意bpf program来加载执行。”

Lutomirski回复了几封邮件,他认为确实有这样的使用场景。他提到了seccomp()现在仍然在用"classical BPF"而不是作为近几年开发热点的"extended BPF" (eBPF),有些开发者希望能在seccomp()过滤条件里面加上eBPF的支持。还有per-user systemd instance(针对每个用户使用不同的systemd实例)也是另一个例子,systemd现在也在用BPF,如果BPF能供非特权用户使用的话肯定会更加方便。如果kernel能支持的话,应该会有更多应用场景出现。他认为:“现在没有太多非特权用户使用eBPF,是因为kernel尚未支持。”

Starovoitov明确说明他并没有被说服:“我觉得这些方案都没法达到目的。”他再次重复了他的主张,目前还没有非特权BPF的使用场景。而他期望能看到的,是“less priviledged BPF"(权限略微受限的BPF),假如一个进程拥有了CAP_BPF能力(或者有权访问/dev/bpf文件),从而能够加载BPF program,但是不会拥有其他特权操作权限。这种方案他认为能够增强现有的application的安全性,而不用花功夫来支持他认为根本不存在的那些非特权用户的应用场景。

这里讨论基本上陷入僵局。这个问题的核心,是Linux系统是不是对非特权用户能真正完成加固(harden)。如果答案是“No”,那么就没有多少必要在BPF子系统里面维护那么多目的是加固系统的复杂代码。不过如果接受这种回答的话,就无异于是在说Linux特权模型(privilege model)根本没法达到安全的目的,软件bug和硬件受攻击的风险组合在一起之后总是能破坏Linux特权模型,我们干脆可以放弃了。这个结论肯定是会让大家感到很失望的。

全文完

LWN文章遵循CC BY-SA 4.0许可协议。

极度欢迎将文章分享到朋友圈 

长按下面二维码关注:Linux News搬运工,希望每周的深度文章以及开源社区的各种新近言论,能够让大家满意~

640?wx_fmt=jpeg

3、eBPF 程序的数据输出与映射使用 本文详细介绍了eBPF程序的数据输出方式及其使用的BPF映射类型。首先探讨了eBPF程序的基础运行和权限需求,然后深入解析了BPF映射作为键值存储的用途和常见类型,包括哈希表、性能和环形缓冲区等。通过具体的代码示例展示了如何使用哈希表映射统计用户执行execve系统调用的次数,以及如何通过性能环形缓冲区传递结构化数据。此外,还比较了不同映射类型的适用场景,提供了eBPF程序开发流程的总结和常见问题的解决方法。文章旨在帮助开发者更好地理解和使用eBPF技术,以实现高效的系统监控和数据分析。 阅读详情

相关推荐

使用kubeadm部署看k8s集群,kubernetes版本v1.27

在kubernetes中Service有两种代理模型,一种是基于iptables的,一种是基于ipvs,两者对比ipvs的性能要高,如果想要使用ipvs模型,需要手动载入ipvs模块。3、配置kubectl的配置文件config,相当于对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s集群进行管理。这个时候由于未安装calico,节点状态均为NotReady,接下来安装calico网络组件,安装后回变成ready的。advertiseAddress:更改为master的IP地址。

dzcro的博客 1092

从现在,看未来---Linux Kernel 未来发展方向

Linux发展至今已逾三十多年,随着内核新feature以及兼容性越来越高,使其变得十分庞大,现在如果再想通读内核源代码几乎成了 **“不可能的任务”**。近年来,又掀起了宏内核和微内核、Rust重写内核以及eBPF will be replace Linux等等有争议的声音,相信Linux Kernel的核心Maintainer也都注意到了这些。那么,他们会给出怎么样的回应?我们拭目以待 !

Rethinking the Kernel 9042

【KDD2024】ShapeFormer:用于多元时间序列分类的Shapelet Transformer

多元时间序列分类(MTSC)因其在现实世界中的广泛应用而吸引了大量研究关注。最近,Transformer在MTSC中取得了先进的性能。然而,

m0_52597077的博客 4738

LWN:BPF与安全!

关注了就能看到更多这么棒的文章哦~BPF and securityBy Jake EdgeOctober 4, 2023LSSEUChatGPT translationhttps://lwn.net/Articles/946389/eBPF内核虚拟机即将迎来其加入Linux十周年,它已经发展成为生态系统中多种用途的工具。eBPF的创始人,也是其早期开发的主要负责人Alexei Starovoito...

Linux News搬运工 1077

Chroma向量数据库实战:用Python快速搭建本地知识库(附中文诗词检索案例)

本文详细介绍了如何使用Chroma向量数据库和Python快速搭建本地知识库,并附有中文诗词检索的实战案例。通过解析核心概念、数据准备、向量化及智能检索实现,展示了Chroma在处理中文语义搜索时的轻量级与易用性,为开发者构建AI应用原型提供了实用指南。

weixin_29221753的博客 479

Qwen2.5-VL多模态微调超参数深度解析(上):训练流程与优化策略的量化机制分析

上篇文章通过系统化的对比实验,回答了多模态微调中的三个基础问题:“选什么方法”(LoRA/Full/Freeze/OFT对比)、“用什么配置”(60+组超参数组合)、“达到什么效果”(ROUGE-L/BLEU-4指标)。这些结果为后续工作奠定了实验基线,但也留下了更深层的疑问:为何相同方法在不同数据集上表现迥异?为何某些超参数的微小调整会引发性能剧变?如何在未见过的任务上快速找到最优配置?本文是对前文实验数据的二次挖掘与机理解析。我们将关注点从"做了什么实验"转移到"实验揭示了什么规律",实验视角从"结果对

羊城迷鹿的博客 1005

LWN:非特权的BPF以及进行额外授权的security hook!

关注了就能看到更多这么棒的文章哦~Unprivileged BPF and authoritative security hooksBy Jonathan CorbetApril 27, 2023DeepL assisted translationhttps://lwn.net/Articles/929746/当 Linux 安全模块(LSM, Linux security module)子系统的...

Linux News搬运工 1190

图形推理2-四大类六提示

图形推理笔记2

小y的学习笔记 6739

基于PAM的用户权能分配

操作系统安全实验——基于PAM的用户权能分配。文章分别介绍了权能、PAM以及如何将权能与PAM联系起来。

qq_30576521的博客 627

CS 188 Project3(RL) Q10:Approximate Q-Learning

实现一个近似的Q-learning学习代理,它学习状态特征的权重,其中许多状态可能共享相同的特征。在qlearningAgents.py中的ApproximateQAgent类中编写实现,它是PacmanQAgent的子类。 注:近似Q-learning学习假设在状态和动作对上存在一个特征函数f(s,a),它产生一个向量f1(s,a) .. fi(s,a) .. fn(s,a)特征值。我们在fe...

大模型与Agent智能体 2655

B07:AI 时代怎么考核团队?我把 KPI 改了 5 版才找到答案

最后说一句掏心窝的话。绩效考核不是"管人"的工具,是"引导团队行为"的工具。你定什么指标,团队就会做什么行为。你定"AI 占比",团队就凑占比你定"效率提升",团队就挑软柿子你定"代码行数",团队就刷行数你定"工具使用率",团队就刷使用只有定"业务价值 + 工程质量 + 能力成长"三个维度的指标,团队才会真正关注长期价值。这套 KPI,我在我带的团队里跑了 6 个月,没有任何一个指标被"刷"出来。考核的是结果,不是过程。永远考核"创造了多少价值",永远不考核"用了多少 AI"。

刘一说的IT专栏 499

VMware Linux系统出现进入不了图形界面问题

VMware 磁盘修复

qq_41507735的博客 1671

基于Simulink的固态变压器(SST)多级协同控制​

本文介绍了基于Simulink的固态变压器(SST)多级协同控制方法。SST作为智能电网关键设备,其三级架构(AC-DC整流、DC-DC隔离、DC-AC逆变)存在级间耦合问题。文章提出纵向解耦与横向联动相结合的协同控制策略,详细推导了各级控制算法,并通过Simulink实现了10kV/400V级联型SST系统建模。仿真结果显示,在±20%电网波动和0-100%负载跳变下,系统能保持直流母线电压波动<2%。文章还提供了工程部署建议和代码生成方法,为SST的研发提供了实用指导。

amy_mhd的博客 298

【转】BPF详解

原文地址:https://linux.cn/article-9507-1.html 什么是 BPF? BPF,及伯克利包过滤器BerkeleyPacketFilter,最初构想提出于 1992 年,其目的是为了提供一种过滤包的方法,并且要避免从内核空间到用户空间的无用的数据包复制行为。它最初是由从用户空间注入到内核的一个简单的字节码构成,它在那个位置利用一个校验器进行检查 —— 以避免内核...

mrhesongze的博客 1万+

液态神经网络(LNN):打破AI“静态快照”的连续动力学革命---AI大模型系统从零开始0029

MIT研究团队受秀丽隐杆线虫神经系统的启发,开发出革命性的液态神经网络(LNN)。该技术通过连续微分方程建模神经元动态,实现输入响应速度的自适应调节,解决了传统AI模型静态化、高能耗和低解释性的痛点。LNN具有三大突破性优势:仅需少量神经元(如20个)即可完成复杂任务;能处理非均匀时序数据;在自动驾驶、医疗监测等领域展现出卓越的适应性和鲁棒性。这项将生物智能与数学建模完美融合的技术,有望成为下一代AI的核心架构,目前已在无人机导航等场景验证了其高效性,被预测为2026年最具潜力的AI突破方向。

添柴程序猿的专栏 371

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

eBPF-AntiRootkit

背景: 针对最近几年频繁出现的通过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

SenberHu的博客 669

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

在vm虚拟机安装的ubuntu20.04中安装kubernetes单机版

在vm中的ubuntu20.04系统上部署单机版kubernetes服务

ynnhappy的博客 589

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

LWN:在今后十年让BPF保持活力!

关注了就能看到更多这么棒的文章哦~Modernizing BPF for the next 10 yearsBy Daroc AldenJune 7, 2024LSFMM+BPFGemini-1.5-flash translationhttps://lwn.net/Articles/977013/BPF 最初采用来作为对数据包过滤的一个通用化处理方案,这发生在十多年前。在那之后,BPF 发生了巨...

Linux News搬运工 1848

LWN:若干新增的capability!

关注了就能看到更多这么棒的文章哦~A crop of new capabilitiesByJonathan CorbetJune 8, 2020原文来自:https://lwn.net...

Linux News搬运工 1112

LWN:细粒度的BPF令牌!

关注了就能看到更多这么棒的文章哦~Finer-grained BPF tokensBy Jonathan CorbetOctober 12, 2023ChatGPT translationhttps://lwn.net/Articles/947173/在 BPF 虚拟机中运行的程序可以根据其挂载(attach)方式执行许多特权操作;因此,加载和运行这些程序的相关 capability 本身必须是需...

Linux News搬运工 1137

Docker容器监控新利器,eBPF安装步骤大公开,错过后悔十年

掌握Docker容器监控新方法,详解eBPF安装步骤,无需修改应用即可实现高性能、低开销的可观测性,适用于微服务与云原生环境。支持实时流量追踪与故障排查,提升运维效率,值得收藏。

FuncInk的博客 888

在群晖里安装京东无线宝容器矩阵

因智能加速服务读写频繁,可能对磁盘产生一定影响,为了您的数据安全,建议使用单独的硬盘与其他数据进行隔离,也就是单独的硬盘最好是固态硬盘。5、点击“添加群晖设备”,对了,这里手机和群晖设备一定要在同一个网络内,也就是你手机连接的wifi要和群晖的网络在同一个网络里,不然会提示找不到设备。10、回到步骤1常规设置的页面中,填入把无线宝App上展示的授权码填入“ACTIVECODE“后的值填入空中,汉字提示删除掉。然后点击”完成“按钮。9、点击“获取授权码“,先不要关闭页面,记下获取的授权码。

yyongwh的博客 6825

(eBPF+Docker安装终极方案):生产环境可用的3种部署模式详解

掌握eBPF与Docker集成核心方法,详解3种生产级安装部署模式。涵盖容器监控、安全追踪等场景,提供清晰的Docker eBPF 安装 步骤,支持主流Linux环境,稳定高效。运维架构师必备方案,值得收藏。

CompiGlow的博客 784

《BPF( 伯克利数据包过滤器 ) Performance Tools》 第一章 引言

并且显示了延迟离群点的存在。有人开发了动态跟踪工具(比如kerninstCambhs99l), 其也包含相应的跟踪语言,但是这些工具实在太过复杂,在实践中很少被使用,还有部分原因是它们会带来较大的运行风险:动态跟踪要求实时修改地址空间中的应用指令,一旦出现任何错误就会导致进程或者内核崩溃。opensnoop.bt 工具可以对出错的软件进行故障排查,也许软件尝试打开了错误的文件位置:也可以用于了解配置和日志文件的具体位置:还可以识别一些性能问题,比如文件打开频次过快,或者反复检查错误文件位置等。

weixin_55255438的博客 1512

初识 eBPF(功能、原理、及一些应用)

一般来说可编程性的支持通常会带来一些新的问题,比如内核模块其实也是为了解决这个问题,但是他没有提供很好的边界,导致内核模块会影响内核本身的稳定性,在不同的内核版本需要做适配等。eBPF通过kprobe,tracepoints跟踪机制兼具内核和用户的跟踪能力,这种端到端的跟踪能力可以快速进行故障诊断,与此同时eBPF支持以更加高效的方式透出profiling的统计数据,而不需要像传统系统需要将大量的采样数据透出,使得持续地实时profiling成为可能。息,所以我们复用了这部分能力。.........

叮当猫的喵i 1万+

Kubernetes---网络组件calico

【代码】Kubernetes---网络组件calico。

AnNan1997的博客 677
上一篇: LWN:对Debian的file命令增加seccomp()安全防护
下一篇: LWN: 华为EROFS能应对好损坏的文件系统数据吗?
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值