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

[分享]Petya勒索病毒详细分析报告(附上样本原文件、idb文件、mbrdump等)

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

[font=-apple-system, BlinkMacSystemFont, &quot][size=; font-size: 16pt,16pt]0x0 写在前面新人第一次来吾爱发帖,如有任何错误,请各位多加指点。Petya勒索病毒在6月底爆发,然后各大安全公司都发出了相关的报告,但是出于对该样本的兴趣,以及想了解更多关于该样本的技术细节,就尝试进行了一次详细分析,希望这个报告可以帮助到一些想自己动手分析该样本的同学们。[font=-apple-system, BlinkMacSystemFont, &quot]下面就是详细的分析流程:[font=-apple-system, BlinkMacSystemFont, &quot]0x1 概述[font=-apple-system, BlinkMacSystemFont, &quot]样本名:PetYa[font=-apple-system, BlinkMacSystemFont, &quot]MD5:71b6a493388e7d0b40c83ce903bc6b04[font=-apple-system, BlinkMacSystemFont, &quot]分析环境及工具:winXp sp3、IDA6.8、吾爱OD1.1[font=-apple-system, BlinkMacSystemFont, &quot]0x2、相关文件[font=-apple-system, BlinkMacSystemFont, &quot]PetYa.dll:样本主体[font=-apple-system, BlinkMacSystemFont, &quot]X.tmp :样本释放pe文件,用于提取本机账户密码的工具[font=-apple-system, BlinkMacSystemFont, &quot]Dllhost.dat:样本释放的pe文件,用于远程执行命令[font=-apple-system, BlinkMacSystemFont, &quot]0x3、行为预览:[font=-apple-system, BlinkMacSystemFont, &quot]1、进程自身提权、检测杀软[font=-apple-system, BlinkMacSystemFont, &quot]2、拷贝自身代码到堆内存执行,并卸载自身主模块,躲避内存扫描[font=-apple-system, BlinkMacSystemFont, &quot]3、加密MBR引导扇区数据,篡改MBR代码[font=-apple-system, BlinkMacSystemFont, &quot]4、创建重启计划任务[font=-apple-system, BlinkMacSystemFont, &quot]5、释放密码抓取以及远程命令执行工具[font=-apple-system, BlinkMacSystemFont, &quot]6、通过多种方式进行传播自身以及远程执行[font=-apple-system, BlinkMacSystemFont, &quot]7、加密磁盘指定格式的文件数据,只加密固定磁盘,不对可移动存储设备加密,通过生成AES128密钥加密文件数据、然后用样本内置的RSA公钥加密AES密钥[font=-apple-system, BlinkMacSystemFont, &quot]8、系统重启后加密NTFS文件系统的MFT表[size=; font-size: 10.5pt,10.5pt][font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]0x4、报告正文:样本介绍:该样本为一个DLL文件,有一个导出序号为1的函数,该函数为样本整个行为的入口。[font=-apple-system, BlinkMacSystemFont, &quot][size=; font-size: 16pt,16pt]分析过程:[font=-apple-system, BlinkMacSystemFont, &quot][size=; font-size: 10.5pt,10.5pt]1、提升进程权限、检查当前运行的进程、打开自身pe,读取自身pe数据以及保存自身文件信息[size=; font-size: 10.5pt,10.5pt][font=-apple-system, BlinkMacSystemFont, &quot]1)首先需要写个dllload加载该样本并且调用1号导出函数:[font=-apple-system, BlinkMacSystemFont, &quot][size=; font-size: 10.5pt,10.5pt][font=-apple-system, BlinkMacSystemFont, &quot](2)[size=; font-size: 10.5pt,10.5pt][font=-apple-system, BlinkMacSystemFont, &quot]提升进程权限,如果提升成功则保存到一个全局变量作为标记:[font=-apple-system, BlinkMacSystemFont, &quot][size=; font-size: 10.5pt,10.5pt][font=-apple-system, BlinkMacSystemFont, &quot](3)[size=; font-size: 10.5pt,10.5pt][font=-apple-system, BlinkMacSystemFont, &quot]遍历当期进程列表,判断是否有预期的[size=; font-size: 10.5pt,10.5pt][font=-apple-system, BlinkMacSystemFont, &quot]3个进程在运行,该样本通过自定义的算法将进程字符串计算后得出一个DWORD数值,然后与事先计算好的[size=; font-size: 10.5pt,10.5pt][font=-apple-system, BlinkMacSystemFont, &quot]3个进程名对应的DWORD数值进行比较,判断是否有这三个进程在运行:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]经过分析这3DWORD数值分别对应杀软:[font=-apple-system, BlinkMacSystemFont, &quot]0x2E214B44:卡巴斯基[font=-apple-system, BlinkMacSystemFont, &quot]0x6403527E/651B3005:诺顿(4)读取自身数据到堆[font=-apple-system, BlinkMacSystemFont, &quot]buffer,并且保存buffer首地址以及文件大小到全局变量:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]2、拷贝自身pe数据到堆buffer中,并且修复重定位,然后流程转移到堆中执行代码,接着卸载掉样本自身的主模块,[font=-apple-system, BlinkMacSystemFont, &quot]删除自身pe文件,然后再次调用导出函数1,这么做是为了躲避杀软的内存扫描[font=-apple-system, BlinkMacSystemFont, &quot][size=; font-size: 10.5pt,10.5pt](1)申请堆空间,拷贝自身代码,修复重定位,流程转移:[font=-apple-system, BlinkMacSystemFont, &quot](2)卸载自身主模块,删除自身文件然后调用导出函数[font=-apple-system, BlinkMacSystemFont, &quot]1[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]3、调用WSAStartUp初始化,检查c\windows目录是否存在自身样本文件,如果存在则退出进程:(1)[size=; font-size: 10.5pt,10.5pt]初始化全局socket[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot](2)检查c:\windows目录下是否有样本自身的文件,如果存在则结束进程,不存在则创建文件:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]4、篡改硬盘mbr代码:(1)[size=; font-size: 10.5pt,10.5pt]如果debug权限提升成功,则进行篡改mbr[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot](2)打开c盘驱动设备,获取磁盘信息得到扇区大小,然后根据该大小乘以10申请buffer,将buffer写入到第二个扇区中:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot](3)判断卡巴斯基进程是否存在[font=-apple-system, BlinkMacSystemFont, &quot] 如果存在则不执行[font=-apple-system, BlinkMacSystemFont, &quot]mbr篡改:[font=-apple-system, BlinkMacSystemFont, &quot](4)[font=-apple-system, BlinkMacSystemFont, &quot]获取系统所在的盘符,然后查询该盘符对应的物理磁盘驱动器编号:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]4.1[font=-apple-system, BlinkMacSystemFont, &quot]获取系统路径:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]4.2[font=-apple-system, BlinkMacSystemFont, &quot]覆盖后得到系统所在盘符的符号链接:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]4.3)打开系统盘符号链接,获取该盘所在的物理磁盘编号,然后将该编号数值转为字符串:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]4.4)拼接出完整的物理磁盘符号链接。拷贝到参数指向的buffer内,作为传出数据:[font=-apple-system, BlinkMacSystemFont, &quot](5)检查[font=-apple-system, BlinkMacSystemFont, &quot]\.PhysicalDrive0磁盘设备的分区类型是否为MBR,如果不是则不执行篡改代码:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]磁盘分区类型:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot](6)生成[font=-apple-system, BlinkMacSystemFont, &quot]60个字节的随机数,然后按字节取余0x3A,得出的值作为一个全局数组的下标,用该下标访问,拼接出一个疑似序列号的字符串:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]最终生成的序列号:[font=-apple-system, BlinkMacSystemFont, &quot](7)读取[font=-apple-system, BlinkMacSystemFont, &quot]PhysicalDrive起始扇区的[font=-apple-system, BlinkMacSystemFont, &quot]mbr引导代码进行异或加密:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]加密前的起始扇区数据:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]异或加密后的数据:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]接着将一个大小为0x200[font=-apple-system, BlinkMacSystemFont, &quot]栈buffer全部初始化为0x7[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]然后分别生成了两个32个字节和8字节的随机数,这两个随机数分别是salsa20算法的key以及iv,在MBR代码里面会运用到[font=-apple-system, BlinkMacSystemFont, &quot]Keyiv来进行MFT加密:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]接着拷贝了一串字符串到栈buffer里,这段字符串为比特币钱包地址:[font=-apple-system, BlinkMacSystemFont, &quot](8)[font=-apple-system, BlinkMacSystemFont, &quot]申请分别申请两块内存,大小分别是0x2000x22B1,然后分别拷贝样本自身的mbr代码到这两个buffer内:[font=-apple-system, BlinkMacSystemFont, &quot](9)循环写入样本的[font=-apple-system, BlinkMacSystemFont, &quot]mbr代码,长度为19个扇区:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]篡改前的代码:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]篡改后的代码:[font=-apple-system, BlinkMacSystemFont, &quot](10)[font=-apple-system, BlinkMacSystemFont, &quot]然后将之前通过60字节随机数当做下标生成的序列号字符串、以及用来加密MFT32字节的key8字节的iv还有样本内置的字符串数据(经后面的分析得知该串为比特币钱包)写入第32个扇区:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot](11)[font=-apple-system, BlinkMacSystemFont, &quot]将之前初始化全是0x7buffer写入第33个扇区:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot](12)[font=-apple-system, BlinkMacSystemFont, &quot]将加密后的起始扇区mbr引导代码写入第34个扇区:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]5、[size=; font-size: 10.5pt,10.5pt]创建重启的任务计划:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]该任务计划是在样本运行之后一个小时进行重启:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]6、[size=; font-size: 10.5pt,10.5pt]样本自身的传播与远程执行[size=; font-size: 10.5pt,10.5pt] [size=; font-size: 10.5pt,10.5pt]首先该样本通过三种途径传播自身:[font=-apple-system, BlinkMacSystemFont, &quot](1) 通过局域网勘测,检测一些可以访问的内网ip并且保存起来,然后对这些ip进行传播自身并且远程执行自身[font=-apple-system, BlinkMacSystemFont, &quot](2) 通过windows远程桌面的登录凭据记录,获取这些凭据来进行传播自身以及远程执行[font=-apple-system, BlinkMacSystemFont, &quot](3) 通过(1)步骤获取到的ip地址,利用永恒之蓝漏洞进程传播[size=; font-size: 10.5pt,10.5pt][font=-apple-system, BlinkMacSystemFont, &quot][size=; font-size: 10.5pt,10.5pt]远程执行的方式:[size=; font-size: 10.5pt,10.5pt][font=-apple-system, BlinkMacSystemFont, &quot]样本通过WNetAddConnection2函数连接远程主机,然后将自身pe写入到远程主机的c:windows目录[size=; font-size: 10.5pt,10.5pt]接下来通过两种方式执行:[font=-apple-system, BlinkMacSystemFont, &quot]通过资源中释放出来的psexec的远程命令执行工具去运行rundll32.exe 通过该系统exe加载自身dll并且执行导出函数1[font=-apple-system, BlinkMacSystemFont, &quot]通过wimc运行rundll32.exe ,通过该系统exe加载自身dll并且执行导出函数1(1)[size=; font-size: 10.5pt,10.5pt]创建线程,进行可攻击ip的勘测,首先样本首先会调用同一个函数初始化两个0x34大小的结构,接下来会对该结构进行分析说明:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]结构初始化函数:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]经过分析还原出如下结构体:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]调用该函数初始化的结构体,作用是用来保存一些信息,这些信息用来后续的自身传播以及远程执行,接下来经过实例来说明该结构的作用:[font=-apple-system, BlinkMacSystemFont, &quot]1.1) 首先样本拿到了之前初始化好的结构,然后调用函数,参数分别是一个ip地址、然后是一个常量值、接下来就是结构的首地址,该函数的目的是要将参数[font=-apple-system, BlinkMacSystemFont, &quot]1的字符串数据添加到参数3的结构中:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]1.2[font=-apple-system, BlinkMacSystemFont, &quot]10006FC7函数分析:该函数将参数1的字符串拷贝到栈内,然后调用函数10007298,参数分别是结构首地址、拷贝到栈内的字符串、以及外面参数2的常量值:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]1.3[font=-apple-system, BlinkMacSystemFont, &quot]10007298函数分析,由于该结构内有临界区对象,造成idaF5错乱,所以下面贴出反汇编代码[font=-apple-system, BlinkMacSystemFont, &quot]首先使用结构中的临界区对象进行同步,然后判断要添加的字符串是否已经存在于结构中,如果不存在则添加:[font=-apple-system, BlinkMacSystemFont, &quot]接下来判断[font=-apple-system, BlinkMacSystemFont, &quot]m_pppPointerArray数组的当前下标是否已经超出最大值(m_IndexRange[font=-apple-system, BlinkMacSystemFont, &quot] 如果超出则不添加:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]然后申请8字节大小的堆内存,如果申请成功,则将该内存首地址根据m_CurrentIndex下标保存在m_pppPointerArray数组中,[font=-apple-system, BlinkMacSystemFont, &quot]并且这个堆内存是算是个二级指针:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]然后再次申请堆内存,大小为结构中的m_remote_buffer_size成员,这次申请的堆内存是用来保存参数2的字符串,如果申请成功,则将该段内存的首地址保存在上一步骤中申请的[font=-apple-system, BlinkMacSystemFont, &quot]8字节堆内存的首地址处:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]然后将参数3的常量值,这里暂时看作为flag,将这个常量值保存在第一次申请的8个字节堆内存首地址+4处:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]接着拷贝参数[font=-apple-system, BlinkMacSystemFont, &quot]2的字符串到第二次申请的堆buffer中:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]到此一个新的信息就添加完毕了,接下来用od调试一下上述的过程,此处调用[font=-apple-system, BlinkMacSystemFont, &quot]10007298函数进行将参数字符串的信息添加到结构中:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]参数:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]接下来在内存中查看该结构的分布情况:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]根据上述分析的添加远程传播执行信息的过程,首先[font=-apple-system, BlinkMacSystemFont, &quot]m_pppPointerArray中保存了一个[font=-apple-system, BlinkMacSystemFont, &quot]8字节大小的堆buffer地址:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]然后继续查看这个8字节大小的buffer[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]继续查看第二次申请的buffer[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]可以看出该buffer保存了参数中传进来的ip地址信息。[font=-apple-system, BlinkMacSystemFont, &quot]tag_remote_penetration_info结构分析总结:[size=; font-size: 10.5pt,10.5pt]该样本中大量运用了这个结构,该结构用来保存各种样本后续传播感染所需要的信息,[font=-apple-system, BlinkMacSystemFont, &quot][size=; font-size: 10.5pt,10.5pt]经过后面的分析已知的信息有:后续代码勘测到可以攻击的内网ip以及远程桌面登录的凭据的TagetName以及账户名和密码。[font=-apple-system, BlinkMacSystemFont, &quot][size=; font-size: 10.5pt,10.5pt][font=-apple-system, BlinkMacSystemFont, &quot][size=; font-size: 10.5pt,10.5pt](2)[size=; font-size: 10.5pt,10.5pt]获取本机NetBios名称,以及回环地址、loaclhost等字符串信息拷贝到tag_remote_penetration_info结构中:[font=-apple-system, BlinkMacSystemFont, &quot](3)获取本机网络适配器信息链表,遍历该链表将所有适配器对应的[font=-apple-system, BlinkMacSystemFont, &quot]ip地址以及dhcp服务器地址保存在[size=; font-size: 10.5pt,10.5pt]tag_remote_penetration_info结构中:[font=-apple-system, BlinkMacSystemFont, &quot](4)[font=-apple-system, BlinkMacSystemFont, &quot]检查当前系统是否是域控制器或者是Server,如果是则枚举dhcp内网池中的ip地址,保存在[size=; font-size: 10.5pt,10.5pt]tag_remote_penetration_info结构中:[font=-apple-system, BlinkMacSystemFont, &quot](5)[font=-apple-system, BlinkMacSystemFont, &quot]计算出本机ipip段范围,例如本机ip192.168.1.111,则计算的范围就是192.168.1.0 - 192.168.1.255:,计算出这个范围后创建线程,该线程尝试使用[font=-apple-system, BlinkMacSystemFont, &quot]socket连接本机ip范围的所有ip地址,连接端口为445139,如果可以连通,则将这些ip地址全部[font=-apple-system, BlinkMacSystemFont, &quot]保存在[size=; font-size: 10.5pt,10.5pt]tag_remote_penetration_info中,该步骤是在为后面利用永恒之蓝漏洞攻击进行环境勘测:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot](6)接着死循环分别调用函数来进一步获取可攻击的目标:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]上述的各步骤勘测出的一些ip全部都加到tag_remote_penetration_info结构中,该结构也就充当了一个可感染的ip列表,之后的远程传播以及执行代码则会用到这个ip列表。[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot](7)[size=; font-size: 10.5pt,10.5pt]加载1号资源,解密资源数据为一个pe文件,接着释放并执行该pe文件,这个程序是类似mimikatz的系统密码抓取工具,并且该工具的输出进行了管道重定向,它会向命令行参数内带的管道进行输出系统的账号密码。接下来通过guid构造出一个管道名,然后创建该mimikatz进程,命令行参数为构造的管道名,并且同时创建线程,等待mimikatz线程连接该管道进行与mimikatz进程的通信:[font=-apple-system, BlinkMacSystemFont, &quot][size=; font-size: 10.5pt,10.5pt][font=-apple-system, BlinkMacSystemFont, &quot]创建进程:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]创建线程:[font=-apple-system, BlinkMacSystemFont, &quot](8)加载[font=-apple-system, BlinkMacSystemFont, &quot]3号资源,解密资源数据,3号资源保存的pe数据为psexec远程命令执行工具:[font=-apple-system, BlinkMacSystemFont, &quot](9)[size=; font-size: 10.5pt,10.5pt]新申请一个局部tag_remote_penetration_info结构:[font=-apple-system, BlinkMacSystemFont, &quot](10)[font=-apple-system, BlinkMacSystemFont, &quot]枚举系统凭据,并且将TERMSRV类型,也就是远程桌面登录的凭据过滤出来,保存其TargetName以及远程登录的系统账户密码,[font=-apple-system, BlinkMacSystemFont, &quot]TargetName保存在局部tag_remote_penetration_info[font=-apple-system, BlinkMacSystemFont, &quot]结构中,然后账户密码保存在[size=; font-size: 10.5pt,10.5pt]另一个全局tag_remote_penetration_info结构中:[font=-apple-system, BlinkMacSystemFont, &quot](11)[font=-apple-system, BlinkMacSystemFont, &quot]接下来程序将利用远程桌面的登录凭据尝试远程连接主机,进行传播自身,并且通过wmicpsecex进行远程执行,而且之前获取的可攻击[font=-apple-system, BlinkMacSystemFont, &quot]ip的列表,也是通过相同的方式去尝试连接并传播自身,远程执行:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]可以看出,将自身文件传播到远程主机以后,构造两种远程执行的命令,同样利用rundll32去加载自身样本。[font=-apple-system, BlinkMacSystemFont, &quot]远程执行:[font=-apple-system, BlinkMacSystemFont, &quot]Psexec命令:Dllhost.dat \TargetName -accepteula -s -d C:\Windows\System32\rundll32.exe "C:\Windows\petya.dll",#1Wmic命令:C:WindowsWbemwmic.exe /node:<TargetName> /user:<UserName> /password:<Password>process call create”C:WindowsSystem32rundll32.exe “C:\windows\petya.dll” #1”(12)[font=-apple-system, BlinkMacSystemFont, &quot]利用之前获取到的攻击ip列表(可以连接上445139端口的ip)进行[font=-apple-system, BlinkMacSystemFont, &quot]永恒之蓝漏洞传播:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]7、[size=; font-size: 10.5pt,10.5pt]文件加密(1)首先样本会获取系统所有的盘符,然后进行循环遍历盘符,判断盘符类型是否是非移动存储设备时,则开启线程进行加密:[font=-apple-system, BlinkMacSystemFont, &quot](2)[font=-apple-system, BlinkMacSystemFont, &quot]文件加密过程2.1)获取csp密钥容器句柄:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]2.2)通过密钥容器句柄获取AES128密钥,保存在回调参数的buffer+0x14偏移处:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]2.3)开始递归遍历文件,递归层数为0xF,如果文件夹深度大于0xF则退出递归,然后判断文件是否是要加密的文件格式,如果是则进行加密:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot](3)[font=-apple-system, BlinkMacSystemFont, &quot]加密流程:样本针对每个盘符申请一个[font=-apple-system, BlinkMacSystemFont, &quot]AES128密钥 ---> 用该密钥加密文件 ---> 接着用样本内置的RSA公钥去加密AES128密钥 --->将加密后的AES128密钥保存在文件中[font=-apple-system, BlinkMacSystemFont, &quot]3.1) 导入内置RSA公钥:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]3.2)利用RSA公钥加密AES密钥:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]8、[size=; font-size: 10.5pt,10.5pt]保存说明信息到加密盘符的根目录[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]9、样本篡改的MBR代码分析:(1)调用[font=-apple-system, BlinkMacSystemFont, &quot]int 13中断,将扇区1-32从磁盘加载到内存0x8000开始的地址,然后流程转移到0x8000开始执行指令:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot](2)[font=-apple-system, BlinkMacSystemFont, &quot]调用int 10中断,设置一些屏幕显示模式等信息:[font=-apple-system, BlinkMacSystemFont, &quot](3)[font=-apple-system, BlinkMacSystemFont, &quot]调用int 13中断 42h功能号,读取0x20扇区:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]经过之前的分析,该扇区存放着salsa算法的keyiv,以及比特币钱包,随机生成的用户序列号等:[font=-apple-system, BlinkMacSystemFont, &quot](4)[font=-apple-system, BlinkMacSystemFont, &quot]通过检查0x20扇区首字节,判断加密标记,如果为1,则代表已经完成加密,直接显示勒索信息,如果为0,则执行加密流程:[font=-apple-system, BlinkMacSystemFont, &quot](5)[font=-apple-system, BlinkMacSystemFont, &quot]调用int 10中断,显示病毒伪装的磁盘检查界面:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot](6)[font=-apple-system, BlinkMacSystemFont, &quot]将加密标记设置为1,然后拷贝0x20扇区buffersalsa key到栈buffer内,然后抹掉原buffer内的salsa key,防止用户使用该key解密[font=-apple-system, BlinkMacSystemFont, &quot]MFT[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot](7)[font=-apple-system, BlinkMacSystemFont, &quot]将已经设置加密标记以及抹掉了salsa_key的扇区buffer数据,在写回0x20扇区:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot](8)[font=-apple-system, BlinkMacSystemFont, &quot]读取0x21扇区数据,然后调用salsa加密该扇区数据,加密完成后写回磁盘:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]数据buffer[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]加密函数调用:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]参数:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]加密后的Buffer:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]然后写回0x21扇区:[font=-apple-system, BlinkMacSystemFont, &quot](9)[font=-apple-system, BlinkMacSystemFont, &quot]读取0x22扇区的数据,该扇区保存了mbr引导扇区加密后的数据,然后在循环单字节异或0x7解密mbr引导扇区代码:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]解密mbr引导扇区:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot](10)遍历[font=-apple-system, BlinkMacSystemFont, &quot]MBR引导扇区内的分区表结构,进行判断分区类型、以及保存引导扇区起始到磁盘扇区起始的相对偏移量、以及每个分区的扇区总数:[font=-apple-system, BlinkMacSystemFont, &quot](11)[font=-apple-system, BlinkMacSystemFont, &quot]通过扇区起始的相对偏移量0x3F,也就是c盘分区的起始扇区号,读取该扇区号的数据,该扇区保存了c盘分区的NTFS结构:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot]Buffer数据:[font=-apple-system, BlinkMacSystemFont, &quot](12)[font=-apple-system, BlinkMacSystemFont, &quot]通过(11)步骤得到的NTFS结构,取出DBR结构中的MTF起始簇号*每个簇单位的扇区数 得到一个扇区号,然后用该扇区号+0x3F定位到[font=-apple-system, BlinkMacSystemFont, &quot]MFT表所在的扇区位置:[font=-apple-system, BlinkMacSystemFont, &quot](13)[font=-apple-system, BlinkMacSystemFont, &quot]读取MFT扇区表:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot](14)[font=-apple-system, BlinkMacSystemFont, &quot]调用int10中断[font=-apple-system, BlinkMacSystemFont, &quot]显示磁盘检查进度:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot](15)[font=-apple-system, BlinkMacSystemFont, &quot]循环遍历读取MFT表,通过检查MFTFILE标记判断该表是否有效:[font=-apple-system, BlinkMacSystemFont, &quot](16)如果[font=-apple-system, BlinkMacSystemFont, &quot]15步骤的检查通过,则开始遍历MFT表中的属性结构,遍历每个属性结构的属性类型,如果具有属性类型为0x30并且属性文件名开头有[font=-apple-system, BlinkMacSystemFont, &quot]$符号,则加密该MFT表,如果没有30属性,则检查0x80(数据流)属性类型 有该属性类型的MFT表也进行加密:[font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot][font=-apple-system, BlinkMacSystemFont, &quot](17)一个[font=-apple-system, BlinkMacSystemFont, &quot]MFT结构加密完成后,则读取下一个MFT表,在重复执行(13--16)步骤:
我不喜欢说话却每天说最多的话,我不喜欢笑却总笑个不停,身边的每个人都说我的生活好快乐,于是我也就认为自己真的快乐。可是为什么我会在一大群朋友中突然地就沉默,为什么在人群中看到个相似的背影就难过,看见秋天树木疯狂地掉叶子我就忘记了说话,看见天色渐晚路上暖黄色的灯火就忘记了自己原来的方向。
级别: 超级版主
发帖
834620
飞翔币
226679
威望
224648
飞扬币
2447885
信誉值
0

只看该作者 1 发表于: 2023-02-23
来看一下
级别: 超级版主
发帖
834620
飞翔币
226679
威望
224648
飞扬币
2447885
信誉值
0

只看该作者 2 发表于: 2023-02-23
不错,了解了
srwam 
级别: 超级版主
发帖
635328
飞翔币
68
威望
25247
飞扬币
2862926
信誉值
0

只看该作者 3 发表于: 2023-02-23
来看看
srwam 
级别: 超级版主
发帖
635328
飞翔币
68
威望
25247
飞扬币
2862926
信誉值
0

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