草庐IT

一篇带给你eBpf开源项目解析

前置知识:WASM:WebAssembly(缩写为Wasm)是一种低级的、与平台无关的二进制指令格式,是一种新型的虚拟机技术,可以在现代Web浏览器中运行,并且可以与JavaScript等其他Web技术一起使用。它被设计为一种可移植的编译目标,能够将不同编程语言的代码编译成WebAssembly字节码,这些字节码可以在Web浏览器中快速加载和执行。WebAssembly的设计目标是为了解决Web上应用程序的性能问题,尤其是在使用JavaScript等高级语言编写的复杂Web应用中。相比于JavaScript等脚本语言,WebAssembly的执行速度更快,且能够提供更好的性能和安全性,同时也更

一篇带给你eBpf开源项目解析

前置知识:WASM:WebAssembly(缩写为Wasm)是一种低级的、与平台无关的二进制指令格式,是一种新型的虚拟机技术,可以在现代Web浏览器中运行,并且可以与JavaScript等其他Web技术一起使用。它被设计为一种可移植的编译目标,能够将不同编程语言的代码编译成WebAssembly字节码,这些字节码可以在Web浏览器中快速加载和执行。WebAssembly的设计目标是为了解决Web上应用程序的性能问题,尤其是在使用JavaScript等高级语言编写的复杂Web应用中。相比于JavaScript等脚本语言,WebAssembly的执行速度更快,且能够提供更好的性能和安全性,同时也更

什么场景下不适用eBPF?

译者| 陈豪策划|云昭ExtendedBerkeleyPacketFilter(eBPF)是Linux内核的一个相对较新的特性,它让许多DevOps专业人士、SRE和工程师兴奋不已。eBPF甚至可以与标准的Linuxiptables相提并论。但是,它真能成为满足所有Linux内核需求的“一站式商店”呢?eBPF正当时过去,对内核进行更改是很困难的。开发者虽然可以调用API来获取数据,但却无法影响内核内部的执行代码。相反,你必须向Linux社区提交补丁并等待其获得批准。使用eBPF,可以将程序加载到内核中,并在例如看到某个数据包或发生其他事件时指示内核执行程序。eBPF是Linux内核中提供的一

什么场景下不适用eBPF?

译者| 陈豪策划|云昭ExtendedBerkeleyPacketFilter(eBPF)是Linux内核的一个相对较新的特性,它让许多DevOps专业人士、SRE和工程师兴奋不已。eBPF甚至可以与标准的Linuxiptables相提并论。但是,它真能成为满足所有Linux内核需求的“一站式商店”呢?eBPF正当时过去,对内核进行更改是很困难的。开发者虽然可以调用API来获取数据,但却无法影响内核内部的执行代码。相反,你必须向Linux社区提交补丁并等待其获得批准。使用eBPF,可以将程序加载到内核中,并在例如看到某个数据包或发生其他事件时指示内核执行程序。eBPF是Linux内核中提供的一

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值为0表示允许非特权用户调用bpf值为1表示禁止非特权用户调用bpf且该值不可再修改,只能重启后修改值为2表示禁止非特权用

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值为0表示允许非特权用户调用bpf值为1表示禁止非特权用户调用bpf且该值不可再修改,只能重启后修改值为2表示禁止非特权用

eBPF编写避坑指南

0x1:基本概念当使用tracepoint的时候,函数参数如何确认?cat/sys/kernel/debug/tracing/events/syscalls/xxx/format.xxx为要跟踪的函数,在这里有函数参数定义。0x2:注意事项写结构体的时候一定要注意内存对齐,防止被编译器优化填充。使用LLVM内置的函数做内存操作#ifndefmemset#definememset(dest,chr,n)__builtin_memset((dest),(chr),(n))#endif#ifndefmemcpy#definememcpy(dest,src,n)__builtin_memcpy((de

eBPF编写避坑指南

0x1:基本概念当使用tracepoint的时候,函数参数如何确认?cat/sys/kernel/debug/tracing/events/syscalls/xxx/format.xxx为要跟踪的函数,在这里有函数参数定义。0x2:注意事项写结构体的时候一定要注意内存对齐,防止被编译器优化填充。使用LLVM内置的函数做内存操作#ifndefmemset#definememset(dest,chr,n)__builtin_memset((dest),(chr),(n))#endif#ifndefmemcpy#definememcpy(dest,src,n)__builtin_memcpy((de

eBPF简介

基础概念eBPF是kernel3.15中引入的全新设计,将原先的BPF发展成一个指令集更复杂、应用范围更广的“内核虚拟机”。eBPF支持在用户态将C语言编写的一小段“内核代码”注入到内核中运行,注入时要先用llvm编译得到使用BPF指令集的elf文件,然后从elf文件中解析出可以注入内核的部分,最后用bpf_load_program方法完成注入。用户态程序和注入到内核中的程序通过共用一个位于内核中map实现通信。为了防止注入的代码导致内核崩溃,eBPF会对注入的代码进行严格检查,拒绝不合格的代码的注入。DPDK让用户态程序直接处理网络流,bypass掉内核,使用独立的CPU专门干这个事。XDP

eBPF简介

基础概念eBPF是kernel3.15中引入的全新设计,将原先的BPF发展成一个指令集更复杂、应用范围更广的“内核虚拟机”。eBPF支持在用户态将C语言编写的一小段“内核代码”注入到内核中运行,注入时要先用llvm编译得到使用BPF指令集的elf文件,然后从elf文件中解析出可以注入内核的部分,最后用bpf_load_program方法完成注入。用户态程序和注入到内核中的程序通过共用一个位于内核中map实现通信。为了防止注入的代码导致内核崩溃,eBPF会对注入的代码进行严格检查,拒绝不合格的代码的注入。DPDK让用户态程序直接处理网络流,bypass掉内核,使用独立的CPU专门干这个事。XDP