資料庫為電子商務與企業內各應用系統資料儲存之軟體系統,而對資料庫進行存取或查詢主要是使用資料查詢語言-SQL (Structure Query Language, SQL),幾乎所有的資料庫廠商都使用SQL為其標準的資料查詢語言。因此絕大部份電子商務的交易行為都會使用SQL語言所撰寫程式碼來存取或查詢資料庫內所存放之資料。
對於典型的電子商務網站而言,一般的會員認證與資料查詢作業,是當客戶輸入資料或查詢條件後,經過程式存取後端資料庫並將結果呈現在網頁上,若未能對客戶所輸入的資料進行驗証,就讓駭客有機可乘。大部份的駭客係利用輸入特殊命令,讓系統將之與標準的資料庫查詢程式和資料合併在一起,送給資料庫管理系統執行,因此一段有害的程式碼被正常的程式碼包裝起來形成『隱碼』,直接對資料庫存取資料或進行破壞,進而造成資料庫損毀或資料流失。因此任何與客戶互動的程式尤其是會對資料庫進行存取或查詢的程式碼,都是駭客下手的對象。
由於此種方式並非透過病毒及一般攻擊手段,而是經由標準且既定的程序操作,只是輸入具破壞性的程式碼,對現階段任何防火牆或是防駭客系統而言,是無法防範的。至於資料庫管理系統,依SQL程式來進行查詢等動作,而『隱碼』有可能是錯誤的輸入或SQL程式,因此較難從資料庫管理系統上來防範,唯有加強安全控管與降低程式存取資料庫的權限,最佳方式是從程式設計來著手,唯有建立起良好的程式開發風格與習慣,方能阻檔此類的攻擊事件。
幾種可能的『資料隱碼』攻擊模式如下:
利用特殊指令攻擊
駭客於任何要求輸入資料時打入特殊指令或程式碼,讓破壞性程式碼『隱藏』在標準的SQL程式中,達到其攻擊目的。
利用系統的錯誤訊息找出資料庫弱點
要對資料庫進行存取或修改,必需要對資料庫的結構有所瞭解,通常駭客很難瞭解資料庫結構,但未經掩飾的錯誤訊息反而容易造成問題。資料庫管理系統為能協助程式開發與管理人員了解錯誤指令所造成的問題與根源,會在錯誤訊息上顯示完整的資訊,若電子商務系統未經防範而直接讓錯誤訊息顯示在網頁上,無異是給駭客入侵留下線索。
為能有效的阻絕駭客利用『資料隱碼』方式入侵,微軟建議採取以下各項防範之道:
1. 加強程式上的安全檢查措施:在程式中加上輸入資料型態檢查、資料長度檢查與資料內容檢查,讓駭客無法利用隱藏於輸入資料的特殊指令或程式碼有機可乘。
2. 妥善使用權限管理:在程式中勿用較高權限來存取資料庫,比如說讓SQL程式使用資料庫管理員(System Administrator, SA)身份來存取資料庫。此外,若使用Windows 2000作業系統搭配SQL Server則建議使用Windows 2000認證機制。
3. 保持良好的程式開發習慣:撰寫資料庫存取或查詢程式時,利用兩個單引號『’’』來標註任何輸入的變數給SQL程式;利用單引號『’』會讓駭客的隱碼易於得逞。
4. 將核心程式碼隱藏起來:勿讓網頁上程式直接存取或查詢資料庫,而是透過預存程式(Stored-procedure)來執行,而XML Web Service也是另一個提高安全性的好方法,保護核心程式邏輯與資料庫結構不至外洩,而Microsoft SQL Server 2000是目前唯一支援XML Web Service的資料庫管理系統。
5. 以標準的訊息回覆給客戶:電子商務網站對於任何回覆給客戶的訊息應有所規範,透過程式攔截下任何作業系統或資料庫管理系統所可能產生的錯誤訊息,改以統一且明確的訊息來指導客戶。
6. 刪除多餘的資料表(Table):資料庫管理系統安裝後會有幾個既存的資料表,這些資料表是供程式開發、範例資料庫或暫存使用,如”pub”及”Northwind”等,請在電子商務網站上線後移除;因為這些公用的資料表架構是公開的,易為駭客所利用。
相關網址:
1. SQL Injection FAQ:http://www.sqlsecurity.com/faq-inj.asp
2. Input Validation & SQL Injection:http://www.owasp.org/asac/input_validation/sql.shtml
3. SQL Injection WhitePaper:http://www.spidynamics.com/whitepapers/Whi...QLInjection.pdf
4. GSN-CERT/CC的安全通報:http://www.gsn-cert.nat.gov.tw/news_conten...tml?news_id=231
5.Understanding and Preventing SQL Injection Attackshttp://www.siksoft.co.za/data/sqlinjectionattack.htm
6 『資料隱碼』SQL Injection的源由與防範之道. http://www.microsoft.com/taiwan/sql/SQL_Injection.htm
7. SQL Injection (資料隱碼)– 駭客的 SQL填空遊戲(上)http://www.microsoft.com/taiwan/sql/SQL_Injection_G1.htm
8. SQL Injection (資料隱碼)– 駭客的 SQL填空遊戲(下)http://www.microsoft.com/taiwan/sql/SQL_Injection_G2.htm
沒有留言:
張貼留言