九维团队-青队(处置)| 恶意软件的混淆技术(六)

admin 2023年1月7日13:31:52评论15 views字数 4774阅读15分54秒阅读模式

九维团队-青队(处置)| 恶意软件的混淆技术(六)

写在前边

1.本文原文为K A, Monnappa. 2018年发表的《Learning Malware Analysis》,本文均为译者对相关内容的翻译及实践记录,仅供各位学术交流使用。另出于易读性考虑,对部分字句有所删改。 
2.如各位需要引用,请做原文引用,格式如下所示: 
[序号]K A, Monnappa. LearningMalware Analysis[M]. 2018.06. Published by Packt Publishing Ltd. Livery Place 35 Livery Street Birmingham B3 2PB, UK. 
3.因文章整体内容较长,完整内容将会在本公众号拆分为多篇内容分别发出。本文为该系列的第六篇。
往期内容请参见合集《Learning Malware Analysis》





1.1 识别OEP


在本节中,我们将了解识别打包二进制文件中的OEP的技术。在下面的截图中,在pestudio中检查打包的二进制文件,显示了许多表明该文件是打包的指标。包装好的二进制文件包含三个部分:UPX0、UPX1和.rsrc。

九维团队-青队(处置)| 恶意软件的混淆技术(六)


pestudio网址:https://www.winitor.com/

从截图中,我们可以看到打包二进制文件的入口在UPX1部分,所以执行从这里开始,这部分包含解压存根,将在运行时解压原始可执行文件。


一个指标是UPX0部分的原始大小为0,但虚拟大小为0x1f000;这表明UPX0部分不占用磁盘上的任何空间,但它占用了内存空间;具体而言,它占用了0x1f000字节的大小(这是因为恶意软件在内存中解压了可执行文件,并在运行时将其储存在UPX0部分)。另外,UPX0部分具有读、写、执行权限,很可能是因为在解压原始二进制文件后,恶意代码将在UPX0中开始执行。


另一个指标是打包的二进制文件包含混淆的字符串,当在IDA中加载二进制文件时,IDA识别出导入地址表(IAT)在一个非标准的位置,并显示以下警告;这是由于UPX打包了所有的部分和IAT。

九维团队-青队(处置)| 恶意软件的混淆技术(六)


该二进制文件仅由一个内置函数和5个导入函数组成;所有这些指标都表明,该二进制文件是打包的。

九维团队-青队(处置)| 恶意软件的混淆技术(六)


为了找到OEP,你需要在打包的程序中找到将控制权转移到OEP的指令。根据打包程序的不同,这可能很简单,也可能很有挑战性;通常我们会关注那些将控制权转移到一个不明确目的地的指令。检查打包的二进制文件中的函数流程图,可以看到跳转到一个位置,这个位置被IDA用红色标出。

九维团队-青队(处置)| 恶意软件的混淆技术(六)


红色是IDA表示它不能分析,因为跳转目的地不明确。下面的屏幕截图显示了跳转指令。

九维团队-青队(处置)| 恶意软件的混淆技术(六)


双击跳转目的地(byte_40259B)显示,跳转将被带到UPX0(从UPX1)。换句话说,执行时,恶意软件在UPX1中执行解压存根,解开原始二进制文件,复制UPX0中的解压代码,而跳转指令很可能将控制权转移到UPX0中的解压代码(从UPX1)。

九维团队-青队(处置)| 恶意软件的混淆技术(六)


在这一点上,我们已经找到了我们认为会跳转到OEP的指令。下一步是在调试器中加载二进制文件,在执行跳转的指令处设置断点,并执行到该指令为止。为了做到这一点,二进制文件被加载到x64dbg中(你也可以使用IDA调试器并遵循同样的步骤),并设置断点,执行到跳转指令。如下面的截图所示,在该跳转指令处暂停执行。

九维团队-青队(处置)| 恶意软件的混淆技术(六)


现在我们可以假设恶意软件已经完成了解包;可以按一次F7(步入),这将到地址0x0040259B的原始入口点。在这一点上,我们是在恶意软件的第一个指令(解包后)。

九维团队-青队(处置)| 恶意软件的混淆技术(六)



1.2 用Scylla卸载进程内存

现在我们已经找到了OEP,下一步是将进程内存转储到磁盘。为了转储进程,我们将使用一个名为Scylla的工具;它是一个转储进程内存和重建导入地址表的伟大工具。

Scylla网址:https://github.com/NtQuery/Scylla

x64dbg的一大特点是它集成了Scylla,可以通过点击插件|Scylla(或Ctrl+I)启动Scylla。要转储进程内存,当执行在OEP处暂停时,启动Scylla,确保OEP字段被设置为正确的地址,如下图所示;如果没有则需要手动设置,并点击转储按钮,将转储的可执行文件保存到磁盘(在这个例子中,它被保存为packed_dump.exe)。

九维团队-青队(处置)| 恶意软件的混淆技术(六)


当把转储的可执行文件加载到IDA时,我们会看到整个内置函数列表(之前在打包的程序中是看不到的),函数代码也不再被混淆,但仍然看不到导入,API调用显示的是地址而不是名字。为了克服这个问题,需要重建打包后的二进制文件的导入表。

九维团队-青队(处置)| 恶意软件的混淆技术(六)


1
.
3 修复导入表

要修复导入表,回到Scylla,并点击IAT自动搜索按钮,它将扫描进程的内存以找到进口表;如果找到,它将用适当的值填充VA和大小字段。要获得导入的列表,请点击Get Imports按钮。使用这种方法确定的导入函数的列表显示在这里。有时,我们可能会注意到结果中的无效条目(条目旁边没有勾号);在这种情况下,右击这些条目,选择Cut Thunk来删除它们。

九维团队-青队(处置)| 恶意软件的混淆技术(六)

在使用上一步确定导入的功能后,我们需要将补丁应用到转储的可执行文件(packed_dump.exe)中。要做到这一点,点击Fix Dump按钮,这将启动文件浏览器,可以选择之前转储的文件。Scylla将用确定的导入函数修补二进制文件,并将创建一个新的文件,文件名在末尾含有_SCY(例如packed_dumped_SCY.exe)。现在,当在IDA中加载打过补丁的文件时,我们会看到对导入函数的引用,如图所示。

九维团队-青队(处置)| 恶意软件的混淆技术(六)

当我们处理一些打包器时,Scylla中的IAT自动搜索按钮可能无法找到模块的导入表;在这种情况下可能需要手动确定导入表的开始和导入表的大小,并在VA和大小字段中输入。



02

自动拆包


有各种工具可以让我们解开用UPX、FSG和AsPack等常见打包器打包的恶意软件。自动工具对于已知的打包器是很好的,可以节省时间,但请记住,它可能并不总是有效的;这时,手动解包技能将有所帮助。


ReversingLabs的TitanMist是一个伟大的工具,由各种打包器签名和解包脚本组成。

TitanMist网址:https://www.reversinglabs.com/open-source/titanmist.html

*左右滑动查看更多


在下载并解压后,我们可以使用这里显示的命令针对打包的二进制文件运行它:

-i 指定输入文件(打包文件) -o 指定输出文件名 -t 指定解包器的类型

在后面提到的命令中,TitanMist是针对用UPX打包的二进制文件运行的;注意它是如何自动识别打包器并执行解包过程的。该工具自动识别了OEP和导入表,转储了进程,修正了导入,并将补丁应用到转储的进程中。

C:TitanMist>TitanMist.exe -i packed.exe -o unpacked.exe -t pythonMatch found!│ Name: UPX│ Version: 0.8x - 3.x│ Author: Markus and Laszlo│ Wiki url: http://kbase.reversinglabs.com/index.php/UPX │ Description:   Unpacker for UPX 1.x - 3.x packed files    ReversingLabs Corporation / www.reversinglabs.com    [x] Debugger initialized.    [x] Hardware breakpoint set.    [x] Import at 00407000.    [x] Import at 00407004.    [x] Import at 00407008.[Removed] [x] Import at 00407118.    [x] OEP found: 0x0040259B.    [x] Process dumped.    [x] IAT begin at 0x00407000, size 00000118. [X] Imports fixed.    [x] No overlay found.    [x] File has been realigned.    [x] File has been unpacked to unpacked.exe. [x] Exit Code: 0.    █ Unpacking succeeded!

*左右滑动查看更多


另一个选择是使用IDA Pro的通用PE解包器插件。这个插件依赖于对恶意软件的调试,以确定代码何时跳转到OEP。要调用这个插件,将二进制文件加载到IDA,并选择Edit | Plugins | Universal PE 解包器。

关于该插件的详细信息,请参见:https://www.hex-rays.com/products/ida/support/tutorials/unpack_pe/unpacking.pdf

*左右滑动查看更多


运行该插件可以在调试器中启动程序,并且它试图暂停程序,只要打包器完成解包。在IDA中加载UPX打包的恶意软件(与手动解包中使用的样本相同)并启动插件后,会显示以下对话框。


在下面的截图中,IDA将开始地址和结束地址设置为UPX0部分的范围;这个范围被视为OEP范围。换句话说,当执行到这一段时(从UPX1开始,它包含解压存根),IDA将暂停程序的执行,给你一个机会采取进一步的行动。

九维团队-青队(处置)| 恶意软件的混淆技术(六)


在下面的截图中,注意IDA是如何自动确定OEP地址,然后显示以下对话框的。

九维团队-青队(处置)| 恶意软件的混淆技术(六)


如果点击 "是 "按钮,执行将被停止,进程将被退出,但在此之前,IDA将自动确定导入地址表(IAT),它将创建一个新段来重建程序的导入部分。在这一点上,我们可以分析解压后的代码。下面的屏幕截图显示了新重建的导入地址表。

九维团队-青队(处置)| 恶意软件的混淆技术(六)


如果不点击YES按钮,而是点击No按钮,那么IDA将在OEP处暂停调试器的执行,在这一点上可以调试已解压的代码或手动转储可执行文件,通过输入适当的OEP(如前边提到的手动解压),使用Scylla等工具修复导入。


在x64dbg中可以使用解包脚本执行自动解包。

获取网址:https://github.com/x64dbg/Scripts

要解包,需确保二进制文件被加载并在入口点暂停。根据所处理的打包器,需要在脚本窗格上点击右键,然后选择加载脚本|打开(或Ctrl + O)来加载相应的解包脚本。下面的屏幕截图显示了UPX解包器脚本的内容。

九维团队-青队(处置)| 恶意软件的混淆技术(六)


加载完脚本后,通过右键点击脚本窗格并选择运行来运行该脚本。如果脚本成功解压,就会弹出一个消息框说脚本完成了,执行将在OEP处暂停。下面的截图显示了运行UPX解包脚本后,在OEP处自动设置的断点(在CPU窗格中)。现在,我们可以开始调试解压后的代码,或使用Scylla来转储进程并修复导入的代码(如前文的手动解压中所述)。

九维团队-青队(处置)| 恶意软件的混淆技术(六)


除了前面提到的工具外,还有其他各种资源可以帮助我们进行自动解包。详情请参见:

Ether Unpack Service: http://ether.gtisc.gatech.edu/web_unpack/
FUU(Faster Universal Unpacker): https://github.com/crackinglandia/fuu

*左右滑动查看更多


总结


恶意软件作者使用混淆技术来掩盖数据,并从安全分析人员那里隐藏信息。在这一章中,我们研究了恶意软件作者常用的各种编码、加密和打包技术,我们还研究了不同的策略来消除数据的混淆。后续我们将会继续在公众号上介绍内存取证的概念,你将了解如何使用内存取证来调查恶意软件的能力。欢迎关注安恒信息安全服务,精彩内容不走丢~




往期回顾


九维团队-青队(处置)| 恶意软件的混淆技术(六)

九维团队-青队(处置)| 恶意软件的混淆技术(六)

九维团队-青队(处置)| 恶意软件的混淆技术(六)

九维团队-青队(处置)| 恶意软件的混淆技术(六)

九维团队-青队(处置)| 恶意软件的混淆技术(六)


九维团队-青队(处置)| 恶意软件的混淆技术(六)


关于安恒信息安全服务团队
安恒信息安全服务团队由九维安全能力专家构成,其职责分别为:红队持续突破、橙队擅于赋能、黄队致力建设、绿队跟踪改进、青队快速处置、蓝队实时防御,紫队不断优化、暗队专注情报和研究、白队运营管理,以体系化的安全人才及技术为客户赋能。

九维团队-青队(处置)| 恶意软件的混淆技术(六)

九维团队-青队(处置)| 恶意软件的混淆技术(六)

九维团队-青队(处置)| 恶意软件的混淆技术(六)

原文始发于微信公众号(安恒信息安全服务):九维团队-青队(处置)| 恶意软件的混淆技术(六)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月7日13:31:52
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   九维团队-青队(处置)| 恶意软件的混淆技术(六)http://cn-sec.com/archives/1502609.html

发表评论

匿名网友 填写信息