進度條

WAF 網站應用程式防火牆,輕鬆增加網站的安全性,架設網站一定要了解!

如果不知道自己的網站有什麼漏洞,那就在前面造一座牆先擋住吧!

作者: 進度條編輯群 更新日期:

不曉得大家對自己的網站有沒有信心?我相信即使是工作多年的資深工程師也不敢說自己的網站絕對沒有漏洞吧!那就更不用說是以套裝軟體為基礎(例如 WordPress) 或是 Framework 為基礎的網站。


(Laravel, Ruby on rails, Django, Express ... 還有更多就不列舉了)

 

這時候本文將要介紹的程式與概念,WAF = Web Application Firewall 【網站應用程式防火牆】,或許就是你最簡單、CP 值最高的服務。  

 

 

 

首先我們先探討一下網站可能有漏洞的原因。

 

假設別人寫的都對,自己當然是可能會犯錯的,例如初學者不檢查輸入源(input parameters, url querys 等),寫出容易 XSS 攻擊、被 SQL injection 攻擊、被 CSRF Attack 等。當然也有些人初學者會把所有的機密內容放在前端的錯誤。
(這些人常說: 幹嘛那麼麻煩,都傳出去我前端處理就好了啊!)

 

 

接著,就算自己已經排除了這種基本錯誤,也不能保證使用的基底 Framework 不會突然爆出零時漏洞(Zero-day vulnerability, WIKI 解釋)。即使是大如 Google, Apple, Microsoft 等公司,都還是有機會聽到某個新的版本是為了修補漏洞而釋出的。

 

 

說實在,在你自己身兼網站開發者,可能還同時管理前後端,還要設計架構與維運的情況下,你還要每天都注意零時漏洞,實在是很費神。比方說如果你用 Google 去查 Zero Day Report ,就會發現其實各家資安相關的公司都有自己的通報系統,畢竟漏洞這種東西越早發現越有商業價值,生命週期不見得很長。

 

 

假設你用 Laravel (請自行代換你用的 Framework),就算你死盯著 Laravel 相關的議題與官網部落格。最後收到第一個通知是從社群媒體裡面得到的可能性還是非常大。因為很多大神的工作就包含資安相關,而且消息比你靈通多了。

 

此外即使 Framework 本身沒有問題,大家只要有用到外部的函式庫,例如 npm, gem, pip, composer,甚至是 homebrew 都有可能會讓漏洞程式或是木馬程式直接進入。這就跟房子抓漏水一樣,實在是防不慎防。如果是 WordPress 的話,安裝佈景主題(Theme)與外掛(Plugin) 都是安裝程式,所以在軟體工程裡一樣視為外部程式(WordPress 本體以外的程式)。

 

還有一種情況,漏洞並不是一開始就存在的。例如某一個功能同時間需要「作業系統」、「Framework」與「第三方函式庫」共同運作才能執行。這時只要其中有更新,就有可能導致功能不正常或產生漏洞,因為版本對不上。

 

 

 

 

既然漏洞是一定會發生的,那我們該怎麼防範呢?工程師都有這樣的問題了,那非工程師的一般站長又該怎麼辦?

 

其實也沒怎麼辦,人手不夠就加人手,專家不夠就加專家。公司夠大當然擁有自己的團隊是不錯的選擇。但是一般公司的規模應該不會大到需要一個部門來做。所以跟資安公司商業合作也是不錯的選擇。

 

只是對於中小企業來說,資安公司實在是不便宜,個人級別網站就更不用說了,就沒賺幾個錢還倒貼實在不是長遠之計。折衷方式當然是先看有沒有免費或負擔得起的軟體。畢竟網站其實也是架設在電腦上面,所以就跟家用電腦一樣,加裝防火牆與弱點掃描軟體之類的套裝軟體來協助,只是面向網站的程式,畢竟執行情境不太一樣。

 

 

雖然說是安裝,但是畢竟網站是整個系統的概念,有應用程式、Web Server(Apache, Nginx)、資料庫(MySQL, Redis)。更進一步的可能還有很多的 Cache、CDN、甚至分散式的架構,Auto Scaling(自動規模化 WIKI) 之類的,就算要"安裝"軟體,要安裝在哪裡呢?

 

 

 

 

人類設計的程式與架構其實多半都可以用真實世界的行為來做類比,所以我們以下就先用你的公司來比喻吧。

 

 

 

 

你的公司裡面有很多機密不能讓外人、小偷偷走。假設都是實體文件,有幾個方式是你比較容易可以想到的。

 

1. 機密文件本來就不在你工作的大樓。

這也就是所謂非必要不儲存。

 

但是你工作就會用到啊,客戶下單你總不可能看完即焚都用腦袋記吧?所以第二點:

2. 權限管理,非本公司人員不得進入工作區域。

這就是一般網站有的權限管理機制,算是滿有效的。常常看到有些漏洞都是要取得一定權限才有辦法攻擊。這時候如果沒有獲取權限的漏洞一起出現的話,很多網站沒陌生使用者不讓人註冊是不會有問題的。

這就像是很多公司有的櫃檯人員,這時已經進入公司(應用程式)了,但是還是有人去區分。

 

 

不過有些公司會讓熟識的快遞、掃地阿姨等進入公司內部。或是櫃檯其實也有換班的時間、櫃檯規章不夠嚴格。都有可能會讓有心人士混入。當然也有內鬼的可能性,內鬼放外人進入櫃檯也只能放人(木馬程式)。所以這時候可以:

3. 不只監控人員「進」也監控人員「出」,監視器紀錄(monitoring) 所有活動,即使發生了事件,也要避免再次發生,抓出內鬼。

 

 

不過說實在,監控大家都知道要監控,但你知道從 24 小時監控中找出蛛絲馬跡有多辛苦嗎?通常紀錄只會多不會少,你沒事會看你的行車記錄器嗎?多半都是出事才會看吧?公司、商場的攝影機也是一樣,等到發覺可能都不知道是什麼時後了。

再來架設監控本身也是一們藝術,架設本身有成本、維護也有成本、找出問題也有成本,就跟前面說的零時漏洞一樣,太花時間了。

 

那怎麼辦呢?現實的做法其實就是:

4. 僱用保全、或是公司在辦公大樓裡面,一樓會有一個全面性的櫃檯。

 

登記使用者進出、目的、攝影機照著。有人鬧事的話也是由他們先處理,而不是直接就進入公司了。多一層就多一個緩衝的空間、處理的時候也不會影響到本業的進行。

 

所以 WAF 「網站應用程式防火牆」最簡單的概念,對應到真實世界的話,就是一樓櫃檯保全管理員,所有的流量都會先經過他處理。

 

不過說保全大家可能會想到自己家裡半夜偷睡覺的老先生,但是那只是專業度比較低的保全。現實世界當然也有專業度高的性質相同工作,例如機場的海關,平常工作還會有專業受訓練的緝毒犬跟著,或是軍隊的武裝邊界。這種"關卡"形式的概念就是防火牆的用途。

 

另外一種比喻就是,假設你有一個包裹怕進水,與其用膠帶一個一個缺口封住,還不如找一個不透氣、不漏水的塑膠袋包住。這樣雖然漏洞實質上還是存在,但是外面的塑膠袋沒破基本就是安全的。

(不過實質上的 WAF 還是像在門口多加一道關卡,所以你的網站有後門的話,還是防護不到。)

 

 

現在各位應該對 WAF 的用途與原理有一些類比式的概念了。那接下來就是簡單介紹一下 WAF 通常會有哪些功能,以及我們常見的選擇。

 

 

目前小編我個人比較常聽到的就是 CloudFlareSucuri 這兩家公司(廣告比較大?),AWS 的話就是自家的 AWS WAF。當然各家主機商有些也有自己做 WAF 服務,市場上簡單的搜尋也有其他知名專業的 WAF 服務商。但是每個都研究實在不太可能,所以就以這兩家的敘述為主軸來簡單介紹 WAF 可以幫你做到什麼。

 

另外要先提的,即使各家都包含一樣的功能,使用一樣的敘述,不代表他們的效果是一樣的。坐在一樓睡一整天也可以叫做全天 24小時不間斷保安系統。大公司也不見得就是品質保證。所以這點還請各位自行再研究看看。

 

 

首先,無論是 CloudFlare 或是 Sucuri,都是把你的主機藏在他的主機後面。也就是說你必須要改使用他們的 DNS servers。這就跟前面說的類比一樣,必須先讓訪客通過他們的主機審問一下,通過以後再由他們轉發到我們的主機。可以想成反向代理的應用。

 

 

所以基本上他們兩個都可以清洗流量,尤其是被 DDoS 的時候,因為會先訪問他們,所以根據方案的不同,他們會提供不同的效果,有效的讓你的網站避開這種暴力攻擊。

 

再來還有一些限制 IP,限制 url 攻擊等功能。當然這也可以靠你自己的主機實現。但是很多時候,即使你的應用程式檔下了來,也會因為資源的浪費,導致網站異常或是速度變慢。

 

這就像是有 1000 人同時來光顧你的實體店面,但其實只有 1 個人是真的想購買,如果你只把他們擋在櫃檯前面,還是會造成困擾。只要他們進到店裡面了,你也是很困擾,都沒地方站了。就算他們都在店外排隊,實際上也還是受到很大的影響。所以最好讓這些人在遠離你的店很遠的地方就被篩選。才不會影響到店的營運。

 

比較好的 WAF 服務通常都包含著他們已經掌控的惡意訪問過濾邏輯,加上可以加入你自己的規則。畢竟所有的規則都交給你自己寫的話,那還要他們幹嘛?所以除非已經很了解設定,不然對於不熟悉程式邏輯的站長,其實就都交給他們即可,不然一不小心會封掉正常的訪問也說不定。

 

 

接下來稍微多介紹一點 CloudFlare 與 Sucuri 的差異。

 

 

CloudFlare 大家應該已經滿熟悉的了,免費 CDN 的一哥,即使是免費的方案,也可以有效的幫你減緩網站流量上的負擔,基本上對於減緩圖片等靜態資料的流量負擔都很有效果。不過 CloudFlare 的免費方案是不包含 WAF 的。雖然它的確包含一些惡意攻擊過濾,但是無法讓你自行設定。

 

如果要包含 WAF 的話,最低的方案是 Pro 方案,價位為 $20鎂 / 月 =  $ 240 鎂 / 年 = 新台幣 7200 /年左右的價位。

 

因為 WAF 本質上管理你的 DNS,所以 HTTPS / SSL 也要透過他們才能發送。如果你決定使用免費的 SSL 憑證,那不需要多付錢即可擁有。但是如果你想要更專業,或是一定要使用企業級的 SSL 憑證。那 CloudFlare 需要你每月多付 $5 鎂,所以一年就會變成 300 鎂 / 年 = 新台幣 9000 / 年左右。

 

 

 

 

接著介紹 Sucuri。

 

 

如果說 CloudFlare 是從 CDN 強項發展到 WAF 的話,Sucuri 就是從弱點掃描往 WAF 發展。本質上是重心更放置於資安的公司。所以像是你使用的是 WordPress 的話,Sucuri 就有上架自己的 WordPress 弱點掃描免費 Plugin。不過要注意的是,Sucuri 的功能很多,WordPress 外掛裡面檔案掃描的功能只是其中的一些內容,要完整的功能的話,還是要加入他的付費方案。價錢從 Sucuri Basic 一年 $199.99 鎂起

 

 

 

 

整體來說會比 CloudFlare 方案要便宜一些。不過官方推薦,安全度更高一些的 Sucuri Pro 則是 299.99 鎂(掃描頻率多一倍、支援自己的 SSL) 就跟 CloudFlare 價錢差不多。

 

此外,目前看起來 CloudFlare 的中文化一直持續有在進行,而英文不好的人也不用被 Sucuri 嚇到,畢竟 Sucuri 有走代理商制度,所以是可以找台灣公司服務的,例如遠振

 

至於哪一個比較好,或是可能有更好的選擇,就交給大家去嘗試看看了。就不在這篇討論了。

 

 


最後,如果你喜歡我們的文章,別忘了到我們的FB粉絲團按讚喔!!

Small logo

進度條編輯群

進度條編輯團隊