自去年下半年开始,很多网站被恶意代码说困扰,攻击者在动态网页的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免费使用。