攻击技术研判|“重门深锁”FormBook Crypter 执行隐匿技术精析

情报背景

FormBook 是具有信息盗窃与命令控制功能的商业恶意软件家族,自 16 年起在黑客论坛被公开售卖。在多年的演进中,FormBook
不断利用新技术更新迭代其隐匿技术。

MalwareBytes 以 FormBook 近期的样本为例,对基于 NSIS
安装引擎分发恶意代码的方法进行了分析,并对该样本中的后续攻击中涉及的技术进行了简要介绍。

本文将基于此报告对 NSIS 安装程序的利用方式进行介绍,并对整个攻击流程中所涉及的亮点技术进行深度解析。

组织名称

|

FormBook

—|—

相关工具

|

NSIS

战术标签

|

初始访问 执行 防御规避

技术标签

|

NSIS、syscall

情报来源

|

https://blog.malwarebytes.com/threat-analysis/2021/05/revisiting-the-nsis-
based-crypter/

攻击技术分析

亮点一:Crypter-模块化的商业恶意代码执行器

随着攻防博弈的不断发展,现代恶意软件除了自身实现恶意代码的加密混淆等常规工具外,还会借助加壳等手段保护核心代码,增加分析成本。Crypter(加密器)的概念则超出了加密恶意代码这个表层含义,包含更多的隐匿、对抗和反分析技术,为核心恶意代码的执行创造更加安全的执行层。

在网络黑市中售卖的商业的 crypter
以对抗系统安全机制、终端安全产品和分析工具为卖点。它们的存在降低了攻击的门槛,不需要掌握艰深的攻防对抗技术便可具有一定的防御规避能力,为此深受小型网络攻击组织的青睐。

1630394597_612dd8e56bbd31c75792a.png!small?1630394606043

亮点二:初始访问-利用 NSIS 安装程序执行恶意代码

NSIS(Nullsoft Scriptable Install System)是 Windows
平台开源免费的安装程序生成引擎,它支持将安装所需的所有文件打包到单个安装文件中,并且以 NSIS
脚本灵活地设计安装程序的执行流程,因其便利与灵活受到许多软件开发商的青睐。合法软件分发中的广泛使用使导致利用 NSIS 引擎生成的恶意程序逐渐增加。

NSIS 的功能主要由 NSIS 脚本完成,在脚本中能够完成文件操作、注册表操作、进程创建等敏感操作,甚至直接调用系统
API,这些强大而灵活的特性为恶意代码的执行创造了条件。

在编译过程中,NSIS 脚本以及依赖文件会由引擎打包为单个 exe 文件。依赖文件在执行过程中会解压到指定的文件夹中,NSIS 脚本则可利用旧版本 7z
压缩工具进行提取分析。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-olGaDuF1-1692333588808)(https://image.3001.net/images/20210831/1630394626_612dd902f23b44170f915.png!small?1630394635594)]

下图为该样本中执行 shellcode 的 NSIS 脚本片段,利用自带接口与 Win32 函数读取安装目录中的 shellcode 在内存中加载执行。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iTPSerKY-1692333588809)(https://image.3001.net/images/20210831/1630394641_612dd911ee5455a325cfe.png!small?1630394650594)]

亮点三:精巧设计的直接系统调用流程

为了达到更佳的隐匿效果,Crypter 利用 ProcessHollowing 技术创建新的挂起的进程,映射恶意代码节区,修改入口点,在其中执行恶意代码。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tFzj6aNr-1692333588811)(https://image.3001.net/images/20210831/1630394659_612dd923036f8ddd76c85.png!small?1630394668002)]

在完成该攻击操作的过程中以直接系统调用的方式调用底层 API 函数,躲避安全产品在用户态的 Hook 检测。

• NtUnmapViewOfSection

• NtCreateSection

• NtMapViewOfSection

• NtWriteVirtualMemory

• NtResumeThread

因 crypter 特殊的性质,攻击者综合考虑到了利用直接系统调用时可能遇到的三种情况。

程序

|

操作系统架构

|

执行环境

—|—|—

x64

|

x64

|

纯 x64

x86

|

x64

|

Wow64

x86

|

x86

|

纯 x86

利用包括 Heaven’s gate 在内的若干高级技术巧妙构造调用流程,在使得该 crypter 在绝大多数的系统环境中均能成功完成直接系统调用。

1630394688_612dd940bfa1d71d9a4c7.png!small?1630394697399

亮点四:Hell’s Gate-由 NTDLL.dll 获取进程调用 ID

与用户态 API 一直保持相对稳定向后兼容不同,直接系统调用 ID 作为系统底层实现的一部分并不具有一致性,不同操作系统版本的系统调用 ID
均会发生变化,针对某个特定操作系统版本的调用 ID 开发的程序在其他版本的系统中无法正常工作。

System call

|

**Windows Server 2008 **

(R2 SP1)

|

**Windows Server **

**2012 (SP0) **

|

**Windows 10 **

**(2004) **

—|—|—|—

NtUnmapViewOfSection

|

0x0027

|

0x0028

|

0x002a

NtWriteVirtualMemory

|

0x0037

|

0x0038

|

0x003a

NtResumeThread

|

0x004f

|

0x0050

|

0x0052

这导致任何想要利用直接系统调用的开发者均要保证程序在不同系统版本中执行时能够获取到正确的系统调用 ID。

直接系统调用武器化发展的第一个阶段,系统版本与系统调用 ID 的对应关系被硬编码在程序当中。程序执行的过程中依据当前系统版本选择正确的系统调用 ID。

1630394721_612dd961be9b18799cc95.png!small?1630394730537

区别于在程序中硬编码,”Hell’s Gate“这种技术在执行过程中动态获取系统调用ID,因此执行环境不受限于包含的系统调用 ID 覆盖范围。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jytxhnAV-1692333588815)(https://image.3001.net/images/20210831/1630394744_612dd978240cece5d2020.png!small?1630394752744)]

首先从磁盘中手动加载新的 NTDLL.dll 到内存中(原有 NTDLL.dll 可能已经被 Hook),然后查找导入表找到需要调用的 NT API
函数在内存中的地址。依据系统调用 ID 在文件中的分布规律(在 MOV 指令 0xb8 的下一个字节),计算偏移即可以提取出真实的系统调用ID。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sE1pypkN-1692333588816)(https://image.3001.net/images/20210831/1630394759_612dd987bd2bcf21656ac.png!small?1630394768642)]

亮点五:Heaven’s Gate-由 WoW64 切换到 X64

在 x64 系统中,所有 x86 程序均在名为 WoW64 的子系统中运行,该子系统将 x86 的系统 API 进行翻译模拟程序所需的 32
位运行环境。对于 x86 程序而言,这种模拟是相对隔离与无感的,程序只能读取到 x86 类型的
DLL,对于系统文件、注册表的访问也会重定向到SysWoW64文件夹中。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XqC0YbGf-1692333588818)(https://image.3001.net/images/20210831/1630394827_612dd9cbf420f6bd0bdb3.png!small?1630394836667)]

在 WoW64 进程中操作系统通过 code segment 这个特殊寄存器的值来控制 x86 与 x64 的上下文切换,x86 为 0x23,x64 为
0x33。
1630394850_612dd9e2d9bb6f00d53ec.png!small?1630394859743

在实际操作中可以利用“retf”远转移指令,该指令会对 rip 与 code segment
寄存器同时进行修改,以此达到上下文切换的目的,也就是所谓的“Heaven’s Gate”技术。

ret

|

retf

—|—

抽取栈顶修改 RIP

pop rip

|

抽取栈中的值修改 RIP 与 CS 寄存器

pop rip

pop cs

切换到 x64 上下文后即可执行原生 x64 的直接系统调用,与 x64 进程下无异。执行完成后再通过 retf 指令修改寄存器返回 x86 执行模式。

1630394876_612dd9fcb12ec7f153c60.png!small?1630394885411

总结

1. 商业化的 crypter 的存在体现了现代恶意软件的模块化特征,往往包含较多的隐匿规避技术。

2. NSIS 安全程序生成引擎本身可编程的灵活性使其具有被滥用执行恶意代码的潜力。

3. 直接系统调用的攻击方式在恶意样本中逐渐多见,动态解析 Windows 系统调用 ID 已经成为当前的主流做法,Hook
等传统检测方案已缺乏检测能力。

4. 利用“Heaven’s Gate”方法可在 Wow64 子系统中进行 x86 与 x64
上下文的切换,从而执行直接系统调用等攻击行为,增加攻击检测与分析的成本。

绿盟科技 M01N Team 战队

绿盟科技M01N战队专注于Red
Team、APT等高级攻击技术、战术及威胁研究,涉及Web安全、终端安全、AD安全、云安全等相关领域。通过研判现网攻击技术发展方向,以攻促防,为风险识别及威胁对抗提供决策支撑,全面提升安全防护能力。

公众号:M01N Team

1628130370_610b4c42865fb37cd03b8.jpg!small?1628130373510

欢迎扫码关注公众号

在 Wow64 子系统中进行 x86 与 x64
上下文的切换,从而执行直接系统调用等攻击行为,增加攻击检测与分析的成本。

绿盟科技 M01N Team 战队

绿盟科技M01N战队专注于Red
Team、APT等高级攻击技术、战术及威胁研究,涉及Web安全、终端安全、AD安全、云安全等相关领域。通过研判现网攻击技术发展方向,以攻促防,为风险识别及威胁对抗提供决策支撑,全面提升安全防护能力。

公众号:M01N Team

[外链图片转存中…(img-vUdc62DM-1692333588822)]

欢迎扫码关注公众号

学习计划安排


我一共划分了六个阶段,但并不是说你得学完全部才能上手工作,对于一些初级岗位,学到第三四个阶段就足矣~

这里我整合并且整理成了一份【282G】的网络安全从零基础入门到进阶资料包,需要的小伙伴可以扫描下方优快云官方合作二维码免费领取哦,无偿分享!!!

如果你对网络安全入门感兴趣,那么你需要的话可以

点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

①网络安全学习路线
②上百份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥HW护网行动经验总结
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值