+ +

wannacry分析

+ + +
+ +

样本情况

    +
  • 样本名称:WannaCry
  • +
  • 大小:3,514,368 bytes
  • +
  • MD5:84C82835A5D21BBCF75A61706D8AB549
  • +
+

查壳

PEiD

使用PEiD观察到WannaCry使用VC++编写

+

image-20230423103933500

+

Exeinfo

使用Exeinfo观察到WannaCry未加壳

+

image-20230423104132051

+

基础分析

基础静态分析

查看字符串

首先检索字符串,发现WannaCry采用了Windows的加解密函数,并且字符串中出现了RSA与AES的字样。可能用到这些加密算法,并且还有通过cmd执行的命令。

+

image-20230423104716511

+

使用PEiD识别加密算法

PEiD自带了许多插件,其中Krypto ANALyzer是一种加密货币分析工具

+

image-20230423105155291

+

使用KANAL分析出下面几种算法

+
    +
  • ADLER32:校验和而算法,用于数据完整性检验
  • +
  • CRC32:是一种循环冗余校验码,用于数据完整性校验和错误检测
  • +
  • CryptDecrypt:是一组Windows API函数,用于加密和解密数据。可以在加密的数据块上执行解密操作,并将结果存储在相同的缓冲区中。
  • +
  • CryptEncrypt:是一组Windows API函数,用于加密和解密数据。可以在未加密的数据块上执行加密操作,并将结果存储在相同的缓冲区中。
  • +
  • RIJNDAEL:是一种块密码算法
  • +
  • ZIP2与ZLIB:是压缩算法
  • +
+

image-20230423105520546

+

查看导入表

可以看到wannacry没有输出表的信息,只有输入表的信息

+

image-20230423112726434

+

输入表中可以观察到引用了

+
    +
  • KERNEL32.dll:是一个Windows操作系统中非常重要的系统动态链接库文件,它包含了大量的系统核心函数,文件读写以及进程控制等函数
  • +
  • USER32.dll:是Windows操作系统中的一个动态链接库文件,包含了许多用户界面相关的函数。
  • +
  • ADVAPI32.dll:是Windows操作系统中的一个动态链接库文件,包含了许多安全和系统管理相关的函数。例如控制注册表等函数
  • +
  • MSVCRT.dll:是Microsoft Visual C++运行时库中的一个动态链接库文件,包含了许多与C和C++语言相关的函数。
  • +
+

image-20230423113302137

+

KERNEL32.dll

+

发现大量的文件操作函数

+

image-20230423113913211

+

资源读写函数

+

image-20230423114016416

+

USER32.dll

+

只有一个宽字节写的函数

+

image-20230423114122423

+

ADVAPI32.dll

+

含有注册表操作的函数,说明Wannacry会修改注册表

+

image-20230423114232814

+

MSVCRT.dll

+

一些C/C++相关函数

+

image-20230423114430098

+

使用Resource Hacker查看资源

Wannacry中存在三个资源,分别为XIA、Version Info以及Manifest

+

image-20230423114712265

+

XIA

+

XIA中存在一个PK头,即压缩包资源

+

image-20230423114839859

+

压缩包里有许多文件以及可执行文件,可能是用于感染的

+

image-20230423135848538

+

基础动态分析

Process Monitor

使用Process Monitor分析进程树,发现wannacry会生成创建五个进程,四个自定义进程,以及一个cmd.exe用于执行系统命令

+

image-20230423141255646

+

Reshot

使用Reshot观察注册表被修改的情况,添加了新的键,并且键名为WanaCrypt0r

+

image-20230423150919111

+

值为”wd”=”C:\Users\pwn\Desktop\勒索软件样本(13个)附解压密码\勒索软件样本(1)\Wannacry”

+

image-20230423151016310

+

文件监控

使用火绒剑进行文件监控,创建了脚本文件,应该是配合上述的cmd.exe执行相应的操作

+

image-20230423151852243

+

释放了许多可执行文件

+

image-20230423152203525

+

深入分析

WannaCry

WannaCry用于做勒索的前期准备,不是具体的勒索行为,改程序的各函数功能入下图。

+

WannaCry

+

TaskStart.dll

TaskStart.dll宏观操作如下图,其中加密行为在sub_100057c0函数

+

TaskStart.dll

+

sub_100057c0

接下来就详细分析具体的勒索行为

+

首先初使用CryptAcquireContextA函数始化加密的上下文环境

+

image-20230426152830554

+

使用CryptImportKey函数导入攻击者的密钥,该密钥为公钥

+

image-20230426154704615

+

使用CryptGenKey导入密钥句柄,并且规定加密的方式为RSA

+

image-20230426154806314

+

使用CryptExportKey函数,在本机导出公钥

+

image-20230426154955134

+

使用CryptExportKey函数在本机导出私钥,并且攻击者使用自己的公钥,将本地生成的私钥进行加密

+

image-20230426155559715

+

这里总的来说,就是攻击者会在受害者机器上利用API生成公私钥对,用于后续加密文件。但是为了防止用户自己将文件解密,因此攻击者会使用自己手上的公钥,将在本地生成的密钥给加密,这样只有利用攻击者手上的私钥才能进行解密。如下图所示

+

加密流程.drawio

+

程序会利用SHGetFolderPathW函数获取桌面的路径,因此该程序会优先加密桌面的文件

+

image-20230426160604608

+

利用FindNextFileW函数遍历桌面的文件

+

image-20230426160734804

+

程序会对文件后缀进行匹配,遇到.exe和.dll文件会选择跳过不加密

+

image-20230426160844204

+

将所有符合条件的文件都存放到内存中,完成后续的加密以及修改后缀名的行为

+

image-20230426161232814

+

将每个文件的后缀名新增.WNCRY的后缀

+

image-20230426161615557

+

Wannacry并不是在原始文件上进行修改的,而是会新建一个文件,将加密后的数据填充到里面,该文件的名称就是原有的名称加上.WNCRY

+

image-20230426161818801

+

在加密之前会使用CryptGenRandom函数生成一个随机数

+

image-20230426162009133

+

利用CryptEncrypt函数,使用刚刚在本地生成的公钥,将该随机数进行加密

+

image-20230426162201093

+

利用上面生成的随机数进行AES加密,并且加密后立刻将生成的随机数清空

+

image-20230426162413519

+

那么加密的操作就比较简单了,就是不断读取原始的文件数据,经过AES加密,加密的密钥是刚刚生成的随机数,然后将加密后的结果写入刚刚新建的文件中。

+

image-20230426163215954

+

在完成加密后,WannaCry还会对原始文件进行加密,加密的操作与上述流程一致

+

image-20230426163550255

+

在加密完桌面程序后,则是加密其他路径的文件,完成全磁盘的加密,所有加密操作都如上述一致,并且最后会把原始文件进行删除

+

总结

加密流程

首先攻击者会准备一个RSA的公钥,接着会在被攻击的主机上生成一对公钥与私钥,本地生成的私钥会被攻击者的公钥进行RSA加密,然后攻击者会生成一组随机值,接着读取原文件的数据,将随机值作为AES的密钥,将原始文件的数据进行AES加密,并将加密后的数据写入到*.wnry文件中。并且为了防止原始文件被获取,WannaCry会将原始文件也加密,接着将原始文件删除。

+

加密流程

+

因此程序的加密流程是

+
    +
  • 读取原始文件的数据流
  • +
  • 将数据流进行AES加密
  • +
  • 将加密后的数据流写入到其他文件
  • +
  • 并将原始文件删除
  • +
+

加密使用的API

用于读写文件

+
    +
  • CreateFileW

    +
  • +
  • WriteFile

    +
  • +
  • ReadFile

    +
  • +
+

用于加密文件

+
    +
  • CryptAcquireContextA
  • +
  • CryptImportKey
  • +
  • CryptGenKey
  • +
  • CryptEncrypt
  • +
  • CryptDestroyKey
  • +
  • CryptGenRandom
  • +
+ + +
+ +
+
+ + + + + + +
+
+
wannacry分析
+
https://h0pe-ay.github.io/wannacry/
+
+
+ +
+
作者
+
hope
+
+ + +
+
发布于
+
2024年3月8日
+
+ + + +
+
许可协议
+
+ + + + + + + + + + +
+
+ +
+
+
+ + + + +
+
+ + +
+ +
+ +
+ + +