Petya勒索病毒(2016.4月样本)分析笔记

前言

之所以不叫分析报告,是因为接下来要看到的分析,可能包含了不正确的,或者有疑点,和未完全分析的,里面有我个人的主观臆断,或者一些我目前未察觉的错误,还有一些非常基础,非常啰嗦的内容,这都是为了复习我以前的一些知识,或者是做一个记录防止以后可能需要用到。还有一些可能在分析中新学习的知识可能有很多不正确,或者不确定,因为我个人能力有限没察觉到的地方,所以只能称为我个人的分析笔记,因为我当时是这样想的,在以后察觉了错误的地方的时候再进行改正。
如有错误欢迎朋友们帮我斧正,感激不尽。
如果你想看真正的分析报告我会在结尾给出。

环境:

win7专业版/32

工具:

IDA x32dbg PEid

样本信息:

名字:petya virus.exe
MD5: AF2379CC4D607A45AC44D62135FB7015
SHA1: 39B6D40906C7F7F080E6BEFA93324DDDADCBD9FA
CRC32: 488C77E7

简介:

恶意软件使用图标将其EXE文件伪装成PDF和RAR可执行文件。然后,攻击者通过电子邮件向目标发送恶意代码,欺骗受害者执行它。通过这种方式,通过社交工程成功启动了攻击。

分析过程:

在这里插入图片描述
感觉没有加壳

X32附加跟踪
418A36()
41770D()
41A8DA()(OD跟踪到这里反汇编引擎有问题)
IDA看一下
在这里插入图片描述
这个while是循环解密下面代码的 循环跑完后往下走会有一些类似混淆的代码,继续跟,直到看到
寻找PE字段
在这里插入图片描述
最后找到正确的结构
在这里插入图片描述
在这里插入图片描述
mov eax,fs:[0x30] //访问TEB
mov eax,[eax+0xC] //访问Ldr
mov eax,[eax+0xC] //访问InLoadOrderLinks顺序的表,同理0x14和0x1c
https://blog.csdn.net/a893574301/article/details/78836492 遍历DLL
mov edx,[eax+0x28] //0x24是fullname,由于是UNICODE_STRING结构,所以这个+0x4才是字符串地址

根据DLL的名字哈希来找打对应模块
在这里插入图片描述
遍历完成之后
在这里插入图片描述
申请存放恶意代码的内存
在这里插入图片描述
写入头(DOS+PE+区块表)
在这里插入图片描述
写入区段数据
在这里插入图片描述
写完后修复IAT
在这里插入图片描述
CALL了这个函数 进去发现
在这里插入图片描述
是这样的
在这里插入图片描述
查了一下发现是这个函数
在这里插入图片描述
和病毒所用的反射式注入有关,这里有详细的介绍
在完成所有的重定位后,我们最后调用第2步得到的NtFlushInstructionCache()清除指令缓存以避免问题。
https://www.cnblogs.com/h2zZhou/p/7721797.html
这里就开始执行DLL的代码了
在这里插入图片描述
这样不太好看 我们可以把之前再内存中的PE文件DUMP下来看,但是dump下来后文件是数据是在内存展开状态下的,所以要自己修复一下PE 修复完成后我们使用IDA来观察

粗略的分析了一下
判断了一个值 可能和系统环境有关(没有追朔到)
在这里插入图片描述
在这里插入图片描述
这样我们就先主要分析8B4B这个函数 两个参数 像是调用类函数
在这里插入图片描述
进去后先分析第一个函数8A8E
像是判断本一些目录是否存在
在这里插入图片描述
在这里插入图片描述
第二个函数89DC传入了
在这里插入图片描述
IDA里面看一下 像是判断这个扇区存不存在
在这里插入图片描述
接下来看88EE这个函数
在这里插入图片描述
在这里插入图片描述
整体的一段分析
在这里插入图片描述
在这里插入图片描述
转到LABLE_19执行
88EE
在这里插入图片描述
还是成功的 往下9200函数我们看一下
在这里插入图片描述
在这里插入图片描述
往下8ED8这个函数进去粗略的看了看 比较复杂里面有各种函数的调用,像是加密或者解密一些东西,我们先不细分析,看他传参或者,返回值返回了什么
在这里插入图片描述
生成了一个网址,和返回了密钥 或者特征码之类的东西,先记录下来 看后来能不能验证
“e7MpECUjnBi3uosWzWR6LHmzzyHBdtaLn9EkBH729A9zGK6ceQFY1HeZuLUqgTco2EtXGWWw87FV8oH9BghooUipNP”
00 DD C6 CB A2 AC 64 CD A6 BD 86 E2 D0 EC E4 E0 .ÝÆË¢¬dͦ½.âÐìäà
CC AE 68 AD 66 ED E6 C7 9A DB C2 EE E8 C5 96 E3 Ì®h.fíæÇ.ÛÂîèÅ.ã
D2 8D 4D B7 4E 91 04 F2 68 68 74 74 70 3A 2F 2F Ò.M·N…òhhttp://
70 65 74 79 61 33 37 68 35 74 62 68 79 76 6B 69 petya37h5tbhyvki
2E 6F 6E 69 6F 6E 2F 66 77 65 53 31 4A 0D 0A 20 .onion/fweS1J…
20 20 20 68 74 74 70 3A 2F 2F 70 65 74 79 61 35 http://petya5
6B 6F 61 68 74 73 66 37 73 76 2E 6F 6E 69 6F 6E koahtsf7sv.onion
2F 66 77 65 53 31 4A 00 00 00 00 00 00 00 00 00 /fweS1J…

继续往下分析 看看91D0这个函数 传参
在这里插入图片描述
在这里插入图片描述
像是解密这段数据填充到刚申请的堆块里 48F010
在这里插入图片描述
执行完后感觉像是单纯的拷贝,往下看吧
随便翻了一些堆里的内容 发现有些显示的勒索信息 可能就是要执行的微内核?(后来发现这个应该是MBR)
在这里插入图片描述
又拷贝了一些数据到堆里
在这里插入图片描述
继续调用88EE读取内容
在这里插入图片描述
往下看8963这个函数
在这里插入图片描述
在这里插入图片描述
把xor完的数据写回去了 下面是一个段落的分析
在这里插入图片描述
循环写入完成后再调用了8963写入一段
在这里插入图片描述
可能是一段引导数据,把扇区引导到恶意代码上
在这里插入图片描述
往后继续分析
再次写入 也像是写入引导
在这里插入图片描述
这里我对MBR的布局并不熟悉 所以之后再分析把
在这里插入图片描述
在这里插入图片描述
后面判断了一下 继续调用了8963写入了3次
1
在这里插入图片描述
2
在这里插入图片描述
3
在这里插入图片描述
最后调用了8FD8这个函数
在这里插入图片描述
这里完成了这些提取操作
在这里插入图片描述
在这里插入图片描述
8B48最后一段整体分析
在这里插入图片描述
提权失败后 看一下会做什么
上层
在这里插入图片描述
再上层
在这里插入图片描述
好像并没有提权失败后要做什么(难道是没写完吗?)
下面这是被修改的MBR分区 以55 AA结尾 查看使用的工具是WinHex
我们先大概学习一下MBR的结构
可以参考:https://www.52pojie.cn/thread-171556-1-1.html willJ大佬的帖子 或者其他的一些资料
MBR 的大体结构
1.引导代码:0 到 1BDH 共 446 个字节
2.分区表:1BEH-1FDH 共 64 字节
3.结束标志:1FEH-1FFH 共 2 字节
它们的大小加起来刚好是 512 字节就是 MBR 的大小,其中分区表可以分为 4 个表,
每个表 16 字节,这也是我们装系统为什么只能有 4 个主分区的原因。
下面内容可以用winhex查看
在这里插入图片描述
在这里插入图片描述
所以我们进入第二阶段的分析也就是MBR的阶段
看看他做了什么
在这里插入图片描述
观察这段特征码 和网址 再验证我们之前我们看到的信息 但是我没有看见密钥
但是我猜测密钥也是在8ED8 这个函数里,因为他需要特征码来为你解密,当然这只是主观猜测,我们还没有详细分析8ED8这个函数
关于MBR调试 可以参考这篇文章https://www.52pojie.cn/thread-173889-1-1.html 我使用的是IDA
下断0X7C00
在这里插入图片描述
在这里插入图片描述
第一个调用的int 13h 功能号是42
关于int 13h的资料可以在百度上找到 我在这这里在找到了这篇,可能不是很详细:
https://bbs.csdn.net/topics/138412
https://en.wikipedia.org/wiki/INT_13H#INT_13h_AH=42h:_Extended_Read_Sectors_From_Drive
扩展读
入口:
AH = 42h
DL = 驱动器号
DS:DI = 磁盘地址数据包(Disk Address Packet)
在这里插入图片描述
在这里插入图片描述
也就是 读取扇区为0x22 的0x200个字节,并把它放在为0x8000这个位置
循环读取到0x8000
在这里插入图片描述
走完第一遍是1F也就是循环了32次
在这里插入图片描述
写入完成后MBR就执行完毕了接下来就跳转到0x8000 这里可以使用IDA脚本dump下来分析,但是我使用IDA反编译失败了,不知道什么原因,记录一下吧
在这里插入图片描述
Dump脚本
static main(void)
{
auto fp, begin, end, dexbyte;
fp = fopen(“F:\dump.so”, “wb”);
begin = 0x8000 ;
end = 0x9f70;
for ( dexbyte = begin; dexbyte < end; dexbyte ++ )
fputc(Byte(dexbyte), fp);
}
跳到0x8000 观察了一下 猜测可能是代码参杂着数据导致IDA反汇编失败了
在这里插入图片描述
在这里插入图片描述
有几个函数我们一个个看看
在这里插入图片描述
Int 10h 是由 BIOS 对屏幕及显示器所提供的服务程序
网上能找到很多对int 10h功能号和参数的详解 太长不贴了:
https://www.cnblogs.com/magic-cube/archive/2011/10/19/2217676.html
往下走
在这里插入图片描述
在这里插入图片描述
也是调用int 10中断的 往下
在这里插入图片描述
像是在解密什么 往下
在这里插入图片描述
又遇到了 int 13 42调用 读取的是0扇区也就是将原MBR复制到了0x7760
在这里插入图片描述
往下走
在这里插入图片描述
又是一些数据操作 往下
在这里插入图片描述
又遇到了int 13h 42号调用 这次复制的是36扇区到地址0x7978
在这里插入图片描述
复制的一些tor地址和特征码 在三环时候已经见到过了 继续往下
在这里插入图片描述
判断了加密标记 如果是加密过则跳过一些执行 往下
在这里插入图片描述
又调用了int 10 往下 执行完这里后 显示出了假的磁盘检查
在这里插入图片描述
在这里插入图片描述
往下走又发现调用了int 13h 42 读的是还是36扇区 地址0x776A
在这里插入图片描述
给加密标记赋值
在这里插入图片描述
往下走 看到了int 13 43功能号调用
扩展写
入口:
AH = 43h
AL
0 位 = 0 关闭写校验
1 打开写校验
1 - 7 位保留, 置 0
DL = 驱动器号
DS:DI = 磁盘地址数据包(DAP)
返回:
CF = 0, AH = 0 成功
CF = 1, AH = 错误码
在这里插入图片描述
地址是0x776A 扇区是36 也就将已经加密的标记写回36扇区
在这里插入图片描述
循环写入 往下走
在这里插入图片描述
这次是 int 13h 42 扇区37 地址0x676a
在这里插入图片描述
并没有发现什么
在这里插入图片描述
在这里插入图片描述
可能在做一些加解密的操作
在这里插入图片描述
还是 37扇区
像是已经被加密的扇区 写回了37 往下
在这里插入图片描述
在这里插入图片描述
39扇区 做了一些清0操作?
外层有一个循环
在这里插入图片描述
还是读取了0扇区 读取当前MBR的内容
在这里插入图片描述
往下 像是特征码搜索寻找一些数据
在这里插入图片描述
读了8扇区
在这里插入图片描述
看看读出了什么它感兴趣搜寻的东西,推测是遍历寻找活动分区
在这里插入图片描述
由于我不是很熟悉NTFS的结构 只是大概的看了一下发现:
https://baike.baidu.com/item/ntfs/91761?fr=aladdin
在这里插入图片描述
主文件表MTF是非常重要的,用来指出数据在磁盘中储存的位置,每个NTFS至少包含一个MTF
主文件表MTF是非常重要的,用来指出数据在磁盘中储存的位置,每个NTFS至少包含一个MTF
在这里插入图片描述
加密的MTF?
接下来这个函数显示了 里面函数显示了一些其他的内容(例如:计数:0%) 就不一一举例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
112640是恶意软件计算整个MFT表的扇区数 往下
在这里插入图片描述
每次通过读取8扇区 然后加密扇区并写回硬盘 下面是正常的MTF
在这里插入图片描述
往下这个是加密MTF的函数 加密完成后
在这里插入图片描述
在这里插入图片描述
加密完成后写回原来的位置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里不清除写入了什么 往下是一个大循环 应该是循环写入
在这里插入图片描述
往下还有一个大循环
在这里插入图片描述
这个循环跳出来之后就加密完成了
在这里插入图片描述
返回后还有一个大循环
在这里插入图片描述
完成后应该加密了全部MTF
在这里插入图片描述
再返回还有一个循环
在这里插入图片描述
完成后
在这里插入图片描述
INT 19会将MBR的512字节装载到内存0x7c00中,然后JUMP到0x7c00处,开始执行MBR的可执行程序
重新执行后检查加密标志位 就跳到这个函数 显示勒索信息 获取密钥解密函数应该都在里面,这里我就不做详细分析,别的文章有介绍解密过程,而且大概观察它的加密方式,应该是能解出来的
在这里插入图片描述
在这里插入图片描述

总结和收获:

学习到了反射式注入
学习了MBR的知识,和了解了一个系统是怎么启动起来的,分析了16位汇编 int中断非常重要
IDA大法好
Google大法好
感觉自己知识储备量不足,导致有些东西虽然看到了但是说不出它想干什么,贫穷和知识限制了我的想象力
在这里插入图片描述
病毒样本可以去:https://s.threatbook.cn/
https://www.hybrid-analysis.com/
https://zeltser.com/malware-sample-sources/ (这里有很多介绍)
上面这些也有云沙箱非常好用
还有可以关注一下国外的团队和博客,可以获取到最新的资讯和资料
比如: https://blog.malwarebytes.com/
https://www.fortinet.com/blog
等等很多优秀的博客(有些我可能现在还未察觉)

在这篇分析中对我有很大帮助的文章(有些可能需要科学上网):
https://blog.malwarebytes.com/threat-analysis/2016/04/petya-ransomware/ (Freebuf上有中文的)
https://hackinparis.com/data/slides/2017/2017_Alvarez_Raul_Dissecting_A_Ransomware_infected_MBR.pdf (非常详细英文)
http://blog.nsfocus.net/petya-technologically-challenging-imaginative-ransomware/ (绿盟)
https://connect.ed-diamond.com/MISC/MISC-086/Pleased-to-meet-you-my-name-is-Petya
https://www.fortinet.com/blog/threat-research/ransomware-and-the-boot-process.html
https://securelist.com/petya-the-two-in-one-trojan/74609/ (卡巴斯基的)

预防和查杀

不要打开不明的文件,蓝屏时候切断电源可以修复,因为此时MTF未加密,观察加密的方式应该是可以解密的,未使用非对称加密GitHub 上有https://github.com/leo-stone/hack-petya
查杀的话MD5或者特征码查杀

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值