網路流量檢查一直涉及可見性和效能之間的權衡。傳統方法如中間人(MITM)代理需要證書管理並引入延遲。Q.Tap 是一個基於 eBPF 的開源工具,旨在解決這些挑戰,提供加密流量的可見性而不帶來效能損失。
Q.Tap 的工作原理
Q.Tap 利用 eBPF(擴充套件的伯克利資料包過濾器)附加到 Linux 核心中的 TLS/SSL 函式,在加密前和解密後攔截資料。這種方法允許開發者和安全專業人員檢視未加密的流量,無需修改應用程式、安裝代理或管理證書。該工具以帶外方式執行,開銷最小,避免了 MITM 解決方案常見的延遲問題。
對於基於 OpenSSL 的應用程式,Q.Tap 掃描二進位制檔案中的 TLS 符號,並將 eBPF 探針附加到 SSL_read 和 SSL_write 等函式上。這適用於動態連結庫和靜態編譯的二進位制檔案,使其覆蓋範圍比許多替代解決方案更廣。
語言支援和技術挑戰
雖然 Q.Tap 的開源版本主要關注 OpenSSL,但社群討論顯示對其他語言和執行時的支援各不相同。Go 語言的支援已存在但尚未開源,由於 Go 的靜態連結方法,需要特殊處理。
「我們有 Go 支援,但尚未開源。Go 稍微複雜一些,但我們在深入研究 ELF 格式後成功實現了...因為 Go 是靜態連結的,我們需要提取我們將要掛鉤的函式的多個不同偏移量。」
開發者透過構建專注於快速符號識別而非綜合除錯資訊的自定義二進位制工具解決了最佳化挑戰。他們還實現了快取,以避免重新掃描經常使用的二進位制檔案和共享庫。
Q.Tap 要求
- Linux 核心 5.10+ 並啟用 BPF 型別格式 (BTF)
- 主機上啟用 eBPF
- 提升許可權 (主機上的 sudo 或特定的 Docker 容器設定)
Q.Tap 使用場景
- 安全審計
- 除錯網路問題
- API 開發
- 排查第三方整合問題
- 學習和探索
- 遺留系統調查
- 驗證測試
開發先決條件
- Linux (核心 5.8+)
- Go 1.24+
- make
- clang14
- clang-tidy (可選)
相比傳統方法的優勢
與 MITM 代理或需要在應用程式啟動前設定環境變數(如 SSLKEYLOGFILE)的工具不同,Q.Tap 可以附加到正在執行的程序。這使其在不重啟服務的情況下排查生產問題特別有價值。能夠在不增加延遲的情況下檢視加密流量,解決了開發者除錯網路通訊的重大痛點。
該工具還提供了豐富的上下文資訊,不僅僅是解密內容,還包括源/目標詳情、頻寬使用、SNI 資訊、容器元資料,以及在適用情況下的 Kubernetes pod 和名稱空間資訊。
安全考慮
與任何解密流量的工具一樣,Q.Tap 引發了安全問題。開發者強調 Q.Tap 完全在您的節點上執行,讓您控制它捕獲的內容及其去向。eBPF 驗證器提供了防止任意記憶體訪問的安全保證。
對於有嚴格合規要求的組織,Q.Tap 提供配置選項,包括完全停用 TLS 檢查,同時仍提供連線元資料。Qpoint.io 的付費產品提供額外的安全功能和用於儀表板和警報的控制平面。
限制和未來方向
Q.Tap 目前有幾個限制。它需要 Linux 核心 5.10+ 和 eBPF 支援,以及提升的許可權。一些評論者指出,uprobes 可能透過上下文切換增加延遲,儘管開發者聲稱與 MITM 代理相比,這種延遲在統計上並不顯著。
該工具目前也不能平等地支援所有執行時和語言。雖然商業版本支援 JVM、Go 和 NodeJS,並且正在開發 Rust 支援,但開源版本的覆蓋範圍更有限。此外,Q.Tap 目前不適用於非 Linux 平臺,儘管開發者表示有興趣探索 Microsoft 的 eBPF 實現以支援 Windows。
對於有興趣嘗試 Q.Tap 的人,該專案提供了一個快速演示模式,可以透過簡單的 curl 命令執行,使其在完全安裝前輕鬆檢視工具的實際效果。
參考:Q.Tap