病毒样本分析学习二

前言

本人网络安全菜鸡一枚,喜欢学习点安全技术,这次也跟着大佬分析一个勒索病毒样本。

利用工具

Exeinfo PE ver0.0.6.6
IDA Pro 8.3
Win10 虚拟机

分析过程

在这里插入图片描述
这次的样本同样来自B站的视频分析课程,从https://malshare.com/找到并下载下来,放到虚拟机中。
在这里插入图片描述
也是一个C++开发的无壳样本,用IDA打开,通过Imports窗口看看使用了哪些Windows函数,可以大致推测样本会做哪些操作。通过查询官方说明文档了解这些函数的作用:
https://learn.microsoft.com/zh-cn/windows/win32/api/
在这里插入图片描述
正式开始分析,借助IDA的F5大法,将程序还原成类C代码:
在这里插入图片描述
打开入口函数,上来就能看到一个疑似通信域名被复制给szUrl变量,浏览器无痕访问一下确实是个恶意域名。
在这里插入图片描述
接下来是几个windows的api:
InternetOpenA 打开一个网络句柄。
InternetOpenUrlA 打开由完整的 FTP 或 HTTP URL 指定的资源。
InternetCloseHandle 关闭单个网络句柄。
而后就是一个自定义函数sub_408090()。
在这里插入图片描述
双击进入函数后,可以看到首先是通过GetModuleFileNameA获取了一个模块路径。紧接着做了一个判断*_p__argc() < 2,便直接返回sub_407f20(),不再执行后续的内容,由此可见这个函数也比较重要。
在这里插入图片描述
1.进入sub_407F20(),只是按顺序执行了两个函数,首先分析第一个函数
在这里插入图片描述
他先将一个执行命令也就是"文件名 -m security"给到了Buffer,调用OpenSCManagerA()打开一个服务控制管理器的句柄,这是一个用来添加修改服务的函数,然后用CreateServiceA()创建服务对象,这里有两个参数比较重要,ServiceName和DisplayName,通过查文档可以得知他们的作用:
在这里插入图片描述
双击点开这两个参数,能看到创建的服务名称和显示名称分别是’mssecsvc2.0’和’Microsoft Security Center (2.0) Service’
在这里插入图片描述
而前面的Buffer,同样也作为CreateServiceA()的参数传入,代表这是启动服务的二进制文件路径及参数。
在这里插入图片描述

然后推测,当服务创建成功后,则会通过StartServiceA启动服务最后关闭服务句柄。总结一下,这个函数负责将病毒文件写入服务之中启动。

2.返回到第二个函数,跳过前面的变量,从逻辑开始看,首先GetModuleHandleW检索指定模块的模块句柄,然后又出现大量GetProcAddress(),这是在检索DLL中的函数,这里应该是在导入函数,然后是做了连续的if判断是否导入成功。然后是FindResourceA确定指定模块中具有指定类型和名称的资源的位置,紧接着LoadResource获取该资源。
在这里插入图片描述
获取资源成功后LockResource获取资源在内存中的第一个字节的指针。而后做了一个文件移动MoveFileExA(),其中aWindows,aTaskshceExe点进去是"WINDOWS"和"tasksche.exe",其实就是将C:\WINDOWS\tasksche.exe移动到C:\WINDOWS\qeriuwjhrf。然后通过CreateFileA_0()打开这个文件,WriteFile()往里面写入数据,数据就是第二个参数lpBuffer,也就是前面获取的资源指针。后续做了一个字符串拼接strcat,然后用CreateProcessA创建新进程执行Buffer的内容。总结一下这里主要是导入函数后,猜测是将病毒文件做了个迁移,然后写入内容,并且执行了tasksche.exe程序。
在这里插入图片描述
3.回到上一层,继续往下分析核心函数:
在这里插入图片描述
同样也是借助OpenSCManagerA和OpenServiceA打开一个服务,这里的服务就是上文提到的“mssecsvc2.0”,然后执行了一个sub_407FA0,跟进函数查看,ChangeServiceConfig2A更改服务的可选配置参数,就是做了一个服务配置修改。
在这里插入图片描述
4.最后ServiceStartTable结构体赋值,并通过StartServiceCtrlDispatcherA将服务进程的main线程连接到服务控制管理器,使线程成为调用进程的服务控制调度程序线程。其中lpServiceProc成员还调用了sub_408000,再跟进去看看:
在这里插入图片描述
首先是几个函数的解释
RegisterServiceCtrlHandlerA注册用于处理服务控制请求的函数。
SetServiceStatus汇报调用服务的服务控制管理器的状态信息。
ExitProcess结束调用进程及其所有线程。
这里也不清楚做了什么,接着跟进唯一的函数sub_407BD0()
在这里插入图片描述
这里通过beginthreadex起了两个线程,一个单独起了一次,另一个再for循环中起了128次。先去看看sub_407B90()做了什么。
在这里插入图片描述
进来就如上图所示,还是两个函数,跟进第一个函数:
在这里插入图片描述
CryptAcquireContextA用于获取特定加密服务提供程序中特定密钥容器的句柄 (CSP) 。
InitializeCriticalSection初始化关键节对象。
跟进第二个函数:
在这里插入图片描述
globalAlloc从堆中分配指定的字节数。
GlobalFree释放指定的全局内存对象并使其句柄失效。
CreateFileA创建或打开文件或 I/O 设备。
GetFileSize检索指定文件的大小(以字节为单位)。
ReadFile从指定的文件或输入/输出 (I/O) 设备读取数据。
这里似乎一直是在读取文件内容,没有看出来具体做了什么。
5.返回上一层,回到带有beginthreadex的地方,查看第一个启动的函数:
在这里插入图片描述
这个函数有很多嵌套的if,while,整体看下来也没有什么有价值的地方,遇到不懂得地方同样先跳过,发现这里同样启了一个线程,执行函数sub_4076B0,跟进去观察。
在这里插入图片描述
首先有个变量Destination,而后用inet_ntoa,将这个in转化IN_ADDR结构IP地址,而后通过sub_401980去做了一个socket连接,跟进去发现里面使用了IPC协议,再windows中可以用作资源共享
在这里插入图片描述
而后进入循环5次执行sub_401B70,如果成功,则break出循环,进入函数,同样也是在建立socket,send()发送信息到目的ip,通过HEX窗口从发送的数据中看到是SMB有关的东西,不由得想到了SMB相关的漏洞,也就是ms17_010永恒之蓝。总结一下这里应该就是利用漏洞进行了一个病毒传播,前面应该是做了漏洞利用的准备。
在这里插入图片描述
6.第二个函数是总算有些内容:
在这里插入图片描述
这里是熟悉的GetTickCount获取时间戳,然后用时间戳加当前线程ID生成一个唯一值。
在这里插入图片描述
而后来到下面,首先查看第一个函数sub_407660:
在这里插入图片描述
EnterCriticalSection等待指定关键部分对象的所有权,此函数将在授予调用线程所有权时返回,意思就是多个线程操作同一段数据时,通过这个函数,使得线程能够按顺序去操作数据。
CryptGenRandom 函数生成随机字节。
这里猜测是随机生成了四个数,并合并成一个IP地址,也就是Buffer。
在这里插入图片描述
而后也是起了一个进程,StartAddress就是上文中的漏洞利用的函数,总结一下,这里是通过生成随机IP地址并进行漏洞攻击。

总结

这次的病毒样本功能比较复杂,还有很多关键点都没有分析出来,总的来说这是一个通过永恒之蓝漏洞进行传播的病毒样本。他通过从初始文件提取资源,生成tasksche.exe,也就是核心病毒文件,并且将病毒启动写入到系统服务中,而后随机生成IP地址,不断的探测其他主机是否存在永恒之蓝漏洞。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值