• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

Recommended Posts

BPF和柏克莱包过滤器最初构想于1992年,旨在提供一种过滤包的方法,避免无用的包从内核空间复制到用户空间。它最初由从用户空间注入内核的简单字节码组成。它在那个位置用检查器检查3354,以避免内核崩溃或安全问题3354,附加到套接字,然后对每个接收到的包运行。几年后,它被移植到Linux上,应用于少量的应用程序中(例如tcpdump)。它的简化语言和内核中的实时编译器(JIT)使BPF成为一个性能卓越的工具。

然后,在2013年,Alexei Starovoitov彻底改造了BPF,增加了新功能,提高了性能。这个新版本被命名为eBPF(意为“扩展的BPF”),同时将之前的BPF改为cBPF(意为“经典的”BPF)。新版本中出现了映射、尾调用tail call等新特性,并重写了JIT编译器。新语言比cBPF更接近本机语言。此外,在内核中创建了一个新的连接点。

由于这些新的钩子,eBPF程序可以被设计用于各种情况,这些情况可以分为两个应用领域。其中一个应用领域是内核跟踪和事件监控。BPF程序可以附着在kprobe上,与其他跟踪方式相比有很多优点(有时也有一些缺点)。

另一个应用领域是网络编程。除了套接字过滤器,eBPF程序还可以附加到tc(Linux流量控制工具)的入站或出站接口,以非常高效的方式执行各种数据包处理任务。这种使用方式在这个领域开创了一片新天地。

而且,eBPF通过使用为IO Visor项目开发的技术进一步提高了性能:它还为XDP添加了一个新的钩子(“快速数据路径”),这是不久前添加到内核中的一个新的快速路径。XDP与Linux堆栈结合,然后使用BPF使数据包处理速度更快。

甚至一些项目,如P4和Open vSwitch,已经考虑或开始使用BPF。其他的,如CETH,纤毛,都是完全基于它。BPF是如此受欢迎,因此,我们可以预计,在不久的将来,更多的工具和项目将出现在它的周围…

什么是BPF程序:

BPF是Linux内核中高度灵活和高效的类似虚拟机的构造,允许以安全的方式在不同的挂钩点执行字节码。

BPF程序- LLVM Clang - BPF字节码-JIT-BPF指令集;

BPF架构采用了全新的虚拟机设计,包括支持x86_64、arm64、mips64等架构的指令集。BPF指令集程序可以在基于寄存器架构(r0到r10)的CPU上高效工作。

Linux内核维护人员继续开发挂钩点,并且可以在挂钩点上安装BPF程序。当对应于挂钩点的事件发生时,可以执行BPF程序,并且BPF程序返回挂钩点的预定义值。然后Linux内核根据返回值执行下一步操作(比如在指定的网络接口上挂载XDP类型的BPF程序,有一个数据包进入网络接口,BPF程序解析数据包然后根据协议字段做出判断。如果不符合规则,则返回XDP_DROP,Linux内核会根据返回值丢弃数据包)。

image

BPF工作原理:

image

BPF关键组件:

BPF胡克斯

image

BPF制图:

BPF程序和用户空间程序通过BPF映射进行通信;

BPF映射用键/值存储在内核中,任何BPF程序都可以访问它。用户空间中的程序可以通过文件描述符访问BPF地图。

BPF映射类型:BPF映射支持多种数据结构,从而实现数据在内核中的组织以及用户态和内核态之间的通信,如哈希表、数组、队列等。

image

4. BPF映射用途举例:

1)不中断修改BPF程序的运行方式,修改映射中BPF程序访问的配置数据或应用数据,如黑名单中指定的IP列表、域名等;

2)内核中运行的BPF程序统计进入指定网络接口的数据包信息,并将统计信息保存到BPF映射中,用户态程序可以通过BPF映射获得数据包统计信息;

image

BPF助手函数:比如其他语言生态会提供丰富的库来提供大量的API函数,BPF也包含了各种常用的助手函数,提供操作内核数据和BPF映射的工具函数;

优点:通过定义和维护BPF辅助函数,BPF辅助函数的维护者处理Linux内核版本的迭代更新,对开发者透明,形成稳定的API接口;

Bp辅助功能列表:

image

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now