Day30 - 逆向 WannaCry 病毒,想哭病毒?

恶名昭彰的 WannaCry 让 Windows 使用者欲哭无泪。今天来逆向 WannaCry,看这只病毒到底有什麽实际行为?为什麽新闻说有人买下特定的网域,就可以停止 Windows 免於被 WannaCry 加密?今天,就让我们来一探究竟!

实际感染

透过 VMWare 建立一台 Windows (Windows 8.1) 虚拟机,跑跑看 WannaCry。
把它封闭在内网里(这里直接将 Network Adapter 关闭)。WannaCry 差不多30秒就把档案加密完毕。

WannaCry 跳出的视窗(如下图):
2020/10/21 16:27:21 前若没有付钱,档案就会被删光。

所有档案都被加密(如下图):

居然还有贴心小服务,点下去後可以帮你解密部分档案。

分析行为

VirusTotal

先丢上 VirusTotal,果不其然红色警报大作。基本上大部分防毒软件都能侦测到。

网路流量

发现它对 http://www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com/ 发起 DNS 解析与 HTTP request。

被修改的档案

被修改的 Registry Keys Set

逆向 WannaCry

透过 IDA Pro 进行逆向。

F5 一键逆向

反组译後,下图就可以回答上述新闻的问题。(为什麽有人买下特定的网域,就可以停止 Windows 免於被 WannaCry 加密?)

我们可以发现,病毒执行後开始请求网路(第23行的 InternetOpenUrlA,而请求网址为 http://www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com/[攻击者预设无此网址,因此若有网路流量,恶意程序自身判定自己在沙箱被分析,因此不执行恶意行为。] Why 有网路流量就不攻击?为了观察恶意程序的网路行为,资安人员会 response 恶意程序网路流量)

所以我们不难发现,若有人购买http://www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com/并对 HTTP Request 提供 Response。那恶意程序成功连线後,就会执行以下 InternetCloseHandle(v4)、InternetCloseHandle(v5),因而不执行攻击。

实际连接後,如下图:
发现被 Sinkholed 了XD

Sinkholed 是什麽?

A sinkhole is basically a way of redirecting malicious Internet traffic so that it can be captured and analysed by security analysts.

简单来说,这个网址已经受到资安人员的监控。

Reference

我们好奇的是,WannaCry 到底是如何感染受害者电脑?因此我们点进去 sub_408090 这个 function (如下图) 准备一探究竟并拿出核心的行为出来讲解。发现它开启了一些服务(如第14、18行),并且呼叫了其他 function(如第13 、第28行)

我们可以看到第12行有个判断式(如下图),若输入参数小於2,回传 sub_407F20 的函式。若否,开始执行第13行以下的行为(执行 WannaCry 病毒的主要恶意行为)。

我们好奇上述输入参数小於2的时候之行为,於是进去 sub_407F20 该 function 後,发现它又呼叫了两个 function。分别是:sub_407C40 与 sub_407CE0。我们先来观察 sub_407C40的行为(如下图)

透过组合语言(如下图)来观察 sub_407C40。可以看到一些可视字串比方说 %s -m security、mssecsvc2.0 等关键字。简单来说,若上述输入参数小於2,WannaCry 会安装一个名为 mssecsvc2.0 的服务,而其显示的名称为 Microsoft Security Center(2.0) Service,接着 WannaCry 自带两个参数并执行它。

接着观察 sub_407CE0的行为(如下图)。从下图第可以发现,该函式释出 tasksche.exe,而 tasksche.exe 为主要加密程序。第48行为读取编号1831(0x727)的资源档案,并在第72行建立taskshe.exe 之档案,并在第75行将资源档案写入tasksche.exe。

下图为上图之延续

透过组合语言(如下图),能看到该程序执行 tasksche.exe 的过程。

接着观察 sub_408000的行为(如下图)。我们有兴趣的是其呼叫的程序:sub_407BD0。(第5至11行是设定)

观察下图:sub_407BD0,发现又有三个函式被呼叫。分别是 sub_407B90、sub_407720、sub_407840。

我们首先观察 sub_407720。该函式做的是内网扩散。下图第27行 的sub_409160 即建立内网所属网段之目标清单。第40行开始攻击目标清单。

接着观察 sub_407840(如下图)。该函式做的是外网扩散。该函式随机产生外网网址、并对该 445 port 进行练线。若连线成功,则发动 SMB 弱点攻击。

接着观察 sub_407480(如下图),发现它在扫描 445 port 并攻击。

以上是逆向 WannaCry 前置作业与执行内、外网网路扩散的恶意行为。加密行为等等因篇幅有限,就不放上来了。若读者有兴趣,欢迎参考下列 Reference。

WannaCry 实际行为

WannaCry 的程序逻辑还蛮复杂的。透过下张图,可以更清楚它的完整运作逻辑与感染途径。

Reference-1
Reference-2
Reference-3

结论

今天是铁人赛最後一天,希望这30天的分享对读者有所帮助。我们再见!


<<:  学无止尽

>>:  [VR 前後端交响曲Day30] Rails专案开发 - 网站部署 + 完赛感言

Web应用测试工具-Skipfish

Skipfish 是一个主动的Web应用程序安全测试工具 透过执行递归爬网和基於字典的探测 易於使用...

JavaScript Day20 - AJAX(2)

ES6:fetch fetch():Fetch API 提供了一个能获取包含跨网路资源在的资源介面,...

HTML基础介绍(1)

来轻松聊聊 嗨 我是Jacky,今天要来谈谈HTML。 举凡网页开发、设计,不管听过、看过甚至接触过...

Android学习笔记25

Android TV 首先要先在gradle中加入 implementation 'androidx...

Re: 新手让网页 act 起来: Day19 - React Hooks 之 useReducer

前言 如果有接触过 Redux 的话,应该会对这个 hook 有亲切感。如果是像我一样没有接触的话也...