恶意代码分析实战 第七章课后实验

本文深入分析了一种恶意软件的行为特征,包括其自启动机制、唯一实例保障、主机及网络特征、后门功能实现,以及感染机制。通过IDA和DependencyWalker等工具,详细解读了恶意DLL的注入过程和对系统EXE文件的篡改手法。

看一下字符串:

然后分析主函数:

这个main函数很简短,看到了StartServiceCtrlDispatcherA函数,这个函数是来实现一个服务,并且指定了要调用的函数就是sub_401040,双击进去看一下:

发现这里调用了一个OpenMutexA函数,这个函数会尝试获取"HGL345"这个互斥量,获取到就说明已经有一个恶意程序在运行了,则调用ExitProcess结束。没有获取到就调用CreateMutexA这个函数,这个函数的目的就是创建一个名字为"HGL345" 的互斥量。继续往下看:

OpenSCManagerA这是一个用于打开服务控制管理器的句柄,getcurrentprocess这是一个伪句柄,可以复制,但不可继承。GetModuleFileNameA这个函数用来获取进程路径。然后CreateServiceA这个函数利用前面的创建一个新的服务"Malservice"。在这里看到了 dwStartType这个参数表示自启动,这个lpBinaryPathName参数保存了刚刚获取的路经,还有一个dwServiceType参数,这是一个服务类型。

这里使用到了SystemTime结构体,首先给.wYear.wDayOfWeek.wHour.wSecond全部赋值为0,然后又把wYear设置为834h,转换成十进制为2100,也就是2100年1月1日的凌晨12点,然后调用SystemTimeToFileTime将这个时间转换为文件时间。

看到了SetWaitableTimer函数,上面的时间就要传到这里。之后利用WaitForSingleObject函数进入等待,等啊等,来看一下如果等到了2100年会干什么:

会执行下面的代码

这里有一个值为14h的循环变量,换成十进制为20,调用了CreateThread,创建线程。下面还看到了esi的自减,也就是循环20次,那么这20次都在干什么呢,双击StartAddress看一下:

也就是一直在加载"http://www.malwareanalysisbook.com"这个网址。

下面来看一下问题

 

问题1:

这个程序会创建一个名为MalService的服务,里面有一个参数dwStartType为2 时自启动,所以可以确保程序继续进行。

问题2:

为了确保只有一个实例在运行。

问题3:

主机特征一共有两个,一个是互斥量"HGL345",另一个是服务"Malservice"

问题4:

网络特征有两个,一个是网站"http://www.malwareanalysisbook.com"另一个用户代理"Internet Explorer 8.0"。

问题5:

这个程序的目的就是运行程序后,等到2100年一月一日的午夜,对上面那个网址发起攻击DdoS(Distributed Denial of Service分布式拒绝服务)攻击。

问题6:

程序不会停止。

先分析一下程序:

首先,这个程序调用了OleInitialize,初始化组件对象模型(COM)库,然后调用CoCreateInstance用于创建一个COM的对象。返回的COM对象被标记为ppv。我们需要检查接口标识符(IID)以及类标识符(CLSID)来判断实现什么com功能。

双击riid查看一下:

可以看到riid的值为:D30C1661-CDAF-11D0-8A3E00C04FC9E26E 。

Rclsid的值为0002DF01-0000-0000-C000000000000046。

看书可以知道这两个分别是iid就是IwebBrowser2,clsid就是internet explorer。

现在来看一下这个2ch的偏移量,在书上已经明确的说了这个就是navigate,

这个navigate函数会允许程序启动Internet Explorer,并且访问一个网址。后面的程序会调用一些清理函数,然后程序也就结束了。

来看一下问题:

问题1:

这个程序运行一次就结束了。

问题2:

最终目的就是打开一个网址

问题3:

网址被打开,显示页面也就结束了。

 

静态分析:

首先用Dependency Walker打开Lab07-03.dll,在kernel32里看到了一些调用的函数:

这里发现了与互斥量相关的函数CreateMutexA和OpenMutexA,这是创建和打开一个互斥量。还看到了CreateProcessA,说明会创建一个进程。最后会调用Sleep函数休眠。

看一下Lab07-03.dll的字符串:

在这里看到了一个IP地址,说明这个恶意程序有可能会连接到这个地址。Sleep,hello,exec这三个应该在ida的分析中重点看一下。

用ida打开Lab07-03.dll来分析一下:

看到了调用了__alloca_probe,这是给栈分陪空间,继续往下看

这里调用了OpenMutexA和CreateMutexA,这里的作用和之前遇到过的一样,目的就是为了保证只有一个实例在运行。

调用了函数connect,在上面看到了一个IP地址"127.26.152.13",可以推断这个程序是要连接到这个IP地址。那么就要想,连接成功之后呢会怎么样呢?会发送什么样的数据呢?继续向下看:

在这里看到了send,这里是要发送buf,buf里面存放的就是要发送的数据,可以看到buf里的内容就是hello。这好像是一个信号,告诉远端的远程服务器已经准好接受指令了。

这里调用了recv,本地计算机在接收到命令后,接受到的内容就会保存到esp+120Ch+buf这个位置的栈空间,

这里调用了strncmp这个函数,这个函数就是比对接受到的5个字符是不是sleep,是的话就休眠一分钟。说明如果远程服务器发送来的指令是sleep那么本机就会进行休眠,

这里的strncmp函数用来对比接受到了4个字符是不是exec。如果是就会执行下面的程序:

这里调用了CreateProcessA函数,我们看到了lpCommandLine这个参数,这个参数可以告诉我们创建的进程是什么。执行完之后就循环回去了。现在可一知道这个程序实现后门功能。让攻击者发送信息来启动本机上的可执行文件。

现在来分析一下Lab007-03.exe程序。

首先还是先用Dependency Walker来查看一下:

在这里我们发现了CreateFileA、CreateFileMappingA以及MapViewOfFile,说明这个程序很可能会打开一个文件,并将其映射到内存中。而FindFirstFileA以及FindNextFileA的函数,说明这个程序会在计算机中搜索文件或目录。CopyFileA说明这个程序会进行文件的拷贝

下面查看一下字符串:

在这里发现了两个非常像的字符串,kernel32.dll和kerne123dll,注意:这两个是不一样的,一个是“l”一个是“1”,这就说明第二个是伪造出来的。.exe说明这个恶意程序会对系统中的.exe文件进行一些操作。还看到了两个路径,一个真的,一个假的,说明恶意程序可能会将伪造的动态链接库拷贝到这里。还有一个Lab07-03.dll,说明这个恶意程序很有可能会调用这个.dll文件.

下面用ida来分析一下Lab07-03.exe。

这里将参数argc与2进行比较,也就是判断是否有两个参数,不等于2 程序就退出了。是就继续。

将第二个参数argv赋值给eax,将字符串"WARNING_THIS_WILL_DESTROY_YOUR_MACHINE"赋值给esi。

可以看到,下面的程序一直在比较eax和esi的值,只有相等才可以继续运行,所以呢这里就要运行一个参数:Lab07-03.exe WARNING_THIS_WILL_DESTROY_YOUR_MACHINE。




继续向下看,看到调用了好几个CreateFileA,CreateFileMappingA,MapViewOfFile函数,目的就是将Kernel32.dll以及刚刚分析过的恶意程序"Lab07-03.dll"映射到内存里。

下面有很长很长一段代码调用了sub_401040和sub_401070,这里就不进行分析了。向下找API函数就可以了:

这里关闭了之前两个映射的句柄,然后将Lab07-03.dl改为kerne132.dll并且复制到系统目录下。

下面看到调用了sub_4011E0,双击进去看一下:

第一个参数为lpFileName,这很可能是一个文件名,还可以看到调用了FindFirstFileA函数,并且lpFileName作为参数赋给了文件查找函数FindFirstFileA。恶意程序有可能搜素这个C盘目录。

向下看到调用了_stricmp这个函数的作用是用来比较两个字符串,在上面找到了这两个字符串:

分别是.exe和Str1。可以看到如果这两个字符串比对成功就会跳转到40140c处。分析到这里就可以很明显的知道这个恶意程序就是要搜索C盘里所有的.exe文件进行下一步操作。下面来看一下sub_4010A0,双击进去:

看到这里调用了CreateFileA,CreateFileMappingA,MapViewOfFile。其目的就是将以后找到的.exe文件映射到内存里。下面还有很多IsBadReadPtr函数,用来检查进程是否有权限访问指定的内存块。

接下里看到调用了_stricmp函数,将kernel32.dll与Str1进行比较,如果能够匹配,下面就执行repne scasb以及rep movsd指令,rep movsd会将esi中的内容覆盖到edi中。可以看到,esi中的内容就是dword_403010,而edi中的内容是stricmp的Str1参数的内容。那么我们可以看一下dword_403010中的内容是什么,双击进入:

将光标放在.data:00403010的位置,按下键盘上的A键进行转换结果如下:

在这里可以看到伪造的动态链接库kerne132.dll,那么其实分析到这里我们就可以知道了,这个恶意程序其实会搜素C盘中的所有.exe程序,将这些程序的导入表中的kernel32.dll修改为kerne132.dll,这样一来,每当这些exe程序运行的时候,就会自动加载恶意.dll程序,实现后门的功能。

下面我准备在虚拟机里运行一下这个恶意程序,使用Process Monitor监测,打开Process Monitor,设置好筛选器,双击Lab07-03.exe,然后运行C:\>Lab07-03.exe WARNING_THIS_WILL_DESTROY_YOUR_MACHINE   这时Process Monitor就已经帮助我们监测到好多东西了,(提示:在运行前虚拟机要先拍好快照,之后恢复快照就可以了!)
 

说明已经开始感染了,具体的就不一一分析了,上面已经分析过了。下面来看问题:

问题1:

这个程序通过复制一个恶意dll文件到C:\Windows\System32目录,并且修改C盘中的所有导入kernel32.dll的.exe程序,让这些程序导入该恶意.dll程序,从而达到目的。

问题2:

有两个机遇主机的特征:一个是经过伪造的文件“kern132.dll”,另一个是名为SADFHUHF的互斥量。

问题3:

这个程序的目的是创建一个难以删除的后门,来连接一个远程主机。

问题4:

在虚拟机里运行可以先拍快照,恢复一下就好。

这个程序很难被删除,因为它会感染C盘中的所有exe文件。最好的办法是写一个程序,用于修改所有被感染的文件,将它们导入表中伪造的dll文件名修改为真实的dll文件名称。

Malware analysis is big business, and attacks can cost a company dearly. When malware breaches your defenses, you need to act quickly to cure current infections and prevent future ones from occurring. For those who want to stay ahead of the latest malware, Practical Malware Analysis will teach you the tools and techniques used by professional analysts. With this book as your guide, you'll be able to safely analyze, debug, and disassemble any malicious software that comes your way. You'll learn how to: Set up a safe virtual environment to analyze malware Quickly extract network signatures and host-based indicators Use key analysis tools like IDA Pro, OllyDbg, and WinDbg Overcome malware tricks like obfuscation, anti-disassembly, anti-debugging, and anti-virtual machine techniques Use your newfound knowledge of Windows internals for malware analysis Develop a methodology for unpacking malware and get practical experience with five of the most popular packers Analyze special cases of malware with shellcode, C++, and 64-bit code Hands-on labs throughout the book challenge you to practice and synthesize your skills as you dissect real malware samples, and pages of detailed dissections offer an over-the-shoulder look at how the pros do it. You'll learn how to crack open malware to see how it really works, determine what damage it has done, thoroughly clean your network, and ensure that the malware never comes back. Malware analysis is a cat-and-mouse game with rules that are constantly changing, so make sure you have the fundamentals. Whether you're tasked with securing one network or a thousand networks, or you're making a living as a malware analyst, you'll find what you need to succeed in Practical Malware Analysis.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值