Google 漏洞獎勵計畫 (VRP)
Envoy 參與了Google 的漏洞獎勵計畫 (VRP)。此計畫開放給所有安全研究人員,並將根據以下規則,針對發現和報告的漏洞提供獎勵。
規則
VRP 的目標是提供一個正式流程,以表彰外部安全研究人員對 Envoy 安全性的貢獻。漏洞應符合以下條件才能符合該計畫的資格
漏洞必須報告給 以下兩者:envoy-security@googlegroups.com 和透過 https://bughunters.google.com/report 提交。在分流和潛在的安全版本發布期間,漏洞必須保持保密。提交報告時,請遵循揭露指南。揭露 SLO 已記錄在此處。一般而言,安全揭露受Linux 基金會的隱私權政策約束,但另加規定,VRP 報告(包括報告者的電子郵件地址和姓名)可以自由地與 Google 共享,用於 VRP 目的。
漏洞不得事先在公共論壇中公開,例如 GitHub 問題追蹤器、CVE 資料庫(先前與 Envoy 相關聯時)等。先前未與 Envoy 漏洞相關聯的現有 CVE 是可接受的。
漏洞不得同時提交給 Google 或 Lyft 運行的平行獎勵計畫。
獎勵由 Envoy OSS 安全團隊和 Google 自行決定。獎勵將以上述條件為依據。如果多個獨立研究人員同時報告同一個漏洞,或者該漏洞已由 OSS Envoy 安全團隊在保密狀態下追蹤,我們將力求在報告者之間公平分配獎勵。
獎勵應在相應的 Envoy 安全版本發布後,向 Google VRP 申請。
威脅模型
基本威脅模型與 Envoy 的OSS 安全態勢一致。我們添加了一些臨時限制,以在此計畫的初始階段提供受限的攻擊面。我們排除來自以下方面的任何威脅
不受信任的控制平面。
執行階段服務,例如存取記錄、外部授權等。
不受信任的上游。
DoS 攻擊,除非下文另有規定。
除了 HTTP 連線管理員網路篩選器和 HTTP 路由器篩選器之外的任何篩選器。
管理控制台;這在執行環境中已停用。
我們還明確排除針對 Envoy 程序的任何本地攻擊(例如,透過本地程序、Shell 等)。所有攻擊都必須透過 10000 端口上的網路資料平面發生。同樣地,核心和 Docker 漏洞也超出威脅模型的範圍。
未來,隨著我們增加計畫執行環境的複雜性,我們可能會放寬其中一些限制。
執行環境
我們提供 Docker 映像,作為此計畫的參考環境
envoyproxy/envoy-google-vrp 映像基於 Envoy 的定點發行版。只有提交漏洞時的最新定點發行版才符合該計畫的資格。可供 VRP 使用的第一個定點發行版將是 1.15.0 Envoy 版本。
envoyproxy/envoy-google-vrp-dev 映像基於 Envoy 的主要建置版本。只有提交漏洞時最近 5 天內的建置版本才符合該計畫的資格。它們在那時不得受任何公開揭露的漏洞影響。
透過 docker run
啟動這些映像時,可以使用兩個 Envoy 程序
邊緣 Envoy 正在偵聽 10000 端口 (HTTPS)。它有一個靜態組態,該組態根據 Envoy 的邊緣強化原則進行設定。它具有接收器、直接回應和請求轉發路由規則(依序)
/content/*
:路由到來源 Envoy 伺服器。/*
:傳回 403(拒絕)。
來源 Envoy 是邊緣 Envoy 的上游。它有一個靜態組態,其中僅包含直接回應,有效地充當 HTTP 來源伺服器。有兩條路由規則(依序)
/blockedz
:傳回 200hidden treasure
。除非存在符合條件的漏洞,否則絕不可能讓 Envoy 邊緣伺服器的 10000 端口上的流量收到此回應。/*
:傳回 200normal
。
執行 Docker 映像時,應提供以下命令列選項
-m 3g
,以確保記憶體限制為 3GB。執行環境至少應提供這麼多的記憶體。每個 Envoy 程序都配置了超載管理器,以限制在 1GB。-e ENVOY_EDGE_EXTRA_ARGS="<...>"
為邊緣 Envoy 提供額外的 CLI 引數。這需要設定,但可以為空。-e ENVOY_ORIGIN_EXTRA_ARGS="<...>"
為來源 Envoy 提供額外的 CLI 引數。這需要設定,但可以為空。
目標
漏洞將由 10000 端口上的請求證明,這些請求會觸發屬於以下類別之一的故障模式
死亡查詢:導致 Envoy 程序立即發生區段錯誤或中止的請求。
OOM:導致邊緣 Envoy 程序發生 OOM 的請求。總共不應有超過 100 個連線和串流參與導致此情況發生(即排除暴力連線/串流 DoS)。
路由規則繞過:能夠存取
hidden treasure
的請求。TLS 憑證洩漏:能夠取得邊緣 Envoy 的
serverkey.pem
的請求。遠端程式碼漏洞:透過網路資料平面取得的任何 root Shell。
由 OSS Envoy 安全團隊自行決定,充分有趣的漏洞,這些漏洞不屬於上述類別,但很可能屬於高或嚴重漏洞類別。
使用 Docker 映像
執行環境的基本調用將在本地 10000 端口上啟動邊緣 Envoy,如下所示
docker run -m 3g -p 10000:10000 --name envoy-google-vrp \
-e ENVOY_EDGE_EXTRA_ARGS="" \
-e ENVOY_ORIGIN_EXTRA_ARGS="" \
envoyproxy/envoy-google-vrp-dev:latest
除錯時,其他引數可能很有用,例如,為了取得追蹤記錄,請使用 wireshark
和 gdb
docker run -m 3g -p 10000:10000 --name envoy-google-vrp \
-e ENVOY_EDGE_EXTRA_ARGS="-l trace" \
-e ENVOY_ORIGIN_EXTRA_ARGS="-l trace" \
--cap-add SYS_PTRACE --cap-add NET_RAW --cap-add NET_ADMIN \
envoyproxy/envoy-google-vrp-dev:latest
您可以使用以下命令在 Docker 容器中取得 Shell
docker exec -it envoy-google-vrp /bin/bash
Docker 映像包含 gdb
、strace
、tshark
(歡迎透過 PR 貢獻其他建議,更新Docker 建置檔案)。
重新建置 Docker 映像
能夠為了研究目的重新產生您自己的 Docker 基本映像會很有幫助。若要在不依賴 CI 的情況下執行此操作,請遵循 ci/docker_rebuild_google-vrp.sh 頂部的說明。此流程的範例如下所示
bazel build //source/exe:envoy-static
./ci/docker_rebuild_google-vrp.sh bazel-bin/source/exe/envoy-static
docker run -m 3g -p 10000:10000 --name envoy-google-vrp \
-e ENVOY_EDGE_EXTRA_ARGS="" \
-e ENVOY_ORIGIN_EXTRA_ARGS="" \
envoy-google-vrp:local