关于DotNet-MetaData
DotNet-MetaData是一款针对.NET恶意软件的安全分析工具,该工具专为蓝队研究人员设计,可以帮助广大研究人员轻松识别.NET恶意软件二进制源代码文件中的元数据。
工具架构
当前版本的DotNet-MetaData主要由以下两个部分组成:
1、DotNetMetadata.yar:这是一个Yara规则文件,用于将源代码数据显示到终端;
2、DotNetMetadata.py:该脚本负责从.NET源代码文件中提取GUID、MVID、YTPELIB和程序集名称等信息;
工具下载
由于该工具基于Python 3开发,因此我们首先需要在本地设备上安装并配置好最新版本的Python 3环境。
接下来,广大研究人员可以直接使用下列命令将该项目源码克隆至本地:
git clone https://github.com/bartblaze/DotNet-MetaData.git
工具使用
DotNetMetadata.yar
DotNetMetadata.yar可以将目标.NET源代码文件的相关数据显示到终端,使用方法如下:
yara64.exe DotNetMetadata.yar c:\fakepath\all_samples
Yara规则需要至少Yara v4.2.0版本以上,因此我们建议广大研究人员从【这里】获取最新的发布版本。
DotNetMetadata.py
DotNetMetadata.py脚本可以从.NET源代码文件中提取GUID、MVID、YTPELIB和程序集名称等信息,该脚本支持在Windows和Linux操作系统上运行,按理来说macOS也应该没有问题。
脚本使用样例如下:
python DotNetMetadata.py c:\fakepath\all_samples -c samples_output.csv
该脚本的正常运行需要使用到pythonnet库,安装命令如下:
pip install pythonnet
然后dnlib.dll文件也应该位于相同目录中。
针对类Linux系统,你还需要使用mono-complete安装Mono,在Ubuntu上可以使用下列命令安装:
sudo apt-get install mono-complete
然后从【这里】获取并编译dnlib,或直接从【这里】下载dnSpy-netframework.zip,然后从bin目录中获取dnlib.dll文件即可。这里建议使用最新版本的dnlib文件。
样本规则
项目提供的“sample rules”目录中包含了相关的检测样本规则,你可以根据自己的需求跟新和修改规则。
输出样例
下面给出的输出样例主要针对的是“Mpyiuepnw”单个文件,即PureLogStealer的其中一个版本,其SHA256哈希如下:
c201449a0845d659c32cc48f998b8cc95c20153bb1974e3a1ba80c53a90f1b27
使用Yara规则
$ yara64.exe DotNetMetadata.yar c:\fakepath\Mpyiuepnw.vir Original Filename: Mpyiuepnw.exe Internal Name: Mpyiuepnw.exe Imphash (use with caution): f34d5f2d4577ed6d9ceec516c1f5a744 Compile timestamp (epoch): 1710224522 Module name: Mpyiuepnw.exe Assembly name: Mpyiuepnw Typelib: 856e9a70-148f-4705-9549-d69a57e669b0 # of GUIDs: 1 dotnet.guid: 0 -> guid (MVID) = 9066ee39-87f9-4468-9d70-b57c25f29a67 # of streams: 5 # of resources is: 9 dotnet.resource: 0 -> name = Rdfeunq.Properties.Resources.resources -> offset = 715528 -> length = 2818774 dotnet.resource: 1 -> name = Mpyiuepnw.Attributes.WrapperManager.resources -> offset = 3534306 -> length = 180 dotnet.resource: 2 -> name = Mpyiuepnw.Collections.ImporterHelperCollection.resources -> offset = 3534490 -> length = 180 dotnet.resource: 3 -> name = Mpyiuepnw.Roles.ConfigOrderRole.resources -> offset = 3534674 -> length = 2932 dotnet.resource: 4 -> name = Mpyiuepnw.Roles.CodeManager.resources -> offset = 3537610 -> length = 2933 dotnet.resource: 5 -> name = NAudio.Pages.TemplateAuthenticationPage.resources -> offset = 3540547 -> length = 180 dotnet.resource: 6 -> name = Mpyiuepnw.Roles.SchemaManager.resources -> offset = 3540731 -> length = 2936 dotnet.resource: 7 -> name = Mpyiuepnw.Polices.SingletonSingleton.resources -> offset = 3543671 -> length = 180 dotnet.resource: 8 -> name = NAudio.Common.PrototypeSingleton.resources -> offset = 3543855 -> length = 180 # of module references: 7 # of strings: 710
使用Python脚本
单个文件:
$ python DotNetMetadata.py c:\fakepath\Mpyiuepnw.vir File: c:\fakepath\Mpyiuepnw.vir Assembly Name: Mpyiuepnw MVID: 9066ee39-87f9-4468-9d70-b57c25f29a67 GUID: 856e9a70-148f-4705-9549-d69a57e669b0
目录:
$ python DotNetMetadata.py c:\fakepath\quasar File: c:\fakepath\quasar\02f0a7f184fcdaaa4d9a46ca29712c8daae0a46d2038bd362dc818025df8d553.vir Assembly Name: Client MVID: 60f5dce2-4de4-4c86-aa69-383ebe2f504c GUID: None File: c:\fakepath\quasar\0790bb235f27fa3843f086dbdaac314c2c1b857e3b2b94c2777578765a7894a0.vir Assembly Name: spoolsv MVID: fb86b5ea-fecf-4314-9908-dfb44a648349 GUID: ab37fd48-1226-4126-b12d-dea3361fb533 File: c:\fakepath\quasar\07f103ec9f4cf73a1ea534a7b1fed490045e8611c14cb66dfe8784f01ea63e5c.vir Assembly Name: Client MVID: 60f5dce2-4de4-4c86-aa69-383ebe2f504c GUID: None File: c:\fakepath\quasar\0847a32772909b1685150473294dccd837d8ab3bf8d3a42fc75e8402c8fa9237.vir Assembly Name: Client MVID: 41eb6d08-2e57-46a1-826d-1b6049ebf6a6 GUID: None File: c:\fakepath\quasar\1332bb84dff1a55902b5eb2c76988f94a9edf4727d2c79871c47858b270f0856.vir Assembly Name: jkepkr MVID: da2e26cb-0ca3-474a-8fb6-08aa7ff3de20 GUID: None File: c:\fakepath\quasar\14b67f3273192e061b04c05bb81aea8794f58a856b762006fb2359f55230327c.vir Assembly Name: led注Sbm MVID: c4653540-cdba-4dba-965f-6b232d0313d8 GUID: None File: c:\fakepath\quasar\15931de8e192e8932d881c6d450d52090f92f9b5e9f0f0b903cc5ec033b58b54.vir Assembly Name: Client MVID: 60f5dce2-4de4-4c86-aa69-383ebe2f504c GUID: None
CSV输出样例
表格:
文件名 | 程序集名称 | GUID | MVID |
c:\fakepath\quasar\02f0a7f184fcdaaa4d9a46ca29712c8daae0a46d2038bd362dc818025df8d553.vir | Client | None | 60f5dce2-4de4-4c86-aa69-383ebe2f504c |
c:\fakepath\quasar\0790bb235f27fa3843f086dbdaac314c2c1b857e3b2b94c2777578765a7894a0.vir | spoolsv | ab37fd48-1226-4126-b12d-dea3361fb533 | fb86b5ea-fecf-4314-9908-dfb44a648349 |
c:\fakepath\quasar\07f103ec9f4cf73a1ea534a7b1fed490045e8611c14cb66dfe8784f01ea63e5c.vir | Client | None | 60f5dce2-4de4-4c86-aa69-383ebe2f504c |
c:\fakepath\quasar\0847a32772909b1685150473294dccd837d8ab3bf8d3a42fc75e8402c8fa9237.vir | Client | None | 41eb6d08-2e57-46a1-826d-1b6049ebf6a6 |
c:\fakepath\quasar\1332bb84dff1a55902b5eb2c76988f94a9edf4727d2c79871c47858b270f0856.vir | jkepkr | None | da2e26cb-0ca3-474a-8fb6-08aa7ff3de20 |
c:\fakepath\quasar\14b67f3273192e061b04c05bb81aea8794f58a856b762006fb2359f55230327c.vir | led注Sbm | None | c4653540-cdba-4dba-965f-6b232d0313d8 |
c:\fakepath\quasar\15931de8e192e8932d881c6d450d52090f92f9b5e9f0f0b903cc5ec033b58b54.vir | Client | None | 60f5dce2-4de4-4c86-aa69-383ebe2f504c |
CSV:
许可证协议
本项目的开发与发布遵循MIT开源许可协议。
项目地址
DotNet-MetaData:【GitHub传送门】
参考资料
Releases · VirusTotal/yara · GitHub
GitHub - 0xd4d/dnlib: Reads and writes .NET assemblies and modules
GitHub - dnSpyEx/dnSpy: Unofficial revival of the well known .NET debugger and assembly editor, dnSpy
恶意软件狩猎新途径:使用.NET元数据分析跟踪恶意软件 - FreeBuf网络安全行业门户