原文作者:Michael Vernik,?Nina Forsyth
原文鏈接:漏洞處置:HTTP/2 快速重置攻擊對 F5 NGINX 的影響
轉(zhuǎn)載來源:NGINX 開源社區(qū)
NGINX 唯一中文官方社區(qū) ,盡在?nginx.org.cn
本文主要介紹了最近發(fā)現(xiàn)的一個與 HTTP/2 協(xié)議有關(guān)的漏洞——HTTP/2 快速重置(HTTP/2 Rapid Reset)攻擊。在特定條件下,攻擊者可利用此漏洞在 NGINX 開源版、NGINX Plus 以及在服務(wù)器端實(shí)施 HTTP/2 規(guī)范的相關(guān)產(chǎn)品上執(zhí)行拒絕服務(wù)(DoS)攻擊。為了保護(hù)您的系統(tǒng)免遭此類攻擊,我們建議您立即更新 NGINX 配置。
HTTP/2 數(shù)據(jù)流重置問題
與服務(wù)器建立連接后,HTTP/2 協(xié)議允許客戶端啟動并發(fā)流進(jìn)行數(shù)據(jù)交換。與之前的協(xié)議迭代不同,如果最終用戶決定離開頁面或因任何其他原因停止數(shù)據(jù)交換,HTTP/2 提供了取消數(shù)據(jù)流的方法——它會向服務(wù)器發(fā)送一個 RST_STREAM 幀,以避免服務(wù)器執(zhí)行不必要的工作。
利用該漏洞進(jìn)行攻擊的方法是通過已建立的連接啟動并快速取消大量 HTTP/2 數(shù)據(jù)流,從而繞過服務(wù)器對并發(fā)流的最大值限制。由于傳入數(shù)據(jù)流的重置速度快于后續(xù)數(shù)據(jù)流的抵達(dá)速度,因此客戶端能夠繞過服務(wù)器的配置閾值,達(dá)到使服務(wù)器超載的目的。
對 NGINX 的影響
出于對性能和資源消耗的考慮,NGINX 將默認(rèn)的并發(fā)流地數(shù)量限制為128。此外,為了兼顧網(wǎng)絡(luò)和服務(wù)器性能,NGINX 允許客戶端使用 HTTP keepalive,在默認(rèn)情況下為最多 1,000 個請求保持 HTTP 連接。
通過默認(rèn)的 keepalive 限制,NGINX 可以防止此類攻擊。如果攻擊者企圖創(chuàng)建更多連接來繞過這一限制,標(biāo)準(zhǔn)四層監(jiān)控和警報工具就會發(fā)出告警。
但如果 NGINX 配置的 keepalive 數(shù)量明顯高于默認(rèn)和推薦設(shè)置,攻擊可能會耗盡系統(tǒng)資源。當(dāng)發(fā)生數(shù)據(jù)流重置的情況時,HTTP/2 協(xié)議要求不向該數(shù)據(jù)流上的客戶端返回任何后續(xù)數(shù)據(jù)。通常情況下,重置會以任務(wù)的形式優(yōu)雅地處理取消操作,只產(chǎn)生可忽略不計(jì)的服務(wù)器開銷。
然而,如果能繞過 NGINX 的數(shù)據(jù)流閾值,客戶端就能在這種開銷上做文章,通過快速啟動數(shù)千個數(shù)據(jù)流放大這一開銷。這會導(dǎo)致服務(wù)器 CPU 占用率激增,從而拒絕為合法客戶提供服務(wù)。
在異常高的 keepalive 限值下通過建立并快速取消 HTTP/2 數(shù)據(jù)流發(fā)起拒絕服務(wù)攻擊
針對該攻擊的緩解措施
作為一款功能齊全的服務(wù)器和代理服務(wù)器,NGINX 為管理員提供了強(qiáng)大的工具來緩解拒絕服務(wù)攻擊。要使用這些功能,必須對 NGINX 配置文件進(jìn)行如下更新,以盡量縮小服務(wù)器的攻擊面:
-
keepalive_requests 應(yīng)保持 1,000 次請求的默認(rèn)設(shè)置
-
http2_max_concurrent_streams 應(yīng)保持 128 個數(shù)據(jù)流的默認(rèn)設(shè)置
我們還建議添加這些安全措施作為最佳實(shí)踐:
-
limit_conn 限制單個客戶端的連接數(shù)添加該指令時,應(yīng)合理設(shè)置在應(yīng)用性能和安全性之間取得平衡
-
limit_req 限制在給定時間內(nèi)處理的來自單個客戶端的請求數(shù)。添加該指令時,應(yīng)合理設(shè)置在應(yīng)用性能和安全性之間取得平衡
我們對該攻擊的響應(yīng)
我們試驗(yàn)了多種緩解策略,以充分了解這種攻擊對我們廣大客戶和用戶的影響。雖然研究證實(shí) NGINX 已經(jīng)配備了規(guī)避此類攻擊的所有必要工具,但我們?nèi)韵MM(jìn)一步,確保有需求的用戶能夠?qū)?NGINX 進(jìn)行超出推薦規(guī)格的配置。
通過研究,我們發(fā)現(xiàn)了一種方法,能夠提高服務(wù)器在各種理論上可通過 HTTP/2 協(xié)議發(fā)起的洪水攻擊下的彈性。針對這些情況,我們發(fā)布了一個補(bǔ)丁來提高系統(tǒng)穩(wěn)定性。為了防范此類攻擊,我們建議 NGINX 開源版用戶基于最新的代碼庫重新構(gòu)建二進(jìn)制文件,而 NGINX Plus 客戶請立即更新到最新的軟件包(R29p1 或 R30p1)。
新增補(bǔ)丁的工作原理
為確保及早檢測到 NGINX 上的洪水攻擊,我們對同一個事件循環(huán)中可引入的新數(shù)據(jù)流的數(shù)量施加了限制。該限值被設(shè)置為 http2_max_concurrent_streams 指令所配置的值的兩倍。即使從未達(dá)到最大閾值,例如在發(fā)送請求后立即重置數(shù)據(jù)流(如本攻擊案例),該限值也會生效。
受影響的產(chǎn)品
該漏洞會影響 NGINX HTTP/2 模塊 (ngx_http_v2_module)。
如欲進(jìn)一步了解可能受影響的特定 NGINX 或 F5 產(chǎn)品,請?jiān)L問:https://my.f5.com/manage/s/article/K000137106。
有關(guān) CVE-2023-44487 - HTTP/2 快速重置攻擊的更多信息,請參閱:https://www.cve.org/CVERecord?id=CVE-2023-44487
致謝
感謝 Cloudflare、亞馬遜和 Google 在發(fā)現(xiàn)和協(xié)作確定及緩解這一漏洞方面所做的工作。
NGINX 唯一中文官方社區(qū) ,盡在?nginx.org.cn文章來源:http://www.zghlxwxcb.cn/news/detail-843116.html
更多 NGINX 相關(guān)的技術(shù)干貨、互動問答、系列課程、活動資源:?開源社區(qū)官網(wǎng)?|?微信公眾號文章來源地址http://www.zghlxwxcb.cn/news/detail-843116.html
到了這里,關(guān)于漏洞處置:HTTP/2 快速重置攻擊對 F5 NGINX 的影響的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!