文章轉帖自:
http://www.hacker.org.tw/?c=articles_show&articleid=1705
一、前言
電腦系統的安全一直是你我所重視的,但或許你一直在替系統安裝修正檔、防毒軟體
、架設防火牆、劃定非軍事武裝區等,以為一切安全措施已經做到了萬無一失,但可能由
於程式設計師撰寫之程式碼的疏忽,正使你的背後產生一個自己營造的大漏洞。
網站的資料存取一般來說是比較危險的,因為網際網路是一個開放的環境,而不像一
般公司內部網路,除了有電腦本身的安全設計,還可以過濾篩檢員工的身分背景。網際網
路上龍蛇雜處,大部分的使用者都循規導矩,但少數圖謀不軌的人卻處心積慮地要侵入我
們的系統,竊取有價值的資料。但一般的網管人員及網頁設計師,可能在安全設定上有著
重重防範,如架設防火牆,設計非軍事區(DMZ),限制網站登入者的身分等等。但由於缺
乏對 SQL 語言及資料庫管理系統的認知,而大開系統的後門。
且日前新聞報導亦指出財團法人大學入學考試中心網頁系統遭一位年僅十九歲之少年
駭客入侵並有大量考生個人資料遭竊,此一事件顯示網路安全及資料保密的重要性已是不
容忽視的課題。而此年輕駭客所採用之入侵手法「SQL Injection」也就是俗稱的「資料
隱碼」攻擊。
二、SQL Injection 解析
SQL Injection(正確解釋應為”SQL 指令植入式攻擊”)所針對之攻擊目標既非資料
庫本身亦非作業系統或網站伺服器本身之漏洞來進行,而是一種未做好輸入驗證 (Input
Validation)的問題;在撰寫應用程式時,沒有對使用者的輸入做妥善的過濾與處理,便將
其組合成SQL指令,傳送給SQL server執行。若使用者輸入之資料中含有某些對資料庫系統
有特殊意義的符號或命令時,便可能讓使用者有機會對資料庫系統下達指令,而造成入侵
所帶來的損失。然而事實上,這樣的疏漏並不是資料庫系統的錯誤,而是程式設計師或軟
體開發者的疏忽所產生的。故這般的 SQL Request 指令會被防火牆或是 IDS (入侵偵測
系統)視為一般正常的 TCP 連線而忽略掉,也因此可以輕鬆的繞過重重嚴密的安全檢驗。
一般使用者在猜測登錄網頁之帳號與密碼時,都是以亂槍打鳥之方式胡亂猜測,或是
以暴力攻擊法搭配字典檔之方式進行破解,然而上述過程不僅費時又顯得稍微魯莽了點,
而駭客再進行該種類型之網頁登錄破解時就是利用上述之SQL Injection手法來進行破解。
若是網頁所在之網頁伺服器端未做好嚴密之安全認證機制,則駭客即有可能利用簡易
方式繞過認證進入到網頁內。且利用該方式取得之使用者帳號為資料庫中存放使用者帳號
之第一位,且一般皆為系統管理者帳號,故亦表示駭客可以取得網站的完整管理權限。
因此今日面對該問題已經不是使用何種平台或者是程式語言之問題了,而是一種檢驗
機制的問題。不論你公司單位所使用的網站系統是以 Apache、IIS、Domino系統搭配 PHP
、ASP、JSP 之程式語言並透過 MySQL、Oracle、MS SQL Server、Sybase或Tomcat 的資
料庫來連線等任何方式所搭配組成,只要你的資料庫系統是採用 SQL (標準查詢語言)
,則你的系統就有可能受到影響。
而一般駭客在入侵登錄網頁時可能透過兩個方式進行:
‧網頁上會到資料庫存取資料的輸入欄位
‧URL
駭客若是掌握了受害主機之相關弱點時還有可能輸入一些具有破壞性的 SQL 命令來毀
壞目標主機資料庫。常見破壞性 SQL 陳列如下:
‧停掉 SQL Server 的執行
' ;SHUTDOWN—
‧破壞整個資料庫的內容
' ;DROP Database <資料庫名稱>--
‧刪除資料庫內某個資料表
' ;DROP Table <資料表名稱>--
‧清空資料表中所有欄位的值
' ;Truncate Table <資料表名稱>--
‧清空資料表
' ;DELETE FROM <資料表名稱>--
上述之 SQL 命令語句都對資料庫具有無法回復之重大傷害。另外除了由資料輸入欄位
進行入侵以外尚有利用 URL 來進行入侵的動作,我們可以透過在網址列直接輸入如下之字
串來進行繞過認證的動作。利用上述字串輸入網址列,可以達到與透過 form 來進行入侵
一樣的功效。
三、常見檢測工具
常見的 SQL Injection 檢測工具如下:
‧Acunetix Web Vulnerability Scanner
◆可以Update新的弱點或plug-in,來增加新的掃描功能。
◆下載試用版
http://www.acunetix.com/wvs/vulnerability-scanner.htm
‧Lilith
◆為利用perl寫成的SQL Injection掃描工具。
◆可在任何可執行 perl 或 perl 5 以上的平台執行。
◆下載網址:
http://angelo.scanit.biz/
◆為免費軟體
◆優點:
自動化進行檢測SQL Injection
◆缺點:
有些網站Web Form無法偵測出來。
僅進行簡單的SQL Injection檢測,沒有問題不表示以後完全沒問題。還是可能有其他的
Injection弱點存在。
‧Remote PHP Vulnerability Scanner
◆可用來檢測PHP網頁問題。
◆下載:
http://www.security-challenge.com/123456/ftp/rpvs.rar
◆優點:
自動化進行檢測PHP網頁的弱點
對於XSS檢測能力較強
◆缺點:
有些網站SQL Injection無法偵測出來。
僅進行簡單的SQL Injection檢測,沒有問題不表示以後完全沒問題。還是可能有其他的
Injection弱點存在。
當然工具可以提供有效之檢測,但工具僅進行簡單的SQL Injection檢測,沒有問題不
表示以後完全沒問題。還是可能有其他的 Injection 弱點存在。工具還是利用 pattern
match 方式進行,固當有新的方法被發現時,沒有擴充能力的工具,就不可能檢測出新的
弱點。所以絕對不要有使用工具的迷思。
SQL Injection 防護
‧最簡單的方法還是 input validation
◆過濾所有可能的字串。
‧過濾原則可分為「只允許」與「已知不允許的」來杜絕非法字串。
◆限制使用者輸入。
‧置換(取代)法
‧將非法的字串加以取代,避免非法字串的輸入。適用於須開放某些特定字元符號時
‧如: (),-等。
‧搜尋檢查法
‧搜尋字串中非法字元是否出現,若出現則與與拒絕或重導到其他頁面。
◆將檢查放在Server端,而非Client端。
‧檢測 source code中的輸入驗證,並避免有問題的字串進入SQL 字串中
◆在新的應用程式中加強安全設計。
◆重新檢測現存的網頁應用程式。
‧限制應用程式存取資料庫的權限
◆限制其最小可存取之權限。
‧鞏固 DB Server
◆利用較低權限的使用者執行 DB
◆移除未使用的預儲程序或函式,並限制系統管理者權限
◆改變或移除系統的 “public”存取權限
◆所有使用者勳需設定安全的密碼
◆移除與其他伺服器的信任關係
◆移除未使用的 網路通訊協定
◆使用Firewall來限定信任的client才能連接
‧Detection
◆可能的SQL Injection攻擊監控
◆紀錄可能的SQL Injection攻擊動作(log,IDS)
◆利用email傳送警告
◆阻擋惡意攻擊的IP
◆送出警告訊息,如:
‧你的IP來源及攻擊行為已被記錄
◆加入可能的過濾機制到每一資料傳送環節
‧取消或自訂web的錯誤輸出
◆錯誤訊息給予攻擊者有用的訊息,來進一步執行攻擊。
◆可以將錯誤訊息藉由安全控制,來達到給予攻擊者最少的錯誤訊息及資訊。
◆IIS – 自訂錯誤訊息
◆Apache – httpd.conf
◆Tomcat – server.xml 或web.xml
四、結論
SQL Injection 是相當危險的,即便在防火牆或其他相關網路安全配置上作再多之配
置只要網頁撰寫人員一不小心,隨時都有可能將您的系統帶向門戶大開的危機裡。因此公
司內部 MIS 人員之資訊安全素養才是最重要的,有效的做好輸入驗證的動作,以及養成此
習慣才能讓公司免於受到駭客之關注。
五、參考文獻
‧A lot of SQL Injection related papers
◆
http://www.nextgenss.com/papers.htm
◆
http://www.spidynamics.com/support/whitepapers/
◆
http://www.appsecinc.com/techdocs/whitepapers.html
◆
http://www.atstake.com/research/advisories
‧Other resources
◆
http://www.owasp.org
◆
http://www.sqlsecurity.com
◆
http://www.securityfocus.com/infocus/1768
CRETIX Security -
http://www.hacker.org.tw
原創作者: 台灣網路危機處理暨協調中心
文章來源:
http://www.cert.org.tw/document/column/show.php?key=96