雲原生網關如何實現安全防護能力

雲原生網關:將安全、流量和微服務三合一

作爲面向南北向的公網網關,使用 Waf 防護異常流量是很常規的需求,而且隨着互聯網環境變得越來越複雜,用戶對防護的訴求是持續增強的,常規做法是將流量先接入 Waf 安全網關,過濾後再將流量轉發給流量網關,最後到達微服務網關,一個典型的多層網關架構如下圖所示:

在這個架構中,用 WAF 網關實現安全能力,Ingress 網關實現集羣入口網關能力(非 K8s 場景或會部署一層 Nginx),SCG(Spring Cloud Gateway) 實現微服務網關能力。這樣的架構下,需要對每一層網關都進行容量評估,每一層網關都是潛在的瓶頸點,都可能需要進行擴容。這樣造成的資源成本和運維人力成本都是巨大的。並且每多一層網關,就多一層可用性風險。一旦出現可用性問題,多層網關會導致問題定位複雜度顯著上升,對應的平均故障恢復時間(MTTR)將大幅增加。

雲原生網關提出了將安全、流量、微服務網關三合一的概念,架構如下圖所示:

採用雲原生網關三合一的架構,可以顯著降低成本,並提高系統整體可用性。同時這也符合 DevSecOps 的微服務演進趨勢,微服務開發者可以更多地從業務接口視角關注安全性,而不是採用所有路由一刀切的 WAF 防護模式。

雲原生網關技術架構演進的過程如下圖所示:

技術架構演進的背後是組織架構演進,這也是微服務 DevOps 一直在強調的,要圍繞開發者爲核心,從而提升微服務開發效率。向 DevSecOps 演進並沒有捷徑,依然需要開發角色和運維角色之間的雙向奔赴,打破傳統開發與運維之間的壁壘,形成從開發、部署、安全運營這樣一個全功能化的敏捷團隊。

雲原生網關安全防護實踐

雲原生網關以 WAF 插件形式提供安全能力,實現了基於 ModSecurity 的規則防護引擎,可以根據用戶配置的規則屏蔽可疑請求,並支持 OWASP CRS,爲站點提供基礎的防護功能。

插件配置說明

插件使用簡單,並且支持路由級/域名級細粒度防護,配置字段包括:

名稱 數據類型 填寫要求 默認值 描述
useCRS bool 選填 false 是否開啓 OWASP CRS,詳情可參考 coreruleset[1]
secRules array of string 選填 - 用戶自定義的 waf 防護規則,語法規則可參考 ModSecurity 中文手冊[2]

配置示例如下:

1. 啓用默認配置,進行攔截

useCRS: true

2. 啓用默認配置,僅觀測,不攔截

useCRS: true
secRules:
  - "SecRuleEngine DetectionOnly"

3. 自定義防護規則

useCRS: true
secRules: 
  - "SecRule REQUEST_URI \"@streq /admin\" \"id:101,phase:1,t:lowercase,deny\""
  - "SecRule REQUEST_BODY \"@rx maliciouspayload\" \"id:102,phase:2,t:lowercase,deny\""

根據該配置,以下請求將被禁止訪問:

curl http://example.com/admin
curl http://example.com -d "maliciouspayload"

4. 對特定路由或域名開啓

useCRS: true
secRules: 
  - "SecRule REQUEST_URI \"@streq /admin\" \"id:101,phase:1,t:lowercase,deny\""
  - "SecRule REQUEST_BODY \"@rx maliciouspayload\" \"id:102,phase:2,t:lowercase,deny\""
_rules_:
- _match_route_:
    - "route-1"
  secRules:
    - "SecAction \"id:102,phase:1,deny\""
- _match_domain_:
    - "*.example.com"
    - test.com
  secRules:
    - "SecAction \"id:102,phase:1,pass\""

此例 _match_route_ 中指定的 route-1 即在創建網關路由時填寫的路由名稱,當匹配到這兩個路由時,將使用此段配置;此例 _match_domain_ 中指定的 *.http://example.com 和 http://test.com 用於匹配請求的域名,當發現域名匹配時,將使用此段配置;配置的匹配生效順序,將按照 _rules_ 下規則的排列順序,匹配第一個規則後生效對應配置,後續規則將被忽略。

開啓插件

選擇一個網關實例,點擊插件市場,搜索 waf,點擊進入插件配置界面:

在控制檯填寫 WAF 防護規則,啓動 WAF 插件:

可以在插件日誌一欄查看插件產生的日誌(下圖爲 shell 注入攻擊時 WAF 插件產生的日誌):

攻防示例

向網關發送簡單的 web 攻擊請求,示例如下:

1. shell 注入攻防示例

2. sql 注入攻防示例

3. 遠程文件包含(RFI)攻防示例

4. xss 攻防示例

5. php 注入攻防示例

整體防護能力評估

GoTestWAF[3]是一款 API 和 OWASP 攻擊模擬工具,支持包括 REST、GraphQL、gRPC、WebSockets、SOAP、XMLRPC 等多種 API 協議,旨在評估 Web 應用安全解決方案,如 API 安全代理、Web 應用防火牆(WAF)、IPS、API 網關等。該工具使用放置在 HTTP 請求不同部分的編碼有效負載生成惡意請求:其正文、標頭、URL 參數等,涵蓋了常見的各種攻擊類型,多種攻擊測試結果如下圖所示,測試結果表明 WAF 插件能夠有效檢測各種攻擊類型的非法請求。

GoTestWAF 提供了基於 ModSecurity 的四個 benchmark,benchmark 中 paranoia 表示防護等級,數值越大,防護等級越高,overall score 得分越高。WAF 插件的 overall score 爲 74.1,超過了防護等級最高的 benchmark,表明插件具有較好的防護能力。

阿里雲 Web 應用防火牆

雲原生網關提供的免費 WAF 插件僅支持基礎的防護規則,如您有更高的防護需求,可選購阿里雲 Web 應用防火牆[4],在擁有更高的防護能力、更高的性能之外,還能爲您的應用購買一份保險。

在 WAF 控制檯[5]可以管理防護規則:

在接入管理一欄可以配置網關實例的接入:

也可以在網關實例處配置接入 WAF:

相關鏈接:

[1] coreruleset

https://github.com/coreruleset/coreruleset/tree/v3.3.2?spm=5176.mse-ops.0.0.ef3f142fSPw8XV&file=v3.3.2

[2] ModSecurity 中文手冊

https://help.aliyun.com/document_detail/121053.html

[3] GoTestWAF

https://github.com/wallarm/gotestwaf

[4] 阿里雲 Web 應用防火牆

https://help.aliyun.com/document_detail/446889.html

[5] WAF 控制檯

https://account.aliyun.com/login/login.htm?oauth_callback=https%3A%2F%2Fyundun.console.aliyun.com%2F%3Fp%3Dwafnew

點擊立即免費試用雲產品 開啓雲上實踐之旅!

作者:劉曉瑞(鈺誠)

原文鏈接

本文爲阿里雲原創內容,未經允許不得轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章