威脅模型
以下我們闡述 Envoy 的威脅模型,這對於 Envoy 的操作者、開發者和安全研究人員來說非常重要。我們在 https://github.com/envoyproxy/envoy/security/policy 詳細說明了我們的安全發佈流程。
機密性、完整性和可用性
我們認為導致資料機密性或完整性受損的漏洞是我們最優先關注的問題。可用性,特別是在與 DoS 和資源耗盡相關的領域,對於 Envoy 的操作者來說也是一個嚴重的安全問題,尤其是那些在邊緣部署中使用 Envoy 的人。
對於符合以下條件的披露,我們將啟動安全發佈流程
所有導致資料機密性或完整性喪失的問題都會觸發安全發佈流程。
可用性問題,例如「死亡查詢 (QoD)」或資源耗盡,需要滿足以下所有條件才能觸發安全發佈流程
受影響的是標記為強化的組件(有關強化的組件列表,請參閱 核心和擴充)。
顯示問題的流量類型(上游或下游)與組件的強化標籤相符。也就是說,標記為「強化以防不可信任的下游」的組件會受到下游請求的影響。
資源耗盡問題需要滿足以下額外條件
未被現有的逾時覆蓋,或者應用短逾時值是不切實際的,並且
記憶體耗盡,包括記憶體不足的情況,其中每個請求的記憶體使用量比設定的標頭或高水位線限制高出 100 倍或更多。也就是說,10 KiB 的客戶端請求導致 Envoy 消耗 1 MiB 的記憶體;
高度不對稱的 CPU 利用率,其中 Envoy 使用的 CPU 比客戶端高出 100 倍或更多。
Envoy 關於 CPU 和記憶體 DoS 的可用性立場仍在發展中,特別是對於暴力攻擊。我們承認,暴力(即放大係數小於 100)攻擊很可能發生在 Envoy 部署中,作為雲基礎架構的一部分或使用殭屍網路。我們將繼續迭代並公開修復眾所周知的資源問題,例如過載管理器和水位線改進。對於似乎對現有 Envoy 部署構成風險的暴力披露,我們將啟動安全流程。
請注意,我們目前不認為 Envoy 的預設設定在可用性方面是安全的。操作者必須明確 設定 水位線、過載管理器、斷路器和 Envoy 中其他與資源相關的功能,以提供健全的可用性故事。對於任何與缺乏安全預設值相關的安全披露,我們都不會採取行動。隨著時間的推移,我們將努力改進預設安全配置,但由於向後相容性和效能問題,這需要遵循重大變更棄用政策。
資料和控制平面
我們將威脅模型劃分為資料平面和控制平面,這反映了 Envoy 從架構角度對這些概念的內部劃分。Envoy 的核心組件被認為可以防禦不可信任的下游和上游對等端。因此,我們在風險評估中最重要的優先事項是不可信任的下游客戶端或不可信任的上游伺服器流量對資料平面造成的威脅。這反映了 Envoy 在邊緣服務容量中的使用,以及在具有不可信任服務的服務網格部署中作為網路組件的 Envoy 的使用。
控制平面管理伺服器通常是可信任的。因此,我們不認為針對 xDS 傳輸協定的線路級利用是問題。但是,通過 xDS 傳遞給 Envoy 的配置可能來自不可信任的來源,並且可能未完全清除。例如,服務操作者可以在 Envoy 上託管多個租戶,其中租戶可以在 RouteConfiguration
中指定標頭匹配的正規表示式。在這種情況下,我們期望 Envoy 能夠抵禦上述從機密性、完整性和可用性的角度來看惡意配置帶來的風險。
對於需要控制平面和資料平面協調的問題,例如導致死亡查詢的配置選項,風險由 Envoy 安全團隊評估。如果配置選項是長期存在的,關閉它會帶來風險(例如關閉過載管理器),而保持開啟狀態會導致風險,安全團隊通常會選擇在禁運下修復該問題。如果某項功能是新的,並且配置變更總是會導致資料平面崩潰,則可能會將其歸類為受信任的控制平面應禁止的內容,並在公開情況下修復。對於更細微的問題,例如長期存在的配置,其中只有一個變體有問題,安全團隊將嘗試評估是否存在對任何使用者構成風險的攻擊,包括大型多租戶操作者,以確定是否應在公開情況下修復。
我們通常假設在請求處理期間用於橫向調用的服務(例如,外部授權、憑證供應商、速率限制服務)是可信任的。如果情況並非如此,擴充將在其文件中明確說明這一點。
核心和擴充
Envoy 核心中的任何內容都可以在不可信任和可信任的部署中使用,除了明確標記為 alpha 的功能;alpha 功能僅在可信任的部署中受支援,並且不符合以下威脅模型下的處理條件。因此,穩定的核心應以此模型為基礎進行強化。與核心程式碼相關的安全問題通常會觸發本文檔中所述的安全發佈流程。
注意
以下列出了 contrib 擴充,它們並未正式涵蓋在威脅模型或 Envoy 安全團隊中。以下所有說明都是盡力而為。
以下擴充旨在強化以防不可信任的下游和上游
擴充安全性:robust_to_untrusted_downstream_and_upstream
envoy.compression.qatzip.compressor (alpha)(僅限 contrib 組建)
envoy.compression.qatzstd.compressor (alpha)(僅限 contrib 組建)
envoy.formatter.cel (alpha)
envoy.formatter.metadata (alpha)
envoy.io_socket.user_space
envoy.path.match.uri_template.uri_template_matcher
envoy.path.rewrite.uri_template.uri_template_rewriter
envoy.string_matcher.lua (alpha)
以下擴充不應暴露於資料平面攻擊向量,因此旨在強化以防不可信任的下游和上游
擴充安全性:data_plane_agnostic
envoy.grpc_credentials.aws_iam (alpha)
envoy.key_value.file_based (alpha)
envoy.stat_sinks.graphite_statsd (alpha)
envoy.stat_sinks.open_telemetry (alpha)
envoy.stat_sinks.wasm (alpha)
envoy.watchdog.profile_action (alpha)
以下擴充功能旨在強化以抵禦不受信任的下游,但假設上游是受信任的
擴充功能安全性:robust_to_untrusted_downstream
envoy.access_loggers.fluentd (alpha)
envoy.filters.http.basic_auth (alpha)
envoy.filters.http.oauth2 (alpha)
envoy.filters.http.original_src (alpha)
envoy.filters.http.sxg (alpha) (僅限 contrib builds)
envoy.filters.udp.dns_filter (alpha)
envoy.tls.key_providers.cryptomb (alpha) (僅限 contrib builds)
envoy.tls.key_providers.qat (alpha) (僅限 contrib builds)
envoy.upstreams.http.udp (alpha)
以下擴充功能僅應在下游和上游都受信任時使用
擴充功能安全性:requires_trusted_downstream_and_upstream
envoy.bootstrap.vcl (alpha) (僅限 contrib builds)
envoy.filters.generic.router (alpha)
envoy.filters.http.aws_lambda (alpha)
envoy.filters.http.checksum (alpha) (僅限 contrib builds)
envoy.filters.http.golang (alpha) (僅限 contrib builds)
envoy.filters.http.language (alpha) (僅限 contrib builds)
envoy.filters.http.tap (alpha)
envoy.filters.network.golang (alpha) (僅限 contrib builds)
envoy.filters.network.mysql_proxy (alpha) (僅限 contrib builds)
envoy.filters.network.rocketmq_proxy (alpha) (僅限 contrib builds)
envoy.filters.network.sip_proxy (alpha) (僅限 contrib builds)
envoy.filters.sip.router (alpha) (僅限 contrib builds)
envoy.filters.thrift.rate_limit (alpha)
envoy.generic_proxy.codecs.dubbo (alpha)
envoy.generic_proxy.codecs.http1 (alpha)
envoy.health_checkers.thrift (alpha)
envoy.matching.input_matchers.hyperscan (alpha) (僅限 contrib builds)
envoy.network.connection_balance.dlb (alpha) (僅限 contrib builds)
envoy.regex_engines.hyperscan (alpha) (僅限 contrib builds)
envoy.router.cluster_specifier_plugin.golang (alpha) (僅限 contrib builds)
envoy.tls.cert_validator.spiffe (alpha)
envoy.transport_sockets.tap (alpha)
以下擴展功能具有未知的安全性狀態
擴展安全性: unknown
envoy.access_loggers.wasm (alpha)
envoy.bootstrap.wasm (alpha)
envoy.filters.http.cdn_loop (alpha)
envoy.filters.http.gcp_authn (alpha)
envoy.filters.http.wasm (alpha)
envoy.filters.network.wasm (alpha)
envoy.upstream.local_address_selector.default_local_address_selector (alpha)
envoy.wasm.runtime.null (alpha)
envoy.wasm.runtime.v8 (alpha)
envoy.wasm.runtime.wamr (alpha)
envoy.wasm.runtime.wasmtime (alpha)
Envoy 目前有兩個支援可載入程式碼的動態篩選器擴展功能:WASM 和 Lua。在這兩種情況下,我們假設動態載入的程式碼是受信任的。我們期望 Lua 的執行階段能夠穩健地處理不受信任的資料平面流量,並假設使用受信任的腳本。WASM 仍在開發中,但最終將具有類似的安全性立場。