eBPF在数据包加密与Kubernetes网络中的应用
1. 数据包加密与解密
1.1 利用eBPF观察明文数据
当应用程序使用加密技术保护其发送或接收的数据时,在数据加密之前或解密之后存在明文状态。由于eBPF可以在机器的几乎任何位置挂载程序,因此我们可以在数据传递且尚未加密,或刚刚解密后的位置挂载eBPF程序,从而观察到明文数据,无需像传统SSL检查工具那样提供证书来解密流量。
1.2 用户空间SSL库追踪
许多应用程序使用用户空间的库(如OpenSSL或BoringSSL)来加密数据。在这种情况下,流量到达套接字(网络流量的用户空间/内核边界)时已经加密。若要追踪未加密形式的数据,可以使用挂载在用户空间代码正确位置的eBPF程序。
常见的追踪加密数据包解密内容的方法是挂载到对用户空间库(如OpenSSL或BoringSSL)的调用。使用OpenSSL的应用程序通过调用 SSL_write() 函数发送要加密的数据,并使用 SSL_read() 函数检索以加密形式通过网络接收的明文数据。通过uprobes将eBPF程序挂载到这些函数,应用程序可以在数据加密之前或解密之后以明文形式观察使用该共享库的任何应用程序的数据,且无需任何密钥,因为应用程序已经提供了这些密钥。
以下是Pixie项目中 openssl-tracer 示例的部分代码,用于将数据发送到用户空间:
static int process_SSL_data(struct pt_regs* c
超级会员免费看
订阅专栏 解锁全文
2579

被折叠的 条评论
为什么被折叠?



