透过挑战题-脚本小子手把手教你解析Excel 4.0宏

 

此次挑战题目来自大佬分享.同时很巧也看到了出题方的推特.动手分析Excel4.0宏,下载后续的payload并分析,进行答题.

界面如下:

解题顺序如下:下载样本->查看参考资料->安装需要的工具->答题.

根据Questions的问题发展思维分析样本.

 

分析环境

Windows 10

Windows Terminal

office 2007

Powershell 7.0.2

(REMnux是一个针对恶意软件分析师的工具包Linux系统,笔者懒惰,没去折腾)

 

工具准备

Excel4.0的宏很容易理解,都是常见关键词。FORMULA里面是一些需要执行的东西。

XLMDeobfuscator

去混淆.

项目地址

py -3 -m pip install XLMMacroDeobfuscator
py -3 -m pip install pywin32
py -3 -m pip install -U https://github.com/DissectMalware/xlrd2/archive/master.zip
py -3 -m pip install -U https://github.com/DissectMalware/pyxlsb2/archive/master.zip
py -3 -m pip install -U https://github.com/DissectMalware/XLMMacroDeobfuscator/archive/master.zip

命令行运行xlmdeobfuscator.exe -h,能正常输出图标则表示安装成功.

OLEDUMP

ole工具集

项目介绍

下载地址

下载zip后解压到合适的文件夹中,进行代码patch.修复excel中的sheet显示不完全的bug.(不知道是否patch得当,只是满足目前需求)

  • 1319行return P23Decode(data[1:1 + cch])修改为return P23Decode(data[2:1 + cch + 1]),注意推进.

msoffcrypto-crack.py

密码爆破工具

项目介绍

下载地址

建议放在oledump文件夹中。

 

Sample1

Question 1

文档解压密码是多少?

最开始思路是去考虑这个密码难道是vba密码?直接使用AOPR(
Advanced Office Password Recovery
)进行密码破解,后发现文不对题。

使用提到的工具进行文件解析。运行

# 当前地址为oledump文件夹中

$sample1 =  D:\malware\sample1-f—b5ed444ddc37d748639f624397cff2a.bin
py -3 .\oledump.py --plugins=plugin_biff $sample1

脚本标识出了该文件被密码保护。

使用二号工具,命令行运行xlmdeobfuscator.exe -f $sample1.”-f”参数意为filepath,指向文件地址。

该工具解析结果也显示是加密文件,需加上--password参数进行解密。

难道这下就没有答案了吗?不然,最后在oledump.py页面上搜索“password”关键词找到了解答方法。

使用msoffcrypto-crack.py进行爆破,该工具已经在上方放出了下载地址。运行py -3 .\msoffcrypto-crack.py $sample1,得到输出“Password found: VelvetSweatshop”,VelvetSweatshop即为密码也是该题答案。

通过搜索可得知VelvetSweatshop为默认密码,加密excel文件首先会使用该密码解密自身,如果无法解密则会让用户输入密码。

Question 2

对plugin_biff使用什么参数解析所有关于Excel4.0的宏?

同样在oledump的页面中搜索Excel 4.0,得到博客地址

得到答案x

Question 3

列出工作表的名字,顺序按照plugin_biff的输出。

所以根据二题可以参考plugin_biff和-x参数的输出。

由于plugin_biff是需要未加密的excel文件,所以我们首先要进行解密。

通过在页面中搜寻得到答案,通过msoffcrypto-crack.py和oledump进行联合解析,但是在笔者本机上出现了一些问题。最后参考爆破脚本使用msoffcrypto-tool进行解密。脚本如下

#!python3

import msoffcrypto

encrypted = open("D:\\malware\\sample1-fb5ed444ddc37d748639f624397cff2a.bin", "rb")
file = msoffcrypto.OfficeFile(encrypted)

file.load_key(password="VelvetSweatshop")  # Use password

with open("D:\\malware\\sample1.new", "wb") as f:
    file.decrypt(f)

encrypted.close()

pwsh更新$sample1,$sample1="D:\\malware\\sample1.new"

py -3 .\oledump.py -p VelvetSweatshop --plugins=plugin_biff --pluginoptions "-x" $sample1

修复后的脚本输出如下:

答案为SOCWNEScLLxkLhtJp,OHqYbvYcqmWjJJjsF,Macro2,Macro3,Macro4,Macro5

Question 4

该恶意程序下载的url是多少。

通过三题,执行py -3 .\oledump.py -p VelvetSweatshop --plugins=plugin_biff --pluginoptions "-x" $sample1 >> 1.txt

使用vscode打开1.txt,c语言高亮。可看到如下字段,179行和182行,可估计调用urlmon中的函数执行下载。

答案为http://rilaer.com

Question 5

下载的是什么恶意软件家族?

我们可以使用virustotal进行查询。

最终如下所示,微软和卡巴都显示为Dridex家族。

答案即为Dridex

 

Sample2

执行$sample2 = "D:\malware\sample2-b5d469a07709b5ca6fee934b1e5e8e38.bin"

尝试在虚拟机中打开恶意样本,运行宏后一片空白。

Question 6

这个文档的表单属性为very hidden的名字是什么

按照常理先用xlmdeobfuscator跑一下,xlmdeobfuscator.exe -f $sample2 >> sample2.txt,虽然输出报错了,但应该能使用一部分。打开txt文件。没有显示hidden的工作表。但也没有被加密。

py -3 .\oledump.py -p VelvetSweatshop --plugins=plugin_biff --pluginoptions "-x" $sample2 >> .\sample2_ole.txt,打开txt,

显然易见,有了答案:CSHykdYHvi。

vba中运行下列代码,即可显示隐藏的sheet。指名点姓的显示sheet。

Sub UnhideAllSheets()
    Sheets("CSHykdYHvi").Visible = xlSheetVisible
End Sub

Question 7

使用reg.exe检查注册表哪个键值?

查询可知GET.WORKSPACE(2)是查询Excel版本,打开注册表,没什么东西。

可能是解析问题。换个工具试试。打开sample2_ole.txt,搜索”reg.exe”

如上方图所示出现了”VBAWarnings”=dword:00000002,

试一下,即为正确答案。这里思考一下,去检查VBAWarnings干什么呢?

Question 8

使用reg.exe,通过访问的键值为多少能识别为沙箱环境?

根据前一题,是否是相关的呢?搜索VBAWarnings indicates a sandbox environment,从可以得知沙箱通常将VBAWARINGS的值设为1,不禁止宏运行,但是一般正常人会为2,禁用宏。

所以当值为1的时候会认为是沙箱环境。

答案为1,001不行,0x1可以。

Question 9

本文档执行几个额外的反分析检查。它使用了什么Excel 4宏函数?

从上到下是:

检查工作区的宽度,长度,是否存在鼠标以及计算机是否能够播放声音,GET.WORKSPACE(1)检查运行Microsoft Excel的环境。

使用了GET.WORKSPACE函数。

Question 10

此文档检查运行Excel的环境的名称,比较了什么值?

当然是Windows。

Question 11

下载的payload的格式。

图中可知使用URLDownadToFileA函数下载文件保存为html后缀文件。

同样使用virustotal,查询网址https[:]//ethelenecrace.xyz/fbb3,没有文件下载信息

使用alienvault查询网址得到了HASH和文件格式。

文件格式为dll

Question 12

恶意软件从哪个URL下载有效载荷

当然是https://ethelenecrace.xyz/fbb3

Question 13

载荷被保存的文件名是什么?

答案为bmjn5ef.html

Question 14

有效载荷是如何执行的?

从sample2.txt中可知使用ShellExecuteA运行rundll32执行dll的导出函数。

答案为rundll32.exe

Question 15

归属于哪个恶意软件家族?

从alienvault得到hash,上vt查询。MD5:62cb6a2a517351472698f669a845f91c

答案为zloader。

仅仅是根据题目来进行分析,对该样本的excel4.0的执行流程没有进行仔细分析。

 

实战操作分析

此次样本使用的是报告中的Excel4.0宏样本。

样本下载

首先我们使用xlmdeobfuscator(v0.1.7)进行解析,发现是未加密文件,但是工具加载失败,暂时没修复。修复了一小部分,不足以使用.

再使用oledump+plugin_biff 插件进行解析,py -3 .\oledump.py -p plugin_biff --pluginoptions "-x" D:\malware\ecaaab9e2fc089eefb6accae9750ac60.bin

从输出可以看到拥有三个表格,sheet15,sheet1,shee2,只有sheet2处于可见的状态。然后虚拟机打开表格,启用宏。

会发现下方的表格名字从sheet1变为sheet2,展现诱饵文档。通过两种方法,可以显现隐藏的工作表

  1. VBA使用alt+F11在任意VBA项目中运行下方代码,即可显示所有工作表。且适用于very hide.
    Sub UnhideAllSheets()
        Dim wks As Worksheet
    
        For Each wks In ActiveWorkbook.Worksheets
            wks.Visible = xlSheetVisible
        Next wks
    End Sub
    
  2. 右键下方工作表,点击取消隐藏,选择取消隐藏的工作表。只适用于hidden。

在sheet15中搜索oledump出现的字符串,如“GET.WORKSPACE”

发现字符在Z列,且被隐藏无法编辑。发现是实现了工作表保护,需要输入密码。而msoffcrypto-crack.py只能暴力破解加密文件,无法取得工作表保护密码。

最后在同一作者的blog找到。通过更改密码保护的flag值取消密码保护。具体操作如下:

py -3 .\oledump.py -p plugin_biff --pluginoptions "-o protect -a" D:\malware\ecaaab9e2fc089eefb6accae9750ac60.bin

值为小端序(01 00)即为0x1,表示启用了保护,通过16进制编辑器将这些0x1的值修改为0x0。第四行为密码计算后的hash值。

py -3 .\oledump.py -p plugin_biff --pluginoptions "-o protect -R" D:\malware\ecaaab9e2fc089eefb6accae9750ac60.bin

搜索红框中的值,将flag的值置为0,保存文件,正常打开就可以取消保护工作表了。

后续分析详情看上方的报告即可,笔者就不再赘述了。

 

Reference

https://www.sneakymonkey.net/2020/06/22/excel-4-0-macros-so-hot-right-now/

https://github.com/nolze/msoffcrypto-tool

https://0xevilc0de.com/excel-4-macros-get-workspace-reference/

https://clickallthethings.wordpress.com/2020/04/06/covid-19-excel-4-0-macros-and-sandbox-detection/

https://securitynews.sonicwall.com/xmlpost/improvements-in-malicious-excel-files-distributing-zloader/

(完)