吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 19758|回复: 21
收起左侧

[分享] 病毒分析流程及特征提取

  [复制链接]
Cherishao 发表于 2018-2-8 17:30
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码:52pojie,否则会导致论坛被杀毒软件等误报,论坛有权随时删除相关附件和帖子!
病毒分析分区附件样本、网址谨慎下载点击,可能对计算机产生破坏,仅供安全人员在法律允许范围内研究,禁止非法用途!
禁止求非法渗透测试、非法网络攻击、获取隐私等违法内容,即使对方是非法内容,也应向警方求助!

0x00 概述

这几天,在吾爱上看到了许多病毒,木马分析方面的很优秀文章,学到了很多东西,于是想整理一篇病毒分析方面比较规范化,流程化的帖子,本文借鉴了“熊猫正正”的分析心得,参考了“龙飞雪”在病毒行为分析方面非常完善的分析实列,“lipss”的查杀方法及“GleamJ”病毒特征提取方面的建议。

如有不足,欢迎各位坛友,在下方留言建议。

0x10 病毒分析的流程

1、拿到一个样本不管是什么,先弄清它是什么文件格式,这里就要求你要对不同的文件格式有所了解

window(PE),linux(ELF),android(dex,ELF),ios/mac(mach-o)

2、然后看样本有没有壳或加密,如果有壳就脱壳,有加密就看能不能解密

3、脱完壳,解完密,后面就是动+静态分析了

window(od,windbg),linux(gdb,edb),android(jeb,ida),ios/mac(lldb) #动态调试

ida,010Editor,readelf,objdump,string... #静态调试

4、网络抓包工具

模拟真实运行环境,抓取数据包进行分析

wireshark,tcpdump,Charles,BrupSuite

5、前期了解

分析系统级的样本的时候,我们还需要对相应的系统有一个大致的了解,了解相应系统的启动过程,每种系统的自启动方式以及注入方式都不同,我们要对这些不同的系统都比较了解。

6、快速定位

当分析一个样本,有可能程序很大,我们要有快速定位问题的能力,针对不同的样本,要分析不同的功能点,真正工作过程中分析一个样本,是需要具备快速响应,解决问题的能力,同时在最快的时间内输出相应的分析报告,这个就要靠平时多锻炼了,有一种“阅片无数”的感觉。

7、实战是检验真理的标准

有了上面的一些基础,就是多实战了,可以从各个渠道下载不同类型的样本进行练习,积累经验。

附上 Freebuf传送门 一次XorDDos变种样本的分析实战记录

0x11 样本信息

一般主要分为以下几个方面来描述样本唯一性

文件名称: #[可为md5值]

文件大小:

病毒名称:

MD5:

Sha-1:

CRC :

0x12 分析环境及工具

环境:win7 X64位 /Winxp 32位

工具:OD、IDA、MD5

0x13 分析目标

分析病毒的恶意行为及生成的相关文件的功能

0x14 样本行为

大致行为会有如下这些,判断杀软,绕过杀软,安装,启动服务,传播病毒,留后门,清除痕迹。这里一一个大佬的行为总结为栗

病毒行为总结-文字版

0x1.打开与当前病毒进程文件同名的信号互斥量,判断信号互斥量是否存在,防止病毒行为的二次执行。

0x2.通过注册表"SOFTWARE\JiangMin\"和"SOFTWARE\rising\",判断江民、瑞星杀毒软件的是否存在。

0x3.创建进程快照,判断360的杀软进程360sd.exe、360rp.exe是否存在;如果存在,则结束360杀毒的进程360sd.exe和360rp.exe。

0x4.通过注册表"SOFTWARE\JiangMin\"和"SOFTWARE\rising\",判断江民、瑞星杀毒软件是否存在;如果江民、瑞星的杀软存在,则创建线程在用户桌面的右下角伪造360杀软的弹窗界面迷惑用户。

0x5.创建线程利用IPC入侵用户的主机,种植木马病毒。利用弱口令猜测用户主机的用户名和密码,如果入侵成功则拷贝当前病毒进程文件到用户主机系统中,然后运行病毒文件,创建病毒进程。

0x6.创建线程,在移动设备盘中释放病毒文件anturun.inf,进行病毒的传播。

1.判断遍历的磁盘是否是移动设备盘,如果是移动设备盘进行病毒文件anturun.inf的释放和病毒的传播。

2.判断遍历的移动设备盘中是否存在anturun.inf文件夹;如果存在,则将其改名为随机字符组成的文件夹名称;删除原来正常的anturun.inf文件,创建病毒文件anturun.inf。

3.为病毒文件anturun.inf创建执行体病毒程序recycle.{645FF040-5081-101B-9F08-00AA002F954E}\GHOSTBAK.exe即拷贝当前病毒文件,创建病毒文件recycle.{645FF040-5081-101B-9F08-00AA002F954E}\GHOSTBAK.exe并设置该病毒文件的属性为系统、隐藏属性。

0x7.通过注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentContaRolset\Services\Jklmno Qrstuvwx Abc判断病毒服务"Jklmno Qrstuvwx Abc"是否已经存在。

0x8.如果病毒服务"Jklmno Qrstuvwx Abc"不存在,则创建病毒服务,然后启动病毒服务。

1.判断当前病毒进程是否是运行在"C:\WINDOWS\system32"目录下;如果不是,则拷贝当前病毒进程的文件,创建和释放随机字符组成名称的病毒文件,如"C:\WINDOWS\system32\tkkiwk.exe"到"C:\WINDOWS\system32"目录下。

2.使用释放到"C:\WINDOWS\system32"目录下的病毒文件tkkiwk.exe创建病毒服务"Jklmno Qrstuvwx Abc";如果该病毒服务已经存在并且打开病毒服务失败,则删除病毒服务、删除病毒文件自身;如果病毒服务不存在,则启动病毒服务"Jklmno Qrstuvwx Abc"

3.如果病毒服务"Jklmno Qrstuvwx Abc"启动成功,则将病毒服务的信息写入注册表"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ "Jklmno Qrstuvwx Abc"的键值对"Description"中。

0x9.如果病毒服务"Jklmno Qrstuvwx Abc"已经存在,则启动病毒服务。

1.为服务"Jklmno Qrstuvwx Abc"设置例程处理函数,用于控制服务的状态。

2.设置创建的病毒服务的状态,创建互斥信号量"Jklmno Qrstuvwx Abc"并初始化网络套接字。

0x10.创建线程,主动向病毒作者服务器"zhifan1314.oicp.net"发起网络连接留下后门,然后将用户的电脑的信息如操作系统的版本信息、CPU硬件信息、系统内存等信息发送给远程控制的病毒作者的服务器上。

1.主动向病毒作者服务器"zhifan1314.oicp.net"发起网络连接。

2.获取用户的电脑信息如操作系统的版本信息、CPU硬件信息、系统内存等信息,将其发送到病毒作者的服务器网址"zhifan1314.oicp.net"上。

0x11.接受病毒作者的从远程发送来的控制命令,解析远程控制命令进行相关的控制操作,尤其是创建很多的网络僵尸线程,导致用户的电脑和系统主机产生”拒绝服务”的行为。

1.控制命令1-"2",创建很多网络连接操作的僵尸线程,IP地址为"zhifan1314.oicp.net"。

2.控制命令2-"3",创建浏览器进程"C:\windows\system32\Program Files\Internet Explorer\iexplore.exe"并创建很多发送Http网络请求的网络僵尸线程,IP地址为"zhifan1314.oicp.net"。

3.控制命令3-"4",创建很多网络操作的僵尸线程,IP地址为"zhifan1314.oicp.net"。

4.控制命令4-"6",通过互斥信号"LRscKSQhdHZ0d2EiHCYzYSEoN21rendsQw=="判断病毒行为是否已经执行;如果已经执行,则删除病毒服务"Jklmno Qrstuvwx Abc"并删除病毒服务创建的注册表"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ "Jklmno Qrstuvwx Abc"。

5.控制命令5-"16"、"17",从指定网址下载病毒文件到系统临时文件目录下,然后运行病毒文件,创建病毒进程。

6.控制命令6-"18",如果互斥信号量"Jklmno Qrstuvwx Abc"已经存在,则释放信号互斥量"Jklmno Qrstuvwx Abc";从指定网址下载病毒文件到系统临时文件目录下,然后运行病毒文件,创建病毒进程;如果病毒服务"Jklmno Qrstuvwx Abc"已经存在,则删除病毒服务"Jklmno Qrstuvwx Abc",结束当前进程。

7.控制命令6-"19",为当前病毒进程,运行iexplore.exe程序,创建IE进程。

8.控制命令6-"20",为桌面窗口,创建iexplore.exe进程。

0x12.死循环,创建无限的线程-用以创建网络僵尸线程和接受病毒作者的远程控制,具体的行为上面已经分析的很详细了(不重复),只不过这次病毒进程主动连接的病毒作者的服务器IP 地址是104.107.207.189:8749。

附上 吾爱传送门 一枚DDOS木马后门病毒分析

0x13 查杀方法

以:一个IPC$的病毒为例

0x131 提取病毒特征,利用杀毒软件查杀
Ghijkl Nopqrstu Wxy #对应hex 
4768696A6B6C204E6F70717273747520577879 # hex
0x132 手工查杀步骤或是工具查杀步骤或是查杀思路

1、停止【Ghijkl Nopqrstu Wxy】名称的服务

2、删除【Ghijkl Nopqrstu Wxy】键项的注册表

3、删除【C:\windows\system32\hra33.dll】文件

4、清空除了C:\windows\system32\lpk.dll外,所有zip、rar、exe下的lpk.dll文件

附上 传送门:一份通过IPC$和lpk.dll感染方式的病毒分析报告

0x20 病毒特征的提取

0x21 为什么要提取病毒特征?

简单而直白:最直接的判断所感染的东西是否为病毒,为了更好的对病毒进行查杀。

0x22 病毒特征提取的方法

0x220 利用哈希值作为病毒的特征

比如计算出病毒的MD5,这样只要遇到相同MD5的文件,就可以将其判定为病毒,这也是目前云查杀所倚重的方式。
这种方式最大的缺点是,病毒与特征之间是一对一的关系,即便病毒仅仅发生了一个字节的变化,那么这个特征也就失效了。

0x221 选取病毒内部的特征字符串

比如“熊猫烧香”里面的whboy还有其它一些特色字符,只要发现目标程序中有这些字符,则判定为病毒。这种方式相对于利用哈希值作为特征,具有更好的通杀性,但是如果病毒作者修改了自身的名称,那也就能够轻易躲避掉这种查杀方式了。

0x222 双重校验和

其实这种方法类似于上述方法的集合,也就是在病毒文件内部选取两个位置(这两个位置可以是特色字符也可以是特色代码),计算这两段位置的哈希值作为特征。这种方法的好处是,不论选取多长的特征,那么最终生成的哈希值是固定的,这样就便于存储。

0x223 选取病毒内部的特色代码

事实上0到2这几种方式,都是比较初级的方法,接下来以几个实列,说明怎么才是一个相对较好的病毒特征。

实列一

以一个IPC$的病毒为例

Ghijkl Nopqrstu Wxy #特征值

4768696A6B6C204E6F70717273747520577879 #对应的hex

其实这条特征选取的就是病毒体内的特色字符串,将其转化为ASCII码的形式作为特征。但是这类以病毒“名称”作为特征的方法,最大的问题是通用性不好,病毒只要稍微修改一下自身的名称,那么这条特征也就失效了。利用病毒名称作为特征,也仅仅是比利用哈希值作为特征要稍微强一些。而我们其实还是希望能够利用最少的特征匹配到更多的文件,要具备通用性,还要尽可能地没有误报。所以可以考虑利用病毒体内比较有特色的代码作为特征,举例来说,对于这个病毒而言,它有这样一段代码:

#第一段
.00403651: C645F84F                       mov         b,[ebp][-8],04F ;'O'#[-8] 用hex F8
.00403655: C645F970                       mov         b,[ebp][-7],070 ;'p'
.00403659: C645FA65                       mov         b,[ebp][-6],065 ;'e'
.0040365D: C645FB6E                       mov         b,[ebp][-5],06E ;'n'

#下面一段
.00403899: C645A457                       mov         b,[ebp][-05C],057 ;'W'
.0040389D: C645A572                       mov         b,[ebp][-05B],072 ;'r'
.004038A1: C645A669                       mov         b,[ebp][-05A],069 ;'i'
.004038A5: C645A774                       mov         b,[ebp][-059],074 ;'t'
.004038A9: C645A865                       mov         b,[ebp][-058],065 ;'e'
.004038AD: C645A946                       mov         b,[ebp][-057],046 ;'F'
.004038B1: C645AA69                       mov         b,[ebp][-056],069 ;'i'
.004038B5: C645AB6C                       mov         b,[ebp][-055],06C ;'l'
.004038B9: C645AC65                       mov         b,[ebp][-054],065 ;'e'

特征选取

其实这里就可以把第一段代码中的C645F84FC645F970C645FA65C645FB6E作为特征。

通用性考虑

考虑到通用性,还需要把地址,比如“b,[ebp][-8]”中的“[-8]”,也就是十六进制的F8利用通配符代替,因此这条特征最终可以这样写:

C645??4FC645??70C645??65C645??6E

那么这就是一条通杀性比较强的特征了。

在我每天分析的病毒样本中,利用这种逐个字符放到缓冲区的情况,还是比较常见的,因此这是非常好的特征,能够应对千千万万的未知病毒了。

这个木马中类似的写法还有不少,可以多提取几条,用“or”连接。假设程序中一共有五个地方采用了这种形式,那么可以取舍一下,比如出现三次就报毒,这样通杀性就更强了。

以算法名为特征
另外,如果程序是利用自己发明的算法生成的文件名,那么这个算法所对应的十六进制代码,也可以提取出来作为特征,这也是很强的特征。可以很好地查杀这一类的木马病毒。而且一般来说还不会造成误报。
【这种方法有个前提,就是目标文件没有被加壳,如果是加壳的情况,那么就需要结合自动脱壳程序或者sandbox来首先脱壳,再进行特征提取并查杀】
动态查杀

这里既然提到了sandbox,那么我还想讲讲另一种动态的查杀方法,也就是结合sandbox所跑出来的日志文件,选取合适的特征。举个例子来说,之前遇到过一种叫做“永恒之石”的勒索病毒,可以跑出类似这样一段日志:

System.IO.Directory.CreateDirectory("C:\\Program Files\\Microsoft Updates")
...
System.String.Intern()["\\svchost.exe"]
...
System.String.Concat()["C:\\Program Files\\Microsoft Updates\\svchost.exe"]
...
Stetem.IO.FileExists("C:\\Program Files\\Microsoft Updates\\svchost.exe")
...

这段日志所监控到的是,病毒在C:\Program Files\目录里面创建了名为Microsoft Updates的文件夹,然后在其中又创建了名为svchost.exe的文件(实际上svchost.exe就是病毒自身复制过去隐藏的)。其实这就是非常可疑的行为了,正常程序不会这么干,那么就可以写出这样的特征:

createDir = System.IO.Directory.CreateDirectory("C:\Program Files\Microsoft Updates")

createFile = System.String.Concat()["C:\Program Files\Microsoft Updates\svchost.exe"]

Detect = **createDir -> createFile

也就是只要出现Detect这样的序列,那么就直接报毒了。当然了,为了严谨起见,可以多选取几个类似于这样的特征。

附上 吾爱传送门 聊聊怎样才算是好的病毒特征

免费评分

参与人数 6吾爱币 +12 热心值 +6 收起 理由
xiaofengzi + 1 + 1 用心讨论,共获提升!
边缘人静心 + 1 我很赞同!
粉藍弟 + 1 + 1 用心讨论,共获提升!
Hmily + 7 + 1 用心讨论,共获提升!
离拾 + 1 + 1 非常详细!点个赞
ICEY + 2 + 1 不明觉厉

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| Cherishao 发表于 2018-2-8 22:28
黑色切线 发表于 2018-2-8 21:31
又鸡儿是熟悉的东西   不是远控就是DDOS

这道菜叫清水煮白菜,下次给你换个口味。
壹天 发表于 2018-2-8 17:47
喵~~~呜 发表于 2018-2-8 18:00
Hwk123 发表于 2018-2-8 18:23
感谢分享,学习了~
黑色切线 发表于 2018-2-8 21:31
又鸡儿是熟悉的东西   不是远控就是DDOS
 楼主| Cherishao 发表于 2018-2-8 22:29
喵~~~呜 发表于 2018-2-8 18:00
楼主排版真心好。怎么做到的?

Markdown语法,你值得拥有。
liuyibaba 发表于 2018-2-9 10:26
感谢楼主分享
gongyong728125 发表于 2018-2-10 10:34
学习了楼主,谢谢分享!
snowdomain 发表于 2018-2-11 17:06
学习了,谢谢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 12:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表