首页
社区
课程
招聘
[推荐][原创] 剖析Gorgon APT的新变体GuLoader(CloudEyE)对抗技术
发表于: 2022-11-24 11:37 6767

[推荐][原创] 剖析Gorgon APT的新变体GuLoader(CloudEyE)对抗技术

2022-11-24 11:37
6767

1 为什么是 GuLoader

   

GuLoader,或者也被称为 CloudEye,是一个小型 VB5/6 下载器恶意软件。通常,它会从 Google Drive 下载远程访问工具(RAT)和窃取程序,例如 Agent Tesla,Arkei/Vidar,Formbook,Lokibot,Netwire 和 Remcos。

GuLoader 因其反虚拟机(anti-VM)策略而臭名远扬,对一般的沙箱检测基本百分百绕过。在已知的情报和分析实战中,即使是最著名的在线沙箱之一(run)也无法成功运行起该恶意软件。


2. 逐层刨开 GuLoader 采用的多种“反”策略

   

2.1

   

1. NSIS

GuLoader 利用 Nullsoft 可脚本安装系统(NSIS)打包程序来压缩和加密其有效载荷。NSIS 打包程序是一个免费的开源工具,通常用于创建 Windows 安装程序。但是,它也可以打包其他类型的文件,例如可执行文件。正是 GuLoader 对 NSIS 打包程序的使用使防病毒程序更难检测和删除恶意软件。

当 GuLoader 打包其有效负载时,它首先使用 NSIS 打包器压缩文件,然后使用自定义加密算法加密压缩文件。然后将加密文件嵌入到 GuLoader 可执行文件中。当 GuLoader 运行时,它会解密并解压缩有效负载,然后执行它。

2.2


   

2. 检查常用 vm 工具

GuLoader 检查是否存在常见的 VM 工具,如 VMware,VirtualBox 和 QEMU。如果检测到这些工具中的任何一个,GuLoader 将不会执行。

2.3


   

3. 检查调试器

GuLoader 检查是否存在调试器,如 OllyDbg 和 WinDbg。如果检测到调试器,GuLoader 将不会执行。

传统的检测可以在一般的之前的文章中找到,比如参考这篇Gorgon APT 组织在行动:从 Google Drive 到 Formbook 窃密木马

2.4


   

4. 检查沙盒

GuLoader 检查是否存在沙箱,例如 Cuckoo Sandbox 和 Anubis。如果检测到沙盒,GuLoader 将不会执行。

比如 GuLoader 会检查应用程序窗口的数量以检测分析环境。此检查使用函数 EnumWindows 枚举和计数屏幕上的所有顶级窗口。如果窗口数小于 12,恶意软件将使用自己的进程句柄调用 TerminateProcess,作为要终止的参数。这样做可能是为了逃避沙盒或模拟器环境。


2.5


   

5. API HASH

GuLoader 使用散列技术来解决 API 调用;它是 DJB2 的修改版本 – 请参阅以下示例:

图片


python 复原 hash 代码:


    val = 0x1505  inString = "GetProcAddress"for ch in inString:      val += (val << 5)      val &= 0xFFFFFFFF      val += ord(ch)    val &= 0xFFFFFFFF  print(hex(val).upper().lstrip("0X").rstrip("L"))



    2.6


       

    6. 二进制代码混淆技术

    最常见的混淆技术之一是“不透明谓词”,它们是始终返回真值或假值的布尔表达式。但是,该值事先并不知道,因此很难理解它的作用。不透明谓词通常与其他混淆技术(如代码排列)一起使用,以使代码更难理解。

    图片

    2.7


       

    7. GuLoader 使用矢量异常处理程序来更改代码流

    GuLoader 的一个有趣功能是它如何在运行时设法更改代码流。这是使用向量异常处理程序 (VEH)(一种软件异常处理机制)完成的。VEH 可用于拦截和处理操作系统或正在运行的程序生成的异常。

    发生异常时,操作系统或程序将生成异常代码。然后,VEH 查找与该异常代码关联的异常处理程序的地址并调用它。GuLoader 使用 VEH 在异常处修改扩展指令指针(EIP),以指向下一个合法指令。以下是 VEH 设置:

    图片

    首先,当异常发生时,_CONTEXTRECORD 结构检查是否存在硬件寄存器,即 x86 调试寄存器:

    发生异常的 EIP 与字节 0xcc(即软件断点)进行比较。这是异常继续并生成下一个 EIP 的必要条件。

    动态计算EIP:

    图片


    异常 EIP 后的字节与 0xcb 进行异或运算,并将结果添加到当前 EIP 中,以获取下一个执行位置。异常 EIP 和计算的 EIP 之间的指令充满了垃圾指令,以混淆反汇编器,如下图所示:

    图片


    3


       

    如何从 GuLoader 自动提取入侵指标(IOC)

    由于存在各种硬核反虚拟机、反分析和反调试机制,手动剖析 GuLoader 有效负载成为一个繁琐而乏味的过程。因此,必须自动执行此提取。为了使该过程成功,我们必须首先自动转储,然后编写脚本来提取从 GuLoader 获取 URL 所需的参数。

    但 GuLoader 给我们带来了一个很大的障碍,即 anti-dump 保护。这是一种用于防止对代码进行逆向工程和分析的技术。它通过加密或混淆代码来工作,使其特别难以阅读和理解。

    GuLoader 在调用任何系统 API 的任何时候都会加密主二进制代码,这总是使转储的代码无用。以下两张图片分别描述了“调用前对代码进行异或”和“在 API 调用后对代码进行异或”。

    图片


    利用的一个弱点是 GuLoader 进行的初始 API 调用,它没有被包含在执行所有上述“反”检查的子例程代码中。

    图片


    要利用此弱点,您可以在 OEP 后设置 DLL hook,如下面的代码所示:

    图片


    转储成功后,我们必须找到密钥。这个过程相当简单,因为 GuLoader 使用与字符串相同的子程序加密僵尸网络命令和控制器(C&C)。下面是字符串解码子例程:

    图片


    在分析中通过回溯会找到传入栈中的待解密字符串:

    图片


    后续写脚本即可暴力破解该字符串

    图片

    :GuLoader c2 = b’http[:]//192.3[.]245[.]147/2022.bin

    4


       

    总结

    在各种变体 GuLoader 中,不仅包含传统的 anti 技术,还有一些高操作性的反调试功能。

    5


       

    ioc

    bfa5dba46db1253587058b0392c04c8403846fa55d7dcf1044e94e6a654d4715

    6


       

    参考链接

    GuLoader: Peering Into a Shellcode-based Downloader ( https://www.crowdstrike.com/blog/guloader-malware-analysis/ )




    [培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

    收藏
    免费 0
    支持
    分享
    最新回复 (0)
    游客
    登录 | 注册 方可回帖
    返回
    //