隨著電子商務的興起,各式各樣的商務網站也如雨後春筍般出現,帶給消費者極大的便利,也替公司廠商燃起了無限的商機,但便利與安全常是如影隨形,如何確保網站程式沒有安全漏洞將是成功關鍵所在。本文將說明OWASP發表的十大安全漏洞,然後講解如何透過程式碼檢視軟體Paros找出網站本身程式的漏洞,防範於未然。
商務網站的安全威脅型態與其他系統安全威脅有很大的不同,Web的安全威脅通常是因為程式設計師的疏失或經驗不足,而使得所撰寫的程式出現如XSS、SQL Injection等漏洞,並非是作業系統或一般應用軟體先天的問題。這與一般作業系統只要安裝修正程式即可修補系統漏洞,有很大的差別。
Web程式通常會與資料庫連結,一旦有安全的漏洞,往往即是龐大的個人資料外洩,這在個資法通過之後,更帶給程式設計師莫大的壓力。
一般要解決此類的漏洞,最有效的方式即是利用檢視程式碼(Code Review)會議,重新檢視每一行程式碼,再從中以人工方式找出有問題的程式,但是這種方式所花費的人力與物力浩大到不切實際,因此通常會使用自動化掃描工具來幫助程式設計師檢查是否有相關的漏洞。
商業化的弱點掃描工具往往所費不貲,絕非一般中小企業所能負擔。事實上,在開源碼社群中也有相關的解決方案。
針對這個難題,本文將先說明OWASP(Open Web Application Security Project,這是一個非營利組織,專門研究Web安全)於2010年所發表的十大安全漏洞(OWASP Top 10),而後再介紹開源碼社群中用於掃描Web程式漏洞的自動化工具「Paros」(http:/www.parosproxy.org/)。
程式設計師完成程式後,可利用此類軟體來自動掃描相關的程式以發現是否有潛在的安全問題。
OWASP TOP 10(年度10大Web安全漏洞)
OWASP(http://www.owasp.org)是一個專門研究Web軟體安全的社群,長期致力於Web安全的研究,在往年,他們通常會針對該年度最具有威脅的Web安全問題,提出相關的安全漏洞型態報告來提醒使用者。
而目前該組織最新的Web的安全漏洞報告為2010年所發表(俗稱OWASP TOP 10),以下說明OWASP於2010年所提出的Web安全漏洞。下列安全漏洞的嚴重性將依順序排名。
注入攻擊
Injection(注入攻擊)是一種古老的漏洞,從Web發展開始,此漏洞即如影隨形,不但每年榜上有名,而且都名列前茅,數一數二。
此安全漏洞肇因於程式設計師出於疏失或經驗不足而未對於使用者輸入的參數值進行驗證(包含驗證資料型態及驗證內容),以致於惡意使用者可利用惡意的輸入值(如惡意SQL指令串或惡意的Script碼),即可能讓系統自動執行惡意的指令而對系統造成危害。此類攻擊以SQL Injection、Command Injection為代表,其中以SQL Injection最具代表也最具危害性。以下說明SQL Injection的攻擊方式。
假設有一個會員的登入程式,如下圖示,其會員表格(Table)名稱為member,並以account表示帳號參數,passwd表示密碼參數。
如果程式設計師並未對上述輸入欄位內容進行驗證,其程式碼可能僅是如下的程式碼:
"
在正常的情況下,一般使用者均會輸入正常的帳號和密碼,即組成如下所示的正常SQL查詢字串:
如果此SQL子句執行後可查詢到相關資訊,即表示為合法使用者(因為該筆記錄在member表格中確實存在),否則該帳號不是會員,將不允許登入。
但可能有惡意的使用者輸入如上圖的「john' --」帳號所組成的SQL查詢字串:
在SQL語法中,--表示註解,亦即後續的指令均毋須執行。上述的SQL指令即代表只要帳號符合,此SQL字句回傳即為真,換句話說,只要知道帳號可通過身分驗證,無須輸入密碼也能成功登入。
上述的例子僅為SQL Injection的基本型態,其危害程度取決於攻擊者對於SQL的了解程度以及資料庫提供的功能而定。有些資料庫軟體甚至提供執行系統指令的功能,所以情況可能更糟。