GDAblog-亚洲首款交互式Android反编译器

恶意代码(僵尸、木马、蠕虫、RAT)常常表现的异常流量行为举例分析

 

 

 1.获取C&C

恶意代码为了对目标进行控制或者进行资料窃取,首先第一步是需要获取到控制命令服务器(C&C)来和黑客进行通信和交换信息,通过获取C&C的方式有:

1) 直接获取IP或者域名地址:内嵌到恶意代码中,不产生流量

2) 间接获取IP或者域名:通过微博、QQ空间、云服务器等方式,会产生流量,下面以恶意代码通过QQ空间预留的接口来获取C&C为例。腾讯预留的QQ空间接口可以获取到qq的昵称,目前很多黑客为了防止自己被追踪到,通过申请一个临时QQ号,并且将QQ昵称设置为C&C的IP,恶意代码就通过该接口读取qq昵称来上线连接。如请求如下链接:

http://users.qzone.qq.com/fcg-bin/cgi_get_portrait.fcg?uins=87732

返回的数据形式如下:

portraitCallBack({"877322834":["http://qlogo3.store.qq.com/qzone/877322834/877322834/100",2804,-1,0,0,0,"192.168.23.21",0]})

然后恶意代码就可以从返回的数据中提取该IP地址,由于一般正常的QQ的昵称都不会是一个IP地址,所以根据这种特性,我们可以提取出可以监测该类异常流量的特征:

tcp.payload=="portraitCallBack({"&&$inc"qq.com/qzone"&&$inc~",\"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$\","

 很多黑客常常不会一直和被控机保持链接,为了更好的隐蔽自己,会在一些时段暂停控制端,暂停期间恶意代码为了能够随时待命,会进行轮训链接C&C的动作,间隔时间相同。因此通过计算连接同一个IP的间隔时间约等计算来监测。

 2.上线

 黑客为了能够更好更有针对性的对目标机进行攻击,是需要了解目标机的一些环境信息,比如操作系统及版本、计算机用户名、CPU信息、内存信息等等,这些信息通过都是以上线包的形式发送给黑客。当然不同的恶意代码上线包不同,所以上线包内容和格式变化也比较大(有加密的或者进行编码的)

 TCP上线特点:上线数据主要用于回传受控机的环境信息、计算机名、操作系统等相关信息给控制端做判定,数据包长度通过不会太长,大部分不超过300个字节,由于这些信息在处理时存在固定缓冲中,所以未填满的地方会存在大量的0数据。

 

所以我们可以提取如下的特征进行上线数据的监测

tcp.payload.len<"300"&&tcp.payload^"MB"&&tcp.payload^"MHz"&&tcp.payload^"Win"&&tcp.payload^"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"&&tcp.payload~"Win(\x20|\w+|\d+){2,}"&&tcp.payload~"\x00{5,}( \x20|\d){3,}MB"&&tcp.payload~"\x00{5,}(\x20|\d){3,}MHz"

HTTP协议上线数据事例及监测特征

Post方式的流量特征

http.method==POST&&http.msgbody0.len<”300”&&http.msgbody0^"MB"&&http.msgbody0^"MHz"&&http.msgbody0~"Win(\x20|\w+|\d+){2,}"&&http.msgbody0~"(\x20|\d){3,}MB"&&http.msgbody0~"( \x20|\d){3,}MHz"

Get方式的流量特征:

http.method==GET&&http.url.len<”300”&&http.url^"MB"&&http.url^"MHz"&&http.url~"Win(\x20|\w+|\d+){2,}"&&http.url~"{5,}( \x20|\d){3,}MB"&&http.url~"( \x20|\d){3,}MHz"

3.验证:

 恶意代码为了确保上线的控制端是其合法的控制端,因此很多恶意代码特别是僵木蠕会有一个验证数据包的收发用于验证控制端的合法性,不同恶意代码验证数据包不同,验证特征可以用于精确识别木马,比如属于那一个家族的木马。

 4.心跳:

 心跳包是僵尸和木马通讯过程中用于保证稳定连接的数据包,通常具有一定频率,并且数据包长度固定,很多僵尸和木马的心跳包在同一个回话期是相同的。可以用频率时间已经数据包长度相同来进行监测。

 5.控制、回传阶段、传播等

 恶意代码上线成功后会接受控制端命令执行相应的功能,此阶段会产生大量的复杂的流量,我们可以根据常见的恶意代码操控的规律中提取能够进行广泛监测的特征,下面我们举几个例子。

1) 在恶意代码中一个比较常见的行为就是下载扩展恶意组件到目标上运行,而为了防止web的url的安全检查机流量分析人员的察觉,很多恶意代码将Url做了该进。因此往我们会发现很多正常的url,比如请求图片、视频、word文档等正常的文件,但是实际上下载的是可执行文件现象。根据该特点我们提前可以进行普遍监测的特征

http.method==HTTP_GET&&http.url[http.url.len-4]==sarray(".gif",".jpg",".bmp",".txt",".docx",".doc",".pdf")&&http.msgbody1=="MZ"&&http.msgbody1^sequence("!This\x20program cannot\x20be\x20run\x20in\x20DOS\x20mode.","PE")&&dwordget(http.msgbody1,dwordget(http.msgbody1,0x3c))==0x00004550

2) 恶意代码的一大传播路径便是通过邮件的方式进行传播,而有一部分恶意代码传播时为了欺骗目标,把文件名有意义的文字放在文件名前面,跟着个类似于.doc后缀,但是在这个.doc后面存在一长串的空格,最后才是其真实的文件后缀比如.exe,这让人误认为该文件为doc而打开。

根据该特点我们根据XDS的邮件协议解析(XDS自动完成邮件协议的解码)提取出了可以监测此类行为的恶意攻击事件,

smtp.filename.len>20&&base64d(smtp.filename)~"(.gif|.jpg|.bmp|.txt|.docx|.doc|.pdf) {5,}.exe"

3)在很多恶意代码的控制过程中,往往为了采集更新的信息会获取目标系统的当前运行环境信息,比如获取当前系统运行的进程及开启服务等信息,我们可以通过此类信息的特点进行监测。

服务列表信息监测

tcp.payload^"ApplicationLayer\x20Gateway\x20Service"&&tcp.payload^"Computer\x20Browser"&&tcp.payload^"Indexing\x20Service"&&tcp.payload^"Logical\x20Disk\x20Manager"&&tcp.payload^"COM+\x20Event\x20System"

进程列表传输流量监测

tcp.payload^"System\x20Process"&&tcp.payload^"System"&&tcp.payload^"smss.exe"&&tcp.payload^"csrss.exe"&&tcp.payload^"winlogon.exe"&&tcp.payload^"services.exe"&&tcp.payload^"lsass.exe"&&tcp.payload^"svchost.exe"

4) DNS隐秘通过回传,在恶意代码中有一部高级的木马采用DNS隐秘通道进行窃取信息的回传,而窃取信息部分都是进行加密或者编码的。类似于如下的流量。

带有加密信息的DNS域名请求流量

带有BASE64编码的DNS域名请求流量

因此,在正常的DNS请求中,域名是不可能存在不可见字符串并且不存在像base64这样编码特征的,所以根据该特点我们可以通过提取特征监测该类异常dns请求流量。

监测带有加密后的dns异常域名解析请求

dns.qry.name!~"(\w|!|@|#|\$|%|\^|&|\*|\(|\)|=|\+|\[|\]|\{|\}|\\|\||\/|\?|<|>|,|.|-){5,}"

监测带有base64编码的dns异常域名请求

dns.qry.name~"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$"