不是,真没人敢说吗?免杀大佬加入黑灰产还打得过吗?
奇安信攻防社区
2024-09-02 10:10:47
收藏
**一、前言**
========
大家好,我是来自顺丰安全成文实验室的一名老兵,代号“PX0”,我的任务是追踪威胁情报,深入分析最新黑灰产动向。近期,实验室捕获到一组“银狐”样本,经查,样本来源于伪装成主流会议软件的网站,网站通过提高搜索引擎的收录权重来诱骗用户下载该病毒软件。
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-496e7e7e252405c8f406faa3aa6a4ade98fb05f9.png)
此前我也曾分析过“银狐”相关样本,但这回的新版本,免杀技术简直出神入化,主流的安全软件几乎拿它没辙。这让我心里直犯嘀咕:“难道真的有免杀界的高手‘叛变’,跑去给黑灰产当军师了?”不过别担心,接下来,就让我来带大家揭秘这位高手的免杀大招,再教大家几个怎么识别和防住它的高招!
**二、本文关注点**
-----------
- 此银狐分支样本在出现阶段,主流沙箱、EDR几乎无法检测,本文主要分享新增部分功能
- 攻击者更加注重杀软和防御能力对抗,引入了bypass检测、防病毒模拟器检测、RPC构建持久化
- 样本的进化更倾向于多段的内存加载、运行时动态解密,后续可能会出现rootkit类型的完全隐蔽后门
- 根据样本的函数代码通用特征提取检测规则、检测思路分享
**三、正文分析**
----------
### 1、加载过程
在近期捕获的一批样本中,初始投递的加载器代码几乎一致,攻击者通过最少的API调用完成第一阶段的shellcode加载 (对通用杀毒软件来说,敏感API调用越少,风险相对越小);
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-7e0780a4ec5b1a9dd3198f6b584b08e237f23c1e.png)
shellcode加载完成后,通过内联jmp rbx跳转0x1B0000执行,这里其实是有一步mov的地址转移操作,作用是避免出现jmp rax的明显内存调用特征,在8月迭代样本也出现了其他的寄存器调用;
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-a798695d0ca466443d936022fe5de5d662275f64.png)
### 2、解密过程
进入shellcode内部,实际只有call一个有效指令,后续的所有字节都是加密状态;这类似cobaltstrike睡眠解密,此类函数适合作为检测特征,区别是此函数需在程序启动时检测;
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-097c79dc6bb32bf5575659e8100117ce998d3a72.png)
解密函数即运行时的内部计算,进行了一系列循环右移、减法和取反操作,用于动态解密后续指令;
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-ebc79810522caf278bc263ff84cf6975fb8f8150.png)
经对比可以看出,右侧部分指令被解密,被解密出来的部分实际是一个新的异或解密函数;
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-0c1498b6836e15158b6da89b2837153083ff3d02.png)
经过长期跟踪发现,此函数出现在银狐多个版本,为了更清楚地了解功能和检测,我们代码还原这个函数;
```php
unsigned char key = 0x91;
```
从内存可以看到整个倒序解密的过程,运行完成后,整块shellcode代码被解密完成;
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-15ab1b6cd053af0cdc8e45303074b874393b49c4.png)
### 3、环境检测、绕过
解密完成后首先进入sub\_99A5函数,此函数集成一些bypass和环境检测能力,是对比以往样本的增强部分;
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-a7142f082776dfe40923c4137871cff2b2ad275b.png)
首先是bypass ETW和AMSI,实现方式完全相同;都是通过patch到对应函数开头一个0x3C字节即ret指令,完成扫描、日志输出的代码跳过;
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-b893153034fdda67d3dacfffa9a8e5c9930bf68c.png)
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-341fa8d08546959c4d3020f7558b7a2e1b265517.png)
### 4、模拟环境检测
微软防病毒为首次扫描的程序提供了特殊的二进制模拟器环境,会附带一些虚拟模块和预定返回值;接下来的几个check函数是关联性代码,整体功能是为了检测Defender模拟环境;
判断程序名,如果匹配v5数组中的:\\myapp.exe(模拟进程名称,不是实际运行的进程)则退出进程;
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-b506ca490dbd1ef1ef331bc2b0fb30eb6654245a.png)
以下是对防病毒模拟器初始化功能的部分逆向代码(详细内容可以参考2018年 BlackHat);
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-7ff7dbff70bd8c908660c29238afadaec3d2e5f2.png)
此函数使用两个未公开函数获取ntdll的导出表,并通过自定义ror算法计算apiHash(ntdll运行时模拟函数),如果命中任意3个Mpclient函数hash则返回错误码0xC0000462,再通过上层函数判断退出进程;
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-f9a899768bce22e39597e49bda90115497110743.png)
分别调用Windows内核函数NtIsProcessInJob和NtCompressKey传入无效句柄,判断是否会返回虚拟模块的预定值,返回预期值则退出进程;![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-8aecee70831452e23f3ec65699e2f77b51421b6a.png)
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-01b821b1c46d0ecb70a59e3ac3000ee4a96580d4.png)
### 5、防御绕过
传入无效标识符,尝试动态加载COM类对象,判断返回值CLASS\_E\_CLASSNOTABAILABLE是否符合预期;
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-95a315356622f934bf86612de6757257a0cdcfe2.png)
在堆分配一块较大的内存空间,尝试是否可以成功,通过这种方式验证系统环境;
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-4588ec7d09b8b24ace0233af531d1566b3db0c0c.png)
调用VirtualAllocExNuma函数申请物理内存,此函数的运行环境要求存在多个物理CPU;判断SxIn.dll模块是否被当前进程加载(360沙箱的分析dll) ;
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-dec1f5910c15b4a7608f17311d675edd9cf6cb9a.png)
获取SYSTEM\_INFO结构体,该结构体包含系统的硬件信息 ,判断处理器数量;
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-d25cb60743455fc755ceceea1d870aa8fd8b7cd3.png)
获取当前主机名,通过主机名字符创建互斥体对象,判断是否存在;
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-a516e37e50ecff500b5dbbfcf4b42e7b3d4807cb.png)
获取令牌信息,判断进程是否能提升权限,尝试runas以管理员身份启动,进入死循环(用户未通过会无限弹窗)
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-9b1927f38c33aa42a2b1c2aa3c3b8590cdae5a2f.png)
判断c:\\\\xxxx.ini文件是否存在,此文件默认由Gh0st后门创建;
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-e6fd5212897e8e539b6fa0b4a8357e259b4eb40a.png)
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-248d55e4152f9645c2b127f0e1cb6eb2ffccb200.png)
通过GetTickCount64函数来测量Sleep调用前后的时间差,判断环境是否加速,\_\_rdtsc()函数同理;
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-ca90d715ab587ba9e4ff11ed9e2d36e12aa00509.png)
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-539b2e73d1770d72448fa9104c3bf8c9d6672752.png)
### 6、防御削弱
通过扫描进程列表、服务进程、检索窗口类综合判断360杀软是否存在,综合来看攻击者更倾向于个人电脑;
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-a7800448cf0362ebf0e663535c15489baf360083.png)
通过API发送线程消息、控制信号尝试关闭360杀软,若失败跳转到后续代码下载BYOVD驱动模块结束杀软;
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-165d31e700b2278dc1f1821f0249afe521fb3a53.png)
检测WindowsDefender防病毒相关进程服务是否存在;
执行powershell命令添加C:\\ProgramData和C:\\User\\Public目录到扫描排除项(后门存放路径),
在8月的版本中会新增Program Files (x86)目录;
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-24bc957ed71cd9142001dbddb0fa68f2b0c53184.png)
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-9a1b0a202d2ac89137ccd2400d7abb0c5d06fde0.png)
攻击者整体使用凯撒密码对字符串解密,此算法比较简单,使用固定key进行逐字节移位;
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-edbd2d8e423b2466dbcefc938e0858b6aa7c4eb6.png)
此处解密完成后得到存储桶地址;根据地址表下载一组后门文件,下载完成后根据偏移标识填入随机值,使得下载文件没有固定hash(在以往的样本中,银狐会通过多种方式实现此功能);
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-23b1492948c72729a055a73309e3bd175a6ac0fe.png)
下载后的文件会随机存储在C:\\Users\\Public目录,并在下层创建随机字符目录;在某些版本,会另外下载一组后门隐藏在C:\\ProgramData目录中;
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-a4ba96d04bc474a83a72083370bc5a2fbbba3de2.png)
下载BYOVD驱动模块,当进程权限不足时跳过此部分;payload下载完成后以内存dll形式解压,并获取导出函数指针,再使用RPC管道构建计划任务配置并调用NdrClientCall3函数创建,此任务用于维持BYOVD模块;
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-bf66df629a00c3b0a78cd1e16fcc2af985f43cac.png)
此驱动漏洞属于EDR Killer类型,可以通过传入特定的控制码0x22E044和进程pid 在内核强制结束对应的进程;
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-2d5883cb3187d58bbd696a6699ce5acdcb28d23d.png)
驱动内部会根据传入控制码触发调用,通过IOCTL(IO control codes)命令执行结束进程(支持Win11);
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-0f56df9d6a769f7aea98af8b8934f4feabb5c074.png)
### 7、后门远控
后门程序使用一组白加黑配合两个加密的payload文件, 这是银狐的惯用手法;dll使用VMProtect保护,运行后使用RC4算法对payload进行解密,完成后加载log.src文件,再次解密得到内存dll(VMProtect保护);
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-e4bd667d72b197edfaa26eda50e92ded683cbcab.png)
获取内存dll的导出函数CLRCreateInstance,此函数内部会为后门程序创建持久化任务、禁用UAC等功能;
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-6d18c4a00ccd0857c4c1a4ed1fbde143b478ff6d.png)
最后会加载vcxproj后缀文件解密,完成后得到Gh0st变种后门,上线前会请求ip地址表,查看是否更新;
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-d770efe1e1d91f5360cc4843493f4111d35c4348.png)
Gh0st包含很多功能模块,具体功能此处不详细介绍了,后门还包含一些固定的cmd命令,适合作为检测补充;
![图片](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-556a5a51890c144b88d2238cdfe5c46d205ef090.png)
**四、检测思路分享**
------------
1. **创建yara规则**
可以通过程序中的加解密函数代码创建yara规则,代码结构最好连续且固定;
2. **TTPs检测特征**
通过攻击者样本或实际应急过程中发现的TTPs作为检测特征;
3. **IOC检测**
在威胁情报痛苦金字塔的下三层中,域名相对更有效,也可根据情况选择hash检测;
> B736A809E7A0F1603C97D43BBC7D2EA8A9CD080B A672825339ADBB5EEEF8176D161266D4E4A4A625 E49938CB6C4CE0D73DB2B4A32018B1FF71A2D7F0 9CAA4EC93CE1CD40BD5975645A110A4325310A3B D7F41D457C8358AF840B06914D1BC969EF7939D0 48B2090FDCEA7D7C0EB1544EBCDAF911796A7F67
>
> omss.oss-cn-hangzhou.aliyuncs.com
>
> upitem.oss-cn-hangzhou.aliyuncs.com
>
> 1o2.oss-cn-beijing.aliyuncs.com
>
> 25o.oss-cn-beijing.aliyuncs.com
>
> 98o.oss-cn-beijing.aliyuncs.com
>
> vauwjw.net
>
> cinskw.net
>
> hucgiu.net
(针对样本的具体yara、TTPs规则等,后续将会同步到顺丰安全应急响应中心预推出的**成文实验室知识星球**,敬请期待!)
侵权请联系站方: [email protected]