分类 BPF 中的文章

深入浅出 eBPF 安全项目 Tracee

1. Tracee 介绍 1.1 Tracee 介绍 Tracee 是一个用 于 Linux 的运行时安全和取证工具。它使用 Linux eBPF 技术在运行时跟踪系统和应用程序,并分析收集的事件以检测可疑的行为模式。Tracee 以 Docker 镜像的形式交付,监控操作系统并根据预定义的行为模式集检测可疑行为。官网文档参见这里。 Tracee 由以下子项目组成: Trace-eBPF - 使用 eBPF 进行 Linux 追踪和取证……

阅读全文

【BPF入门系列-12】【译】eBPF 和 Go 经验初探

原文地址:https://networkop.co.uk/post/2021-03-ebpf-intro/ 本站相关文档:使用 Go 语言管理和分发 ebpf 程序 1. 前言 eBPF 的生态欣欣向荣,无论是 eBPF 本身及其各种应用(包括 XDP) 方面都有大量的学习资源。但当涉及到选择库和工具来与 eBPF 进行交互时,会让人有……

阅读全文

使用 Go 语言管理和分发 ebpf 程序

1. Go 语言管理 eBPF 程序库 1.1 cilium/ebpf cilium/ebpf 库是 Cilium 项目的一个子项目。仅使用 Go 语言编写的库,提供了加载、编译和调试 eBPF 程序的功能。它具有最小的外部依赖性,适合在长期运行的进程中使用。库主要有由 Cloudflare 和 Cilium 两家公司维护,由于 Cilium 产品的火爆程度,该库的活跃度在社区层面还是会持续演进和发展。 cilium/ebpf 已经满足生产可用,但 API……

阅读全文

BCC 到 libbpf 的转换指南【译】

[TOC] 译者注: BPF CO-RE 项目在未来将会是非常流行的技术,其让 BPF 编写的工具能够像用户编写的其他程序一样进行二进制分发,不再需要目标机器在 BCC 框架下的 llvm/clang/linux-dev 等包的安装,并且可以跨越不同版本的内核。唯一的要求是需要运行的程序的内核采用了支持 CONFIG_DEBUG_INFO_BTF 内核编译选项,可喜的是当前不少 Linux 发行版已经内置该参数编译,比……

阅读全文

【BPF入门系列-10】使用 tracepoint 跟踪文件 open 系统调用

1. 什么是 tracepoint tracepoint 的介绍可以参见 Kernel 文档这里。从 Linux 内核 4.7 开始,eBPF 程序可以挂载到内核跟踪点 tracepoint。在此之前,要完成内核中函数跟踪的工作,只能用 kprobes/kretprobe 等方式挂载到导出的内核函数(参见 /proc/kallsyms),正如我们前几篇文章跟踪 open 系统调用方式那样。尽管 kprobes 可以达到跟踪的……

阅读全文

【BPF入门系列-9】文件打开记录结果跟踪篇

1. 前言 在上篇文章中我们为文件 open系统调用采用了 perf_event 的方式将数据从内核上报至用户程序。但是到目前为止,我们只是实现了文件打开记录的跟踪,并没有对文件访问的结果是成功还是失败进行展示。 与 kprobe 相对应的 kretprobe 实现可以帮助我们获取到 sys_open 函数的返回值。为了拿到 sys_open 系统调用的详细信息和返回结果,我们需……

阅读全文

【BPF入门系列-8】文件打开记录跟踪之 perf_event 篇

1. ebpf_perf_output 介绍 在上一篇 ”使用 ebpf 实时持续跟踪进程文件记录“ 中,我们简单介绍了使用 eBPF 跟踪文件打开记录的跟踪。为了简单演示功能,我们直接使用了 bpf_trace_printk 进行演示,正如上文所述,bpf_trace_printk 存在一些限制: 最大只支持 3 个参数,而且只运行一个 %s 的参数; 程序共享输出共享 /sys/kernel/debug/tracing/trace_pipe 文件,可能导致文……

阅读全文

【BPF入门系列-7】使用 ebpf 实时持续跟踪进程文件记录

本文主要用于演示基于 ebpf 技术来实现对于系统调用跟踪和特定条件过滤,实现基于 BCC 的 Python 前端绑定,过程中对于代码的实现进行了详细的解释,可以作为学习 ebpf 技术解决实际问题的参考样例。 1. 样例代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include <stdio.h> #include <unistd.h> int main() { FILE *fp; char buff[255]; printf("Pid %d\n", getpid()); fp = fopen("./hello.c", "r"); fscanf(fp, "%s", buff); printf("Read: [%s]\n", buff ); getchar(); fclose(fp); return 0; } fopen 函数……

阅读全文

在 Windows 平台上启用 eBPF【译】

前言 eBPF 是一项众所周知的革命性技术–提供了可编程性、可扩展性和敏捷性。eBPF 已被应用于拒绝服务保护和可观察性等场景。随着时间的推移,围绕eBPF建立了重要的工具,产品和经验生态系统。尽管最初在 Linux 内核中实现了对 eBPF 的支持,但是人们越来越关注允许 eBPF在其他操作系统上使用……

阅读全文

BPF 二进制文件:BTF,CO-RE 和 BPF 性能工具的未来【译】

作者: Brendan Gregg 1. 简述 BTF 和 CO-RE 这两项新技术为 BPF 成为价值十亿美元的产业铺平了道路。目前,有许多 BPF(eBPF)初创公司正在构建网络,安全性和性能产品(并且更多未浮出水面的),但是要求客户安装 LLVM,Clang 和内核头文件依赖(可能消耗超过100 MB的存储空间)是一个额外的负担。 BTF 和 CO-RE 在……

阅读全文