失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Petya勒索病毒(.4月样本)分析笔记

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

时间:2019-11-28 02:33:58

相关推荐

Petya勒索病毒(.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

/a893574301/article/details/78836492 遍历DLL

mov edx,[eax+0x28] //0x24是fullname,由于是UNICODE_STRING结构,所以这个+0x4才是字符串地址

根据DLL的名字哈希来找打对应模块

遍历完成之后

申请存放恶意代码的内存

写入头(DOS+PE+区块表)

写入区段数据

写完后修复IAT

CALL了这个函数 进去发现

是这样的

查了一下发现是这个函数

和病毒所用的反射式注入有关,这里有详细的介绍

在完成所有的重定位后,我们最后调用第2步得到的NtFlushInstructionCache()清除指令缓存以避免问题。

/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的结构

可以参考:/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调试 可以参考这篇文章/thread-173889-1-1.html 我使用的是IDA

下断0X7C00

第一个调用的int 13h 功能号是42

关于int 13h的资料可以在百度上找到 我在这这里在找到了这篇,可能不是很详细:

/topics/138412

/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功能号和参数的详解 太长不贴了:

/magic-cube/archive//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的结构 只是大概的看了一下发现:

/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://www.hybrid-/

/malware-sample-sources/ (这里有很多介绍)

上面这些也有云沙箱非常好用

还有可以关注一下国外的团队和博客,可以获取到最新的资讯和资料

比如: /

/blog

等等很多优秀的博客(有些我可能现在还未察觉)

在这篇分析中对我有很大帮助的文章(有些可能需要科学上网):

/threat-analysis//04/petya-ransomware/ (Freebuf上有中文的)

/data/slides//_Alvarez_Raul_Dissecting_A_Ransomware_infected_MBR.pdf (非常详细英文)

/petya-technologically-challenging-imaginative-ransomware/ (绿盟)

https://connect.ed-/MISC/MISC-086/Pleased-to-meet-you-my-name-is-Petya

/blog/threat-research/ransomware-and-the-boot-process.html

/petya-the-two-in-one-trojan/74609/ (卡巴斯基的)

预防和查杀

不要打开不明的文件,蓝屏时候切断电源可以修复,因为此时MTF未加密,观察加密的方式应该是可以解密的,未使用非对称加密GitHub 上有/leo-stone/hack-petya

查杀的话MD5或者特征码查杀

如果觉得《Petya勒索病毒(.4月样本)分析笔记》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。