ESET:新的OceanLotus Cyber​​group后门交付方案

在帖子中,我们将描述OceanLotus网络组(APT32和APT-C-00)最近如何使用CVE-2017-11882的公共漏洞之一,Microsoft Office中的内存损坏漏洞,以及该组的恶意软件如何在被破坏的系统中提供持久性而不会留下任何痕迹。 接下来,我们描述从2019年初开始,该小组如何使用自解压档案来运行代码。

OceanLotus专门从事网络间谍活动,其首要目标是在东南亚。 攻击者伪造吸引潜在受害者注意的文档,以说服他们执行后门程序,并致力于工具的开发。 创建诱饵的方法在不同的攻击中有所不同-从具有“双扩展名”的文件,自解压缩的存档,具有宏的文档到著名的漏洞利用。


在Microsoft Equation Editor中使用漏洞利用


在2018年中,OceanLotus使用CVE-2017-11882漏洞发起了一项活动。 360威胁情报中心的专家(该研究为中文 )分析了该网络组织的恶意文件之一 ,其中包括对该漏洞的详细描述。 在下面的文章中,概述了这种恶意文档。

第一阶段


FW Report on demonstration of former CNRP in Republic of Korea.docFW Report on demonstration of former CNRP in Republic of Korea.doc (SHA-1: D1357B284C951470066AAA7A8228190B88A5C7C3 )与上述研究中提到的报告相似。 有趣的是,它针对的是对柬埔寨政治感兴趣的用户(CNRP-柬埔寨国家救助党,于2017年底解散)。 尽管扩展名为.doc,该文档仍具有RTF格式(请参见下图),包含垃圾代码,并且也失真。


图1. RTF中的垃圾

尽管存在变形的元素,Word仍成功打开了此RTF文件。 从图2可以看出,这是EQNOLEFILEHDR结构,其偏移量为0xC00,其后是MTEF标头,然后是字体的MTEF条目(图3)。


图2. FONT记录值


图3. FONT记录格式

名称字段可能会溢出,因为在复制之前不会检查其大小。 名称太长会触发漏洞。 从RTF文件的内容(图2中的偏移量0xC26)可以看到,缓冲区中填充了shell代码,后跟一个虚拟命令( 0x90 )和返回地址0x402114 。 该地址是EQNEDT32.exe中指向RET语句的对话框项。 这将导致EIP指向包含shellcode的名称字段的开头。


图4.漏洞利用shellcode的开始

地址0x45BD3C存储一个已取消引用的变量,直到到达当前加载的MTEFData结构的指针为止。 这是其余的shellcode。

Shell代码的目的是执行嵌入在打开的文档中的Shell代码的第二个片段。 首先,源shellcode尝试找到打开文档的文件描述符, NtQuerySystemInformation所有系统描述符(使用SystemExtendedHandleInformation参数的NtQuerySystemInformation ),并检查描述符PIDWinWord处理PID是否 WinWord以及是否使用访问掩码0x12019F打开了文档。

为了确认检测到正确的描述符(而不是另一个打开的文档的描述符),使用CreateFileMapping函数显示文件的内容,并且外壳程序代码检查文档的最后四个字节是否匹配“ yyyy ”(Egg Hunting方法)。 一旦找到匹配项,文档就会以GetTempPath形式复制到一个临时文件夹( GetTempPath )中。 然后读取文档的最后12个字节。


图5.文档结束标记

AABBCCDDyyyy标记之间的32位值是下一个AABBCCDD的偏移量。 使用CreateThread函数调用它。 提取之前与OceanLotus相同的shellcode。 我们在2018年3月发布的Python仿真脚本仍然可以转储第二阶段。

第二阶段


组件检索


文件和目录名称是动态选择的。 该代码在C:\Windows\system32随机选择可执行文件或DLL文件的名称。 然后,他向他的资源发出请求,并检索FileDescription字段以用作文件夹名称。 如果这不起作用,则代码将从%ProgramFiles%C:\Windows目录(从GetWindowsDirectoryW)中随机选择文件夹名称。 它避免使用可能与现有文件冲突的名称,并确保它不包含以下单词: windowsMicrosoftdesktopsystemsystem32syswow64 。 如果目录已经存在,则将“ NLS_ {6个字符}”添加到名称中。

0x102分析资源0x102并将文件以%ProgramFiles%%AppData%形式转储到随机选择的文件夹中。 创建时间更改为具有与kernel32.dll相同的值。

例如,这是一个文件夹和文件列表,通过选择可执行文件C:\Windows\system32\TCPSVCS.exe作为数据源创建。


图6.提取各种成分

0x102资源的结构非常复杂。 简而言之,它包含:
-文件名
-文件大小和内容
-压缩格式( RtlDecompressBuffer函数使用的COMPRESSION_FORMAT_LZNT1

第一个文件被重置为TCPSVCS.exe ,这是合法的AcroTranscoder.exe (根据FileDescription ,SHA-1: 2896738693A8F36CC7AD83EF1FA46F82F32BE5A3 )。

您可能已经注意到某些DLL文件大于11 MB。 这是因为较大的连续随机数据缓冲区位于可执行文件内部。 这可能是避免某些安全产品检测到的方法。

坚持不懈


放置器中的0x101资源包含两个32位整数,这些整数确定如何维护持久性。 first的值表示在没有管理员权限的情况下恶意软件将如何保持持久性。


表1.没有管理员权限的持久性机制

第二个整数的值表示恶意软件在以管理员身份工作时应如何确保持久性。


表2.具有管理员权限的持久性机制

服务名称是不带扩展名的文件名; 显示名称是文件夹的名称,但是如果该名称已经存在,则会在其中添加字符串“ Revision 1 ”(数字增加,直到找到未使用的名称为止)。 操作员确保通过服务的持久性是稳定的-如果发生故障,则应在1秒钟后重新启动服务。 然后,新的服务注册表项的WOW64值设置为4,表示它是32位服务。

通过几个COM接口创建计划的任务: ITaskSchedulerITaskITaskTriggerIPersistFileITaskScheduler 。 本质上,恶意程序会创建一个隐藏任务,设置帐户信息以及有关当前用户或管理员的信息,然后设置触发器。

这是一项日常任务,持续时间为24小时,两次运行之间的间隔为10分钟,这意味着它将连续执行。

恶意位


在我们的示例中,可执行文件TCPSVCS.exeAcroTranscoder.exe )是合法的软件,可下载与之一起转储的DLL。 在这种情况下, Flash Video Extension.dll很有用。

它的DLLMain函数只是调用另一个函数。 存在一些模糊谓词:


图7.模糊谓词

这些误导性检查之后,代码将接收TCPSVCS.exe文件的.text部分,将其保护更改为PAGE_EXECUTE_READWRITE并覆盖它,并添加伪指令:


图8.指令序列

最后,将CALL指令添加到Flash Video Extension.dll导出的FLVCore::Uninitialize(void)函数的地址中。 这意味着在加载了恶意DLL之后,当运行时在TCPSVCS.exe调用WinMain时,指令指针将指向NOP,从而导致FLVCore::Uninitialize(void)调用FLVCore::Uninitialize(void)

该函数仅创建一个互斥锁,其开头为{181C8480-A975-411C-AB0A-630DB8B0A221}后跟当前的用户名。 然后,她读取扩展名为* .db3的转储文件,该文件包含与位置无关的代码,并使用CreateThread执行内容。

* .db3文件的内容是OceanLotus组常用的shellcode。 再次,我们使用在GitHub上发布的仿真器脚本成功解压缩了其有效负载。

该脚本检索最后阶段。 该组件是我们在先前的OceanLotus研究中已经分析过的后门。 这可以由二进制文件的GUID {A96B020F-0000-466F-A96D-A91BBF8EAC96} 。 PE资源中的恶意软件配置仍处于加密状态。 它的配置大致相同,但是C&C服务器与以前的服务器不同:

- andreagahuvrauvin[.]com
- byronorenstein[.]com
- stienollmache[.]xyz


OceanLotus再次展示了不同技术的组合来避免检测。 他们返回时带有感染过程的“精炼”轮廓。 通过选择随机名称并用随机数据填充可执行文件,它们减少了受信任的IoC的数量(基于哈希和文件名)。 此外,由于使用了第三方DLL加载,攻击者只需要删除合法的AcroTranscoder二进制文件即可。

自解压档案


使用RTF文件后,该组切换到带有公共文档图标的自解压(SFX)存档,从而进一步使用户感到困惑。 这是由Threatbook( 中文链接 )撰写的。 启动后,将解压缩自解压缩的RAR文件,并执行扩展名为.ocx的DLL,其最终有效载荷先前已记录在{A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll 。 自2019年1月中旬以来,OceanLotus已重复使用此技术,但随着时间的流逝,某些配置已更改。 在本节中,我们将讨论技术和变化。

诱饵创作


文件THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE (SHA-1: AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB )首次发现。 这个SFX文件是明智创建的-描述( Version Info )说这是JPEG图像。 SFX脚本如下:


图9. SFX命令

恶意软件重置{9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (SHA-1: EFAC23B0E6395B1178BCF7086F72344B24C04DCC )以及图片2018 thich thong lac.jpg.

诱饵图像如下:


图10.诱饵图像

您可能已经注意到,SFX脚本中的前两行两次调用OSX文件,但这不是错误。

{9ec60ada-a200-4159-b310-8071892ed0c3} .ocx(ShLd.dll)


OSX文件控制流程与其他OceanLotus组件非常相似-JZ JZ/JNZPUSH/RET命令的许多序列与垃圾代码交替出现。


图11.混淆的代码

过滤垃圾代码后, regsvr32.exe调用的DllRegisterServer导出看起来像这样:


图12.基本的安装程序代码

实际上,第一次调用DllRegisterServer导出将设置注册表值HKCU\SOFTWARE\Classes\CLSID\{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}\Model DLL中加密偏移量的HKCU\SOFTWARE\Classes\CLSID\{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}\Model0x10001DE0 )。

当第二次调用一个函数时,它将读取相同的值并在该地址运行。 从这里开始,读取并执行资源,并在RAM中执行许多操作。

shellcode与先前的OceanLotus活动中使用的PE加载器相同。 可以使用我们的脚本进行仿真。 结果,他转储了db293b825dcc419ba7dc2c49fa2757ee.dll ,将其加载到内存中并运行DllEntry

DLL提取其资源的内容,解密(AES-256-CBC)并解压缩(LZMA)。 该资源具有易于反编译的特定格式。


图13.安装程序配置结构(KaitaiStruct Visualizer)

配置已明确设置-根据特权级别,二进制数据将写入%appdata%\Intel\logs\BackgroundUploadTask.cpl%windir%\System32\BackgroundUploadTask.cpl (或对于64位系统为SysWOW64 )。

然后,通过创建名为BackgroundUploadTask[junk].job的任务来确保持久性,其中[junk]是一组字节0x9D0xA0

任务的应用程序名称为%windir%\System32\control.exe ,并且参数值是卸载的二进制文件的路径。 隐藏的任务每天运行。

从结构ac8e06de0a6c4483af9837d96504127e.dll ,CPL文件是一个内部名称为ac8e06de0a6c4483af9837d96504127e.dll的DLL,它将导出CPlApplet函数。 此文件解密其唯一资源{A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll ,然后加载此DLL并调用其唯一的DllEntry导出。

后门配置文件


后门配置已加密并嵌入其资源中。 配置文件的结构与上一个非常相似。


图14.后门配置结构(KaitaiStruct Visualizer)

尽管结构相似,但许多字段的值都与我们以前的报告中提供的数据进行了比较。

二进制数组的第一个元素包含由腾讯识别的DLL( HttpProv.dll MD5: 2559738D1BD4A999126F900C7357B759 )。 但是,由于已从二进制文件中删除了导出名称,因此哈希值不匹配。

附加研究


收集样本时,我们提请注意一些特征。 刚刚描述的样本出现在2018年7月左右,其他类似的样本则出现在最近的1月中旬-2019年2月初。 SFX存档用作感染媒介,转储合法的诱饵文档和恶意的OSX文件。

尽管OceanLotus使用伪造的时间戳,但我们注意到SFX和OCX文件的时间戳始终相同( 0x498BE80F (08/14/2016 @ UTC 7:15 pm)和0x498BE80F (2009年6月6日UTC上午7:34 ))。 这可能表明作者具有使用相同模板并仅更改某些特征的特定“构造函数”。

自2018年初以来我们研究的文件中,有各种名称表示攻击的国家/地区:

-柬埔寨媒体的新联系信息(新).xls.exe
-李建香(个人简历).exe(伪造的pdf文件)
-反馈,2018年7月28日至29日在美国拉力赛.exe

自从发现后门{A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll并由数名研究人员发布其分析以来,我们已经观察到恶意软件配置数据的某些变化。

首先,作者开始从辅助DLL DLL( DNSprov.dllDNSprov.dll两个版本)中删除名称。 然后,操作员停止打包第三个DLL( HttpProv.dll的第二个版本),选择仅嵌入一个。

其次,由于许多IoC可用,许多后门配置字段已更改,可能是为了避免检测。 作者修改的重要领域包括:

  • AppX注册表项已更改(请参阅IoC)
  • 互斥体编码字符串(“ def”,“ abc”,“ ghi”)
  • 端口号

最后,在所有新分析的版本中,新的C&C在IoC部分中列出。

结论


OceanLotus继续发展。 该网络小组专注于工具和诱饵的完善和扩展。 作者借助与被指控的受害者有关的引人注目的文档掩盖了恶意负载。 他们开发了新的设计,还使用了公开可用的工具,例如“公式编辑器”漏洞。 此外,它们是完善的工具,可以减少受害者机器上残留的工件数量,从而减少防病毒软件检测到的机会。

折衷指标


折衷指标以及MITER ATT&CK属性可在WelivesecurityGitHub上获得

Source: https://habr.com/ru/post/zh-CN446604/


All Articles