从Wannacry到WannaRen:螣龙安科带你深度分析勒索病毒原理
从Wannacry到WannaRen:螣龙安科2020年4月7日,360CERT监测发现网络上出现一款新型勒索病毒wannaRen,该勒索病毒会加密windows系统中几乎所有的文件,并且以.WannaRen作为后缀。360CERT该事件评定:危险等级为高危,影响面为广泛。
经360安全大脑分析确认,“WannaRen”勒索病毒的作者正是此前借“永恒之蓝”漏洞祸乱网络的“Shadow Brokers”组织。从三年前Wannacry席卷全球,至少30万用户中招,到今天卷土重来,这两款病毒背后的原理基本是一样的,今天翼火蛇就带你来深度分析这两款病毒的原理。
原理分析(以Wannacry为例)
传播基础——EternalBlue“永恒之蓝”漏洞
“永恒之蓝”漏洞本来是美国国家安全局(NSA)开发的针对微软的攻击武器,但在2013年6月被黑客团队ShadowBreakers窃取,在2017年,ShadowBreakers公布了一大批网络攻击工具,其中包含“永恒之蓝”工具。
”永恒之蓝“利用Microsoft 服务器消息块(SMB)协议的实现中的一个漏洞。该漏洞的存在是因为各种版本的Microsoft Windows中的SMB版本不同,服务器处理来自远程攻击者的特制数据包,使他们可以在目标计算机上执行任意代码。该漏洞利用的是windows计算机的445端口,445端口是一个毁誉参半的端口,有了它我们可以在局域网中轻松访问各种共享文件夹或共享打印机,但也正是因为有了它,黑客们才有了可乘之机,他们能通过该端口偷偷共享你的硬盘。而在Wannacry攻击中,攻击者就是扫描开放445文件共享端口的Windows机器,不需要用户的任何操作就能在电脑和服务器中植入Wannacry病毒。
病毒核心——加密勒索病毒部分
PART1 wcry.exe主程序
这一部分是是病毒的初始化操作,代码逻辑如下:
初始化操作
病毒首先获取到计算机名,然后计算出计算机名的ASCII乘积,将这个乘积作为随机数种子调用两次rand函数,最后获取到一个字母+数字的随机字符串,接下来程序对命令行参数做了一个判断,然后切换当前进程的路径为工作目录。
随后,通过RealseFiles函数将资源中隐藏的压缩包进行解压 解压密码是WNcry@2017,然后释放压缩包中的所有文件到当前进程的路径下。然后,再利用WriteCwnry函数将比特币账户写入到c.wnry文件中。最后通过执行两次ExeCmdCommand函数,隐藏当前路径下的所有文件,同时向系统中添加一个叫everyone的用户,并且给他所有权限。
加载病毒核心操作
这部分的函数所有的操作都只有一个目的,就是为了调用dll中的导出函数。
首先,通过GetApis函数获取各个API函数的地址,比如CreateFileW、WriteFile 等等,为后面的操作做准备。
接着,通过CDatabase::CDatabase构造函数初始化两个用于线程同步的临界区对象。接下来利用ImportKeyAndAllocMem函数导入RSA密钥并申请两块内存空间。
私钥已经导入完成,那么接下来要做的就是解密了。通过DecryptFile函数对t.wnry这个文件进行读取操作,读取到内存之后传入上个函数拿到的密钥句柄,在内存中进行解密,然后导出一个dll文件。
随后,通过WriteAllocMem函数申请一块堆空间,并且把已经解密的dll文件写入到堆空间中。然后,通过函数GetExportFunAddr函数从堆空间中取出dll导出函数的地址,并且通过析构函数析构,释放资源。
PART1总结
从上面的分析可以得出病毒的主体程序实际上只做了一些初始化的操作,到目前为止并没有看到它感染或加密任何一个文件,也没有对用户进行勒索,真正的核心代码在t.wnry中。
PART2 t.wnry.dll病毒核心
第二部分是病毒的所有操作
CreateResFile 第一个线程回调函数
这个函数在工作路径创建了00000000.res这个文件,并且往里写入数据。
CheckDky 第二个线程函数
这个函数的作用是每个五秒检测工作路径下是否存在774F34B5.dky这个文件。
EncryptAllFiles 第三个线程函数 加密所有文件
这个函数是整个病毒程序最核心的函数,代码量最多,里里外外总共嵌套了十几层函数。
l 核心加密函数第一层
循环检测是否有新的磁盘加入,如果有,则加密,没有就一直循环。
l 核心加密第二层
这一层有三个函数很重要
MovFileToTemp:移动文件到临时目录下并重命名为.WNCRTY
FillDisk:在回收站创建一个文件,并且循环写入数据直到磁盘空间不足
EncryptFile:加密磁盘上的所有文件
l 核心加密第三层
进到第三层之后又有一个函数,这个函数会遍历并且加密所有的文件,而且是递归调用的。
l 核心加密第四层
这个函数首先遍历所有的文件,对文件夹和文件执行不同的操作,并且对后缀名进行过滤。
l 核心加密第五层
这个函数首先会调用sub_10002E70这个函数 根据这个函数返回值的不同 执行不同的加密策略
l 核心加密第六层
这个加密函数首先做了一些准备工作,获取文件的后缀名,然后跟.WNCRY做判断,如果比较成功,则不加密,接着做了一个字符串拼接,然后才开始加密文件
l 核心加密第七层
接下来是这个程序的核心的加密算法,他加密的步骤如下
1.读取文件前0x8个字节的内容,跟WANACRY!作比较
2.使用原文件名+.WNCRYT 创建一个新文件,创建的时候这个文件并没有任何内容
3.对创建的文件写入数据
4.读取原文件 将加密后的文件内容写入到创建的文件
StartTaskdl 第四个线程回调函数 以隐藏的方式启动taskdl.exe
这个函数每隔三秒以隐藏的方式启动taskdl.exe
StartExeAndSetReg 第五个线程回调函数 启动taskse.exe和@WanaDecryptor@.exe并且修改注册表
WannaCry病毒的大致原理就是这样,在其核心部分,同时使用了十几个函数的嵌套,复杂程度堪比当年的熊猫烧香。但是WannaCry病毒存在一个致命缺陷,即病毒作者无法明确认定哪些受害者支付了赎金,因此很难给相应的解密密钥,所以用户即使支付了赎金,也未必能顺利获得密钥该电脑系统及文件依旧无法得到恢复。
当然,Wannacry病毒并不是金刚不坏,主要有这样几种防御措施。
1. 关闭445端口
2.更新补丁
3.通过某些安全软件来防范加密
事实上,在面对所有的勒索病毒时,避免接触感染源,及时更新系统补丁才是上上策,一旦病毒已经感染,文件已经被加密,在短时间内破解密钥几乎是不可能的,因而事前防范才是克制勒索病毒像2017年那样肆虐的关键所在。
从Wannacry到WannaRen:螣龙安科带你深度分析勒索病毒原理的更多相关文章
- WannaRen来袭:螣龙安科带你盘点那些年的勒索病毒
2020年4月7日,360CERT监测发现网络上出现一款新型勒索病毒wannaRen,该勒索病毒会加密windows系统中几乎所有的文件,并且以.WannaRen作为后缀.360CERT该事件评定:危 ...
- 螣龙安科携手51CTO:网络安全实战课程最新发布
一年一度的双十一狂欢节即将来临了,相信各大电商平台也正摩拳擦掌跃跃欲试中.回顾2019年,阿里巴巴双十一狂欢节的单日交易额就达到了2684亿人民币,创造了电商交易历史上新的记录. 当人们愉快地购买着自 ...
- 螣龙安科反入侵:EDR的缺点
EDR解决方案提供了比传统终结点安全解决方案更高的功能,并且可以增加人员数量,但是这些功能都有不少的缺点. EDR功能付出巨大代价 在过去四年中,虽然产品成本平均每年下降约35%,但即使到今天,产品的 ...
- 螣龙安科:威胁研究——与MAZE勒索软件事件相关的策略,技术和程序
至少从2019年5月开始,恶意行为者就一直在积极部署MAZE勒索软件.勒索软件最初是通过垃圾邮件和漏洞利用工具包分发的,后来又转移到妥协后进行部署.根据我们在地下论坛中对涉嫌用户的观察以及整个Mand ...
- 安科 OJ 1190 连接电脑 (并查集)
时间限制:1 s 空间限制:128 M 传送门:https://oj.ahstu.cc/JudgeOnline/problem.php?id=1190 题目描述 机房里有若干台电脑,其中有一些电脑已经 ...
- 一分钟应对勒索病毒WannaCry
一.WannaCry 勒索病毒 勒索病毒WannaCry肆虐全球,利用Windows操作系统漏洞,因链式反应迅猛自动传播,校园电脑.个人电脑.政府机关都是重灾区.中毒电脑所有文档被加密,将被勒索高达3 ...
- WannaCry勒索病毒全解读,权威修复指南大集合
多地的出入境.派出所等公安网络疑似遭遇了勒索蠕虫病毒袭击,已暂时停办出入境业务:加油站突然断网,不能支持支付宝.微信.银联卡等联网支付:大批高校师生电脑中的文件被蠕虫病毒加密,需要支付相应的赎金方可解 ...
- "WannaCry"勒索病毒用户处置指南
"WannaCry"勒索病毒用户处置指南 原文: http://mp.weixin.qq.com/s/ExsribKum9-AN1ToT10Zog 卡巴斯基,下载官网:h ...
- WannaCry勒索病毒卷土重来:日本本田工厂被迫关闭
6月22日消息,前阵子WannaCry勒索病毒席卷全球,世界各地网络遭到攻击.日前,偃旗息鼓了一阵的WannaCry勒索病毒又重回人们视线,迫使一家汽车厂在日本关闭. 路透社报道,本田Sayama工厂 ...
随机推荐
- [AcWIng 799] 最长连续不重复子序列
点击查看代码 #include<iostream> using namespace std; const int N = 1e5 + 10; int a[N], s[N]; int mai ...
- HTTP.sys远程执行代码漏洞检测
1.漏洞描述:HTTP 协议栈 (HTTP.sys) 中存在一个远程执行代码漏洞,这是 HTTP.sys 不正确地分析特制 HTTP 请求时导致的.成功利用此漏洞的攻击者可以在系统帐户的上下文中执行任 ...
- 论文解读(ClusterSCL)《ClusterSCL: Cluster-Aware Supervised Contrastive Learning on Graphs》
论文信息 论文标题:ClusterSCL: Cluster-Aware Supervised Contrastive Learning on Graphs论文作者:Yanling Wang, Jing ...
- 试驾 Citus 11.0 beta
https://www.citusdata.com/blog/2022/03/26/test-drive-citus-11-beta-for-postgres/ Citus 11.0 beta 的最大 ...
- linux篇-修改mysql数据库密码
总是忘记,每次都要查文档,背背背 方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password for 用户名@localhost = passw ...
- linux篇-Linux逻辑卷详解总结
LVM是逻辑卷管理(Logical Volume Manager)的简称,它是建立在物理存储设备之上的一个抽象层,允许你生成逻辑存储卷,与直接使用物理存储在管理上相比,提供了更好灵活性. LVM将存储 ...
- AJAX——POST请求
POST.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- Yaml中特殊符号"| > |+ |-"的作用
"|",保留每行尾部的换行符\n. ">",删除每行尾部的换行符\n,则看似多行文本,则在程序中会将其视为一行. include_newlines: | ...
- 安装Redis到Linux(源码)
运行环境 系统版本:Ubuntu 16.04.2 LTS 软件版本:redis-5.0.4 硬件要求:无 安装过程 1.配置系统参数 root@localhost:~# vim /etc/sysctl ...
- .NET性能优化-推荐使用Collections.Pooled
简介 性能优化就是如何在保证处理相同数量的请求情况下占用更少的资源,而这个资源一般就是CPU或者内存,当然还有操作系统IO句柄.网络流量.磁盘占用等等.但是绝大多数时候,我们就是在降低CPU和内存的占 ...