恶意代码分析是在应急响应中需要的一部分,如今,随着恶意软件(特别是其反分析技术)的复杂性,很难及时地消除威胁。在完成分析时,威胁可能已经扩散到整个环境。该文章将重点介绍传统的手动分析(仅人为操作)步骤,以使读者了解如何分析DotNet文件。
在开始之前,先提及下DotNET的基础。如今,有多种编程语言允许程序员开发可执行文件。其中一些语言是Microsoft Visual C/C++,VB6(DotNET的前身)和DotNET框架,这些语言中的每一种都有其缺点和优点。相对于C/C ++,Microsoft C#是一种用于应用程序开发的简便语言。因此,许多攻击者和合法开发人员都喜欢使用C#开发其PE文件和应用程序,但是许多编译的DotNET可执行文件也可能会使用反分析技术,以使它们的代码混乱并在系统上执行的期间隐藏其操作。
DotNET可执行文件有许多静态分析技术,接下来将提出两个分析案例。第一个案例将关注混淆的键盘记录器(keylogger),而第二个案例将研究DotNET可执行文件在内存中的动态加载。
以下有一些识别DotNET可执行文件特征的方法。
DotNET可执行文件的特征
已编译的DotNET可执行文件通常会导入DLL文件mscoree.dll,也会导入API函数_CorExeMain或_CorDllMain
下图(取自VirusTotal)说明了DotNET可执行文件导入的DLL和Windows API函数的导入:
如果仅看到mscoree.dll文件的导入和对API函数_CoreExeMain的调用,则可能是遇到了DotNET可执行文件。
如何识别?当遇到可执行文件,并且不确定是使用哪个编译器将文件编译为可执行文件的,则可以使用一些免费工具对文件进行静态分析。这些工具中的有 Easy-It-Easy(DIE),PEstudio和CFF Explorer。但在大多数情况下,这些工具都可以用来确定可执行文件链接到哪些导入DLL和API。
DotNET可执行文件还具有另一个非常独特的特性,比如使用Visual Studio开发DotNET可执行文件,该可执行文件本身将获得两个不同的全局唯一标识符(GUID)。一旦编译为可执行文件,通常会将它们作为字符串存储在DotNET文件中。可以在DotNET可执行文件上搜索字符串找到这些GUID,或者如图所示,VirusTotal将在可执行文件的详细信息部分下列出它们:
Module Version ID(MVID)GUID是在DotNET项目构建期间生成的,并且对于当前构建的项目是唯一的。TypeLib ID是在项目创建期间由Visual Studio生成的。这些GUID除了可以帮助将文件标识为DotNET可执行文件之外,还可以用于将文件与特定项目相关联,因为如果不断维护同一DotNET项目,则编译后的可执行文件应该会存在类似的GUID。
在谈到DotNET GUID时,安全研究人员还将它们称为NetGUID。这些NetGUID还可用于识别具有特定项目的DotNET文件,如果DotNET开发的恶意软件变体具有相同的值,则它们也可以由同一NetGUID关联。 几年前,发表了一篇有关通过NetGUIDS搜索恶意软件的好文章(https://www.virusbulletin.com/virusbulletin/2015/06/using-net-guids-help-hunt-malware/ )。
接下来开始分析两个案例
技术细节
本节中分析的可执行文件包含以下静态特征:
文件名:Mixed Grade.exe
SHA1:b33bb284b540a69b9c6a65912a439d00682c896a
大小:2350080字节
编译时间:2020-03-23 07:57:14
Mixed Grade.exe文件是与HawkEye Keylogger相关的恶意软件。但是,Mixed Grade.exe本身不是DotNET文件,只有它产生的实际有效的恶意文件是DotNET文件。
当执行Mixed Grade.exe文件时,它将释放文件RegAsm.exe (一个合法的Windows程序集注册工具)。但是在生成之后,Mixed Grade会将恶意PE文件注入到挂起模式的RegAsm.exe中(此技术也称为进程镂空)。此时RegAsm不再是合法进程,因为它包含主要的HawkEye恶意文件。通过查看RegAsm.exe内存转储内容,很明显可以发现注入文件的名称是Reborn stub.exe,而它是DotNET可执行文件,下图说明了该过程:
如版本信息所示,文件名取自PE头。有很多方法可以从内存中转储Reborn Stub.exe文件。但是,从内存中转储此文件的最简单最直观的方法之一就是使用pe-sieve(Hook finder)之类的工具。从内存中转储该可执行文件后,发现它确实是DotNET可执行文件。
如下图所示,确实是DotNET可执行文件:
Reborn Stub.exe静态特征:
文件名:Reborn Stub.exe
SHA1:5fb78f117d48b7f2cdb312cb553a33aa8bc17346
编译时间:2019-01-22 15:01:45
现在通过DnSpy分析此文件,将可疑的DotNET可执行文件Reborn Stub.exe拖放到DnSpy中。如下图所示,DnSpy能够将可执行文件反编译为“源代码”:
为了查看程序的main函数,请在程序名称上单击鼠标右键,然后选择“转到入口点”或单击程序主单元中的“主程序”,如下所示:
通过查看代码发现不可读,因为代码被混淆了,默认情况下混淆了类,模块以及介于两者之间的所有内容。此处使用的混淆技术可能是通过免费的.NET混淆工具 ConfuserEx进行的。为了对此代码进行反混淆,可以使用免费的反混淆器和解包工具de4dot,该工具非常适合查找混淆的模式并对其进行反混淆。下图说明了使用de4fot工具对该DotNET可执行文件进行反混淆处理的命令:
如果去混淆处理成功完成,则应该有一个新的输出文件。在上面这种情况下,经过反混淆的输出文件是400000.RegAsm.output,该文件默认位于运行de4dot工具的当前文件夹中(如果此过程使用了与上面相同的命令)。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2020-5-24 01:31
被jishuzhain编辑
,原因: