DLL 文件分析:恶意软件分析师的实用指南

admin 2024年11月20日20:27:48评论77 views字数 3133阅读10分26秒阅读模式

DLL 文件分析:恶意软件分析师的实用指南

动态链接库 (DLL) 是 Windows 操作系统中必不可少的组件,可实现代码重用和模块化编程。然而,它们也可能被滥用于恶意目的。

DLL 文件分析:恶意软件分析师的实用指南

什么是 DLL?

DLL 是包含可由多个程序同时使用的代码和数据的共享库。它们允许开发人员创建模块化应用程序,并通过共享通用功能(数据冗余)来减少总体内存占用。

DLL 如何加载到内存中?

—加载时动态链接:在可执行文件首次运行时加载 DLL。[容易出现 DLL 侧载/DLL 劫持漏洞]

—运行时动态链接:在程序执行的特定点加载 DLL,允许动态和灵活的函数调用。[容易出现 DLL 注入等漏洞]

分析 COM 与非 COM DLL:

DLL 文件分析:恶意软件分析师的实用指南

COM DLL

组件对象模型 (COM) 体系结构是一个 Windows 框架,它通过使用Windows 注册表来管理组件注册和可访问性,使可重复使用的软件组件能够相互交互,即使它们是用不同的编程语言编写的。

COM DLL旨在通过 Windows 注册表中注册的组件进行操作,在 COM 架构中创建和管理这些对象。这就是 COM DLL 需要注册的原因。

  • 示例:一个典型的用例可能是Microsoft Office 中的共享拼写检查组件 [COM DLL],Word 和 Excel 都可以使用它,而无需在每个程序中重复拼写检查代码。当 Word 或 Excel 需要拼写检查功能时,它们会查询Windows 注册表,通过引用其唯一的类 ID ( CLSID ) 或程序标识符 ( ProgID )来定位和加载已注册的拼写检查组件。

如何识别 COM DLL:

使用Dependency Walker或PE Explorer等工具检查 DLL 中的导出:

  • 在“导出”部分中查找DllRegisterServer& DllUnregisterServer。如果存在这些导出,则表明它是一个 COM DLL

COM DLL 的分析技术:

1. 注册 COM DLL:

该regsvr32.exe实用程序主要用于注册和注销COM DLL,而不是非 COM DLL。

注册 DLL 意味着什么?

当注册 COM DLL 时,有关 DLL 及其接口(如 CLSID 和 ProgID)的信息将添加到Windows 注册表中。注册表项充当 Windows 的映射,允许其他应用程序定位和使用 COM 对象。例如,Microsoft Word 或任何需要共享组件(如拼写检查或图形过滤器)的程序都可以查找注册表,找到 CLSID,并使用该 COM 对象。

[Open cmd as administrator and type below commands]
1. Registering a COM DLL
      regsvr32 pathtoyourcomdll.dll
2. Unregistering a COM DLL
      regsvr32 /u pathtoyourcomdll.dll
When you run regsvr32.exe with a DLL file,
it attempts to call below functions within the DLL:
DllRegisterServer: Adds the necessary registry entries for the COM object.
DllUnregisterServer: Removes the COM object's registry entries.

2. 注册表分析:

运行上述第一个命令后,检查 Windows 注册表中是否存在与 DLL 相关的条目,例如CLSID和ProgID键。使用RegScanner、Regedit、ProcMon或Autoruns等工具检查注册表中是否存在可疑条目。

如果 DLL 已注册,您可以检查 Windows 注册表中与其关联的条目。查找CLSID或ProgID条目,通常位于以下位置:

  • HKEY_CLASSES_ROOTCLSID– 包含已注册 COM 组件的类 ID。

  • HKEY_CLASSES_ROOTInterface– 列出 COM 组件公开的接口。

  • 另外,查找后台任何可疑的网络活动。

  • 合法使用:注册或取消注册 COM DLL,例如 ActiveX 控件。

  • 恶意使用:在 DLL 注册期间执行隐藏代码。

非 COM DLL

非 COM DLL 是不使用 COM 架构的标准传统 DLL。它们通常通过常规函数调用加载和使用。在非 COM DLL 中,不涉及注册表,而是直接将函数导出到正在运行的程序。

非 COM DLL不需要此注册,因为它们通常仅由知道它们在文件系统中的位置的特定应用程序使用。它们由应用程序直接加载,无需通过注册表“宣布”其可用性。

NON-COM的分析技术:

1. 只需检查导出函数名称/序数:

——使用 CFF Explorer 之类的工具并检查导出名称/相应的序数。

DLL 文件分析:恶意软件分析师的实用指南

2. 逐一执行导出:

1. 按名称执行导出函数
      语法:
            rundll32.exe pathtodll,FunctionName
 2. 按序数执行导出函数
      语法:
            rundll32.exe pathtodll,#OrdinalNumber
**注意**
如果导出过多,请使用工具DLLRunner一次执行所有导出。
参考:https: //github.com/Neo23x0/DLLRunner

3. 内存分析:

——使用所有动态分析工具,如ProcMon、RegShot、NetMon、Fiddler、ProcessExplorer 等,并检查系统中恶意 DLL 所做的更改,如文件丢失、网络活动等。

**笔记**

请记住,我们使用 rundll32.exe 作为虚拟应用程序来加载要分析的 DLL。

有时 rundll32.exe 不支持某些 DLL 的架构。

那时,您可以做的就是转到VirusTotal并尝试在关系选项卡中找出DLL 的可执行文件父级。

现在您已经找到了父可执行文件,为了确认它是正确的,请转到该可执行文件的导入部分,并尝试找出我们的 dll 的名称是否存在,如果存在,则意味着可执行文件将在执行期间加载我们的 dll。

所以现在将该可执行文件和我们的 dll 下载到同一文件夹中并运行该可执行文件。这里我们只使用父可执行文件而不是 rundll32.exe。

这个技巧对分析更有用。:)

分析带有导出功能的 DLL 与不带有导出功能的 DLL

DLL 文件分析:恶意软件分析师的实用指南

具有导出功能的 DLL

导出是 DLL 提供给其他可执行文件使用的函数。这些导出列在 DLL 的导出表中,可由其他模块直接调用。每个导出都有一个名称或序数(恶意软件经常使用的数字标识符来逃避检测)。

分析 :
如果 Exports包含DllRegisterServer和DllUnregisterServer,
则使用regsvr32命令
否则,
使用上面提到的rundll32.exe命令进行其余的导出。

无导出的 DLL

无导出的 DLL 不会向外部公开任何函数或变量,通常仅供加载它们的应用程序使用。无导出的 DLL 可用作资源,允许应用程序访问图像、图标和其他数据,而无需直接调用函数。

分析:

如果 DLL 没有任何导出,它仍然可能包含恶意代码,尤其是在其DllMain
函数中。DllMain

函数是系统在加载或卸载 DLL 时调用的特殊入口点,它可以执行各种操作,例如初始化全局变量、分配资源或执行恶意负载。要执行 DllMain,我们需要一个虚拟命令:语法:rundll32.exe pathtodll,test此处,test 是一个虚拟名称我们的 DLL 中没有这样的导出,因此显然会弹出错误窗口,但此技巧将帮助您执行 DllMain 函数。大多数恶意 DLL 在 DllMain 中写入C2 连接代码,因此最好在分析时使用网络监控工具 :)

本扩展指南提供了更深入和可操作的见解,使其成为网络安全领域分析 DLL 文件人员的宝贵资源。如果您想添加更多详细信息,请告诉我!

原文始发于微信公众号(Ots安全):DLL 文件分析:恶意软件分析师的实用指南

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月20日20:27:48
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   DLL 文件分析:恶意软件分析师的实用指南https://cn-sec.com/archives/3416792.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息