2013年5月13日 星期一

gov.ph 網站為例,網站攻擊與防範

gov.ph 網站為例,網站攻擊與防範



於昨天晚上看到網路上許多資料開始發佈 an 已經攻下菲律賓網站,大多是比較攻擊順利成功,或者是網站頁面被更改的方式。

對於網站部屬架設角色來說,我們正在思考,以後要如何避免掉類似的事情再度發生,以下幾個討論方向,

DDos 攻擊


在最開始,發現的攻擊手段,主要是由從 DDos 攻擊方式開始,剛開始由網友發起,用最土法的方式進行攻擊,

http://ptt4ck.ap01.aws.af.cm/

這個網頁的使用方式,十分簡單,主要是利用 AJAX 不斷發出 request 對於 input list 裡面列表的網站,不斷輪循進行『訪問』,而這個活動的確也引起第一波攻擊成功,有把幾個網站的確就這樣搞垮下來。

這個攻擊手段的確是最容易做到的方式,許多網站(尤其是政府網站),平常並沒有同時大量訪問(request)的機會,因此只要受到同時間 1000 以上訪問者的時候,就有可能造成網站癱瘓(505 Error)

DDos 防範


DDos 其實也是最常見的攻擊之一,當然防止方式可以從基本的建置,第一層首先在 apache 安裝類似 mod_dosevasive 模組,防止在單一 ip 底下同一時間大量進行 request ,將時間分散掉,降低 apache server concurrent.

另外一種方式是透過 nginx ,利用 nginx 的特性,建構 reverse proxy ,對應到多台不同的 web server,讓 web application 至少拖延死掉的時間。

建議的方式採用 load balancer ,對應到不同機器,當然就 load balancer 服務,如果採取硬體價格上是相對價格提高,對於中小型公司來說,可以參考
簡單的方式透過輪巡,當機器(web application server) 當機無回應的時候,對應到下一台機器上。

當然如果在架構上自己能夠在本地端(local)以及遠端 (remote),當本地機器過載,無法承受負擔時,搭配遠端機器配置 Cloud Service 進行 API 自動進行架構擴張,保持服務能夠正常運作。

語言漏洞攻擊


技高一籌,還是人為疏失,由 gov.ph 窺探 vim 疏忽 利用編輯器,編輯檔案後,因為編輯器本身會自動進行副本複製。

原本修改 test.php
卻會自動複製一個 test.php~ 檔案產生

當『有心』的瀏覽者將網址稍微修改,後面多加上一個 『~』 之後,程式碼就可以一覽無遺。

語言漏洞層面防範


當然上面的處置方式,網路上已經很快的有防範方式 如何避免像 gov.ph 的漏洞

類似的錯誤防範機制很多種,可以透過修改 apache, iis 的設定來防範類似問題,讓動態語言的程式碼不會輕易外露。

更簡單的方式,可以透過 .htaccess 來進行最簡單的設定,當然還有透過 framework 結合 ORM ,隱藏自己的設定檔案,防範外部取得 config setting.

程式佈署防範


當然也可以從 deploy 的流程來談,相信有許多網站還是透過 ftp 的方式來進行資料上傳佈署,當然這是方法之一,不過也會造成許多問題。

尤其是類似這種資料夾中不知道夾帶了什麼東西,這次佈署的檔案版本,檔案目前狀況。

另外可以透過 continue integration 的方式進行程式佈署,透過程式碼檢測、驗證、unit test 做到流程上的控管,確保每次佈署的程式錯誤率降到最低。

後記


這次針對 gov.ph 看到許多網站在程式以及架構上的問題,世界上沒有完美的網站,只有保持服務不中斷,將 down time 降到最低,盡量維持一致性的服務。

當然這當中還有很多開發人員的問題,例如 XSS, SQL injection 等隱藏問題在其中,不過這次主要以 gov.ph 為例,就沒有舉例太多額外的資訊,以這次的例子,思考如果問題發生在自己家裡的網站,要怎麼防範。

身為開發者,以及維護者都需要了解一件事情,『便宜行事背後的成本,未來將付出更大的代價。』