首页
论坛
课程
招聘
[分享] 恶意代码分析之熊猫烧香
2021-12-29 19:52 3931

[分享] 恶意代码分析之熊猫烧香

2021-12-29 19:52
3931

0x00 前言

1
最近刚学习了脱壳和恶意代码相关知识,现在分析一个经典病毒来练练手,本文章记录了我咋分析时的想法和踩得坑,可能有一些冗余的操作,新人见谅。

0x01.样本详情

1.1 样本信息

该病毒能够自动传播、自动感染系统中的exe、com、pif、src、asp、html等文件,它会中止大部分杀毒软件的进程,并删除后缀名为gho的文件,使用户系统备份文件丢失。最显眼的就是它能将界面上所有exe文件全都变为一个熊猫举着三支香的图标。

1.2 测试环境及工具

测试环境:Windows 7

 

测试工具:Process Explorer、火绒剑、PEID、ExeInfo

 

​ OD、IDA、ImportREC

1.3 分析目标

通过观察病毒的行为找到行为的关键恶意代码,并完成查杀,编写文档报告。

0x02.具体行为分析

2.1 主要行为

2.1.1 恶意程序对用户造成的危害

首先中病毒的机器上的可执行文件全部无法使用,双击打开后会复制出来一个新的文件:

 

image-20211229180813220

 

尝试打开这个新的文件,发现直接报错:

 

image-20211229180820935

 

重启一下机器,发现病毒依然生效,可以认为该病毒感染了系统注册表,将自己加入了自启项中。使用ARK工具,这里打开PCHunter,查看可疑进程,发现了一个熊猫图标:

 

image-20211229180827915

 

查看该进程的属性,可以找到它的路径和自启动位置,于是我们可以定位到该文件的具体路径和注册表信息,可是此时注册表已经无法打开了,这里先记录一下该病毒的进程路径信息,注册表一闪而过,无法截图:

 

image-20211229180834117

 

image-20211229180840569

 

这里由于火绒剑已经无法正常使用了,于是使用Process Monitor来监视这个病毒的行为,看看它到底有什么行为:

 

image-20211229180847822

 

可以发现它的行为种类还是非常多的,涵盖了文件操作、注册表操作、进程线程创建和退出、网络行为。

 

这个程序一开始就注册并创建了自启动的注册表项,然后修改了SHOWALL这一项,那么我们就无法看到所有的文件了,这能很好的隐藏自己。然后前期都是查询并修改虚拟机的一些配置文件,这里不过多分析这部分的行为。

 

image-20211229180854828

 

然后这里它就想建立TCP连接,这里我的虚拟机没有连接网络,所以无法连接也就无法向局域网传播。这里便可以看出它具有扫描局域网并传播的行为。

 

image-20211229180859365

 

image-20211229180903339

 

继续往下观察,找到有关释放文件的操作:

 

image-20211229180910186

 

这个autorun.inf的作用就是用户在双击磁盘的时候会让某个程序自动执行,即也可以达到开机自启的功能:

 

image-20211229180916108

 

直接输入路径打开该文件查看其内容:

 

image-20211229180921468

 

image-20211229180926075

 

image-20211229180932751

 

image-20211229180938452

 

还有一点就是该病毒不停地创建Desktop.ini文件在各种路径下

 

image-20211229180944142

 

image-20211229180948009

 

image-20211229180953600

 

我们打开这个路径发现了目标文件(由于之前被隐藏了,需要打开隐藏的文件和文件夹):

 

image-20211229180959411

 

无法判定是什么文件有什么用,可能是缓存文件用于建立通讯:

 

image-20211229181004607

 

image-20211229181010071

 

并且基本可以确定在每一个目录下都有一个隐藏的desktop.ini的配置文件用于标记。

 

通过监视其行为发现该病毒的行为循环如下:

 

1、 创建自启动项、关闭文件显示注册表项====》隐藏

 

2、 遍历目录,在所有目录下创建desktop.ini文件

 

3、 释放可执行文件,并复制到C:\Windows\System32\drivers\目录下

 

4、 将setup.ex复制到C:\目录下

 

5、 启动spo0lsv.exe程序(主程序)

 

6、 创建autorun.inf文件实现指定可启动文件为C:\setup.exe

 

7、 检查并删除一些杀软的注册表项

 

8、 修改IE浏览器的代理设置和缓存文件

 

9、 建立TCP通讯访问外部网络

 

尝试删除文件和修改启动项,看病毒会不会继续生效

 

image-20211229181017560

 

image-20211229181022471

 

重启之后,spo0lsv.exe进程没有创建,但是系统注册表依旧无法被更改,也就是C:\autorun.inf文件所指向的setup.exe还是启动了且隐藏了其进程,用户无法察觉,然后点击任意一个被感染的图标,spo0lsv.exe进程就又回来了。

2.2 恶意代码分析

2.1 查看样本文件基本信息

载入LordPE,查看区段信息,发现区段头是空的,应该是加壳(加密过):

 

image-20211229181030961

 

使用ExeInfo查看发现有FSG的壳:

 

image-20211229181035971

 

使用Die查看,发现可能是Borland Delphi编写,这样我们就可以扫描特征码来定位OEP然后脱壳分析了:

 

image-20211229181044034

 

打开OD动态调试,直接搜索GetModuleHandleA这个函数,这函数开始打上一个硬件执行断点,观察函数栈的调用关系,找到主模调用,向上找就是OEP了

 

image-20211229181052634

 

然后我们在这里查看一下IAT是否正常(指是否被加密):

 

image-20211229181059122

 

往下翻一点发现在IAT中间有一些7FFFFFFF字段截断,这会让我们dump出来的程序不正常,我们要走动将他改成0

 

image-20211229181104667

 

image-20211229181110773

 

image-20211229181116955

 

image-20211229181125675

 

到此已经成功将病毒脱壳了,接下来就可以通OD和IDA动静结合来具体看看代码是怎么样的了。

2.2 恶意程序的代码分析片段

打开IDA载入样本程序:

 

image-20211229181134606

 

image-20211229181141544

 

为了更方便的分析,这里可以添加一个Signature,由于之前已经知道这个程序是由Delphi编写的,而IDA默认的编译器和库文件都是C++相关的,我们就可以直接搜索并载入它,改成Delphi的库函数:

 

image-20211229181146727

 

我们再次回到伪代码窗口,随便跳转至一个目的地址然后再ESC返回,发现已经识别出了Delphi的库函数:

 

image-20211229181151664

 

继续看看,把没有命名的函数找出来,点进去再退出来看看能不能命名

 

image-20211229181155885

 

OD载入样本看看405250这个函数是干什么的:

 

首先定位到调用此函数的地方,然后观察EAX作为返回值有什么变化:

 

image-20211229181200822

 

image-20211229181205151

 

由于Delphi是使用的fastcall,前两个参数是用的寄存器,传入了两个字符串,第三个参数传入了一个地址(指针),也就是ECX所指向的一块内存,调用函数之后EAX返回0,ECX作为传出参数返回了一个字符串。

 

通过观察可以发现这个函数应该是字符串的转化功能,返回值为0,传出参数为转化之后的字符串地址。

 

继续往下看:

 

image-20211229181211539

 

首先看第一个:

 

image-20211229181218785

 

image-20211229181224008

 

image-20211229181239550

 

image-20211229181246356

 

在这个if进来的时候有两个sub_405FC4不知道是干啥的,跟进看看:

 

image-20211229181252233

 

咋一看还挺复杂的,不知道从哪里看起,这里我们就看入口参数和函数返回值。入口参数就一个a1,就是传进来的字符串,也就是样本名,传出参数是v1:

 

image-20211229181258121

 

image-20211229181302551

 

先看入口参数a1的变化把:

 

image-20211229181308182

 

image-20211229181312655

 

image-20211229181317528

 

image-20211229181322246

 

那么这个目标进程会是什么呢?是别的进程还是他自己呢?我们打开Process Explorer看看:

 

image-20211229181327606

 

先把断点下在调用这个函数的地方准备好,然后F8直接步过,可惜无事发生,并不知道关了哪个进程,再结合这个函数的参数是spo0lsv.exe,我们把样本名改成这个再试试,难不成就是关闭他自己?

 

image-20211229181335140

 

F8走:

 

image-20211229181339769

 

然后继续下一个函数sub_4053AC,我们还是先进去看看:

 

image-20211229181344245

 

带着这个分析去OD看看具体干了什么:

 

将目光聚焦在寄存器上!

 

image-20211229181350621

 

堆栈跟随,EAX所指向的内存ss:[12FB70]现在是0,函数被调用之后变成了系统路径,所以这个函数的作用是获取系统路径!

 

image-20211229181355295

 

这个函数分析的差不多了,可以退出,看下一个函数:

 

image-20211229181400599

 

image-20211229181405482

 

先进去第一个,sub_40A5B0:

 

这个简单就是创建线程

 

image-20211229181410482

 

然后第三个参数应该是线程回调函数,我们看看他是干什么的:

 

image-20211229181416878

 

先看看unknown_libname_70是干什么的把:

 

跟字符串有关的

 

image-20211229181421958

 

image-20211229181425873

 

接着看77:

 

image-20211229181431561

 

image-20211229181435535

 

接着看这个,终于有个熟悉的函数了:

 

image-20211229181441455

 

继续往下看,看到一大波系统目录:

 

image-20211229181446977

 

image-20211229181451838

 

这里应该就是将desktop,ini文件创建在各个文件夹下的操作了

 

然后遍历文件,判断是否有列出来的这几个文件

 

image-20211229181459010

 

总结一下,这个函数就是遍历文件夹,在每一个目录下创建desktop.ini文件

 

在进入第二个函数分析:

 

image-20211229181504263

 

image-20211229181508384

 

进入时间触发事件看看定时完成了什么事件:

 

image-20211229181512751

 

一进来就能看见这两个文件,这个函数应该和它们有关

 

image-20211229181519224

 

所以第二个函数是用来计时写入autorun.inf文件来设置setup.exe文件的

 

最后就是第三个函数了:

 

image-20211229181524242

 

image-20211229181531944

 

image-20211229181535351

 

很显然这个函数是用来网络通讯的。至此这三个函数都分析了一下

 

回到最外层函数,还剩一个,继续看:

 

image-20211229181541909

 

image-20211229181546132

 

一个一个去看

第一个计时器

创建、修改注册表的启动项和文件隐藏项

 

image-20211229181551886

第二个计时器

第三个计时器

这个计时器里又设置了两个计时器

 

image-20211229181557738

 

第一个:下载并执行文件

 

image-20211229181603390

 

第二个:执行cmd命令

 

image-20211229181607456

第四个计时器

又套了一层计时器:

 

image-20211229181613690

 

看到了一些杀毒软件的字符串还有注册表的键名:

 

image-20211229181617715

 

image-20211229181623925

 

image-20211229181630733

第五个计时器

主要是C4EC和C5E0这两个函数

 

image-20211229181635570

 

C4EC这个函数:

 

image-20211229181640816

 

C5E0这个函数:

 

image-20211229181647198

 

所以这个函数跟字符串转化和打开网页读取数据有关

第六个计数器:

直接就是两个DownloadFile,这里果断判定下载恶意代码或者文件

 

image-20211229181653348

 

至此,这六个计时器大致分析完毕

定位关键函数

看了这么多行为函数,那么这个病毒是怎么感染exe文件的呢?这个还需要定位分析一下:

 

通过前面的静态分析可以发现该病毒会创建进程不停的新建desktop.ini、autorun.inf、setup.exe文件等操作,所以可以从进程创建和创建文件的操作为切入点,下断点去看有什么行为。

 

image-20211229181701383

 

image-20211229181705955

 

image-20211229181709918

 

然后我们重新运行程序看程序断下来的地方,先断在了CreateProcessA这个函数这里,刚好是创建病毒自己这个进程,所以我们要查看堆栈,看是哪里调用了创建进程函数,然后不让他创建,直接在本进程完成感染

 

image-20211229181715057

 

第二个直接排除掉,这个是在消息循环里最开始的调用

 

image-20211229181719581

 

只剩下一个了,我们跳转到目标地址然后上下看看

 

image-20211229181725123

 

这里是拷贝文件并执行恶意代码的地方

 

image-20211229181729966

 

image-20211229194345659

 

image-20211229194353857

 

image-20211229194421359

 

可是到现在还是无法判定哪个跳转是关键跳,所以只能下断点去尝试,如果创建进程后,该程序后续的CreateFileA就无法断下来如果没有创建进程,那么由本进程完成文件创建工作,也就会断下,这里我们先将JNZ的条件改掉,让它跳走,看看会不会在CreateFileA函数断下来:

 

image-20211229194433023

 

image-20211229194438337

 

继续运行,发现在CreateFileA断下来了,此时正在创建desktop.ini文件,我们等到它创建exe文件的时候看看它是怎么感染的

 

image-20211229194448879

  • [ ] 明日继续分析~

[2022夏季班]《安卓高级研修班(网课)》月薪三万班招生中~

收藏
点赞0
打赏
分享
最新回复 (1)
游客
登录 | 注册 方可回帖
返回