本文首發於作者的公眾號:網路安全生命週期
原文連結: 打造一款開源的WAF網關
【背景】
在互連網行業,Google將安全做到基礎設施裡面,素來是各大公司學習的榜樣,在Web方面,通過GFE (Google Front-End) 統一對外發布,業務只需要在GFE登記,GFE就會調取正確的認證,保障使用者到GFE的TLS串連安全。
Microsoft在Web方面,有一款叫做Azure Application Gateway的產品,提供了統一的Web路由、負載平衡,以及WAF(Web Application Firewall)功能。
遺憾的是,這幾款產品均不能用於私人化部署,Google Front-End 和 Azure Application Gateway只服務於他們自身業務以及他們自己的雲客戶。想要使用他們的產品,得使用他們的雲端服務,不然就只能望洋興歎了。
【對標與產品方案設計】
鑒於此,筆者希望借鑒GFE和Azure應用網關,打造一款這樣的應用安全基礎設施級產品,用於自己個人網站的防禦,這款產品需要具備:
1.統一的網路入口,可以有多個節點,配合負載平衡進行調度,即應用網關(Application Gateway);
2.WAF (Web Application Firewall) 功能,可攔截常見的Web入侵行為(如SQL注入/命令注入/XSS/Webshell上傳或串連)、資料泄露事件等;
中紅色的叉叉部分表示攔截惡意攻擊行為。
3.可應對CC攻擊及簡單的刷單情境,達到設定閾值時能夠攔截或展示驗證碼。
【特色】
當然,上面這些是基本的功能。筆者還希望這是一款有特點、差異化的產品:
1.不要安裝Agent
Agent維護起來比較麻煩,用瀏覽器配置可以更簡單,比如配置應用:
2.支援HTTPS
還要能夠把認證管理起來,把私密金鑰保護起來,不再將認證檔案、私密金鑰檔案直接明文的存放在伺服器某個目錄下(防止駭客偷走私密金鑰);只讓網關管理員申請和配置認證,業務人員不用接觸認證檔案就可以啟用HTTPS。
3.聯動
很多WAF的一條策略只能檢查一個地方(如GET或POST參數值),如果請求需要結合響應共同來判定 (或多個組合條件),就做不到了,這一點一定要突破,做到多個檢查點可組合,特別是請求(Request)和響應(Response)能夠關聯(組合)起來。
4.非法網域名稱攔截
曾經有人用fuck_your_domain.com 這樣的網域名稱指向your_domain.com 網站,如果伺服器配置不當,有可能會正常響應請求,給公司帶來公關風險。所以,當非法網域名稱指向過來的時候,應該拒絕響應。
5.認證品質
不是所有的HTTPS都是安全的,錯誤配置、演算法的選用均有可能踩坑,如SSL 1.0, SSL 2.0, SSL 3.0以及TLS 1.0 均已出現漏洞。典型的,如果您的業務涉及到資金支付,PCI-DSS認證會對認證品質有特別的要求,如必須使用TLS 1.1或以上的協議版本、必須使用前向安全演算法(Forward Security)用於保障安全的金鑰交換等。因此,網關預設就需要啟用安全保障。
【開源】
是的,筆者較早前利用周末陪孩子上課的時間,構建了這樣一個只有準系統的版本(Janusec Application Gateway),並用在個人網站上。現在跟大家分享一下:
https://github.com/Janusec/janusec
這是一款基於Golang打造的應用安全網關,具備WAF(Web Application Firewall)功能及組合策略配置,天然支援HTTPS(符合PCI-DSS認證要求),無需Agent,私密金鑰加密儲存在資料庫,提供負載平衡和統一的Web化管理入口。
還在繼續完善過程中,歡迎star、fork、pull request、提交issue,或下載release體驗,共同提升應用安全防禦能力。
【備忘】
該產品並不能解決所有的安全問題,不能替代抗DDoS攻擊產品,也不能替代HIDS產品,更不能代替日常的安全運營工作。但當你打算從零開始構建立體的安全防禦體系(特別是應用安全防禦體系)的時候,能夠在關鍵的路徑上,切斷典型的入侵嘗試,擋住大部分探測payload,大幅提高入侵難度,同時從一開始就能夠利用此作為網關基礎設施推廣使用HTTPS,保護外網資料轉送安全。
歡迎關注公眾號: 網路安全生命週期 ,共同探討網路安全體系建設~