微软已经为Windows准备了eBPF实现

Microsoft 发布了适用于 Windows 的 eBPF 子系统的实现,它允许您启动在操作系统内核级别运行的任意处理程序。 eBPF 提供了一个内置于内核中的字节码解释器,这使得创建从用户空间加载的网络操作处理程序、控制访问和监视系统操作成为可能。 eBPF 自 3.18 版本以来已包含在 Linux 内核中,允许您处理传入/传出网络数据包、数据包转发、带宽管理、系统调用拦截、访问控制和跟踪。 由于使用了 JIT 编译,字节码可以即时翻译为机器指令,并以编译代码的性能执行。 Windows 版 eBPF 是在 MIT 许可证下开源的。

eBPF for Windows 可以与现有的 eBPF 工具一起使用,并提供用于 Linux 上的 eBPF 应用程序的通用 API。 除此之外,该项目允许您使用基于 Clang 的标准 eBPF 编译器将用 C 编写的代码编译为 eBPF 字节码,并运行在 Windows 内核之上为 Linux 创建的 eBPF 处理程序,提供特殊的兼容性层并支持标准 Libbpf用于与与 eBPF 程序交互的应用程序兼容的 API。 其中包括为 XDP(eXpress 数据路径)和套接字绑定提供类似于 Linux 的挂钩的层,从而抽象对网络堆栈和 Windows 网络驱动程序的访问。 计划包括提供与标准 Linux eBPF 处理器的完整源代码级别兼容性。

微软已经为Windows准备了eBPF实现

Windows 的 eBPF 实现之间的主要区别在于使用了替代字节码验证器,该验证器最初由 VMware 员工以及来自加拿大和以色列大学的研究人员提出。 验证器在用户空间中的单独、隔离的进程中运行,并在执行 BPF 程序之前使用,以识别错误并阻止可能的恶意活动。

在验证方面,eBPF for Windows采用了基于Abstract Interpretation的静态分析方法,与Linux的eBPF验证器相比,误报率更低,支持循环分析,并提供良好的可扩展性。 该方法考虑了通过分析现有 eBPF 程序获得的许多典型执行模式。

验证后,字节码被传输到在内核级运行的解释器,或通过 JIT 编译器,然后以内核权限执行生成的机器代码。 为了在内核级别隔离 eBPF 处理程序,使用了 HVCI(HyperVisor 强制代码完整性)机制,该机制使用虚拟化工具来保护内核中的进程,并使用数字签名来确认执行代码的完整性。 HVCI 的限制是它只能验证解释的 eBPF 程序,不能与 JIT 结合使用(您可以选择性能或附加安全性)。

来源: opennet.ru

添加评论