http://www.ithome.com.tw/itadm/article.php?c=50860&s=5
絕招3 縱深防禦,用隔離與監控來鞏固
資料庫是SQL Injection攻擊的主要目標,理論上,採取徹底的隔離策略,就能有效降低潛在的入侵風險。但實務上,需針對不同的建置階段,採取不同的防範方式,串連成完整的防禦面,才能避免防護缺口。
一般常見的資料庫防護作法,是在網站開發階段,透過應用程式架構的調整,建立應用程式與資料庫間的中介層,來避免網頁程式直接接觸資料庫,即使開發人員疏於檢查輸入資料,也不易影響後端資料庫。
例如PayEasy採取的4層網站架構,讓網站應用程式,必須透過EJB(Enterprise Java Bean)的函式,用參數傳遞方式來與後端資料庫溝通。儘管後來出現各種SQL Injection威脅,PayEasy也無須修改太多前端網頁的程式,透過中介層的轉換,惡意程式的攻擊指令會自動被篩選掉,不易造成威脅。
像PayEasy這種運用應用程式架構將資料庫存取層抽離出來的作法,微軟TechNet MVP李明儒認為:「由有經驗的資深人員負責開發,不讓一般開發人員直接存取資料庫。除可確保資料庫安全性以外,還能避免無效率的SQL查詢語法拖垮資料庫效能。」
不過,企業必須在開發階段就進行應用程式架構的隔離,才能發揮效果,若等到網站完成後再變動架構,所需耗費的程式修改資源,幾乎等同重新開發,相當困難。
避免開放過高的資料庫權限
此外,還有另外一個常被忽略的防護關鍵,就是強化資料庫權限控管與清查。即使在網站建置初期忽略了這個作法,也可以事後補強。
透過資料庫權限的清查,可以更嚴格地管制資料庫的使用,對每一支應用程式,只開放所必須的最小權限。李明儒建議:「甚至可限制所有存取,都需透過事先寫好的預存程序進行,讓所有程式動作,都能在掌握中,可有效防止系統意外失控。」
不過,這種對資料庫權限的精準控管,需要有經驗的資料庫人員來處理。一般企業的開發人員,往往不熟悉資料庫的權限設定方式與指令,遇到資料庫讀取 權限不足時,便任意開放更大的使用權限,甚至直接使用最高權限的管理帳號,導致駭客能透過資料庫系統,間接控制了整個作業系統環境。
例如,許多ASP網頁開發人員,往往使用作業系統的管理員身分安裝MS SQL伺服器,當駭客取得MS SQL的控制權時,透過延伸預存程序,如xp_cmdshel\等指令,就能執行所有系統管理員才能使用的指令。
若能依據不同使用需求,降低資料庫使用權限,就能增加入侵難度,進而降低駭客入侵意願。即使,受限於網站功能需求,建置完成後不易調降太多權限, 數聯資安研發處副總經理張裕敏建議:「企業可以定期監控資料庫與系統的帳號狀態,若發現可疑帳號,或權限異常,趁早刪除,就能即時阻止更進一步的危害。」
透過預先設計的隔離架構與權限管制,能增加入侵門檻,產生資料庫防護效果。不過,在日常維護中,定期的監控和清查資料庫狀態,也有助於鞏固資料庫。文⊙王宏仁