隨著 Web2.0 時代的到來,網站應用也逐漸被大眾廣泛的接受和使用。企業的e化雖然可為企業帶來可觀的商業利益,但建置網站的資安問題也緊跟著浮出檯面。
事實上,網站攻擊會越來越氾濫的原因,其實跟網站本身有很深的關聯。由於網路的興起,從
政府機關、
金融機構、
中小企業以至於
學校、
個人都開始架設自己的網站,而且,為了與來訪者互動,多半都會使用ASP、PHP、CGI、JSP等網路應用程式。
但是因為這些程式的開發者程度不一,有些甚至沒有受過專業訓練,只是從網路上隨便抄程式碼拼湊起來,所以這些程式可說是良莠不齊,漏洞百出。
若想解除Web的安全威脅,最根本的解決方式在於重新檢視所有的Web程式,即所謂的白箱測試Code Review,從中找出不安全的程式碼再加以修改,而且有些程式碼的掃瞄軟體可幫忙程式設計師找出不安全的程式碼。但是Code Review的工程浩大,很不切實際,因此網頁應用防火牆(Web Application Firewal, WAF)應運而生。而面對網站的安全問題,許多廠商推出了像是IDS、IPS、WAF等..網站防護的資安產品,這些產品是什麼?有什麼不同之處呢?今天會針對網頁應用防火牆(Web Application Firewal, WAF)來做個簡單的介紹。
延伸閱讀:
以往僅能看到L3、L4攻擊的網路安全閘道器已無法應付這些針對L7應用程式的攻擊方式,必須仰賴像
網頁應用程式防火牆(Web Application Firewal, WAF)的第七層網路安全設備來抵禦這些新型威脅。
WAF的設計宗旨是防禦針對網頁應用程式的常見攻擊,像是OWASP Top 10 中最常出現的
跨網站腳本攻擊(Cross Site Scripting, XSS)以及
資料庫隱碼(SQL injection) 等攻擊。簡單的說WAF的作用就是為了保護網站主機,在我們來得及改善網站的安全性之前,拉起一道防護網,以減少被攻擊成功的機會。
OWASP TOP 10(年度 10 大 Web 安全漏洞)
OWASP 是一個專門研究 Web 軟體安全的社群,他們每年均會提出最有威脅的 Web 安全漏洞來提醒使用者,以下簡單的說明 OWASP 所提出的 Web 安全漏洞。
Injection(注入攻擊)
由於程式設計師出於疏失或經驗不足而未對於使用者輸入的參數值進行檢驗,以致於惡意使用者可利用惡意的輸入值(如惡意 SQL 指令串或惡意的 script 碼),讓系統自動執行惡意的指令而對系統造成危害。此類攻擊以 SQL injection,command injection 為代表,其中以 SQL injection 最具代表也最具危害性。
Cross Site Scripting(XSS,跨網站腳本攻擊)
跨網站腳本攻擊的原因跟 SQL injection 一樣,同樣是因為程式沒有檢驗使用者輸入的參數內容所造成。不過與 SQL injection 最大的不同在於,SQL injection 會對資料庫所在的主機造成重大危害,但 XSS 攻擊主要會造成瀏覽者安全上的危害,往往不會對於主機造成危害,也因此常被管理者所忽略,而使得此種攻擊有越來越普遍的趨勢。XSS 攻擊流程如下:
- 攻擊者將含有 XSS 漏洞的網頁,置於受害的網站伺服器上 。
- 當不知情的使用者瀏覽此網頁時(如瀏覽某則留言),即會啟動 XSS 攻擊碼而將無辜的第三者相關資訊回傳到駭客的電腦上。
Broken Authentication and Session Management(鑑別與連線管理漏洞)
此漏洞是指網站自行開發的身份證驗證與連線 (session) 管理具有安全性的缺失,例如一個網站身份驗證流程如下:
- 當使用者登入成功後,會將一個(含有帳號及密碼甚至權限等相關資訊的 cookies,丟至使用者的電腦端上)。
- 網站再存取該使用者的授權 cookies 來判別使用者的身份。
在上述流程中,如果 cookies 並未加密,惡意的使用者只要取得此 cookies 即可得知其它使用者相關的機密資訊。或者加密的演算法不夠嚴謹,一旦被破解,也會造成使用者的機密資料外流,甚至可冒充其它的使用者(提升權限至管理者)。
Insecure Direct Object References(不安全的物件參考)
如果一個經驗不足的程式設計師,想要實做一支能動態顯示檔案內容的程式,會直覺想到直接把要顯示的檔案當做參數傳進去,如下連結所示:
http://xxx.xxx.xxx.xxx/show.php?file=xxx.txt
而後在接到參數值後,再直接開檔顯示即可。可是如果一個有心人傳進去的參數為:
http://xxx.xxx.xxx.xxx/show.php?file=../../etc/passwd
其中 ".." 為回到上一層,此種參數即可能將系統中的 /etc/ 目錄下的 passwd 檔案顯示出來。
Cross Site Request Forgery(CSRF,跨網站冒名請求)
從某種角度來看,CSRF 可視為廣義的跨網站攻擊 (XSS) ,但 CSRF 通常是在使用者已登入系統服務下發動攻擊。例如:
在討論區中的某段留言塞進一段可直接登出 (logout) 的惡意程式碼,當使用者登入後,在瀏覽相關留言時,只要瀏覽到這段留言,即會觸發該段惡意程式碼,而直接將使用者登出。此即為 CSRF 攻擊。
Security Misconfiguration(不安全的組態設定)
此漏洞較偏向管理面的問題,如未更改預設的帳號及密碼或未定時的更新系統的安全修正程式等等。
Failure to Restrict URL Access(未適當限制的 URL 存取)
一般網站通常會分成前端程式及後端管理程式。基於安全的考量 ,後端管理程式不應該直接被 Internet 上的使用者查詢,而應該限制僅有某些管理者可查詢及存取。如果網站未限制,而使 Internet 上的其它使用者也可正常的查詢,即可能造成潛在的安全漏洞。
Unvalidated Redirects and Forwards(未驗證的網頁重新導向)
有些網站提供網頁重新導向至其它的網站,惡意的攻擊者可利此種特性,將惡意網址插入到重新導向的參數中,讓使用者連接到惡意的網站上。
Insecure Cryptographic Storage(不安全的加密儲存)
網站並未對機密的資料做加密處理或使用不嚴謹的加密演算法,而導致攻擊者在取得相關的機密資料後,可以很輕易的取得相關資訊。
Insufficient Transport Layer Protection(不安全的傳輸防護)
由於 HTTP 連線均是採用明碼的方式連線,攻擊者在任何一個節點均可能利用 Sniffer(竊聽)方式取得來往資料。如果網站採用 HTTP 連線方式,來往的封包均以明碼方式傳輸,攻擊者即可輕易的取得相關機敏資訊。
儘管某些入侵防禦系統(Intrusion Prevention Systems, IPS)也能提供一定程度的應用層的防禦功能,但是它們不具備WAF的精度和準度,為什麼呢?因為這兩者是完全不同的兩種技術,IPS是基於特徵碼,而WAF是從行為來分析,以下介紹WAF與IPS的不同:
- WAF主要只針對HTTP(s)協定進行防護,而IPS較廣泛的針對大多數的網路協定。
- WAF 是針對網路行為來進行分析,IPS 則是作特徵碼的比對,相較之下,WAF屬於動態防護,而IPS就偏於靜態。例如針對一般的SQLInjection(資料庫隱碼注入)攻擊,兩者都能夠防護。但是,如果網站資料是加密的(主要是採用HTTPS)或是攻擊者將資料編碼過(如URL Encoding),由於加密過後,風包頭尾資訊就看不到了,IPS便無法阻擋這種方式的攻擊。
- WAF防護行為通常包含了黑白名單與特徵碼分析,所謂黑白名單,主要是指已知允許或不允許的網頁連線行為。例如,必須先到登入頁面才能瀏覽某個網站頁面,如果有攻擊者試著規避此一程序,WAF可以偵測到這種行為,而IPS主要只比對特徵碼。
- WAF可針對網站表單欄位內容進行檢查與限制,IPS則無此功能。因此若要做到防止表單欄位內容竄改,就要使用WAF。
- WAF從網頁連線要求開始就記錄和追蹤,IPS只針對封包記錄。
總結
所以說IPS主要是防禦面相是廣的,而WAF的防禦面相是深的,每個產品的資安防護都有個有不足,唯有搭配使用才能將網站做到一定程度的防護。