freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

如何使用DotNet-MetaData识别.NET恶意软件源码文件元数据
2024-05-13 12:02:40

关于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传送门

参考资料

https://github.com/VirusTotal/yara/releases

https://github.com/0xd4d/dnlib

https://github.com/dnSpyEx/dnSpy

https://www.freebuf.com/articles/network/396717.html

# 安全分析 # .Net # 元数据 # .NET恶意软件
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录