频道栏目
首页 > 资讯 > 系统安全 > 正文

恶意软件是如何使用合法工具来隐藏恶意代码的?

17-11-24        来源:[db:作者]  
收藏   我要投稿

恶意软件的作者通常会使用各种技术来规避防护机制,隐藏有害活动。其中有一种技术就是在可信进程中隐藏恶意代码。通常来说,使用隐藏技术的恶意软件会将其代码注入到系统进程中(如explorer.exe),但是有一些样本采用了其他有趣的方法,所以我们在本文中会分析这种恶意软件。

我们将目光锁定在各种.NET样本上,这些样本使用了来自Microsoft .NET Framework的可信程序InstallUtil.exe即安装程序工具。

微软的介绍:安装程序工具使您得以通过在执行指定程序集中的安装程序组件来安装和卸载服务器资源。此工具与 System.Configuration.Install 命名空间中的类一起工作。

这种技术由信息安全研究员Casey Smith做了简单的介绍(点此查看PoC)。简而言之,控制台程序InstallUtil.exe运行一个恶意的.NET程序集,然后绕过程序集的入口点,如此一来所有恶意活动都可以隐藏在可信程序中了。

恶意软件样本的传播遵循一种标准模式:基本上是通过带密码保护的文件来传播给用户,并且大部分情况下可执行文件的图标是结果专门选择的,这样会使受害者将恶意文件视为普通的文档或照片。我们还遇到了伪装成软件密钥生成器的恶意程序。生成器的恶意内容会进入到%TEMP%文件夹中,并以稍后所描述的方式运行。

171102-using-legitimate-tools-to-hide-malicious-code-1.png

分析

我们遇到的所有恶意文件都被严重混淆了,所以手动分析变得更加复杂。通过使用样本263dc85de7ec717e8940b1ccdd6ee119并加以处理以得到它的符串,类,方法和字段。以下是处理之后的样子:

171102-using-legitimate-tools-to-hide-malicious-code-2.png

InstallUtil.exe允许文件不从.NET程序集入口点开始执行,也就是从继承自System.Configuration.Install.Installer的类开始执行。为了便于手动分析,这个类在被分析的样本中被重命名为InstallUtilEntryClass。众所周知,静态类构造函数中的代码在程序集加载到内存中时首先执行,该恶意软件作者正是利用了这一个特性。

现在我们按照方法执行的顺序来检查恶意文件的行为。首先是FirstMainClass,因为它的构造函数被标记为关键字“static”,程序集的执行开始于它:

171102-using-legitimate-tools-to-hide-malicious-code-3.png

构造函数执行以下操作:

CheckSandboxieEnvironment()通过尝试加载SbieDll.dll库来确定文件是否在Sandboxie中运行。 如果可以加载库,则恶意进程终止;

CheckVirtualBoxEnvironment()搜索属于VitrualBox的vboxmrxnp.dll库。 如果可以找到这个库,这个恶意进程也会终止;

AddResourceResolver()添加一个处理资源加载事件的方法。 此方法将通过Deflate算法打包的程序集从特定资源中解包,并将程序集加载到内存中;

171102-using-legitimate-tools-to-hide-malicious-code-4.png
171102-using-legitimate-tools-to-hide-malicious-code-5.png

AssemblyResourceLoader类的UnpackAllAssemblies()方法遍历所有程序集资源,如果资源名称包含字符串“+||”,则从这些资源中解包程序集。 由这个方法解包的程序集是恶意文件运行所必需的,并且是合法的库:Interop.MSScript.Control,Interop.TaskScheduler,SevenZipSharp;

如果该文件是从网上下载的,RemoveZoneIdentifier()就会通过命令行删除NTFS备用流Zone.Identifier,以防止启动时出现警告。 作者在命令行(“cmd.exe / c(echo。> file path:Zone.Identifier)2> Null”)中在字符2和>之间留出一个空格而犯了一个小错误。

171102-using-legitimate-tools-to-hide-malicious-code-6.png

ElevatePrivilegesProxy()方法是ElevatePrivileges()方法的封装,使用了已知的UAC绕过技术。

171102-using-legitimate-tools-to-hide-malicious-code-7.png

我们看到一个WMI对象在30秒的暂停后被检索到。 还有就是ScriptControlClassInstance对象是自定义的,其语言(Visual Basic脚本)和脚本的主体被转移到:

171102-using-legitimate-tools-to-hide-malicious-code-8.png

AddCode()方法添加并执行一个使用InstallUtil.exe运行当前程序集的VB脚本。之后通过调用Environment.Exit(0)关闭当前进程。

在下一阶段,恶意对象使用InstallUtil工具运行,并再次执行上面的FirstMainClass类的静态构造函数;

171102-using-legitimate-tools-to-hide-malicious-code-9.png

这个类的功能包括:

将恶意文件复制到%APPDATA%\program\msexcel.EXE,为“program”文件夹设置Hidden + System属性,运行msexcel.EXE,并终止当前进程;

将复制的文件添加到自动运行(HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run或HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run);

创建一个名为“filesqmaepq0d.tnk”的任务,每分钟运行msexcel.EXE,以确保在受害者的计算机上存留;

检查恶意进程是否已经在运行。 创建名称为“78759961M”的事件,如果系统中已经存在这样的事件,则新进程终止;

创建Form5类并调用其析构函数。

让我们总结一下中期的结果:上述所有的操作(在系统中的巩固,提权,可信应用程序的启动)实质上是奠定了其主要任务的基础。我们继续分析下一阶段,这更接近恶意活动的核心。

恶意程序集包含五个从System.Windows.Forms.Form继承的类。从Form类的继承并非偶然:在继承层次中,它实现了几个接口,其中之一是IDisposable,它允许为了其他目的重写Dispose()方法。垃圾回收调用Dispose()方法,以便在关闭或卸载程序集时释放类使用的非托管资源。现在让我们看一下Form5类的Dispose()方法的源代码:

171102-using-legitimate-tools-to-hide-malicious-code-10.png

如上所示,在循环的每个迭代中执行各种方法,然后结果被保存。现在来检查详细细节:

在第一次迭代中,检索.NET Framework的RegAsm.exe程序的完整路径;

调用嵌套方法链的目的是解码存储在另一个类中的Base64的字符串,并使用SevenZipExtractor库解析结果数组。 因此,我们得到一个远程管理工具NanoCore Client的数组;

先前从资源中导入到内存的程序集加载了PERun.dll库;

在这个库中寻找一个名为“RunPE”的类和这个类的Run方法;

在最后的迭代中,传输参数并调用Run方法。

在Run()方法内部,由CREATE_SUSPENDED状态下创建一个合法的进程(第六个参数是4u):

171102-using-legitimate-tools-to-hide-malicious-code-11.png

最后,RegAsm.exe进程被加载到地址空间并开始执行payload,只有可信进程保留在正在运行的进程列表中,即使是有经验的用户也可能无法意识到系统已经被攻破:

171102-using-legitimate-tools-to-hide-malicious-code-12.png

RegAsm.exe被选为“载体”,因为:

1)它是来自Microsoft的合法程序

2)它位于与InstallUtil.exe相同的目录中

3)来自.NET Framework的程序调用另一个程序时,调用notepad.exe这样的程序会更可疑。事实上,使不使用RegAsm.exe并不重要:“载体”可以是任何不引起安全软件和用户怀疑的程序。 涉及恶意模块的所有操作都在内存中执行也很重要,因为这可以允许其绕过文件扫描。

正如我们所提到的,这个示例包含NanoCore客户端,可以用来控制受害者的计算机,截图,记录按键,下载文件等等, 需要注意的是,这里的有效载荷可以是任何东西:比如时髦的加密软件,挖矿工具或者高级木马。

总结

恶意软件编写者使用各种技巧来隐藏恶意行为,上述允许在两个合法程序中执行恶意代码的技术就是一个明显的例子。而检测这种隐藏方法需要对程序进行行为分析。 卡巴斯基实验室的安全解决方案将这种行为检测为PDM:Trojan.Win32.Generic和PDM:Exploit.Win32.Generic。

IOC(MD5)

263DC85DE7EC717E8940B1CCDD6EE119 payload:EF8AF3D457DBE875FF4E3982B34F1DE9

3E4825AA1C09E27C2E6A1309BE8D6382 payload:82709B139634D74DED404A516B7952F0

7E3863F827C1696835A49B8FD7C02D96 payload:D1A9879FFCB14DF70A430E59BFF5EF0B

8CB8F81ECF1D4CE46E5E96C866939197 payload:D8652841C19D619D2E3B5D7F78827B6E

FDF4086A806826503D5D332077D47187 payload:BF4A3F4B31E68B3DE4FB1F046253F2D0

相关TAG标签
上一篇:tcpcopy安装及使用教程
下一篇:Android系统安全报告:2017安卓应用第三方SDK威胁概况
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站