一、概述
阿裡雲雲盾Web應用防火牆(Web Application Firewall, 簡稱 WAF)是一款網絡安全産品,基于雲安全大資料能力,用于防禦SQL注入、XSS跨站腳本、常見Web伺服器插件漏洞、木馬上傳、非授權核心資源通路等OWASP常見攻擊,并過濾海量惡意CC攻擊;在本篇文章中,筆者通過兩個http2.0業務的接入案例分享,給您後續的業務接入提供參考借鑒的地方。
二、接入案例
2.1 案例1-APP登陸報錯
2.1.1 案例背景
該業務屬于一款專注于學習技術與教育大資料的APP,經常會遇到小流量CC攻擊和網絡爬蟲的資料爬取,導緻業務上受到了較為嚴重的影響,是以接入WAF進行防護。
2.1.2 問題現象
業務APP通過域名進行業務通路,将域名DNS修改為WAF的cname後,正常使用者登入時會出現“伺服器錯誤”的提示,将業務域名切換為源站伺服器後問題消失,圖1所示:

圖一
2.1.3 排查過程
通過WAF自身提供的日志服務查詢發現APP發起的第一個版本比對請求産生了400錯誤碼,一般400錯誤碼主要産生的原因有兩個:http請求頭過大或者請求資料不全;通過構造相關環境,針對APP用戶端的請求資料進行抓包,從抓包中發現用戶端完成證書和秘鑰協商後主動關閉了連接配接,由于用戶端主動關閉連接配接導緻産生400錯誤碼;
同時在正常通路時抓包分析發現用戶端與伺服器之間協商的互動協定為http2.0,于是将WAF的http2.0協定支援開啟後觀察,APP也能夠正常通過WAF通路,将相關情況回報給用戶端開發後确認,由于APP底層使用了某開源架構, 該架構預設情況下啟用http2.0進行網絡資料互動,在下一版本會進行更新規避該問題。
2.1.4 案例總結
在業務接入WAF的過程中,我們需要充分了解業務使用的協定情況,配置好WAF後可以先進行本地驗證測試,測試通過後再進行業務切換;在業務出現異常時,可通過WAF自身提供的日志服務進行日志排查,快速定位問題原因和現象。
2.2 案例2-部分浏覽器通路網站異常
2.2.1 案例背景
該業務網站是一款用于管道管理的背景系統,由于近期需要進行等保測評,從網站安全和合規角度出發,将網站接入WAF進行防護。
2.2.2 問題現象
網站接入WAF通路後,發現部分使用者使用chrome和firefox浏覽器通路時無法打開網站,但是IE的使用者通路沒有異常。
2.2.3 排查過程
首先通過本地chrome浏覽器進行調試通路,發現浏覽器https的請求出現[ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY]的錯誤提示, 如圖2所示:
圖二
同時,針對錯誤提示環境下的用戶端抓包分析,在server hello的回應封包中加密套件協商為TLS_RSA_WITH_3DES_EDE_CBC_SHA(0x000a),同時采用了http2的互動協定,如圖3所示:
由于http2在協定啟用的情況下隻能使用TLS1.2+,而TLS1.3還處于起草階段,在本案例中協商為TLS1.2,而TLS_RSA_WITH_3DES_EDE_CBC_SHA恰好落在TLS1.2的黑名單清單中,是以導緻了浏覽器通路互動失敗,如圖4所示:
圖四
那同樣是浏覽器通路,為什麼會有部分浏覽器能夠正常打開網站呢?筆者又通過不同浏覽器的抓包,發現每個浏覽器發起client hello請求時的可協商加密套件清單是不一樣的,加密套件的協商過程是用戶端與服務端可支援加密套件清單的取交集過程,用戶端與服務端取交集後按照伺服器端配置的加密套件清單傳回第一個(tengine開啟了ssl_prefer_server_ciphers選項),而在本次問題複現場景中,服務端傳回的加密套件為[TLS_RSA_WITH_3DES_EDE_CBC_SHA]導緻協商失敗。
2.2.4 案例總結
在本案例中從業務角度出發服務端主動開啟了http2.0的支援,但是由于服務端的相關配置問題,導緻了本次問題的發生;是以在出現業務接入産品後出現異常,需要進行快速復原恢複業務,同時在問題複現的基礎上進行細節排查,找出問題本質原因進行解決。
三、結束語
HTTP 2.0作為HTTP協定的的第二個主要版本,較之1.1相比能夠最小化網絡延遲,提升網絡速度,優化使用者的網絡使用體驗,将會越來越多的使用于主流業務互動;雲WAF作為安全防護類的産品,在目前主要采用反向代理的模式下,由于流量都需要經過WAF産品進行轉發,或多或少都會遇到業務相容性問題,是以業務方在接入過程中先了解業務架構和應用協定情況,盡量先進行本地灰階測試,驗證通過後再做大規模遷移,保證業務接入順利;
在遇到緊急問題時,您可以及時聯系WAF産品技術支援進行協助:
https://help.aliyun.com/knowledge_detail/42193.html?spm=a2c4g.11186631.2.10.76f64a58lWsQXD。
參考連結:
http://http2.github.io/http2-spec/#BadCipherSuites http://tengine.taobao.org/documentation.html