此次挑战题目来自大佬分享.同时很巧也看到了出题方的推特.动手分析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,展现诱饵文档。通过两种方法,可以显现隐藏的工作表
- 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
- 右键下方工作表,点击取消隐藏,选择取消隐藏的工作表。只适用于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/