如何處理資料庫被植入惡意連結?
到iT邦幫忙

hahahacja(iT邦初學者10級)發問:
資料表有好幾個欄位資料被植入惡意連結,目前的環境是一臺IIS 6.0、一臺SQL Server,都在防火牆內。請問哪裡出現漏洞?該如何處理?

sheng514(iT邦初學者9級):
我們公司之前發生過類似的事情。有天突然使用者只要開網頁連上Web伺服器,都會另開新視窗,連到駭客網站下載ActiveX元件與色情圖片。本來以為是Web 伺服器中毒或資料庫被植入惡意連結,後來發現是因為內網有筆電中毒,而病毒的行為模式是透過廣播方式擷取HTTP封包,在內容加上開新視窗的語法,再回傳給使用者,所以造成大量感染。

因此要檢查是否有SQL Injection攻擊,可以先用像SQL Server內建的SQL Query Analyzer,確認資料庫的欄位資料內是否真有惡意連結,如果沒有,也許是網路環境中有人中毒了。

lemonest(iT邦初學者10級):
建議你可以依照下面的方式檢查:
1.找出發生問題時間的IIS記錄檔,檢查攻擊是從哪些IP發出的,你可以看到許多在URL上直接下SQL指令的IP,例如「GET /cc/cc_detail1.asp ccno=0000000697%20AnD%20(sElEcT%20ChAr(94)%2BcAsT(CoUnT(1)%20aS%20VaRcHaR(100))%2bChAr(94)%20fRoM%20[mAsTeR]」,這些行為都有問題。用防火牆先把那些IP擋起來,如果有IDS,可以把有這些特徵的Session擋掉,像是URL裡有「sElEcT」字串。

2.找出被竄改資料庫的欄位,再查看會用到這些欄位資料的網頁,再改寫這些網頁程式。這些網頁通常是URL後有用「?」號傳值,例如「http://www.com.tw/ShowData.aspx?id=1234」。一旦網頁取得資料的程式寫成這樣「"select * from datatable where id=" + Request["id"].ToString()」,就有可能被注入攻擊。最好是它改寫成用參數傳值,不要用字串去串接,寫法像這樣「"select * from datatable where id=@id"」。

3.如果被改的資料太多,一時來不及復原,可以先把這些網頁SQL連線字串所用的帳號,改成唯讀權限來應急。不過前提是這些網頁本來就只是展示資料,不需回存資料。

4.如果資料庫還是一直受到竄改,可以在被改的欄位設定Trigger,一旦資料被改,就將修改的時間記錄到其他資料表,再從這個時間點去查IIS記錄檔,追查該時間點連進來的IP,以及它的事,才有辦法因應。
最後提醒幾件事,資料庫要有備份機制,不然被竄改後就救不回來。此外,寫網頁程式時不能偷懶,不能用字串去組合SQL指令,而要用參數才安全。最後,要記得常看記錄檔,才能發現、追蹤異常。

熱門新聞

Advertisement