如何使用DotNet-MetaData识别.NET恶意软件源码文件元数据

关于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网络安全行业门户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值