44Z488888888/crystaldiskinfo-seo-poisoning-2026
GitHub: 44Z488888888/crystaldiskinfo-seo-poisoning-2026
一篇针对伪造 CrystalDiskInfo 网站的 SEO 投毒事件进行深度受害者侧取证拆解的技术分析报告。
Stars: 0 | Forks: 0
# 矿工程序从未运行。我知道它们是什么,因为攻击者告诉杀毒软件不要去查找它们。
*对一起搜索投毒事件的受害者侧拆解:从查询到激活 C2 用时 34 秒,潜伏期 5 天,以及从排除列表中恢复出的攻击者未执行的计计划。*
## 三十四秒
2026 年 7 月 11 日当地时间 23:32:57,我搜索了 CrystalDiskInfo —— 一款免费且广为人知的磁盘健康实用工具。排名靠前的结果并不是真正的项目。而是 `crystal-diskinfo[.]net`,一个实际上托管在 crystalmark.info 的网站的副本。
我点击了它。我运行了它提供的文件。我批准了一个 UAC 提示。
| 时间 | Δ | 事件 |
|---|---|---|
| 23:32:57 | — | 搜索查询 |
| 23:32:59 | +2s | 降落到伪造网站 |
| 23:33:01 | +2s | 开始下载 |
| 23:33:12 | +11s | 下载完成 —— 83,102,709 字节 |
| 23:33:19 | +7s | 安装程序和库写入磁盘 |
| **23:33:27** | **+8s** | **Defender 检测并隔离了恶意 DLL —— 严重级别 `Severe`** |
| 23:33:29 | +2s | Windows 服务已安装 —— `LocalSystem`,`auto start` |
| **23:33:31** | **+2s** | **建立首个 C2 连接** |
| 23:33:44 | +13s | 出现真实实用工具的桌面快捷方式 |
从搜索框到一个以 `LocalSystem` 身份运行、并与他人服务器保持开放连接的远程访问工具,只用了三十四秒。
我要找的程序正确安装并正常运行。没有崩溃。没有任何异常。这个细节并非偶然——接下来的五天完全依赖于这一点。
## 第一幕:杀毒软件是对的,但这无关紧要
再读一遍那个表格的第六、七和八行。
Defender 在恶意 DLL **触及磁盘的八秒后**捕获了它,并将其标记为 `Severe`。无论如何衡量,这都是一次很好的检测。然而两秒后,服务还是被安装了。又过了两秒,它已经开始与控制端进行通信。
原因就在压缩包的内容里。有两个文件至关重要,并且**它们都是未被修改的 Microsoft 二进制文件**:
| 磁盘上的文件名 | 它实际上是什么 |
|---|---|
| `Crystaldiskinfo-setup.exe` | Microsoft `DXSETUP.exe` —— `OriginalFilename=dxsetup.exe`,`FileVersion=4.9.0.0904` |
| `dsetup_orig.dll` | Microsoft `DSETUP.dll` —— Authenticode `Valid`,Microsoft Corporation |
其机制如下:
1. 获取 Microsoft 签名的 DirectX 安装二进制文件。重命名它,使其看起来像受害者想要的安装程序。
2. 该二进制文件在运行时会从其所在目录加载 `DSETUP.dll`。这是其正常且有文档记录的行为。
3. 将木马化的 `dsetup.dll` 放入该位置。
4. 将真实的文件保留为 `dsetup_orig.dll`,以便代理库可以将合法的调用转发给它——这就是为什么安装过程顺利完成且我没有看到任何错误的原因。
恶意代码是**由一个携带有效 Microsoft 签名的进程**加载到内存中的。它留下的是 ScreenConnect:一款来自 ConnectWise 的正版、商业授权的远程管理产品,拥有有效的代码签名证书,并作为服务 `VCRTHelper20152019` 安装到了 `C:\Program Files (x86)\VCRuntimePackage_x64\` 中。
对于终端防护产品来说,这句话中没有任何异常。目录名模仿了 Visual C++ 运行时包。服务名模仿了运行时助手。二进制文件由一家真实的公司签名。
**Defender 移除了恶意文件。它并没有阻止运行该文件的进程,也没有回滚该进程安装的服务。**这不是产品故障。这就是攻击的设计:恶意组件是一次性的保险丝,而持久化存在的部分是任何杀毒软件都没有理由触碰的已签名软件。保险丝被发现并不能改变什么。
值得明确指出的是,因为它颠覆了一个普遍的假设:**在这次调查结束时,机器上几乎每一个由攻击者放置的文件都是合法的、已签名的第三方产品。**安装程序是 Microsoft 的。远程访问工具是 ConnectWise 的。带宽客户端是它自己供应商的。攻击者实际编写的唯一文件就是在八秒后被 Defender 杀死的库——甚至该文件也是被保留在隔离区中,而不是被删除。
如果你的狩猎策略是“寻找未签名的可疑二进制文件”,这类入侵会让你无从下手。
## 第二幕:然后他们关闭了杀毒软件——并把他们的计划留了下来
五天后,7 月 17 日 06:14,操作者连接了该机器,并在七分钟的时间窗口内执行了三条命令。除其他事项外,他们还向 Windows Defender 添加了排除项。
这是在响应过程中恢复的完整列表:
**路径排除 (8)**
```
C:\ ← the entire drive
C:\WINDOWS\TEMP
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319
C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319
C:\ProgramData\Microsoft\Windows[\Caches]
%LOCALAPPDATA%\Microsoft\Windows\Caches
%APPDATA%\Microsoft\Windows\Caches
```
**进程排除 (13)**
| 分组 | 文件 |
|---|---|
| **加密货币矿工** | `gminer.exe`, `lolMiner.exe`, `SRBMiner-MULTI.exe`, `miner.exe` |
| **.NET 系统工具** | `InstallUtil.exe`, `AppLaunch.exe`, `RegAsm.exe`, `RegSvcs.exe`, `MSBuild.exe`, `aspnet_compiler.exe`, `AddInProcess.exe` |
| **第二阶段** | `RuntimeHost.exe` |
| **杀毒软件自身的进程** | `SecurityHealthHost.exe` |
**这台机器上从未安装过任何矿工。**响应行动发生在他们行动之前。然而,这个列表确切地告诉你接下来会发生什么:
**目标是 GPU,而不是带宽。**可见的有效载荷是 TraffMonetizer —— 一个转售受害者互联网连接的住宅代理客户端。它的价值很低,而且恰好是我注意到的那个层面。但是,除非你打算运行 GPU 挖矿程序,否则你不会为三个特定的 GPU 挖矿二进制文件添加排除项。这台机器有一块性能强劲的显卡。这就是它的用途。
**.NET 列表不是摆设。**`InstallUtil`、`MSBuild`、`RegAsm`、`AppLaunch` 和其余工具都是 Windows 附带的已签名 Microsoft 二进制文件,可以被驱使在它们自己的进程内执行任意代码。将这七个全部排除,说明第二阶段打算通过它们中的一个来启动。
**`RuntimeHost.exe` 是一个名字,而名字就是指标。**机器上不存在任何具有该名称的东西。但它本来是会存在的。
这是我在方法论上觉得最有趣的部分。标准的事件响应是通过攻击者留下的痕迹来恢复他们*做过*什么。而在这里,一次配置更改从一个从未发生过的事情中,恢复了攻击者*打算做什么*。**排除列表是攻击者用他们自己的话写下的一份意图声明,并交由一个忠实地将其记录下来的系统。**
### 这种致盲是可量化的
这些排除项也回答了时间线提出的一个问题:为什么 7 月 11 日的检测再也没有重复出现?Defender 在八秒内看到了保险丝。然后在接下来的五天里它什么也没看到,而一个远程访问工具却一直以 `LocalSystem` 身份运行。
因为 `C:\` 被排除了。整个驱动器。
这是可以量化的:
| 时间 | 事件 |
|---|---|
| 08:23:53 | 排除项被移除 |
| 09:09:38 | 全盘扫描**同时发现了三个威胁** |
**四十六分钟。**失明五天,在一小时内恢复了视力。这三个威胁分别是 `C:\WINDOWS\TEMP` 中的一个未识别的可执行文件(排除列表解释了它,并且它已经执行过 —— `DidThreatExecute: True`)、原始存档中的木马化库,以及带宽客户端。
还有一个相关的错误配置,我无法告诉你这是谁的责任:`PUAProtection` 被设置为 `2` —— 审计模式。检测、记录,但不阻止。这就是为什么带宽客户端被正确识别为 PUA 却从未被拦截。
Windows 11 的默认值是 `1`(阻止),因此 `2` 代表了一次更改。要么是我在某个时候做了更改然后忘记了,要么是操作者做的——审计模式正是你在安装被归类为 PUA 的有效载荷之前所希望处于的状态,而且它会自然而然地与排除项一起出现在同一个命令窗口中。Defender 将配置更改记录为 Event 5007,但在我想到要去查看时,该日志已经被滚动了。**未解决,并将一直保持未解决状态。**
在同一天上午的 09:11:26,它变成了 `1`。如果你从未在自己的机器上检查过这个设置,去检查一下。
## 第三幕:五天,以及它实际的价值
这台机器被攻陷了 **5 天 8 小时 15 分钟**。在这个时间窗口内发生的事情并不惊天动地,而且我认为,这比一个充满戏剧性的版本更具指导意义。
**C2 有着一种节奏。**日志中记录了至少十四次成功的重新连接,呈重复模式:用户尝试关机 → 随着机器唤醒和网络接口启动,出现两次 `unreachable network` 错误 → 在 2–4 秒内重新建立连接。
日志中出现了三种不同的 socket 错误,区分它们至关重要——我第一遍把它们混为一谈,结果误解了真相:
| 错误 | TCP 行为 | 含义 | 谁的一方 |
|---|---|---|---|
| `unreachable network` | 本地协议栈无路由 | 机器正在唤醒 | 受害者方(良性) |
| `forcibly closed by the remote host` | 会话期间远程发送 RST | 中继丢弃了会话 | 攻击者方 |
| `actively refused it` | 针对 SYN 的远程 RST | **主机已启动,但端口上没有程序监听** | 攻击者方 |
**客户端至少否决了十五次系统关机。**每一次否决都对应着我试图关机或休眠机器。整整五天,我看着自己不认识的应用程序拖延我的关机过程,却没有去调查。我不想粉饰这一点。
(关于克制的一点说明:人们很容易将其称为反关机防御。但没有足够的证据证明这一点。它可能仅仅是持有开放连接的会话客户端正常的终止行为。实际的操作影响是真实的;但其意图尚未确立。)
**攻击者的基础设施宕机了 45 小时。**在 13.07 19:35:14,中继在通信中途断开:
```
System.IO.EndOfStreamException: Unable to read beyond the end of the stream
at ScreenConnect.MessageSerializer.Deserialize
```
接下来是一个完整的重新连接退避曲线,以秒为单位:
```
6 → 9 → 12 → 19 → 29 → 40 → 53 → 77 → 148 → 220
→ 310 → 373 → 543 → 700 → 949 → 1295 → 1766 → 1800 (ceiling)
```
大约 1.5 倍的增长,上限为 1800 秒,然后是一天半固定为 30 分钟的重试间隔。在此期间,每次尝试都返回 `actively refused` —— TCP RST。主机已启动;中继服务没有。这是攻击者侧的宕机,不是防御上的胜利。如果我的防火墙进行了拦截,我会看到超时而不是重置。
在 15.07 16:24:53,C2 恢复了,并且在没有用户交互的情况下重新建立了连接。该服务是 `auto start`,所以它只是不断地尝试了 45 个小时。这就是持久化机制的全部价值,完美地展示了出来。
**这是一个免费的检测机会。**一台主机以固定的 30 分钟频率无限期地向同一个 IP:port 发送 SYN,并且能在重启和 C2 宕机中幸存下来,这是一个行为良好的软件很少产生的模式。它只需要流量日志,不需要其他任何东西。
### 战果
| | |
|---|---|
| 从这台机器实际售出的带宽 | **2.67 MB** |
| 攻击者的账户余额 | **$0.78** |
| 支付门槛 | $10.00 —— 从未达到 |
| 实际经济损失 | 零(未存储支付详情) |
| 经证实的资料泄露 | 未发现 |
在一台机器上拥有五天的 `LocalSystem` 访问权限,而可证明的收益却是七十八美分,而且这笔钱从未被支付。预期的收益——矿工——从未启动。
**但这是对结果的衡量,而不是对风险的衡量。**在整个五天里,这台机器上驻留着两个组件:
- 一个 LSA 身份验证包
- 一个 Windows 凭据提供程序
在合法使用中,这两者都是为了在登录时捕获明文凭据而设计的。在这个时间窗口内记录了至少十五次关机/唤醒循环,这意味着有许多次登录事件。没有证据表明凭据被捕获了。同样也没有证据表明它们没有被捕获,而这些组件的存在确立了这种能力。
**在一份报告中,这应该属于一项未解除的风险,而不是一个概率。**这是唯一一项转化为行动的条目,而行动就是:从一台不同的设备上,轮换一切。
## 响应:39 分钟,其中浪费了 6 分钟
7 月 17 日 07:09,我偶然注意到了带宽客户端的系统托盘界面。它不在已安装的应用程序列表中——安装在 `%APPDATA%` 下,并且从未写入卸载注册表项。
| 时间 | 事件 |
|---|---|
| 07:09 | 注意到托盘界面 —— **被检测** |
| 07:18:53 | 在删除**之前**提取了证据副本 |
| 07:20:18–25 | 移除了带宽客户端 |
| **07:37:07** | **发现了 ScreenConnect** |
| 07:41:52 | 尝试**从非特权 shell** 进行响应 |
| 07:41:52+ | `Stop-Service`、`Set-Service`、`Stop-Process` → 三者均返回 `Access is denied` |
| **07:48:18** | 打开了特权会话 |
| **07:48:21** | **服务已禁用 —— 已被遏制** |
| 08:23:53 | 移除了 Defender 排除项 |
| 09:09:38 | 全盘扫描 —— 三次检测 |
| 09:20:49 | 最终的持久化扫描 —— 干净 |
**从检测到遏制:39 分钟。**从特权 shell 到遏制用了三秒钟;而在打开特权 shell 之前花费了六分二十九秒。
即使是管理员,你也无法从非特权 shell 中去操作一个以 `LocalSystem` 身份运行的服务。这里的 `Access is denied` 不是防篡改保护,也不是攻击者的自我防御。它仅仅是缺少提权。请先打开特权 shell。
我做对并会重做的两件事:**在删除之前获取了所有内容的副本**——这份报告中的每一个后续发现都依赖于这一点——以及**从一台单独的设备上更改了密码**,而不是从被攻陷的机器上。
## 攻击者实际构建了什么
几乎什么都没有。
| 观察 | 指示了什么 |
|---|---|
| 通过 `_orig` 命名进行 DLL 代理 | 公开教程中的默认命名。现成的方法。 |
| 带宽客户端的看门狗脚本**损坏了** —— 一个 VBScript 引号转义错误 | 从未测试过。从未运行过一次。 |
| 第二阶段的持久化从未连接到任何东西 | 安装半途而废 |
| 证据集中的任何地方都没有原创的二进制文件 | 由第三方组件拼凑而成 |
| 下载子域名轮换:`start-download` → `download-start` | 词序颠倒。付出努力极小。 |
| 伪造网站的语言菜单声称支持七种语言 | 全部都是 404。它只有一页。 |
与之相对的:
| 观察 | 指示了什么 |
|---|---|
| 两个品牌相隔约 30 小时建立 | 计划好的启动 |
| 单页网站的泛域名证书 | 准备好进行扩展 |
| 每个网站单独的分析账户 | 刻意的隔离划分 |
| 访问者会话记录 | 转化率优化 |
| 一份全面、正确的排除列表 | 后渗透准备 |
**技术能力低,操作纪律中等。**这种能力来自签名的商业软件,而不是来自操作者。但活动管理——多个品牌、分析、基础设施轮换、账户分离——并不是外行干的。
## 我没有预料到的发现
这个伪造网站至少从 **2026 年 5 月 24 日**起就一直活跃——在我捕获我之前的 48 天。在我接触它之前,自动化的 URL 分析服务已经扫描了它 **18 次**。截取了屏幕截图。记录了网络流量。HTML 被存档了。
**没有一家服务将其归类为恶意。**
然后在调查期间我自己又扫描了 11 次,这就是为什么公开计数器今天高于 18 的原因。在我扫描之后,判定也没有改变。
而且它并没有隐藏。我阅读了客户端的下载脚本。没有 user-agent 检查,没有地理筛选,没有 referer 检查,没有时间窗口。什么都没有。该网站向**安全扫描器提供了与我相同的内容。**
```
const BASE_URL = 'https://download-start.duckdns[.]org';
const PROGRAM_NAME = 'crystaldiskinfo';
function randomString() {
return Math.random().toString(36).substring(2,15) +
Math.random().toString(36).substring(2,15);
}
// link: BASE_URL + '/' + PROGRAM_NAME + '/' + randomString()
anchor.setAttribute('rel', 'noopener noreferrer');
```
*(上面的代码片段中进行了无害化处理;除此之外完全一致。)*
从这八行代码中得出的两个附带发现。下载令牌是**在客户端随机生成**的——它们不是针对特定活动或受害者的,包含它们的 URL 没有任何指标价值。只有 `download-start.duckdns[.]org//` 前缀有价值。而我浏览器下载记录中空的 referer 是由 `rel="noopener noreferrer"` 解释的——这是我曾推测过但现在可以确认的一种机制。
所以:一个恶意软件分发网站,存活了两个月,没有任何规避手段,被那些存在的全部目的就是将事物分类的服务扫描了十八次,被截图、被存档——却自始至终未被归类。
**失败不在于操作者的技能。而在于检测生态系统决策机制的失败。**自动化收集基础设施很丰富。自动化的分类很薄弱。系统进行了查看、记录,却没有做出决定。
这是本报告中最具普适性的一点,我想在表述的力度上保持谨慎,因为我只是一个人,面对的是一次事件和十八个独立的数据点。但这些数据点是公开的,任何人都可以检查:[urlscan.io/domain/crystal-diskinfo.net](https://urlscan.io/domain/crystal-diskinfo.net)。截至 2026 年 8 月 2 日,计数器显示为 29 —— 其中十一个是我的。
2026 年 7 月 27 日,我向六个渠道报告了该基础设施:一个拦截列表源、两个浏览器安全服务、两家其产品正被滥用的分析提供商,以及——唯一有权力将其关闭的——托管服务提供商。该提供商声明的响应窗口将于 8 月 6 日截止。**无论如何我都会公布结果**,因为“提交了全部证据却毫无动静”与“被关闭”一样,都是一种发现。
## 方法,以及我无法看到的内容
底层报告中的每一条断言都带有三个标签之一:**已证实**(直接由工件支持)、**推断**(推导得出,并在书面上排除了其他选择),或**假设**(符合模式,但无法验证)。在总共 78 条时间线条目中:68 条已证实,8 条推断,2 条假设。
每一个未映射的区域都标有它为空的*原因*,因为它们并不是一回事:
| 标签 | 含义 | 可操作吗? |
|---|---|---|
| `(didn't happen)` | 明确没有发生 | 否 —— 这是一个发现 |
| `(no sensor)` | 从不产生这种记录 | 否 —— 工具的本质决定 |
| `(sensor off)` | 本可以被记录,但没有 | **是 —— 可修复** |
| `(scanned — clean)` | 传感器工作正常,结果为空 | 否 —— 一个真阴性 |
| `(log rolled)` | 被写入,然后被覆盖 | **是 —— 增大容量** |
永久无法解决的:
| 未知项 | 为什么无法解决 |
|---|---|
| 三条命令的内容 | 日志仅记录了字节长度(8,495 / 5,010 / 5,890 —— 对于单行命令来说太长了;这些是脚本块) |
| 操作者查看或复制了哪些文件 | ScreenConnect 根本不记录文件访问 |
| 是否有数据离开了网络 | 没有抓包 |
| 凭据是否被捕获 | 没有内存转储 |
| 攻击者的身份 | 租用的、一次性的基础设施;每一个二进制文件都是别人的签名产品 |
**没有记录并不代表没有活动。**ScreenConnect 仅记录命令执行。屏幕查看和文件系统浏览不会留下任何痕迹。
### 调查消耗了它自己的证据
这一点让我非常惊讶,以至于我进行了测量。经典的 PowerShell 事件日志在调查*期间*达到了其大小上限并发生了滚动,将事件期间的记录一同带走了:
| 时期 | 记录数/分钟 | 保留时间 |
|---|---|---|
| 正常使用 | ~2.7 | ~21 小时 |
| **主动调查** | **~19** | **~3 小时** |
**保留时间不是一个常数。它在你开始调查的确切那一刻崩溃了。**日志在你最需要它的时候抹除了自己。结果是,一个 7 月 15 日的行为检测变得永久无法解释——而这种损失是我调查的副作用,而不是攻击者造成的。
我现在遵循的规则:**在你进行任何操作之前,先导出相关的事件日志。** `wevtutil epl`。
### 另一个关于纪律的注意事项
在这次调查中,产生了十四条错误的断言并被纠正。几乎所有的错误都有着相同的根源:信任文件、章节标题或工具的**名称**,而不验证它的**内容**。
最糟糕的是一个*移除操作*:一个映射正确的 ATT&CK 技术(T1562.001,Impair Defenses)被撤回了,因为“我查看的文件中没有证据。”证据存在于另一个文件中,而该文件名就列在目录索引中。该技术已经回来了,并被标记为“已证实”。它就是第二幕中的排除列表——这份报告的核心发现在短时间内因为一个文件名而被删除了。
由此产生了两条规则:
第十四条错误是在我以为报告已经完成时出现的,这是同样的教训换了一件外衣。我曾写道 PowerShell 日志填满“是因为调查本身”。这是真的,但机制并非如此。真正的原因是我在响应期间设置的一个日志记录脚本启用了**系统范围的 PowerShell 转录**,并写入了证据文件夹。我打开的每个会话都会生成一个转录文件和事件日志条目。我是在证据文件夹拒绝被删除时才发现这一点的——我自己的遥测技术正在锁定我试图存档的证据。
一个看似合理的解释并不一定是正确的解释。
而这起事件本身就是同样的错误被放大了:攻陷我的文件名为 `Crystaldiskinfo-setup.exe`。但它的内容显示为 `dxsetup.exe`。整个攻击就存在于这个差距之中。
## 检测指南
**对服务安装发出警报,而不是基于哈希。**针对你未部署且指向远程管理二进制文件的服务,Event 7045 比任何文件哈希都是更有价值的信号。在这次事件中,只有一个由攻击者编写的文件,并且它在八秒内就被隔离了。在这里,基于哈希的检测在结构上显得太迟了。
**对杀毒软件排除项更改发出警报。**针对 `C:\` 的排除项不是任何人会做出的配置选择。Defender 操作事件 5007 会记录这些。在你控制的机器上,这是一个单行检查:
```
Get-MpPreference | Select-Object Exclusion*
```
**寻找 30 分钟的信标。**以固定间隔向单个 IP:port 持续无限期地发送 SYN。如果你有流量日志,这不需要任何成本。
**检查 `PUAProtection`。**审计模式只检测不拦截。
**开启防火墙日志。**我的是关闭的。如果当时是开启的,所有十四次 C2 连接以及整个长达 45 小时的重新连接序列都会被记录下来。其成本为零:
```
netsh advfirewall set allprofiles logging droppedconnections enable
netsh advfirewall set allprofiles logging maxfilesize 32767
```
**至于其他所有人:**我搜索了一个知名的免费实用工具,点击了第一个结果,并得到了我想要的程序。这就是整个攻击过程。正确的网站就在往下一点的搜索结果里。请从供应商已知的地址或包管理器(如 `winget`、Microsoft Store)获取软件。仅仅是这一个习惯就可以防止所有这一切的发生。
## 指标
已进行无害化处理。不要解析、连接或扫描此基础设施——主动接触会将你的 IP 写入操作者的日志,并告诉他们有人在调查。
**网络**
| 类型 | 值 |
|---|---|
| 伪造网站 #1 | `crystal-diskinfo[.]net` (CrystalDiskInfo) |
| 伪造网站 #2 | `tree-size[.]net` (TreeSize Pro) |
| 下载主机 | `download-start.duckdns[.]org` (以前是 `start-download.duckdns[.]org`) |
| 托管 | `192.142.52[.]64` —— AS214036 |
| C2 | `micro.vpn-expres[.]top:8041` / `136.175.82[.]97:8041` |
**操作者账户** —— *未打码;这些属于操作者,而不是受害者,并且是唯一可能将其他受害者与同一个攻击者联系起来的指标*
| 类型 | 值 |
|---|---|
| Google Analytics (网站 #1) | `G-554L8LP4GJ` |
| Microsoft Clarity (网站 #1) | `wvyeiewblp` |
| Microsoft Clarity (网站 #2) | `wwlnd8ipou` |
| Yandex verification (网站 #1) | `5e0ca3322e096b81` |
**主机**
| 类型 | 值 |
|---|---|
| 服务名称 | `VCRTHelper20152019` |
| 安装路径 | `C:\Program Files (x86)\VCRuntimePackage_x64\` |
| ScreenConnect 客户端版本 | `25.3.2.9271` |
| 会话 GUID | `df79625f-2429-4407-866c-bd34f79cc2f9` |
| 活动标签 | `&c=crystaldiskinfo` |
**文件哈希 (SHA-256)** —— *请阅读说明;本次事件中的大多数二进制文件都是合法的产品,因此在此故意未列出*
| 文件 | SHA-256 | 说明 |
|---|---|---|
| `Crystaldiskinfo-setup.exe` | `8F47D7121EF6532AD9AD9901E44E237F5C30448B752028C58A9D19521414E40D` | **这是 Microsoft 未修改的 `DXSETUP.exe`。**不要将其加入黑名单——这会破坏 DirectX 的安装。将其列出是因为*文件名不匹配*是一个指标:一个 `OriginalFilename` 为 `dxsetup.exe` 的文件却被命名为其他名字,并且在其旁边有一个匹配的 `*_orig.dll`。 |
| `tm-watchdog.vbs` | `6646894EDF8F0164AE0CF2B14654F4B9023CCDBDF16B8A2E451E1B583309225A` | 507 字节。无功能——VBScript 的引号转义错误导致路径拼接从未发生。由攻击者编写,从未测试,从未运行。 |
| `dsetup.dll` (木马化) | **未记录** | 攻击者实际编写的唯一文件。在被写入磁盘八秒后被 Defender 隔离;其哈希从未被捕获。它被保留在 Defender 的隔离存储中 —— 83,886,690 字节,正好是 **80 MiB** 加上一个 610 字节的隔离头部。填充在库中,而不是存档中。 |
ConnectWise、Microsoft 和 Bytemarket 二进制文件的哈希被故意省略了。它们是合法的签名产品;将它们作为指标发布会导致对真实用户的伤害性黑名单拦截。如果你正在关联一起事件并需要它们,它们包含在供应商的发行版中。
**配置指标** —— 第二幕中的排除列表本身就是一个指标集。`RuntimeHost.exe` 是其中价值最高的名称。
**行为**
- 固定约 30 分钟的重连间隔指向单一的 IP:port,无限期持续
- 退避曲线 `6 → 9 → 12 → … → 1800s`,约 1.5 倍增长,上限 1800s
**请勿作为指标使用:**包含随机令牌的下载 URL —— 它们是在客户端生成的,没有任何关联价值。
## 与已发布报告的关系
2026 年 5 月,Microsoft 发布了关于一次搜索投毒活动的研究,该活动滥用相同的 RMM 产品来部署加密矿工,目标包括 CrystalDiskInfo 在内的硬件实用工具。
与本次事件的重合之处:被冒充的品牌、`start-download` 子域名前缀、免费动态 DNS、Visual C++ 伪装主题、C2 端口 8041、服务命令行结构——以及,从排除列表来看,**矿工二进制文件**、**第二阶段名称**,以及**.NET 工具滥用**。最后三项表明使用了相同的工具集,而不仅仅是相同的技术。
**攻击者身份尚未确定,本报告也不对此做出声明。**Microsoft 的报告发布于 2026 年 5 月 26 日;这次感染发生在 2026 年 7 月 11 日——46 天之后。整个作案手法,包括工具名称,在我被攻击之前的六周就已经公开了。已发布的指标已经被曝光,因此基础设施的差异也不能作为区分的依据。而且该报告中描述的规避机制——反虚拟机、分析工具检测、TLS 绑定、加密的 C2 地址——在这里**完全没有出现**,这表明其操作能力低于被记录的那起事件。
准确的陈述是:*此事件使用了与 2026 年 5 月记录的一项活动相同的作案手法和工具集;未发现共享指标,且攻击者身份未确立。*一个阅读了公开报告并加以复制的人会留下相同的痕迹。
*这是我自己的机器。完整的事件报告——证据清单、带有注释的时间线、ATT&CK 映射以及完整的指标列表——可应要求提供。涵盖活动基础设施和披露结果的后续文章将于 2026 年 8 月 6 日之后发布。*
标签:DAST, DNS 反向解析, 威胁情报, 开发者工具, 恶意软件分析, 数字取证, 自动化脚本