作品提交
基于ebpf的容器异常检测
BPF 是一种用于网络数据包过滤的机制。eBPF 扩展了 BPF 的功能,使其不仅能够处理网络数据包,还可以在 Linux 内核中运行用户定义的代码,用于实现各种系统监控和网络功能。对于eBPF可以简单的理解成kernel实现了一个虚拟机机制,将类C代码编译成字节码,挂在到内核的钩子上,当钩子被触发时,kernel在虚拟机的”沙盒”中运行字节码,这样既能方便的实现很多功能,也能通过沙箱保证内核的安全性。
本项目是一个基于eBPF技术对容器异常行为进行判定的系统,可对被观测容器进行插桩,依托tracepoint对容器行为进行监测,收集容器的行为特征,使用Teiresias算法判定特征相似度并基于分类算法进行二分类判定容器异常。容器的各项数据及用于判定的系统日志可在grafana中进行可视化观察。
该项目具有如下特点:
下图为容器监测的grafana数据图
在比赛最初阶段,我们组明确开发的目标(比赛作品)应首先满足赛题所提出的要求,即:
基于上述要求,为了达成所有的目标,我们进行了广泛的技术调研,从论文、网络资料、开源代码中汲取诸如eBPF原理和应用场景、eBPF编程工具链、eBPF trace方法、异常检测算法、机器学习及神经网络的相关知识,并形成文档。具体而言,内容包括但不限于:
eBPF 技术:研究了 eBPF 的工作原理及其应用场景,以及它如何在 Linux 内核中提供可编程的、高效的执行环境。eBPF trace则是本项目的关键功能,我们具体分析了eBPF如何在操作系统驱动程序层进行tracepoint插桩,以及XDP技术的作用与实现。
容器技术:分析了容器的运行原理和生命周期管理,docker在Linux操作系统下的部署和使用,以及如何通过 eBPF 跟踪容器创建、执行和终止等关键事件。当前主要主要针对docker技术进行分析,我们同时也对kubernetes集群容器部署技术进行了调查研究和实验,未来考虑在kubernetes上扩展实现本项目的功能。
监控工具:横向比较并分析评估了现有的监控工具和框架,例如 Prometheus、Grafana 以及其他 eBPF 基础的监控工具,如 BCC 和 bpftrace。同时,对相对比较成熟的cilium检测工具和Falco异常分析工具进行了深入的研究,其它工具的详细使用方法可以查看Grafana 文档和BCC GitHub 仓库.
在需求分析和调研完成后,进入软件设计及实现阶段。
do_sys_open
sudo apt install -y zip bison build-essential cmake flex git libedit-dev \ libllvm16 llvm-16-dev libclang-16-dev python3 python3-pip zlib1g-dev libelf-dev libfl-dev python3-setuptools \ liblzma-dev libdebuginfod-dev arping netperf iperf libpolly-16-dev
git clone https://github.com/iovisor/bcc.git mkdir bcc/build; cd bcc/build cmake .. make sudo make install cmake -DPYTHON_CMD=python3 .. # build python3 binding pushd src/python/ make sudo make install popd
sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
pip install docker prometheus-client
sudo python main.py
sudo apt install prometheus
sudo apt install grafana sudo systemctl daemon-reload sudo systemctl start grafana-server sudo systemctl status grafana-server
/etc/prometheus/prometheus.yml
- job_name: Steve static_configs: - targets: ['localhost:9001']
Grafana创建并设置数据源url为http://localhost:9090
查询其uid,填入./grafana.txt中的uid字段
./grafana.txt
导入Grafana Dashboard配置文件./grafana.txt
启动之后,运行pr.py
pr.py
sudo python3 ./pr.py
可在浏览器中进入Dashboard查看。
进入src目录
cd src
运行检测文件
在控制台中可输出高频重复子序列特征及判定结果。
├── README.md ├── License ├── bpf.c(监控容器访问文件系统、使用系统调用) ├── grafana.txt(grafana配置文件) ├── main.py(接收eBPF程序数据并进行处理) ├── pr.py(Prometheus数据导出) ├── src/ │ ├── main.py(用于异常分析检测) │ ├── teiresias.py(辅助函数) │ ├── test.py │ ├── docs/ │ ├── logs/ │ ├── file_opne │ ├── syscall ├── images/
©Copyright 2023 CCF 开源发展委员会 Powered by Trustie& IntelliDE 京ICP备13000930号
一、项目描述
1.项目名称
基于ebpf的容器异常检测
2.项目概述
BPF 是一种用于网络数据包过滤的机制。eBPF 扩展了 BPF 的功能,使其不仅能够处理网络数据包,还可以在 Linux 内核中运行用户定义的代码,用于实现各种系统监控和网络功能。对于eBPF可以简单的理解成kernel实现了一个虚拟机机制,将类C代码编译成字节码,挂在到内核的钩子上,当钩子被触发时,kernel在虚拟机的”沙盒”中运行字节码,这样既能方便的实现很多功能,也能通过沙箱保证内核的安全性。
本项目是一个基于eBPF技术对容器异常行为进行判定的系统,可对被观测容器进行插桩,依托tracepoint对容器行为进行监测,收集容器的行为特征,使用Teiresias算法判定特征相似度并基于分类算法进行二分类判定容器异常。容器的各项数据及用于判定的系统日志可在grafana中进行可视化观察。
该项目具有如下特点:
3.技术栈
下图为容器监测的grafana数据图
二、工作内容和方案
1.比赛准备和调研
在比赛最初阶段,我们组明确开发的目标(比赛作品)应首先满足赛题所提出的要求,即:
基于上述要求,为了达成所有的目标,我们进行了广泛的技术调研,从论文、网络资料、开源代码中汲取诸如eBPF原理和应用场景、eBPF编程工具链、eBPF trace方法、异常检测算法、机器学习及神经网络的相关知识,并形成文档。具体而言,内容包括但不限于:
eBPF 技术:研究了 eBPF 的工作原理及其应用场景,以及它如何在 Linux 内核中提供可编程的、高效的执行环境。eBPF trace则是本项目的关键功能,我们具体分析了eBPF如何在操作系统驱动程序层进行tracepoint插桩,以及XDP技术的作用与实现。
容器技术:分析了容器的运行原理和生命周期管理,docker在Linux操作系统下的部署和使用,以及如何通过 eBPF 跟踪容器创建、执行和终止等关键事件。当前主要主要针对docker技术进行分析,我们同时也对kubernetes集群容器部署技术进行了调查研究和实验,未来考虑在kubernetes上扩展实现本项目的功能。
监控工具:横向比较并分析评估了现有的监控工具和框架,例如 Prometheus、Grafana 以及其他 eBPF 基础的监控工具,如 BCC 和 bpftrace。同时,对相对比较成熟的cilium检测工具和Falco异常分析工具进行了深入的研究,其它工具的详细使用方法可以查看Grafana 文档和BCC GitHub 仓库.
2.开发计划
在需求分析和调研完成后,进入软件设计及实现阶段。
(1)系统设计
(2)环境搭建
(3)实现ebpf监控部分
(4)实现可视化
(5)实现容器异常检测算法
(4)测试和优化
(5)文档编写
3.开发内容及重要进展
(1)基于eBPF的基本数据采集
do_sys_open
,我们跟踪该处理函数,可以获取相应的文件处理信息。(2)基于Prometheus和Grafana UI的数据可视化展示
(3)基于Teiresias算法的容器异常检测
三、程序安装及使用
Prometheus/Grafana可视化
/etc/prometheus/prometheus.yml
中添加以下内容:Grafana创建并设置数据源url为http://localhost:9090
查询其uid,填入
./grafana.txt
中的uid字段导入Grafana Dashboard配置文件
./grafana.txt
启动之后,运行
pr.py
可在浏览器中进入Dashboard查看。
进入src目录
运行检测文件
在控制台中可输出高频重复子序列特征及判定结果。
四、项目目录结构