[转帖]ebpf 月报 - 2023 年 1 月
https://segmentfault.com/a/1190000043355631
本刊物旨在为中文用户提供及时、深入、有态度的 ebpf 资讯。
如果你吃了鸡蛋觉得好吃,还想认识下蛋的母鸡,欢迎关注:
笔者的 twitter:https://twitter.com/spacewand...
Merbridge 成为 CNCF sandbox 项目
Istio、Linkerd、Kuma 这三个项目除了都是 service mesh 之外,还有什么共同点?
它们都可以通过 Merbridge 加速!
Merbridge 是一个旨在通过 ebpf 代替 iptables,给 service mesh 加速的项目。作为成立刚满一周年的新项目,Merbridge 已经应用到 kuma 的官方版本当中。最近 Merbridge 又达到了另外一个里程碑 —— Merbridge 正式成为 CNCF sandbox 项目。
从 Merbridge 提交给 CNCF 的维护者列表来看,目前该项目背后是由 DaoCloud 推动的,半数维护者来自于该公司。不过由于 Merbridge 的位置偏向于底层组件,我们还是可以相信该项目的中立性。想必该项目的创立之初是为了加速 istio,后来也被 kuma 等非 istio 的 service mesh 所采纳。
在使用 Merbridge 进行一键加速之前,一个典型的 service mesh 的网络通信是这样的:
Merbridge 使用了 ebpf 的 SOCKMAP 功能,在 socket 层面上完成包的转发,绕过其他弯弯绕绕的路线。
在采用 Merbridge 之后,sidecar 和 app 之间的路径能够显著缩短:
在 Readme 上,Merbridge 把这种变化比喻成穿过了爱因斯坦-罗森桥(虫洞),倒是挺贴切。
SkyWalking Rover:使用 eBPF 提升 HTTP 可观测性 - L7 指标和追踪
https://skywalking.apache.org...
提供及时的抓包信息一直是做接入层的程序员的刚需。在笔者的上上家公司,就有同事使用 pcap 实现了可以交互式抓包的后台服务。Elastic 公司也有个开源项目 packetbeat 支持通过 pcap 或者 af_packet 来常态化抓包。
只支持纯抓包的项目都有个限制,那就是无法跟用户态的更多信息有机结合起来。假设可以把用户态的上下文容纳入网络包的信息中,前景将会大大拓宽。比如通过比较用户态的读写方法和内核中实际的读写操作的时间差和数据量,用户会对应用中的 buffering 情况有更深入的了解。抑或通过 hook 应用中的 TLS 操作,可以得到未加密的真实的请求内容。
ebpf 填充了纯抓包和纯用户态的可观测性之间的鸿沟。通过 ebpf,用户能够同时在 kprobe 和 uprobe 中记录上下文,把两者紧密结合在一起。
言归正传,SkyWalking Rover 的这篇文章,强调了它对 L7 协议的可观测性。众所周知,作为一个跑在内核态里面、对执行方式有强约束的技术,想要在 ebpf 里面实现完整的 L7 协议栈是一件很困难的事。那么 SkyWalking Rover 是如何做到的?
SkyWalking Rover hook 了内核相关的函数,嗅探新连接的内容。它会读取最开始的一段内容做分析,猜测其背后采用的协议。虽然有的协议需要更加复杂的处理方式,比如嗅探 websocket 需要剥开外面的 HTTP1 的壳。不过对于绝大多数协议,这样就够了。在完成基本的筛选后,它会把内容转到用户态,交给用户态的解析程序来完成。用户态的解析程序会完成完整的 L7 协议解析。
Caretta:轻量级的 k8s 服务调用网络可视化工具
https://github.com/groundcove...
作为一个去年 11 月才开始开发的项目,Caretta 在最近一个月的 star 增长得飞快,不得不让人佩服 groundcover 这家商业公司的宣发。
groundcover 是一家成立于 2021 年,基于 ebpf 做可观测性的以色列 APM 厂商。Caretta 并非是他们产品的开源版,而是该公司开源出来的小工具。Caretta 是一个轻量级的 k8s 服务调用网络可视化工具,能够梳理集群内不同应用之间的调用关系。这个工具通过 ebpf 获取 Node 上各个连接的信息,接着在用户态借助 k8s 的上下文把连接信息翻译成 k8s 的服务调用,然后通过 Prometheus 的标准接口把信息暴露出来,最后提供了 Grafana 报表展示 Prometheus 采集到的服务调用信息。毕竟是才开发了两个月的项目,这个工具在 ebpf 方面的逻辑其实并不复杂,比较酷炫的展示,是通过 Grafana 来实现的。
如何应对 eBPF 带来的新攻击方式
https://redcanary.com/blog/eb...
ebpf 这么强大,一定会有人把它应用到黑产上。本文提到了一些借助 ebpf 进行不法行为的方式,并且给出若干加固的建议。
总结起来就两条:
- defense in depth
- 如果不用,禁掉 ebpf 和/或 kprobe
对第一条展开说一下。由于 ebpf 能够跑在内核态的,所以通常需要 root 权限,或者 CAP_SYS_ADMIN / CAP_BPF(Linux 5.8 新加的)来跑。然而实际上非特权用户也能跑 ebpf,只是有些功能会被限制。感兴趣的读者可以搜索下“unprivileged ebpf”。但是,就像大家平时写的代码,内核代码中也难免不会出现 bug,导致非特权用户绕过限制的情况。
比如下面的博客就分析了之前一个绕过 Linux ebpf verifier 的安全漏洞:https://stdnoerr.github.io/writeup/2022/08/21/eBPF-exploitation-(ft.-D-3CTF-d3bpf).html
所以考虑到非特权用户运行 ebpf 是如此鲜见,我们大可通过设置 kernel.unprivileged_bpf_disabled 禁用该功能。我检查了手上几个 Linux 设备,开发环境上 unprivileged ebpf 是启用的,而两台 VPS 上 unprivileged ebpf 都是禁用的。较新的发行版默认就是禁用 unprivileged ebpf,见 https://www.kernel.org/doc/ht...。
即使设置了 root 才能跑 ebpf,也不代表高枕无忧。黑客们可以通过别的手段拿到 root 权限,然后在 rootkit 里面植入 ebpf 程序。还有一种思路是采用供应链攻击,就像 log4j 一样。不过考虑到目前好像没有什么应用能够动态根据用户输入执行 ebpf 代码,而且 ebpf 也不能直接 import 别人的代码库,在这一块谈供应链攻击还尚早。
借助 ebpf 的 rootkit 是跑在内核里的,且许多 Linux 加固手段也是同样应用在内核里,看来彼此在内核中的斗争会是持久的攻防战。
[转帖]ebpf 月报 - 2023 年 1 月的更多相关文章
- 【转帖】intel 2018年1 月2号爆出漏洞分析 知乎匿名用户
作者:匿名用户链接:https://www.zhihu.com/question/265012502/answer/288407097来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...
- GitHub 入门 与 2023年2月18日10:29:02
用 GitHub 有一段时间了,之前一直用来做 Hexo 的服务器,直到前阵子搞 GitHub Action 因为命令不熟,把 GitHub 上的源码强制拉到本地把本地的 Hexo 搞崩了,博客源码都 ...
- Pycharm 2022.2激活码到2023年7月,亲测有效
33MEHOB8W0-eyJsaWNlbnNlSWQiOiIzM01FSE9COFcwIiwibGljZW5zZWVOYW1lIjoiUG9saXRla25payBNZXJsaW1hdSBNZWxha ...
- 2023年3月1日其它etf大涨,医疗未涨,3月2日会补涨,涨0.5%卖出。
- .NET周报【1月第1期 2023-01-06】
国内文章 [开源]基于.net6+gtksharp实现的Linux下的图形界面串口调试工具 https://www.cnblogs.com/flykai/p/17007554.html 由于公司的上位 ...
- [转帖] Oracle JDK 11 正式发布.. 版本号真快
Java 11 / JDK 11 正式发布! oschina 发布于 2018年09月26日 收藏 19 评论 38 在您的既有IT基础设施上按需构建人工智能更高效>>> 美 ...
- Java 11 正式发布,支持期限至2026年9月
美国当地时间9月25日,Oracle 官方宣布 Java 11 (18.9 LTS) 正式发布,可在生产环境中使用!这是自 Java 8 后的首个长期支持版本,非常值得大家的关注,可以通过下面的地址进 ...
- .NET周报【10月第3期 2022-10-25】
国内文章 聊一聊被 .NET程序员 遗忘的 COM 组件 https://www.cnblogs.com/huangxincheng/p/16799234.html 将Windows编程中经典的COM ...
- .NET周报【11月第1期 2022-11-07】
国内文章 开源·安全·赋能 - .NET Conf China 2022 https://mp.weixin.qq.com/s/_tYpfPeQgyEGsnR4vVLzHg .NET Conf Chi ...
- Excelize 2.7.0 发布, 2023 年首个更新
Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准.可以使用它来读取.写入由 Microsoft Exc ...
随机推荐
- flutter BLoC框架
BLoC(Business Logic Component)是一种在Flutter中用于管理状态和处理业务逻辑的设计模式和架构模式. BLoC 的核心思想是将应用程序的状态.业务逻辑和UI分离开来,以 ...
- Nignx快速入门
Nginx快速入门 一.简介 产生的背景:当一台服务器同一时刻被大量客户端请求访问时,访问量超出服务器请求范围,服务器处理不过来,发生宕机或者丢失连接情况下,产生了Nignx反向代理技术. Nginx ...
- Java 插入Excel页眉、页脚
前言 在Excel文档中,我们常用页眉页脚来显示文档的附加信息,例如日期.公司名称.Logo或作者信息等.本文将通过Java程序来介绍如何给Excel文档添加页眉页脚.代码示例主要从以下几方面来演示添 ...
- 细说GaussDB(DWS)的2种查询优化技术
本文分享自华为云社区<GaussDB(DWS)查询优化技术大揭秘>,作者: 胡辣汤. 大数据时代,数据量呈爆发式增长,经常面临百亿.千亿数据查询场景,当数据仓库数据量较大.SQL语句执行效 ...
- DevOps敏捷60问,一定有你想了解的问题
摘要:问题覆盖了规划设计.开发集成.测试.部署发布.运维监控等DevOps落地实践中的关键疑点与难点. "DevOps的价值是又快又好地交付软件" --<凤凰项目>的作 ...
- PPT 动画入门
元素动画 进入动画 元素从无到有的过程 退出动画 元素从有到无的过程 退出动画和进入动画,一对一 强调动画 在元素上变化的过程(如放大) 动作路径 3D动画 三维动画 低版本不支持 组合动画 切换动画 ...
- 使用 Kubeadm 部署 Kubernetes(K8S) 安装 -- Ingress-Ngnix
前置条件:使用 Kubeadm 部署 Kubernetes(K8S) 安装 安装ingress-nginx组件(在master节点执行) 通过 ip+port 号进行访问,使用 Service 里的 ...
- 详解 SSL(一):网址栏的小绿锁有什么意义?
随着互联网的飞速发展,用户信息泄漏.数据泄露等安全问题的事件频繁发生.这一切不一定是网站的问题,有时候可能是自己不经意间泄露了自己的信息.例如钓鱼网站就是日常生活中比较常见的,钓鱼网站和真实网站差别细 ...
- #1495:非常可乐(BFS+数论)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495 BFS解法 题目 给三个数字 s n m s=n+m s在1到100之间 就是个倒水问题可以从第 ...
- 蓝桥杯历年省赛试题汇总 C/C++ A组
A组 省赛 B 组的题目可以在这里查看 → 刷题笔记: 蓝桥杯 题目提交网站:Here 2013 第四届 高斯日记 排它平方数 振兴中华 颠倒的价牌 前缀判断 逆波兰表达式 错误票据 买不到的数目 剪 ...