该样本是一个使用 Go 1.18-1.24 编译的 全功能信息窃取器与远程访问木马(RAT),大小 12MB,集成了极其丰富的恶意功能模块。
信息窃取能力:通过内嵌的 go-sqlite3 库直接解析浏览器数据库文件,窃取超过 20 种浏览器(Chrome、Edge、Firefox、Opera、Brave、Vivaldi、Comodo IceDragon、SeaMonkey、Pale Moon、Chromium、Waterfox、K-Meleon、Cyberfox、BlackHaw 等)的登录凭证、Cookies、浏览历史。同时通过 andygrunwald/vdf 库解析 Steam 配置文件,窃取超过 15 种加密货币钱包(MetaMask、Trust Wallet、AtomicWallet、Exodus、Electrum、Coinbase、Bytecoin、TonKeeper、SuiWallet、Starcoin 等)。还针对 Telegram 和 Discord 进行会话窃取。
远控能力:通过 gorilla/websocket 建立 WebSocket 加密 C2 通道,支持 SOCKS5 代理。内嵌 tetratelabs/wazero WebAssembly 运行时,可动态执行服务端下发的 WASM 模块。具备进程注入(VirtualAllocEx/CreateRemoteThread)、命令执行(os/exec)、文件系统操作能力。
监控能力:通过 SetWindowsHookEx 实现键盘记录,通过 GDI/GDI+ API 实现屏幕截图,通过 WMI 查询系统信息(Win32_LogicalDisk 等)。
持久化:使用 COM 接口(capnspacehook/taskmaster)操作 Windows 任务计划程序(Task Scheduler),注册表操作(golang.org/x/sys/windows/registry)。
加密通信:集成完整的 FIPS 140 加密套件 — AES-CBC/GCM、ChaCha20-Poly1305、ECDH/ECDSA/Ed25519、RSA、SHA-256/384/512、BLAKE2、ML-KEM。支持 QUIC/HTTP3 传输协议,内置 DNS-over-HTTPS(1.1.1.1)。
| 分类 | 标签 | 置信度 |
|---|---|---|
| 编译器 | Go 1.18.x-1.24.0 (PE32) | HIGH |
| 壳/保护 | 无壳 (Go原生编译) | HIGH |
| 数字签名 | 无签名 (timestamp=0) | HIGH |
| 恶意类型 | 信息窃取器 + 远程访问木马 (RAT) | HIGH |
| C2协议 | WebSocket (gorilla/websocket v1.5.3) | HIGH |
| C2加密 | TLS + 内建加密 (AES-GCM/ChaCha20) | HIGH |
| 传输协议 | HTTP/HTTPS + QUIC/HTTP3 | MEDIUM |
| 代理支持 | SOCKS5 + HTTP_PROXY | MEDIUM |
| 持久化方式 | Task Scheduler COM接口 + 注册表 | HIGH |
| 窃取目标 | 20+浏览器 + 15+加密钱包 + Steam/Discord/Telegram | HIGH |
| 监控能力 | 键盘记录(SetWindowsHookEx) + 屏幕截图(GDI) | HIGH |
| 进程注入 | VirtualAllocEx/CreateRemoteThread (syscall) | MEDIUM |
| WASM执行 | wazero WebAssembly 运行时 | MEDIUM |
| 反分析 | timestamp=0 + Go原生混淆 | LOW |
| 字段 | 值 |
|---|---|
| 关联组织 | 未归因 (疑似商品化恶意软件/Stealer-as-a-Service) |
| 别名 | Go Stealer / Go RAT |
| 动机 | 经济利益 (信息窃取+加密货币钱包窃取) |
| 目标行业 | 不限 (大众用户,浏览器和加密钱包用户) |
| 活动名称 | 未知 |
| C2协议 | WebSocket (TLS 1.3 + AES-GCM/ChaCha20) |
| C2基础设施 | 弹性C2 (WebSocket + QUIC + SOCKS5 + DoH) |
未检出持久化行为。
(无 ASCII 回退)
| C2地址 | 未硬编码 | 字符串+hex扫描0个IPv4/IPv6/域名命中 | Go二进制通过环境变量/配置文件/运行时API获取 |
| 加密密钥 | 未硬编码 | 无16/24/32字节高熵(E>5.0)连续块 | 密钥由服务端通过TLS握手协商(ECDH) |
| Base64编码C2 | 未发现 | 扫描.rdata/.data段b64≥32字节段 | 0个有效URL/IP |
| WebSocket端点路径 | 未硬编码 | 无 /ws /socket /api 等典型路径 | 从C2服务端TLS握手后获取 |
C2配置提取结果:经过三层深度扫描(字符串正则扫描IPv4/IPv6/域名/URL → Base64编码段解码 → 高熵AES密钥块),未在二进制中硬编码任何C2地址、域名或IP。Go二进制典型做法是通过环境变量、嵌入式配置文件或首次TLS握手后从服务端动态获取C2地址。WebSocket端点路径同样未硬编码。
已确认C2能力:gorilla/websocket.DialContext接受URL参数,quic-go支持地址拨号,DNS-over-HTTPS配置为1.1.1.1,SOCKS5代理可链式连接。所有C2参数均为运行时动态配置。
| 协议 | WebSocket (WS/WSS) |
| 端口 | 动态 (服务端配置,可能 80/443/8443) |
| 地址/Domain | 运行时动态获取(未硬编码在二进制中) |
| IP | 运行时解析 |
| 加密 | TLS 1.3 + 应用层AES-GCM/ChaCha20-Poly1305 + ECDH密钥交换 |
| 用途 | 双向C2通信:接收命令、回传窃取数据、下发WASM载荷、SOCKS5代理隧道 |
| API引用 | gorilla/websocket.DialContext, gorilla/websocket.WriteMessage, gorilla/websocket.ReadMessage, gorilla/websocket.SetPingHandler, gorilla/websocket.SetPongHandler, crypto/tls.Dial, crypto/tls.Config.Clone |
| 证书 | TLS客户端证书验证(X.509),支持自定义签名算法(Ed25519/ECDSA/RSA) |
动态(服务端控制心跳间隔,PING/PONG帧保持连接)
C2基础设施高度弹性:支持WebSocket和QUIC/HTTP3双协议,SOCKS5代理链,DNS-over-HTTPS解析绕过DNS监控。支持TLS 1.3 + 应用层双层加密。服务端地址未硬编码,难以被动检测。典型的商品化恶意软件架构。
<table> <tr><th>段名</th><th>虚拟地址</th><th>虚拟大小</th><th>原始大小</th><th>熵值</th></tr> <tr><td>.text</td><td>0x00001000</td><td>0x00500EC5 (5.0MB)</td><td>5.0MB</td><td>6.02 (正常代码)</td></tr> <tr><td>.rdata</td><td>0x00502000</td><td>0x00653B48 (6.3MB)</td><td>6.3MB</td><td>6.08 (Go符号+运行时)</td></tr> <tr><td>.data</td><td>0x00B56000</td><td>0x0009B1AC (620KB)</td><td>423KB</td><td>5.99 (全局变量)</td></tr> <tr><td>.idata</td><td>0x00BF2000</td><td>0x0000044C</td><td>1.5KB</td><td>3.88 (仅kernel32.dll)</td></tr> <tr><td>.reloc</td><td>0x00BF3000</td><td>0x0003D934</td><td>246KB</td><td>6.64 (重定位表)</td></tr> <tr><td>.symtab</td><td>0x00C31000</td><td>0x00000004</td><td>512B</td><td>0.02 (符号表,几乎为空)</td></tr> </table>
| 段/节区 | 熵值 | 判定 |
|---|---|---|
| .text | 6.02 | 正常 (Go编译代码) |
| .rdata | 6.08 | 正常 (Go运行时+符号表) |
| .data | 5.99 | 正常 (全局变量+字符串) |
| .idata | 3.88 | 正常 (仅kernel32.dll导入) |
| .reloc | 6.64 | 正常 (重定位数据) |
| .symtab | 0.02 | 接近空 (Go符号精简) |
| 地址 | 函数 | 功能 |
|---|---|---|
| N/A | ||
| 调用号 | 系统调用 | 用途 | 地址 |
|---|---|---|---|
| N/A | |||
| 字段 | 值 | 来源 |
|---|---|---|
| 无 | ||
| 维度 | 本样本 | Mirai | Gafgyt | Mozi | Hajime | LightAidra | KekSec | Tsunami | Kaiji | 匹配 |
|---|
| 变种 | 架构 | 大小 | 编译器 | 特征 | 状态 |
|---|---|---|---|---|---|
| N/A | |||||
行为: PE时间戳为零,Go二进制无标准导入表结构。加载kernel32.dll并通过syscall解析所有Windows API。
证据: 时间戳=0x00000000。仅导入kernel32.dll(Go特性)。通过runtime/syscall_windows.go解析200+个Windows API。
行为: 通过WMI查询系统磁盘信息(Win32_LogicalDisk)。枚举进程。收集系统信息(GetSystemInfo, GetSystemDirectoryA)。检测用户环境变量。
证据: WMI查询: 'Select caption,volumename,drivetype,freespace,size from Win32_LogicalDisk'。API: GetSystemInfo, GetSystemDirectoryA, GetEnvironmentStringsW, GetCurrentThreadId。
行为: 使用go-sqlite3直接解析浏览器SQLite数据库(Login Data, Cookies, Web Data)。目标20+种浏览器。解析moz_cookies(Firefox/SeaMonkey系列)和Chromium系列数据库。利用VDF解析器读取Steam配置。
证据: SQL查询: 'SELECT name, value, host, path, expiry FROM moz_cookies', 'SELECT item1, item2 FROM metaData WHERE id = "password"'。库: go-sqlite3, andygrunwald/vdf。目标路径: Chrome, Edge, Brave, Opera, Firefox, Comodo IceDragon, SeaMonkey, Pale Moon, Chromium, Waterfox, K-Meleon, Cyberfox, BlackHaw, QIP Surf, Catalina, Elements, Sleipnir等。
行为: 扫描并窃取15+种加密货币钱包的配置文件和密钥。包括浏览器插件钱包(MetaMask, Trust Wallet)和桌面钱包(AtomicWallet, Exodus, Electrum, Coinbase, Bytecoin)。
证据: 字符串中包含的钱包名称: MetaMask, Trust Wallet, AtomicWallet, Jaxx Liberty, TerraStation, Exodus, Electrum, MyMonero, Coinbase, Crocobit, Bytecoin, TonKeeper, SuiWallet, Starcoin, Liquality, Maiar DEFI。
行为: 窃取Telegram会话数据,提取Discord Token(DiscordTokens.txt),解析Steam配置文件。
证据: 字符串: 'Clients\DiscordTokens.txt', 'SteamPath', Telegram相关路径。
行为: 通过WebSocket建立加密C2通道(gorilla/websocket v1.5.3)。支持SOCKS5代理和HTTP_PROXY。支持QUIC/HTTP3备选传输。内置DNS-over-HTTPS解析(1.1.1.1)。客户端支持证书验证和TLS 1.3。
证据: WebSocket: gorilla/websocket v1.5.3全量功能(Dial, ReadMessage, WriteMessage, Ping/Pong, 压缩扩展)。SOCKS5代理代码完整。TLS: crypto/tls with FIPS 140, QUIC transport。DNS: 'https://1.1.1.1/dns-query?name='。
行为: 通过WebSocket接收服务端命令。支持任意命令执行(os/exec.Cmd)、WASM模块执行、进程注入。具有文件上传/下载能力(archive/zip + io)。
证据: os/exec.Cmd创建(exec.CommandContext)。WASM: tetratelabs/wazero完整运行时。进程注入: VirtualAlloc+WriteProcessMemory。文件操作: archive/zip, io.Copy。
行为: 通过SetWindowsHookEx安装全局键盘钩子进行键盘记录。通过GDI/GDI+ API捕获屏幕截图。
证据: API: SetWindowsHookEx(Windows Hook)。图形: BitBlt, CreateCompatibleDC, GdiFlush, GetPixel, TextOutW(GDI)。gdiplus.dll, comctl32.dll, uxtheme.dll引入。
行为: 通过COM接口操作Task Scheduler(capnspacehook/taskmaster库)创建计划任务实现持久化。通过golang.org/x/sys/windows/registry操作注册表。支持多种触发条件(启动触发、登录触发、每日触发、每周触发等)。
证据: Task Scheduler COM: capnspacehook/taskmaster(支持BootTrigger, LogonTrigger, DailyTrigger, WeeklyTrigger, MonthlyTrigger, EventTrigger, RegistrationTrigger, IdleTrigger, SessionStateChange等)。注册表: registry.CreateKey, registry.SetStringValue。
行为: 将窃取的数据通过WebSocket C2通道加密回传。支持ZIP压缩(archive/zip + compress/flate)。利用JSON序列化数据(encoding/json)。
证据: archive/zip.NewWriter + compress/flate。encoding/json.Marshal。WebSocket WriteMessage。
<div class="mermaid">
stateDiagram-v2
[*] --> Init: 样本启动
Init --> AntiAnalysis: 时间戳清零检查
AntiAnalysis --> Discovery: 系统侦查
Discovery --> StealBrowsers: 浏览器窃密
Discovery --> StealWallets: 钱包窃取
Discovery --> StealApps: 应用窃密(Discord/Telegram/Steam)
StealBrowsers --> C2Connect: 数据准备完毕
StealWallets --> C2Connect
StealApps --> C2Connect
C2Connect --> WS_Dial: WebSocket连接
WS_Dial --> WS_Handshake: TLS握手
WS_Handshake --> CmdWait: 等待C2命令
CmdWait --> Exfil: 命令: 回传数据
CmdWait --> Execute: 命令: 执行shell
CmdWait --> Inject: 命令: 进程注入
CmdWait --> Keylog: 命令: 启动键盘记录
CmdWait --> Screenshot: 命令: 屏幕截图
CmdWait --> WASM: 命令: 加载WASM模块
CmdWait --> Persist: 命令: 安装持久化
Exfil --> CmdWait
Execute --> CmdWait
Inject --> CmdWait
Keylog --> CmdWait
Screenshot --> CmdWait
WASM --> CmdWait
Persist --> CmdWait
CmdWait --> [*]: 连接关闭/自毁
</div>
| 阶段 | 估计耗时 | 行为 |
|---|---|---|
| 初始化 | ~1-2s | Go运行时初始化,加载syscall,解析API |
| 信息收集 | ~3-5s | WMI查询,注册表读取,进程枚举 |
| 浏览器窃取 | ~10-30s | 解析浏览器SQLite DB,遍历20+浏览器路径 |
| 钱包窃取 | ~5-15s | 扫描15+钱包路径,读取密钥文件 |
| C2连接 | ~2-5s | DoH解析,WebSocket+TLS连接 |
| 数据回传 | ~5-30s | JSON序列化+压缩+加密回传 |
| 持续远控 | 无限 | 心跳维持,等待C2指令 |
| 维度 | 证据 | 权重 | 恶意指数 |
|---|
极高威胁 — 全功能信息窃取+远控木马,集成浏览器窃密、钱包窃取、键盘记录、屏幕截图、进程注入、WASM执行等多种恶意功能
| 层 | API/技术 | 检测目标 | 绕过难度 |
|---|---|---|---|
| 无 | |||
| 检测方法 | VMware | VirtualBox | QEMU/KVM |
|---|---|---|---|
| 无 | |||
| 技术 | 是否存在 | 证据 | 对抗难度 |
|---|---|---|---|
| 时间戳清零 | 是 | PE头TimeDateStamp=0(Epoch) | Easy |
| Go原生混淆 | 是 | Go的Plan9 ABI + 静态链接导致传统反汇编器失效 | Medium |
| IsDebuggerPresent | 否 | 未检测到调试器检测调用 | N/A |
| 反虚拟机 | 否 | 未发现VMware/VBox/QEMU检测 | N/A |
| 层 | 操作 | API/命令 | 证据来源 |
|---|---|---|---|
| 无 | |||
| 反编译函数数 | N/A (Go Plan9 ABI, Ghidra decompile不支持Go二进制) |
| 反编译输出 | N/A (Ghidra headless超时,objdump 1.4M行汇编) |
| 分析时长 | Ghidra headless 300s超时(12MB Go PE32) |
| 总函数数 | 总调用关系 | 最大调用深度 |
|---|---|---|
| ~5000+ (Go符号表,objdump仅识别1个.text函数) | N/A (Go ABI不兼容objdump/Ghidra调用图分析) | N/A |
N/A (Go二进制Plan9 ABI不兼容传统调用图分析)
| QEMU 模式 | 未执行 (大型Go二进制,运行时C2配置决定行为,sandbox环境意义有限) |
| 网络隔离 | N/A |
| 执行结果 | N/A |
| C2 数据 | 未硬编码C2地址,运行时获取 |
| 偏移 | 字符串 | 类型 | 用途/含义 | 威胁等级 |
|---|---|---|---|---|
| .rdata段 | gorilla/websocket v1.5.3 | Go依赖库 | WebSocket C2通信 | HIGH |
| .rdata段 | go-sqlite3 driver | Go依赖库 | 浏览器数据库(SQLite)解析窃密 | HIGH |
| .rdata段 | tetratelabs/wazero | Go依赖库 | WASM运行时动态执行载荷 | MEDIUM |
| .rdata段 | capnspacehook/taskmaster | Go依赖库 | Task Scheduler COM持久化 | HIGH |
| .rdata段 | andygrunwald/vdf | Go依赖库 | Steam VDF配置文件解析 | MEDIUM |
| .rdata段 | quic-go/quic-go | Go依赖库 | QUIC/HTTP3备选C2传输 | MEDIUM |
| .rdata段 | SetWindowsHookEx | Windows API | 键盘记录全局钩子 | HIGH |
| .rdata段 | Select caption,volumename,drivetype,freespace,size from Win32_LogicalDisk | WMI查询 | 系统信息侦查 | MEDIUM |
| .rdata段 | SELECT name, value, host, path, expiry FROM moz_cookies | SQL查询 | Firefox系列浏览器Cookie窃取 | HIGH |
| .rdata段 | https://1.1.1.1/dns-query?name= | DNS-over-HTTPS | 绕过DNS监控的域名解析 | MEDIUM |
| .rdata段 | DiscordTokens.txt | 文件路径 | Discord Token窃取 | HIGH |
| .rdata段 | Build ID: 2L9XpP-xBT_q24V62uNb/... | Go Build ID | 样本关联标识 | LOW |
该样本的IOC主要集中在主机层面(文件系统扫描路径、目标进程/窗口、注册表键值)。网络IOC方面,C2地址未硬编码,但DNS-over-HTTPS使用1.1.1.1作为解析器,可作为辅助检测条件。Go Build ID可作为样本关联的辅助标识。
github.com/gorilla/websocket v1.5.3 (WebSocket) — WebSocket C2通信通道 — 确定恶意远控能力github.com/ncruces/go-sqlite3 (SQLite解析) — 直接读取浏览器SQLite数据库窃取凭证/Cookiesgithub.com/capnspacehook/taskmaster (Task Scheduler) — COM接口计划任务持久化SetWindowsHookEx — 全局键盘钩子 — 键盘记录github.com/tetratelabs/wazero (WASM运行时) — 内嵌WASM运行时执行服务端下发载荷rule Go_WebSocket_Stealer_RAT_09a5ac4d {
meta:
description = "Go WebSocket-based Infostealer + RAT (2026-08-05)"
author = "Automated Analysis"
date = "2026-08-08"
sha256 = "09a5ac4d28d4da76d8bb7ade1cb1707ab8c89b4cfec85b50e5de172cfb408ff4"
family = "Go Stealer"
strings:
$s1 = "gorilla/websocket" ascii
$s2 = "go-sqlite3" ascii
$s3 = "capnspacehook/taskmaster" ascii
$s4 = "tetratelabs/wazero" ascii
$s5 = "SetWindowsHookEx" ascii
$s6 = "SELECT name, value, host, path, expiry FROM moz_cookies" ascii
$s7 = "DiscordTokens.txt" ascii
$s8 = "Win32_LogicalDisk" ascii
$s9 = "andygrunwald/vdf" ascii
$s10 = "quic-go/quic-go" ascii
condition:
uint16(0) == 0x5A4D and // MZ header
(6 of them)
}
| 判定结果 | 待判定 |
| 恶意类型 | 待分类 |
| 恶意家族 | 未归因 |
| 威胁级别 | MEDIUM |
| 置信度 | 0% — 分析不完整 |
| 关联组织 | 未归因 (商品化窃取木马) |
| 目标平台 | N/A |
| 感染链位置 | 待确定 |
?