WannaCry勒索病毒复现及分析,蠕虫传播机制全网源码详细解读原力计划应用程序字符串调用

2017年5月12日,WannaCry蠕虫通过永恒之蓝MS17-010漏洞在全球范围大爆发,感染大量的计算机。WannaCry勒索病毒全球大爆发,至少150个国家、30万名用户中招,造成损失达80亿美元,已影响金融、能源、医疗、教育等众多行业,造成严重的危害。

WannaCry是一种“蠕虫式”勒索病毒软件,由不法分子利用NSA泄露方程式工具包的危险漏洞“EternalBlue”(永恒之蓝)进行传播。该蠕虫感染计算机后会向计算机中植入敲诈者病毒,导致电脑大量文件被加密。

WannaCry利用Windows系统的SMB漏洞获取系统的最高权限,该工具通过恶意代码扫描开放445端口的Windows系统。被扫描到的Windows系统,只要开机上线,不需要用户进行任何操作,即可通过SMB漏洞上传WannaCry勒索病毒等恶意程序。

WannaCry利用永恒之蓝漏洞进行网络端口扫描攻击,目标机器被成功攻陷后会从攻击机下载WannaCry蠕虫进行感染,并作为攻击机再次扫描互联网和局域网的其他机器,行成蠕虫感染大范围超快速扩散。

木马母体为mssecsvc.exe,运行后会扫描随机IP的互联网机器,尝试感染,也会扫描局域网相同网段的机器进行感染传播,此外会释放敲诈者程序tasksche.exe,对磁盘文件进行加密勒索。木马加密使用AES加密文件,并使用非对称加密算法RSA2048加密随机密钥,每个文件使用一个随机密钥,理论上不可攻破。同时@WanaDecryptor@.exe显示勒索界面。其核心流程如下图所示:

WannaCry勒索病毒主要行为是传播和勒索。

WannaCry传播机制源码详解

WannaCry蠕虫主要分为两个部分:蠕虫部分用于病毒传播,并释放出勒索程序;勒索部分用于加密用户文件索要赎金。大家可能看到的很多样本都是没有传播部分代码或域名开关的。接下来是作者一点点的摸索,希望对您有所帮助,也欢迎批评和指正。

1.WannaCry蠕虫传播流程

WannaCry运行的整体流程推荐安天公司的框架图,如下图所示:

其中,图中上半部分为WannaCry蠕虫的传播部分,该蠕虫通过网络进行传播,有自我复制和传播迅速等特点。传播步骤如下:

(1)连接远程域名开关

(2)判断参数个数,选择蠕虫安装流程或服务传播流程

①创建服务:服务名称mssecsvc2.0,参数为–msecurity

②释放并启动tasksche.exe程序

①服务函数中执行传播感染功能

②打开mssecsvc2.0服务并设置其状态

③蠕虫初始化操作后,会进行局域网和公网传播(建立局域网或公网IP表,创建IP线程)

④尝试连接445端口,测试是否存在SMB漏洞

⑤如果存在漏洞,则建立通信连接并发送Payload(X86或X64)进行攻击

⑥执行shellcode并使用APC注入将生成的dll注入到进程lsass.exe

⑦dll调用导出函数PlayGame,释放资源文件并保存为mssecsvc.exe执行

2.程序入口Start

通过OD打开样本wcry.exe,发现程序入口地址为0x00409A16,对应start()函数。

通过一些初始化设置,紧接着会调用WinMain()函数进入主程序。

主程序调用关系如下图所示,调用地址为0x00409B45。

3.域名开关WinMain

主程序运行后会先连接域名(KillSwitch)hxxp://www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com

该代码会调用InternetOpenUrl打开对应的网址,并根据其访问情况执行不同的操作。如果网址无法访问,会调用sub_408090()函数创建蠕虫服务。这也意味着如果蠕虫作者注册并访问了该URL,WannaCry蠕虫也就停止了传播。目前该域名已被英国的安全公司接管,网上怀疑该操作能有效防止在线沙箱检测。

4.参数判断sub_408090

接着进入sub_408090函数,通过判断参数个数来执行相应的流程。

推荐绿盟API词典:恶意样本分析手册——API函数篇-李东宏

mssecsvc2.0服务对应的数据部分如下图所示,该服务会伪装成微软安全中心的服务,服务的二进制文件路径为当前进程文件路径,参数为“-msecurity”。

OD动态调试如下图所示,包括调用CALL访问函数,将服务PUSH入栈等。

5.蠕虫安装流程sub_407F20

蠕虫安装流程主要调用sub_407F20函数,包括sub_407C40和sub_407CE0。

(1)sub_407C40:创建mssecsvc2.0服务,并启动该服务,参数为”-msecurity”,蠕虫伪装为微软安全中心。

(2)sub_407CE0:读取并释放资源tasksche.exe至C:\Windows路径,创建线程运行。

主要调用的函数包括GetProcAddress、MoveFileEx、CreateFile等。

动态调用过程如下图所示:

释放的C:\Windows\tasksche.exe效果如下图所示:

6.蠕虫服务传播流程sub_4080000

当参数≥2时,蠕虫执行服务传播流程,调用sub_4080000实现,其代码如下:

sub_4080000会打开mssecsvc2.0服务并设置其状态,服务设置函数包括RegisterServerCtrlHandlerA、SetServiceStatus。

动态分析过程如下图所示:

核心函数是sub_407BD0,它的功能包括:

7.蠕虫初始化操作sub_407B90

蠕虫初始化操作主要调用sub_407B90函数实现,具体功能包括:

函数WSAStartup主要是进行相应的Socket库绑定。函数原型如下:

使用Socket程序之前必须调用WSAStartup函数,以后应用程序就可以调用所请求的Socket库中的其它Socket函数

应用程序在完成对请求的Socket库的使用后,要调用WSACleanup函数来解除与Socket库的绑定并且释放Socket库所占用的系统资源

Socket接口的检索有关域名、通信服务和协议等Internet信息的数据库函数

继续调用sub_407A20函数从内存中读取MS17-010漏洞利用代码,Payload分为x86和x64两个版本,32位大小为0x4060,64位大小为0xc8a4。

8.局域网传播sub_407720

蠕虫初始化操作后,会生成两个线程,分别进行局域网和公网传播。

局域网传播:蠕虫根据用户内网IP,生成覆盖整个局域网网段表,然后循环尝试攻击。

这里存在一个疑问:你怎么能确定v1是局域网传播,而v3是外网传播呢?

在函数sub_407720中,会继续调用线程执行sub_4076B0函数。同时,函数如果同时调用10个以上IP地址,会执行Sleep暂停100毫秒(1秒=1000毫秒)。

函数sub_407720会调用函数sub_409160,接着调用GetAdaptersInfo获取网卡配置和IP地址详细信息,最终进行局域网IP地址拼接和传播。而外网传播的IP地址是通过四个随机数产生的,通过这些差异就能判断是局域网传播还是外网传播。

函数sub_4076B0会连接445端口,如果445端口连接成功,接着发起漏洞攻击。如果连接超过10分钟则终止该线程。

接下来调用sub_407540函数发起漏洞攻击。

9.公网传播sub_407840

公网传播:公网IP地址通过4个随机数拼接而成,然后循环尝试攻击。

sub_407840函数会生成四个随机数,然后调用aDDDD进行IP拼接,表示成%d.%d.%d.%d。0xFF表示255,对应最大地址,v8余数不等于127内网。接着调用sub_407540函数进行外网传播。

作用:将一个点分十进制的IP转换成一个长整数型数

参数:字符串,一个点分十进制的IP地址

返回值:如果正确执行将返回一个无符号长整数型数,如果传入的字符串不是一个合法的IP地址,将返回INADDR_NONE

作用:将一个十进制网络字节序转换为点分十进制IP格式的字符串

参数:一个网络上的IP地址

返回值:如果正确,返回一个字符指针,指向一块存储着点分格式IP地址的静态缓冲区;如果错误返回NULL

在sub_407840函数中,继续调用线程执行sub_407540函数,该函数为漏洞利用核心函数。

10.漏洞检测及创建通信连接sub_407540

IP地址拼接好后,会创建漏洞利用线程,调用sub_407540函数。

通过connet建立Socket通信连接,再调用send和recv进行数据包握手确认。最后会调用核心函数sub_406F50。

11.发送SMB数据包sub_4072A0

建立通信连接(connect、send、recv),发送利用Eternalblue的蠕虫SMB数据包。具体流程包括:(还需进一步分析)

12.获取Payload(dll+shellcode)

样本在利用漏洞MS17-010获取目标主机权限后,并不会直接发送蠕虫自身到目标,而是发送一段经过简单异或加密后的Payload到目标机器中执行。在sub_4077A0函数中,v7是系统标记,当v7等于1时表示32位操作系统,当v7等于0时表示64位操作系统。

Payload由shellcode和包含样本自身的dll组成,Payload分为64位与32位,函数sub_406F50如下图所示。

dll同样分为64位与32位版本,根据目标主机系统的不同,读取不同版本的dll

13.提取shellcode

对应的反汇编代码如下,包括x64_payload_addr、x86_payload_addr。

32位Shellcode获取:0x42E758~0x42FA5D。

64位Shellcode提取:0x42FA60~0x43125F。

14.shellcode分析之安装后门

Shellcode反汇编及功能分析如下:

①查找基地址

②获取Hash计算方法

③根据基地址、函数hash字符查找导出函数地址

④查找需要用到导出函数地址并保存导出函数hash对照表

⑤查找目标进程,通过hash编码782BF0E7h进程名查找(lsass.exe)

⑥使用查到导出函数的地址,并进行APC注入

⑦最后将shellcode自身以及其所分配的内存清0

shellcode部分作者还需要进一步研究,加油~

安装后门主要执行sub_401370函数,在远程电脑上安装双星脉冲DOUBLEPULSAR后门。

15.shellcode分析之APC注入

shellcode第二部分是利用安装的后门,APC向应用程序注入dll。

(1)查找ntoskrnl.exe基地址

首先找到gs[38]处的_KIDTENTRY64指针,在KIDTENTRY64的偏移4,得到中断处理的函数指针,这个地址在ntoskrnl.exe中,我们就找到了ntoskrnl.exe的地址空间,然后去地址空间的页头地址对比PE头MZ,找到则函数返回。

(2)获取Hash计算方法

需要使用的函数并没有硬编码写到程序里,而是硬编码了这些函数的hash值。所以我们需要首先知道函数编码和hash值得对应关系。Hash计算方法如下,用c++代码注释了一下。

(3)根据ntoskrnl.exe基地址、函数hash字符查找导出函数地址

find_func函数如下,有了ntoskrnl.exe所有导出函数hash对照表,整个程序流程就明朗了。

(4)查找需要用到ntoskrnl.exe导出函数地址并保存备用

(5)查找目标进程,通过hash编码782BF0E7h进程名查找(lsass.exe)

查找目标进程,通过hash编码782BF0E7h进程名查找,直接没找到“lsass.exe”,查找方法是使用pid暴力查找。具体通过pid调用PsLookupProcessByProcessId得到pEProcess结构指针,再通过pEProcess调用PsGetProcessImageFileName得到进程名。

(6)使用查到导出函数的地址,并进行APC注入

APC注入,使用查到导出函数的地址,注释见截图。第六个参数包含了第三层shellcode和dll代码,可自行dump出研究,第七个参数指定为usermode。

(7)最后将shellcode自身以及其所分配的内存清0

内核部分的注入代码主要流程就分析完了,到用户层的shellcode自己实现的一个peloader而没有使用LoadLibary,这样使得注入更加隐蔽,查询PEB_LDR_DATA的也查不到被注入了dll。

16.dll导出及分析

shellcode使用APC注入将生成的dll注入到系统进程lsass.exe,导出的dll文件如下图所示:

火绒剑检测结果如下,通过APC注入将生成的dll注入到系统进程lsass.exe,接着释放资源mssecsvc.exe,最后释放勒索程序tasksche.exe。

17.释放资源tasksche.exe

dll具有一个导出函数PlayGame,它会将母体程序释放到被攻击的计算机,保存为C:\WINDOWS\mssecsvc.exe并执行。下面是作者分析导出的dll静态代码,主函数PlayGame。

PlayGame包括两个核心函数:sub_180001014和sub_1800010F8。

最后释放资源tasksche.exe(勒索加密程序)到C:\WINDOWS目录下,并将其启动。

18.勒索行为

运行病毒程序后的界面如下图所示,已经成功被勒索。再次强调,所有代码必须在虚拟机中执行,并且关闭文件共享。

样本的解压密码是WNcry@2ol7,通过资源工具也可以查看到。解压后的文件结构如下:

msg文件夹下就是所有的语言包。

总结

参考文献

[1]安天针对勒索蠕虫“魔窟”(WannaCry)的深度分析报告

[3]WannaCry勒索病毒详细解读-腾讯电脑管家

[4]NSAEternalblueSMB漏洞分析-360核心安全

[5]针对WannaRen勒索软件的梳理与分析-安天

[6]【权威报告】WanaCrypt0r勒索蠕虫完全分析报告-360追日

[7]WannaCry勒索病毒分析报告-瑞星

[1]对WannaCry的深度分析-鬼手56(勒索部分详解)

[2][原创]WannaCry勒索软件中“永恒之蓝”漏洞利用分析-展博

[3][原创]通过Wannacry分析内核shellcode注入dll技术-dragonwang

[4][病毒分析]WannaCry病毒分析(永恒之蓝)-小彩虹

[5]WannaCry勒索病毒逆向和内网传播数据分析-sec360zz

[6]首发|Wannacry勒索软件母体主程序逆向分析(含临时解决方案自动化工具)-expsky

THE END
1.PHP在线ps照片图片处理网站源码photoshop网页版.zip资源浏览查阅125次。PHP在线ps照片图片处理网站源码photoshop网页版.zip在线ps源码更多下载资源、学习资料请访问CSDN文库频道.https://download.csdn.net/download/QWQ123Q/90029885
2.想要网站的源代码,但对方不给(ps:合同规定我们有源代码的使用权,,但是关于想要网站的源代码,但对方不给(ps:合同规定我们有源代码的使用权,,但是源代码的所有权归对方)应该怎么办精选答案推荐 以上咨询为用户常见问题,经整理发布,仅供参考学习 咨询我 纷争调解顾问团 帮助人数:59121人 好评率:97.32% 响应时间:3分钟内 对于此问题按双方在合同中的约定进行处理,建议双方协商解决https://www.66law.cn/question/answer/8973130.html
3.PHP在线PS图片处理源码webps1.0.rarPHP在线PS图片处理源码webps,是一个能在线使用Photoshop的程序,挺有意思的PHP源码,可实现在线处理图片,完成图片 裁切、改变大孝添加滤镜等功能。和PhotoShop的功能有点相似,因为发现不少人想要这个源码,但是网上也找不到,今天分享出来给大家,上传到空间即可使用。 PHP源码-其它类别 2019-07-10 上传 大小:168KB 所https://www.iteye.com/resource/weixin_39841856-11322165
4.Photopea在线Photoshop工具源码(最新推荐)源码下载Photopea在线Photoshop工具源码,可以说是Photoshop的在线简版,操作习惯和快捷键都和PS是一样的。 功能强大,可以满足大部分图片修改工作,格式兼容性强。不需要下载安装,只要有网和浏览器就可以随时进行工作。 源码安装方法 兼容多重格式,上传源码解压缩,访问进行安装即可!! https://www.jb51.net/codes/880586.html
5.webps源码在线PS源码php版免费下载软件大小:0.17MB更新时间:2021-03-27应用平台:WinAll软件分类:源码下载 软件介绍 下载地址 webps源码在线PS源码是一个能在线使用Photoshop的系统,可以实现在线处理图片等功能。 很多人都想要这个源码,但是网上也找不到,今天分享出来给大家,上传到空间即可使用没什么好说的。 http://www.onlinedown.net/soft/1146717.htm
6.免费网站源码源代码网页源码网站源码下载提供源代码,网页源码等相关下载软件,网站源码用户热评软件排行,新鲜软件排行等向您推荐最受关注和最新的网站源码工具。更多网站源码尽在中关村在线下载频道。https://xiazai.zol.com.cn/E-commerce_soft_index/E-commerce_free_1.html
7.在线photoshop网页版工具开发(基于javascript+webpack+css+jquery基于javascript开发的在线ps工具,打包方式webpack 在线预览 在线ps网页版 源码地址 https://github.com/geeeeeeeek 功能介绍 在线图像编辑器允许您使用HTML5技术创建、编辑图像。 无需购买、下载、安装或拥有过时的闪存。没有广告。 主要功能:图层,过滤器,HTML5,开源,Photoshop替代品。 https://cloud.tencent.com/developer/article/2312255
8.免费验证码接收网站&不停开小号方法慕舲不再使用自己收藏的几个好玩牛逼的网站 1、搜源码-方便找到你想要的一些源码,例如一些插件的js,免得去一些博客花钱去下载了 链接: http://www.bvbcode.com/cn/. 2、在线P图,不用下载或者等待photoshop打开,很爽的一个网站 链接: https://www.uupoop.com/ps/. https://www.cnblogs.com/theflight/p/gethao.html
9.FFmpeg(444,422,420) 9, 10 and 16 bit support - changed DTS stream id in lavf mpeg ps muxer from 0x8a to 0x88, to be more consistent with other muxers. - adelay filter - pullup filter ported from libmpcodecs - ffprobe -read_intervals option - Lossless and alpha support for WebP http://ffmpeg.org/
10.onlineps首页文档和下载在线处理图片OSCHINAonlineps 是一个由天涯社区开发的在线处理图片的应用程序 主要功能包括: 图像加边框 改变尺寸 垂直翻转使用者可以通过组件引用的方式,将其嵌入到应用的任意位置,使之拥有在线绘图的能力。 功能特性 https://www.oschina.net/p/onlineps
11.使用JAVA爬虫搭建一个小说网站(可上线运营)吾爱破解爬虫知识,HttpClient抓取,JSoup解析,BootStrap, EasyUI美化搭建一个可用的小说网站(PS:我的小说网站https://www.52pojie.cn/thread-760514-1-1.html
12.从零开发一款图片编辑器(使用html5+javascript)首页将各种css、js文件引入,其中bundle.js是主渲染文件(使用npm打包命令打包后会生成bundle.js文件)。 在线PS https://blog.51cto.com/u_16317510/8526662
13.linuxAestivating'sBlogPage2使用ps-xj命令可以看到,登录shell(PID 5128)和top在同一个会话期,shell为会话期首进程,所在进程组PGID为5128,top所在进程组PGID为5180,为前台进程组。 [root@tivf09 root]# ps -xj|grep 5128 5126 5128 5128 5128 pts/0 5180 S 0 0:00 -bash https://aestivating.wordpress.com/tag/linux/page/2/
14.新手怎么制作一个简单网站一个是空间的地址,一个空间ftp账号,另一个是ftp密码最后说的就是上传了, 登陆后找到空间网站源码存取位置(一般的叫web 或者是直接打开等等,这不知道也可以问空间商)这是你就可以访问你的域名,你看到的就是你的网站了,ps:你网站源码呀确定能不能访问,或者是否要在线安装等等 https://jingyan.baidu.com/article/76a7e409b4f124fc3b6e15c0.html
15.GitHub(weblogic/tomcat/apache的密码文件、配置文件,确定绝对路径,方便后面读源码) 5、读取一些软件的运维配置文件(redis/rsync/ftp/ssh等等程序的数据、配置、文档记录) 6、读取程序源代码,方便后面做代码审计,找突破口 7、读取web应用日志文件,中间件的日志文件,其他程序的日志,系统日志等(可以网站后台地址、api接口、https://github.com/0xss/PentestNote