自去年下半年開始,很多網站被惡意代碼說困擾,攻擊者在動態網頁的SQL數據庫中注入惡意的HTML < SCRIPT>標簽。這種腳本攻擊行為在2008年第一季度開始加速傳播,并繼續影響有漏洞的Web應用。
這些Web應用存在以下幾點共性:
使用ASP作為編程代碼;
使用SQL Server數據庫;
應用程序代碼根據URI請求字符串生成動態SQL查詢(http://consoto.com/widgets.asp?widget=sprocket)。
這代表了一種新的SQL注入(SQL injection)途徑(http://msdn.microsoft.com/en-us/library/ms161953.aspx)。在過去,SQL注入攻擊的目標通常是具有安全漏洞或特殊數據庫結構的Web應用。如今這種攻擊的不同在于,攻擊能夠利用任何URI請求字符串來創建動態SQL查詢,進而攻擊任何存在的漏洞。在http://blogs.technet.com/neilcar/archive/2008/03/15/anatomy-of-a-sql-injection-incident-part-2-meat.aspx可以找到更多技術詳情和代碼。
這種攻擊并非利用了Window、IIS、SQL Server或者其他底層代碼漏洞,相反地它利用了在這些基礎平臺上運行的WEB應用漏洞。Microsoft已經對這些攻擊進行了徹底的調查,并發現這些攻擊和以往微軟產品的補丁和0-day漏洞無關。更多信息訪問http://blogs.technet.com/msrc/archive/2008/04/25/questions-about-web-server-attacks.aspx。
正如上面所指出的,SQL注入攻擊在近年來呈現一種增長的趨勢。至少兩點重要因素促使其增長:
一方面,自動化的惡意攻擊工具。SANS在http://isc.sans.org/diary.html?storyid=4294討論了這類工具。惡意攻擊工具使用搜索引擎來尋找存在漏洞站點并進行SQL注入。
另一方面,網絡中存在的僵尸計算機正在進行SQL注入攻擊,并以此來廣泛傳播僵尸主機。SecureWorks上對此案例進行了分析。http://www.secureworks.com/research/threats/danmecasprox/
一旦某臺服務器被該漏洞所攻擊,它將被插入 < SCRIPT>標簽來指向某個惡意的JS文件。雖然這些文件的內容不同,但都嘗試利用已經被修復的Micfosoft漏洞以及第三方ActiveX控件漏洞,對用戶計算機發動攻擊。由于這些腳本相對獨立存在,這些腳本可以被快速修改,從而利用新的客戶端漏洞。
IT/數據庫管理員建議
有很多措施是IT管理員或者數據庫管理員應該在其管理的基礎壞境中必須采取的,通過這些措施可以幫助管理員以減少風險并對可能出現的威脅進行及時響應。
* 檢查IIS日志和數據表
由于攻擊程序是通過URI請求字符串來觸發,管理員們可以檢查IIS日志中的異常請求。具體實施參考微軟technet中相關文章 http://blogs.technet.com/neilcar/archive/2008/03/15/anatomy-of-a-sql-injection-incident-part-2-meat.asp。在codeplex 網站上有自動化攻擊工具的實例演示。http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=WSUS&ReleaseId=13436
如果IIS日志表明服務器可能已經被利用,那么下一步要檢查相應的Web應用所使用的數據庫中的表格,并找出附加在文本內容中的 < SCRIPT>標簽。
提示:IIS服務器絕不應當在工作環境中關閉日志功能。存儲并管理IIS產生的日志是十分必要的,缺少IIS日志對于響應安全事件將造成巨大的危害。
* 如果在后端數據庫運行了第三方代碼,用戶有必要考慮獨立軟件開發商(ISV,Independent Software Vendors)所可能造成的SQL注入影響。
在使用第三方ASP Web程序的情況下,管理員應當聯系第三方應用程序提供商,來確定他們的產品不受SQL注入攻擊的影響。
* 確保使用數據庫的Web應用程序最少訪問權限。
管理員確保需要使用Web應用的SQL用戶具有最小權限是十分必要的。Web應用程序不應當給予以諸如”sysadmin”的服務器管理員權限或者”db_owner”的數據庫權限。SQL安全配置白皮書《best practices for setting up and maintaining security in SQL Server 2005》提供了關于SQL Server安全的多方面建議。: http://download.microsoft.com/download/8/5/e/85eea4fa-b3bb-4426-97d0-7f7151b2011c/SQL2005SecBestPract.doc 提供了關于SQL Server安全的多方面建議。
Web開發者建議
這里有一些論述在編碼時如何防御SQL注入的優秀文檔。由于攻擊行為通常影響有漏洞的Web應用程序代碼,所以完全防御他們的唯一方法是避免在代碼中存在的漏洞。開發代碼中任何需要使用外部資源(一般指從URI請求字符串)數據來動態生成SQL請求的地方都應當被重點關注。一旦代碼漏洞被缺人,開發者需要謹慎去解決它。
* 解釋-SQL注入、ASP.NET和ADO.NET :
http://msdn.microsoft.com/en-us/library/bb671351.aspx
上面的文檔同時包含如下相關主題《How To: Protect From SQL Injection in ASP.NET》 http://msdn.microsoft.com/en-us/library/ms998271.aspx(同樣適用于ASP)。
這里有一個非常有用的視頻(鏈接可能無效):http://channel9.msdn.com/wiki/default.aspx/SecurityWiki.SQLInjectionLab。
* 實施SQL注入相關信息:
http://msdn.microsoft.com/en-us/library/ms161953.aspx
* ASP代碼中的SQL注入(不同與ASP.NET):
http://msdn.microsoft.com/en-us/library/cc676512.aspx
如何在ASP中執行SQL Server存儲: http://support.microsoft.com/kb/q164485
* Microsoft SDL(The Microsoft Security Development Lifecycle)給出了防御SQL注入指南。指南中提供了三種策略來根除SQL注入攻擊:
1. 使用SQL參數查詢
2. 使用存儲策略
3. 使用SQL單一執行許可
Michael Howard在BLOG中談論如何執行這些安全策略。
http://blogs.msdn.com/sdl/archive/2008/05/15/giving-sql-injection-the-respect-it-deserves.aspx
同時,《Writing Secure Code(第二版)》指導了如何防御此類攻擊(詳見399-411頁)。
* 減輕SQL注入:使用參數查詢。使用參數化查詢的好處是它將執行代碼(例如SELECT語句)和數據(由程序使用者提交的動態信息)分開。這種方法可以防對由用戶執行而產生的惡意代碼。
Part 1:
Part 2:
在ASP代碼中過濾SQL注入(或者黑名單關鍵字),我們認為可作為臨時的替代方法,因為在現實中并不修復錯誤的根源。(例如,代碼仍然是有漏洞的,仍有可能繞過過濾機制)
來自IIS團隊的Nazim解釋了如何過濾的細節信息:http://blogs.iis.net/nazim/archive/2008/04/28/filtering-sql-injection-from-classic-asp.aspx。
如果你仍然不清楚該如何下手,所有使用特定ASP代碼訪問數據庫,尤其是使用由用戶提交的數據代碼應首先被檢測。
最終用戶建議
最終用戶應復查這些關鍵信息(http://www.microsoft.com/protect/default.mspx)。另外,這里也有一些特殊步驟來幫助用戶保護自身。
* 有鑒別選擇的訪問網站——用戶需要意識到,即使是信任度高的網站同樣也會被漏洞所影響。
有選擇的訪問網站有助于減少了用戶暴露在漏洞下的風險。必須留意一場行為,了解面臨的風險,并實施本部分提供的其他建議。
* 及時更新安全補丁
由于惡意代碼通常利用了已知的漏洞,因此用戶應當確保系統中的微軟和第三方軟件已經打好了最新的安全補丁。微軟安全更新可以通過瀏覽http://update.microsoft.com;更多信息可瀏覽http://www.microsoft.com/protect/computer/updates/OS.aspx 。
* 禁用不必要的ActiveX控件和IE加載項目。
用戶應禁用所有不必要的ActiveX控件和IE加載項目。根據KB883256(http://support.microsoft.com/kb/883256)的方法在Windows XP Service Pack2或者更新版本中來實施本步驟:
1. 打開IE。
2. 在“工具”菜單下點擊“管理加載項”。
3. 選擇加載項名稱。
4. 執行如下方法:
* 點擊更新ActiveX來更新控件,本方法并不必適用于所有的加載項。
* 點擊”啟用”,而后點擊”確定”,來啟用加載項。
* 點擊”禁用”,而后點擊”確定”,來禁用加載項。
以上步驟,可能需要用戶重啟IE來確保啟用/禁用插件操作完成執行。
對于更早的操作系統,根據KB154036(http://support.microsoft.com/kb/154036)的說明進行操作。
* 減少第三方瀏覽器受攻擊風險的步驟。
如果你使用了IE之外的瀏覽器,那么用戶應當確保你安裝的是最新版本,同時應當禁用不必要的擴展和加載項。目前流行的瀏覽器信息可以在如下鏈接找到:
Firefox - http://support.mozilla.com/en-US/kb/Firefox+Support+Home+Page
Opera - http://www.opera.com/support/
Safari - http://www.apple.com/support/safari/
* 更新反惡意程序軟件
終端用戶應當確保安裝了最新的殺毒軟件和反間諜軟件,并且保持他們的更新。用戶可以在http://www.microsoft.com/protect/computer/antivirus/OS.aspx和http://www.microsoft.com/protect/computer/antispyware/OS.aspx找到更多信息。同時用戶可以在 http://onecare.live.com/standard/en-us/install/install.htm申請90天的Windows Live OneCare免費使用。


