BruceFan's Blog

Stay hungry, stay foolish

0%

编写eBPF程序

本文主要介绍eBPF LSM在文件系统挂载方面的基本用法,hook点为sb_mount,对文件系统挂载操作进行监控。这里尝试对tmpfs类型的文件系统挂载操作进行阻断:

阅读全文 »

编写eBPF程序

本文主要介绍eBPF LSM在网络连接方面的基本用法,hook点为socket_connect,在主机尝试连接外部IP时进行监控。如果IP在黑名单中,则阻断主机连接,可以用来对抗反弹shell。

阅读全文 »

LSM介绍

LSM从Linux 2.6开始成为官方内核的一个安全框架,基于此的安全实现包括SELinux和AppArmor等。在Linux 5.7引入BPF LSM后,系统开发人员已经能够自由地实现函数粒度的安全检查能力。LSM(Linux Security Modules)是Linux内核中用于支持各种计算机安全模型的框架。LSM在Linux内核安全相关的关键路径上预置了一批hook点,从而实现了内核和安全模块的解耦,使不同的安全模块可以自由地在内核中加载/卸载,无需修改原有的内核代码就可以加入安全检查功能。
现在LSM支持的hook点包括但不限于:

  • 对文件的打开、创建、删除和移动等
  • 文件系统的挂载
  • 对task和process的操作
  • 对socket的操作(创建、绑定socket,发送和接收消息等)
阅读全文 »

XDP(eXpress Data Path)可以在网络接口卡(NIC)上处理数据包,使得XDP可以进行超低延迟和高吞吐量的数据包处理,非常适合用于负载均衡、DDoS保护和流量过滤等任务。

使用XDP的项目

  • Cilium 是一个为云原生环境(如Kubernetes)设计的开源网络工具。它使用XDP高效处理数据包过滤和负载均衡,提升了高流量网络中的性能。
  • Katran 由Facebook开发,是一个负载均衡器,它使用XDP处理数百万的连接,且CPU使用率低。它高效地将流量分发到服务器,在Facebook内部被用于大规模的网络环境。
  • Cloudflare 使用XDP来防御DDoS攻击。通过在NIC级别过滤恶意流量,Cloudflare可以在攻击数据包进入内核之前将其丢弃,最大限度地减少对网络的影响。
阅读全文 »

捕获网络数据包对于监控、调试和保护网络通信至关重要。传统工具如tcpdump在用户空间运行,可能会带来显著的开销。通过利用eBPF和XDP,我们可以在内核中直接捕获TCP头信息,最小化开销并提高性能。

阅读全文 »

eBPF使用XDP(eXpress Data Path)解析数据包是eBPF技术中一个非常重要的应用场景。XDP是Linux内核中一个高性能数据包处理机制,它允许开发者在网络报文进入内核协议栈之前,对其进行处理和操作。通过在数据包的接收路径上运行eBPF程序,XDP提供极低的延迟和高效的网络流量处理能力。

什么是 XDP?

XDP全称是eXpress Data Path,它是Linux内核中一个高性能、高吞吐量的数据包处理框架。XDP的工作原理是将eBPF程序附加到网卡驱动的接收路径(RX Path)的最底层,在数据包进入内核协议栈之前对其进行处理。

阅读全文 »

Linux官方文档Linux Tracing Technologies
Ftrace可以理解为Linux上的Hook机制,基于这个机制可以实现几乎任何一个Linux内核的Hook。

Tracefs

debugfs用于用户态和内核态大量数据交换的情景,小量数据用procfs

阅读全文 »

一、Rust编译工具简介

在Rust中如果刚开始学习语法,写一些简单的单一文件,那么可以使用rustc来进行编译

1
$ rustc main.rs

rustc与gcc和clang类似,编译成功后,rustc会输出一个二进制的可执行文件。不过随着项目的增长,我们就需要功能更强大的编译工具。
Cargo是Rust的构建系统和包管理器,大多数Rustacean们使用Cargo来管理Rust项目,它可以处理很多任务,如构建代码、下载依赖库并编译这些库。cargo的基本用法非常简单:

1
2
$ cargo new hello_world  // 新建名为hello_world的项目
$ cd hello_world
阅读全文 »

Occlum入门

Occlum是一款蚂蚁集团开源的LibOS,目的是为了降低SGX应用开发门槛。传统的SGX开发存在一定的开发困境:
1.需要将应用程序分为两部分,可信部分和不可信部分。
2.可以使用的编程语言受限制。
3.功能受限制,Enclave无法访问不可信OS,是不可信环境的一个很小的功能子集。
Occlum解决了上述问题,实现了类似docker的命令,使得正常开发的程序可以在SGX可信环境中运行。

阅读全文 »