1 / 28

SQL Injection ( 資料隱碼 ) 簡介

SQL Injection ( 資料隱碼 ) 簡介. 主講人 : 陳培德 成大電機所博士候選人 密碼與網路安全研究室 URL: http://crypto.ee.ncku.edu.tw Email: peder@crypto.ee.ncku.edu.tw. 大綱. 前言 什麼是 SQL Injection 影響的系統 SQL Injection 原理 SQL Injection 攻擊 SQL 帳號設定 如何防範 SQL Injection . 前言. 在 1997 年以前國外電腦通信雜誌曾經披露此一弱點。

merton
Download Presentation

SQL Injection ( 資料隱碼 ) 簡介

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. SQL Injection (資料隱碼) 簡介 主講人: 陳培德 成大電機所博士候選人 密碼與網路安全研究室 URL: http://crypto.ee.ncku.edu.tw Email: peder@crypto.ee.ncku.edu.tw

  2. 大綱 • 前言 • 什麼是SQL Injection • 影響的系統 • SQL Injection原理 • SQL Injection攻擊 • SQL 帳號設定 • 如何防範SQL Injection

  3. 前言 • 在 1997 年以前國外電腦通信雜誌曾經披露此一弱點。 • 刑事警察局與新波科技公司合作, 4月23日公佈有關SQL Injection的調查,由於國內九成以上網站皆使用SQL資料庫系統,因此,經警方測試,研判國內八成以上的網站已面臨「資料隱碼」攻擊方式的嚴重威脅。

  4. 什麼是SQL Injection • SQL Injection 應稱為 SQL 指令植入式攻擊,主要是屬於 Input Validation 的問題。目前被翻譯成『資料隱碼』攻擊。 • SQL Injection攻擊法並非植入電腦病毒,它是描述一個利用寫入特殊SQL程式碼攻擊應用程式的動作。 • 換言之,只要提供給使用者輸入的介面,又沒有做到相當嚴密的輸入資料型態管制,就有可能會遭受這種行為的攻擊。

  5. SQL Injection • SQL Injection 的起因通常是因為程式利用字串建造方式執行。 • 利用正常查詢網站資料時,將攻擊資料庫的指令夾藏於網站查詢命令中。 • 攻擊者可穿透防火牆,繞過身分認證機制,取得資料庫使用權限,進而竊取資料或竄改、破壞資料庫。

  6. 影響的系統 • Apache、IIS、Domino、Netscape的網站系統,透過ASP、PHP與JSP等程式碼,攻擊破壞各種SQL資料庫。 • 影響的系統包括MSSQL、MySQL、Oracle、Sybase與DB2等。

  7. SQL Injection • 攻擊成立的前提 • 輸入欄位沒有針對特殊符號進行過濾 • 查詢欄位沒有限制長度及內容 • 資料庫的權限過高 • 攻擊者猜測到資料欄位的部分資訊 • ASP源碼洩漏的漏洞

  8. ASP程式碼中可能內含資料庫之帳號密碼

  9. 注意! • 以下關於SQL Injection說明僅為教學講解之用,提供伺服器管理人員針對自身系統進行檢查之參考,若在未事先備份的情況下,造成資料庫系統損害,後果請自行負責 • 未經其它網站管理人員同意前,嚴禁惡意測試他人網站系統之安全性,否則造成任何法律糾紛皆自行負責

  10. SQL Injection原理 • 一般輸入帳號密碼的網站的SQL語法 select * from member where UID =' "& request("ID") &" ' And Passwd =' "& request("Pwd") & " ' • 如果正常使用者帳號A123456789 ,密碼1234 select * from member where UID ='A123456789' And Passwd='1234' • 輸入的帳號與密碼等資訊會取代ASP( or PHP、JSP)中的變數,並由兩個單引號(' ')所包住

  11. SQL Injection原理 (cont.) select * from member where UID =' "& request("ID") &" ' And Passwd =' "& request("Pwd") & " ' • 若攻擊者已知系統中已有一個Admin的管理者帳號,則輸入Admin '--,即可不須輸入密碼而進入資料庫 select * from member where UID =' Admin '-- ' And Passwd =' ' • 註: -- 符號後的任何敘述都會被當作註解 (以上面為例,And子句將被SQL視為說明用)

  12. ID=A123456789 Passwd=1234 select * from member where UID ='A123456789' And Passwd='1234' 網際網路 正常連線狀態

  13. ID=Admin' -- Passwd=1234 select * from member where UID ='Admin' --' And Passwd= '1234' 網際網路 SQL Injection攻擊

  14. SQL Injection攻擊(範例一) • 一旦惡意使用者輸入 使用者帳號' or 1=1 --,密碼asdf1234(任意輸入) select * from member where UID =' ' or 1=1 -- ' And Passwd = 'asdf1234'

  15. SQL Injection攻擊(範例二) • 一旦惡意使用者輸入 使用者帳號abcdefg (任意輸入) , 密碼asdf (任意輸入) 'or 1=1 -- select * from member where UID =' abcdefg ' And Passwd = ' asdf ' or 1=1 -- '

  16. SQL Injection攻擊(範例三) SELECT * FROM myTable WHERE someText =' " & request.form("inputdata") & " ' • 若使用者輸入以下字串 ' exec master..xp_cmdshell 'net user test testpass /ADD' -- SELECT * FROM myTable WHERE someText ='' exec master..xp_cmdshell 'net user test testpass /ADD'-- ' 如此一來,便可在SQL伺服器上新增一個使用者test帳號(密碼testpass)

  17. SQL Injection攻擊 • 其它的變化型 • ' ;SHUTDOWN-- 停止SQL伺服器 • ' ;DROP Database <資料庫名稱>-- 刪除資料庫 • ' ;DROP Table <資料表名稱>-- 刪除資料表 • ' ;DELETE FROM <資料表名稱>-- 刪除資料表 • ' ;Truncate Table <資料表名稱>-- 清空資料表

  18. SQL帳號設定 • sa 權限 • sa 權限就是可以管理所有資料庫權限,因此攻擊者就有可能讀取,寫入,甚至可以刪除所有 SQL 資料庫伺服器裡的資料。 • 造成影響 • 攻擊者可以得到 SQL Server 以及作業系統完整的控制。 • 攻擊者透過 xp_cmdshell 的延伸預存程序(extended stored procedure )能夠對 SQL Server 資料庫上的所有資料進行任意的存取動作, 甚至可以在SQL Server尚值入後門。

  19. SQL帳號設定 (cont.) • db_owner 權限 • 如果被攻擊的應用程式擁有 db_owner 權限,攻擊者有可能讀取或寫入在被攻陷的資料庫裡的所有資料,攻擊者也有可能移除表格,建立新物件,並掌控被攻陷的資料庫。 • 造成影響 • 攻擊者能夠對資料庫上的所有資料進行讀寫動作。 • 能夠刪除Table、建立新 Table、進而取得被影響資料庫的控制權。

  20. SQL帳號設定 (cont.) • normal user 一般使用者權限 (建議使用) • 造成影響 • 攻擊者只能掌控被攻陷的那個使用者的資料庫 • 在比較好的情況下,攻擊者只能執行一些閱讀指令 • 在最差狀況下, 攻擊者也只能夠閱讀或寫入被攻陷的那個使用者的表格

  21. 如何防範SQL Injection • 網頁程式撰寫方面 • 過濾輸入條件中可能隱含的sql指令,如INSERT、SELECT、UPDATE等 • 針對輸入條件進行規範,如無必要,應規範為僅可接受大小寫英文字母與數字等 • 針對特殊的查詢參數進行過濾,如--、 ' 等可利用replace(xx, " ' ", " ' ' ")進行替換 • 進行程式寫作時,應時常檢查程式是否存在有非預期輸入資料的漏洞。

  22. 如何防範SQL Injection (cont.) • 資料庫管制方面 • Sa管理帳號的密碼管控 • 刪除多餘的公開資料表(程式開發、範例等) • 若無特殊必要,將其他使用者設定為一般使用者權限,以避免完整資料庫內容遭入侵 • 移除不必要但功能強大的延伸預存程序,如xp_cmdshell 、xp_regaddmultistring 、xp_unpackcab等

  23. 如何防範SQL Injection (cont.) • 網站伺服器方面 • 定期修補作業系統與網站伺服器的漏洞 • 避免ASP、PHP與JSP程式源碼洩漏,造成使用者可以直接瀏覽 • 更改預設的網站虛擬路徑,如IIS系統不要使用預設的C:\Inetpub\WWWRoot\的目錄 • 不提供錯誤訊息給使用者 • 攻擊者可藉由回報的錯誤訊息得知資料庫的結構 • 建議將錯誤輸入重導到適當網頁 • 修改C:\WINNT\Help\iisHelp\common\500-100.asp的預設錯誤網頁

  24. 如何防範SQL Injection (cont.) • 外部防護系統的控管 • 可藉由防火牆系統管制port 1433與1434的連線 • 藉由防火牆限制網路登入者的身份 • 藉由Host-based IDS或Application-based IDS來監控系統運作的執行

  25. 參考資料 • The Open Web Application Security Project http://www.owasp.org/asac/input_validation/sql.shtml • 新波科技http://www.diamondinfotech.com.tw/ • 精誠公司安全通報http://www.sysware.com.tw/news/press/020424.shtml

  26. 參考資料 (cont.) • 台灣微軟公司關於SQL Injection的相關報導 • http://www.microsoft.com/taiwan/sql/SQL_Injection.htm • http://www.microsoft.com/taiwan/sql/SQL_Injection_G1.htm • SQL Server電子雜誌http://www.sqlserver.com.tw/

More Related