社区应用 最新帖子 精华区 社区服务 会员列表 统计排行
  • 6449阅读
  • 4回复

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

楼层直达
z3960 
级别: 茶馆馆主
发帖
770867
飞翔币
207694
威望
215657
飞扬币
2511641
信誉值
8



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这样的序列,那么就直接报毒了。当然了,为了严谨起见,可以多选取几个类似于这样的特征。
关键词: bot 系统 下载 软件 360
我不喜欢说话却每天说最多的话,我不喜欢笑却总笑个不停,身边的每个人都说我的生活好快乐,于是我也就认为自己真的快乐。可是为什么我会在一大群朋友中突然地就沉默,为什么在人群中看到个相似的背影就难过,看见秋天树木疯狂地掉叶子我就忘记了说话,看见天色渐晚路上暖黄色的灯火就忘记了自己原来的方向。
级别: 超级版主
发帖
833785
飞翔币
226630
威望
224648
飞扬币
2443439
信誉值
0

只看该作者 1 发表于: 2023-01-03
来看一下
级别: 超级版主
发帖
833785
飞翔币
226630
威望
224648
飞扬币
2443439
信誉值
0

只看该作者 2 发表于: 2023-01-03
不错,了解了
srwam 
级别: 超级版主
发帖
633637
飞翔币
8
威望
25247
飞扬币
2856044
信誉值
0

只看该作者 3 发表于: 2023-01-19
来看看
srwam 
级别: 超级版主
发帖
633637
飞翔币
8
威望
25247
飞扬币
2856044
信誉值
0

只看该作者 4 发表于: 2023-01-19
了解一下