基於Golang打造一款開源的WAF網關

本文首發於做者的微信公衆號:網絡安全生命週期git

原文連接: 打造一款開源的WAF網關 github

【背景】算法

 

在互聯網行業,Google將安全作到基礎設施裏面,素來是各大公司學習的榜樣,在Web方面,經過GFE (Google Front-End) 統一對外發布,業務只須要在GFE登記,GFE就會調取正確的證書,保障用戶到GFE的TLS鏈接安全。shell

 

Microsoft在Web方面,有一款叫作Azure Application Gateway的產品,提供了統一的Web路由、負載均衡,以及WAF(Web應用防火牆)功能。數據庫

遺憾的是,這幾款產品均不能用於私有化部署,Google Front-End 和 Azure Application Gateway只服務於他們自身業務以及他們本身的雲客戶。想要使用他們的產品,得使用他們的雲服務,否則就只能望洋興嘆了。瀏覽器

【對標與產品方案設計】安全

鑑於此,筆者但願借鑑GFE和Azure應用網關,打造一款這樣的應用安全基礎設施級產品,用於本身我的網站的防護,這款產品須要具有:服務器

1.統一的網絡入口,能夠有多個節點,配合負載均衡進行調度,即應用網關(Application Gateway);微信

 

2.WAF (Web應用防火牆) 功能,可攔截常見的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應用防火牆)功能及組合策略配置,自然支持HTTPS(符合PCI-DSS認證要求),無需Agent,私鑰加密存儲在數據庫,提供負載均衡和統一的Web化管理入口。

還在繼續完善過程當中,歡迎star、fork、pull request、提交issue,或下載release體驗,共同提高應用安全防護能力。

【備註】

該產品並不能解決全部的安全問題,不能替代抗DDoS攻擊產品,也不能替代HIDS產品,更不能代替平常的安全運營工做。但當你打算從零開始構創建體的安全防護體系(特別是應用安全防護體系)的時候,可以在關鍵的路徑上,切斷典型的入侵嘗試,擋住大部分探測payload,大幅提升入侵難度,同時從一開始就可以利用此做爲網關基礎設施推廣使用HTTPS,保護外網數據傳輸安全。

 


歡迎關注微信公衆號: 網絡安全生命週期 ,共同探討網絡安全體系建設~

 
相關文章
相關標籤/搜索