隨著電子商務的興起,各式各樣的商務網站也如雨後春筍般出現,帶給消費者極大的便利,也替公司廠商燃起了無限的商機,但便利與安全常是如影隨形,如何確保網站程式沒有安全漏洞將是成功關鍵所在。本文將說明OWASP發表的十大安全漏洞,然後講解如何透過程式碼檢視軟體Paros找出網站本身程式的漏洞,防範於未然。
如今最新的攻擊趨勢在於Injection攻擊再加上Google Hanking的技巧來達到大量及自動化的攻擊。Google Hanking攻擊方式是利用Google的優異搜尋能力(例如利用Google所提供的進階搜尋功能),找出網際網路上公開的網站內容是否為具有相關漏洞的軟體或程式,並加以攻擊。
有一位安全分析師就搜集了相關可用來從事Google Hacking攻擊的關鍵字,並收集成一個資料庫GHDB(Google Hanking Database)。針對Google Hanking所須使用的關鍵字列表,許多的Web安全弱點掃描軟體也會納入GHDB的檢查,以確認受測的網站是否存在GHDB。
GHDB的存在,從好的方向來想,可幫助網站管理人員發現所管理的網站是否存在相關的安全漏洞,但從壞的方面思考,GHDB往往也幫助駭客更容易入侵相關的網站。
若有興趣可至「http://johnny.ihackstuff.com/ghdb」網頁取得相關的資訊。如下僅節錄一段內容來做說明。
如上圖所示,以2004-06-10的弱點為例,其中「intitle」為Google所提供的進階查詢選項,意指「只要網站標題符合所設定的條件」即成立,而上述例子就是只要網站標題符合「Index of / modified php.exe」,條件即成立,因此可能內含該弱點所對應的Summary所敘述的漏洞。
跨網站腳本攻擊
跨網站腳本攻擊(Cross Site Scripting,XSS)的原因與SQL Injection相同,都是因為程式沒有檢驗使用者輸入的參數內容(惡意攻擊者可輸入惡意的Script碼)所造成。
不過,XSS與SQL Injection最大的不同在於,SQL Injection會對資料庫所在的主機造成重大危害,例如取得資料庫內的重要資訊或損壞資料庫,甚至造成系統無法正常的運作。
但XSS攻擊主要是造成瀏覽該網站使用者安全上的危害(通常是瀏覽者的認證Cookies資訊外洩,或者不知情的使用者下載了惡意程式),往往不會對於網站主機造成危害。
因此常被網站管理者所忽略,而使得此種攻擊有越來越普遍且不容易被發現的趨勢。以下說明XSS相關攻擊流程,如下圖示。
首先,攻擊者將含有XSS漏洞(如內含惡意轉址Script)的網頁置於受害的網站伺服器上,如下為一典型的iframe攻擊碼:
當使用者瀏覽到含有如上述攻擊碼的網頁後,即會到SRC所指的位址下載惡意的攻擊碼,由於此iframe的高度與寬度的長度均設為零,所以對使用者而言,從網頁上看不到這個iframe的存在,也因此失去警覺心。
接著,當不知情的使用者瀏覽這個網頁的時候(例如瀏覽討論區的某則留言,而該留言內含惡意的Script碼),即會啟動XSS攻擊碼,以本例而言,即是在使用者不知情的情況下,連結其他的惡意網站來下載惡意的程式。
而其他的常見的情況,可能是在使用者誤觸了含有惡意Script的網頁後,即將本身的認證Cookies或相關資訊回傳到駭客的伺服器上。
鑑別與連線管理漏洞
鑑別與連線管理漏洞(Broken Authentication and Session Management)是指網站自行開發的身分證驗證與連線(Session)管理機制具有安全性的缺失,通常一個網站身分驗證流程如下:
一開始,當使用者登入成功後,網站會將一個含有帳號及密碼甚至權限等相關資訊的Cookies丟到使用者的電腦端上,以作為身分的識別用。
緊接著,網站再存取該使用者的授權Cookies來判別使用者的身分。
在上述流程中,如果Cookies並未加密,而且網站的程式存在XSS的漏洞,一旦使用者瀏覽該網站,即可能將認證Cookies的內容外洩給惡意使用者。
惡意的使用者只要取得這個Cookies,就能夠得知相關的機敏資訊,並冒充該使用者或提升至管理者的權限。
另一個常見的漏洞則是,伺服器並無登入Timeout的機制,常有些粗心的使用者在公用電腦登入後,就忘記登出,導致後續的使用者可以接替使用。
不安全的物件參考
不安全的物件參考(Insecure Direct Object References)漏洞也是肇因於程式設計師的疏失或是經驗不足而未對於使用者輸入的參數值(此參數值為外部的物件,例如檔案)進行驗證所造成,而使得惡意使用者可以用來輸入其他的外部物件名稱,如此就可能取得預期外的外部物件內容。如下為一常見的範例:
如果一個經驗不足的程式設計師想要實作一個能動態顯示檔案內容的程式,他想到直接把要顯示的檔案當作參數傳進去就好,如下連結所示
而後,接到參數值時,再根據傳進的參數值,直接開檔顯示內容即可。但如果程式未對參數進行任何的驗證,就可能出現一個惡意使用者傳進去的參數為「../../etc/passwd」,如下網址:
其中,..為回到上一層,此種參數即可能將系統中「/etc/」目錄下的passwd檔案顯示出來。這麼一來,就可能將系統中的passwd檔案內容顯示出來。
跨網站冒名請求
從某種角度來看,跨網站冒名請求(Cross Site Request Forgery,CSRF)可視為廣義的跨網站攻擊(XSS),但CSRF通常是在使用者已登入系統服務的情況下發動攻擊。
例如在討論區中的某段留言塞進一段可直接登出(Logout)的惡意程式碼。當使用者登入後瀏覽相關留言的時候,只要瀏覽到這段留言,即會觸發這一段惡意程式碼,而直接將使用者登出,此即為CSRF攻擊。