http://www.ithome.com.tw/itadm/article.php?c=50860&s=4
絕招2 中途攔截,及時打斷攻擊路線
從SQL Injection攻擊地圖來看,不論是MS SQL/ASP或是MySQL/PHP,從前端網頁入侵到後端資料庫的過程,是一連串的攻擊組合,必須一氣呵成,才能達到入侵的效果。數聯資安研發處副總經理張裕敏說:「只要打斷他的動作,就能阻止。」
之所以會發生SQL Injection的關鍵,是因為不少開發人員沒有檢查使用者輸入內容,就直接組合成SQL語法。微軟TechNet MVP李明儒說:「無形中等於賦予了使用者對資料庫直接下達SQL指令的權力。」如果,資料庫伺服器還被授與管理權限,使用者透過SQL指令,就幾乎能使 用所有管理者功能。
李明儒認為:「原則上,只要將使用者輸入的內容,一律採用參數傳遞給資料庫的方式,SQL Injection的風險就不存在。」因此,不少資安專家通常建議,企業在開發網站時,透過安全程式碼的開發規範,強化對使用者輸入資料的檢查,並避免使 用直接組合SQL語言的方式,來存取後端資料庫。
不過,開發人員難免會出錯,加上慣於重複利用舊有程式碼,問題程式碼的影響很容易繼續蔓延。對已完成建置的網站,也很難在短時間內完成所有的程式修補,尤其臺灣常用疊床架屋的系統開發方式,讓修補工作難上加難。
但是,若分析SQL Injection攻擊地圖,上述防護方法只是瞄準其中一個關鍵過程(攻擊地圖中的防護對策2、防護對策3),其實還有很多企業可以著力的防護點。針對不同的防護點,企業還有很多可以採取的防護措施。
隨著資料庫功能不同,SQL Injection的攻擊方式,從攻擊進入資料庫以後,也有所不同。
監控不明帳號與資料表,防止駭客取得更高權限
以臺灣常見的MS SQL Server搭配的ASP環境為例,防護重點是要注意可疑帳號。只要事先做好資料庫權限的管制,同時移除不必要的延伸預存程序(Extended Stored Procedure)和系統預存程序(System Stored Procedure),就可避免駭客使用這些預存程序,來提高自己的執行權限,或間接執行作業系統功能。
平時維護時,需注意作業系統中突然出現的不明帳號,那可能就是駭客試圖擴張控制範圍的線索,及時查核這些帳號,刪除可疑帳號,同時變更其他帳號的密碼,就能阻止駭客繼續入侵。
然而,在MySQL/PHP環境中,沒有類似MS SQL Server的延伸預存程序。駭客攻擊重點轉為透過MySQL資料表讀取外部檔案,再將惡意程式寫入系統中執行。因此,強化檔案目錄的權限控管,嚴格限制 可存取系統目錄和網站目錄的帳號,就能降低駭客入侵的機會。不少自動化攻擊工具,還會留下攻擊用資料表的記錄,留意不明資料表的出現,也能發現入侵的徵 兆。
只看Log記錄,不一定能及時發現
還要注意的是,入侵手法不斷翻新, MIS要小心過時的錯誤認知,避免搜尋入侵徵兆時,浪費時間。李明儒提醒, 有些MIS會誤以為SQL Injection攻擊時,會在網站Log記錄中,留下一連串明顯的入侵指令記錄。
但是,李明儒指出,幾個月前發生的Mass SQL Injection攻擊事件,駭客透過自動化工具進行盲目攻擊,攻擊指令只有短短幾行,不容易在Log記錄中發現。攻擊成功,甚至不會觸發HTTP Status 500 Error的錯誤訊息。只是依賴Log記錄,不一定能及時發現網站遭遇SQL Injection攻擊的痕跡,需組合不同的監控方式,發現駭客入侵的過程,並適時阻止,才能防止災情繼續擴大。
文⊙王宏仁