你的电脑「没问题」,可能只是因为没人记录过"

admin 2026-10-22 12:52:09 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

你的电脑「没问题」,可能只是因为没人记录过

网安之家-CyberHomestead

2026年10月20日 08:00
湖北

去阅读

你的电脑「没问题」,可能只是因为没人记录过

327 星的 Zero Breach:一个只查痕迹、并且老实承认「查不到什么」的扫描器。


一、先把最不讨喜的话放在开头

一个干净的结果,不是健康证明。

这句话不是免责声明,是这款工具的设计前提。

Candiru 这个级别的间谍软件,就是专门用来对付这类检查的:它留下的绝大部分证据会在几周内过期;而 Windows 默认不记录 DNS 历史——除非有人专门把它打开过。

所以 Zero Breach 做的事很窄:把你机器上自己的残留记录翻一遍,对照已公开的指标,告诉你查到了什么、证据有多强,以及同样重要的一件事——哪些地方它根本查不了。

它缩小不确定性。它不消除不确定性。

如果你有真实理由相信自己被针对,正确的一步是寻求专家帮助:Access Now 的数字安全求助热线,或者国际特赦组织的安全实验室。不是一个自助脚本。


二、背景:从广告位里送进来的间谍软件

2026 年 10 月,The Citizen Lab 记录了一件事:广告技术公司 Discover-Tech 利用其 Controlium 平台,在广告渲染的那一刻完成设备指纹识别与感染,无需任何点击即可投递 Candiru 间谍软件。2024 至 2025 年间,半岛电视台至少有 45 台设备被针对。

本项目的指标集来自这份报告,以及 Recorded Future 对同一套基础设施的独立追踪。

投递路径滥用的是实时广告竞价。该做的事依然是:保持操作系统与浏览器更新,用广告过滤降低暴露面,在合适的时候排查残留痕迹。

这个工具检查的就是那些痕迹。它不替代更新,也不能证明一台设备是安全的。

信源

•The Citizen Lab, Exposing AdFection(2026-10-15)•Recorded Future / Insikt Group, Tracking Candiru's DevilsTongue Spyware(CTA-2025-0805)


三、它到底查什么

区域 读取内容
浏览器 历史记录、Cookie(仅主机名与时间戳)、favicon、HTTP 缓存、Local/Session Storage、Service Worker 缓存,以及 HSTS/连接记录——覆盖 Chrome、Edge、Brave、Vivaldi、Chromium、Firefox,针对受支持位置中发现的配置档
文件 对间谍软件投放的用户可写目录中的候选文件计算 SHA-256,比对已知样本哈希;另有一项刻意单独列出的内容:该组织滥用的某款合法签名驱动的哈希,仅作为线索报告,不作为感染证据
主机(Windows) 按用户粒度的 COM 注册(该行动已记录的持久化方式)、DNS 解析器缓存、DNS 历史记录功能是否开启、hosts 文件,以及已知的固定路径驱动投放(例如 HW.sys 这个存在漏洞的驱动)

每一条命中都标注证据等级,因为留下的是什么,决定了它意味着什么。

Cookie 元数据与已存储的连接记录可以支撑一条「接触」类发现,但既不能确认感染,也不能解释这条记录是怎么来的。一个域名仅仅出现在某个缓存的网页里,可能只是一份被保存的参考资料——比如一篇关于这次行动的报道。

工具把「保存的引用」与「连接证据」区分开,这样每一条发现都能被放回语境里解读。


四、支持哪些浏览器

家族 浏览器 检查的配置档位置
Chromium Chrome、Edge、Brave、Vivaldi、Chromium Windows %LOCALAPPDATA%\\<vendor>\\User Data;macOS ~/Library/Application Support/<vendor>;Linux ~/.config/<vendor>,另加 snap 与 Flatpak 位置
Firefox Firefox 标准配置档与缓存目录

Vivaldi 路径:%LOCALAPPDATA%\\Vivaldi\\User Data(Windows)、~/Library/Application Support/Vivaldi(macOS)、~/.config/vivaldi、~/.config/vivaldi-snapshot,以及 Linux 上的 Flatpak com.vivaldi.Vivaldi 配置。

其他基于 Chromium 的浏览器(Opera、Arc 等)尚未纳入扫描。不支持的浏览器与自定义配置档位置不会被检查,也可能不出现在报告里;一个「无匹配」的结果并不覆盖它们。

扫描前请关闭浏览器,避免数据库被锁。

版本提示:Vivaldi 支持自 v0.1.2 起提供,更早的下载不包含。请对每个版本分别核对其签名与校验和。


五、安装与运行

默认检查需要 Python 3.8 或更高版本,不需要管理员权限,不需要额外安装任何包。

单文件方式(最简单):下载 zero-breach.py,用发布校验和验证它,然后在下载目录打开终端。Windows 用 python;macOS 或 Linux 把下面的 python 换成 python3。

python -X utf8 zero-breach.py            # 完整扫描python -X utf8 zero-breach.py --quick    # 更快;跳过文件指纹python -X utf8 zero-breach.py --json report.json

可选的 Candiru 文件特征模式:从同一版本下载 requirements-patterns.txt。该模式需要 Python 3.9 或更高版本。在同时放着这两个下载文件的目录中,创建一个独立的 Python 环境并安装锁定哈希的 YARA-X wheel:

# Windows PowerShellpython -m venv .venv.venv\\Scripts\\python.exe -m pip install -r requirements-patterns.txt.venv\\Scripts\\python.exe -X utf8 zero-breach.py --patterns
# macOS / Linuxpython3 -m venv .venv.venv/bin/python -m pip install -r requirements-patterns.txt.venv/bin/python -X utf8 zero-breach.py --patterns

--pattern-path ABSOLUTE_PATH 可把这项额外的文件检查限定到指定的本地文件或目录,且可重复使用。常规的浏览器、哈希与主机检查仍保持原有范围。

特征匹配只是调查线索,不是活跃感染的证据。 无匹配的结果无法排除 Candiru 或其他间谍软件。

未指定 --pattern-path 时,这项可选检查会先检查最多 128 个由「按用户粒度的 Windows COM 注册」指向的安全本地文件,然后是其常规文件根目录。一条 COM 注册本身并不是间谍软件发现。 已发布的两条规则只适用于约 1 MB 以下的文件,更大的文件不在其检测范围内。

在 Windows 上,DNS 历史检查读取最新的最多 50,000 条留存事件。若更早的留存记录仍然存在,报告会把该历史标记为部分而非完整。这不会打开日志记录,也无法找回从未被记录的事件。

从源码运行:

python -X utf8 scan/adint-scan.py

扫描不修改任何系统设置,不需要管理员权限。它不发起任何有意的网络请求或指标查询。 被重定向的路径与 Windows 远程驱动器会被跳过,在线证书验证被禁用。在 POSIX 系统上,网络挂载仍可能通过普通文件系统调用被读取。被锁定的数据库快照是临时的,用后尝试清理;任何清理失败都会连同留存位置一起报告。--json 写出指定的报告。

退出码:0 未发现;2 命中指标;1 扫描无法建立(例如指标文件有问题)。


六、运行之前,先验证你下载了什么

只从上面的官方仓库获取文件,并在运行前检查。

1. 验证发布者签名。 v0.1.4 包含扫描器及其校验清单的分离式 GPG 签名,使用 ArchiveGenocide 既有的发布密钥。按 SIGNING.md 操作,并将完整密钥指纹与 ArchiveGenocide 的验证页面比对。ArchiveGenocide 的下载面板也会在 GitHub 之外单独发布对应版本的校验和。

2. 比对公布的哈希。 每个版本都会列出 zero-breach.py 的 SHA-256:

# Windows PowerShellGet-FileHash zero-breach.py -Algorithm SHA256
# macOS / Linuxshasum -a 256 zero-breach.py

3. 自己重建,再比对。 单文件是从这个仓库确定性生成的——对应的发布标签会重建出字节完全一致的文件。所以你根本不必信任这次下载,你可以复现它:

git clone https://github.com/interplains/zero-breach.gitcd zero-breachgit checkout v0.1.4python build/build.py          # 写出 dist/zero-breach.py 并打印其 SHA-256

这些命令复现的是 v0.1.4;换其他版本请替换为对应的标签。macOS 或 Linux 上构建命令用 python3。把哈希与该版本公布的哈希比对。开发分支可能包含更晚的改动,不保证能复现更早的发布。

关于杀毒软件:zero-breach.py 是纯文本 Python,你可以在文本编辑器里读每一行。部分杀毒产品会标记任何读取浏览器数据库的脚本,因为这种行为与信息窃取器相似。Zero Breach 通过其 SQL 查询读取 Cookie 的主机名与时间戳,从不读取 Cookie 值,也不解密凭据。被锁定的数据库快照必然会在查询这些元数据之前复制数据库字节。如果你的杀毒软件报警,读源码、核哈希,然后自己决定。


七、怎么读结果

报告以一段大白话总结开头:发现了什么、有多严重、该怎么办、以及哪些没能检查。

发现项按证据强度从强到弱排列:

等级 含义
on-disk (落盘) 文件匹配已公布的指纹。匹配到间谍软件样本,即识别出该样本;匹配到漏洞驱动,识别的是已知被滥用的合法软件,不是感染证据
persistence (持久化) 某个名称被注册为自动运行(严重)
contacted (已连接) 一条连接记录;其意义取决于该指标的角色,例如广告投递还是命令控制
dns-record (DNS 记录) 名称或地址出现在本地解析器数据中;查询可能失败过,仅解析本身不能证明与该服务器发生了接触
configured (已配置) 名称在本地配置中被映射到一个真实地址
referenced (仅引用) 名称出现在已保存的内容里,例如页面文本、未访问的书签或浏览器存储;这不构成接触

下一步取决于两件事:证据,以及指标的角色。广告类痕迹与合法驱动的匹配,从核对已保存的上下文开始,不会自动触发间谍软件求助转介。更值得警惕的基础设施,需要专业解读。已确认的间谍软件文件匹配与持久化发现,应当立即寻求专家复核并保全证据。 只要有可信的被针对疑虑,无论扫描结果如何,都应直接求助。多条弱匹配不会自动叠加成强证据。

证据位置会完整打印,方便复制。详细发现位于覆盖信息之后,并在适用时附上 DNS 历史的相关说明。

域名与 IP 命中会以「去毒化」形式打印(example[.]com),这样把报告转发给求助机构时,不会导致对方的邮件网关替你访问该指标。

指向阻断/黑洞地址的 DNS 缓存条目会被描述为保护性配置,而非尝试接触:hosts 文件可以在没有任何查询的情况下预加载它们。为获得更一致的 SQLite 快照,扫描前请关闭浏览器。本地路径检查不是操作系统级沙箱:POSIX 网络挂载与并发的文件系统变更,需要外部隔离边界才能实现严格的离线使用。

「什么都没发现」长什么样

这是最常见的结果,也是最需要仔细读的一种——注意它以警告开头,并列出它没能检查的东西:

========================================================================  Zero Breach 0.1.0  —  AdFection / Candiru 指标检查  检查广告投递型间谍软件的【痕迹】。干净的结果【不是】健康证明  —— 请看下方\"未能检查\"部分。  2026-10-18T14:30:00   Windows 11========================================================================  摘要  ——  读这一部分========================================================================  结果:在所有可检查的范围内,未发现已知指标。
  这不是健康证明。请看下方两节:查了什么,以及更重要的——什么没查。
  未能检查(2 项缺口)    - 哈希/文件指纹:因 --quick 被跳过。去掉 --quick 重跑即可纳入    - 主机/DNS 日志:DNS-Client/Operational 日志处于禁用状态      (Windows 默认),没有可查询的 DNS 历史,因此过往活动      无法从本机回溯检查========================================================================

真实的命中会显示在 >> 标题之下,直白说明它是什么(磁盘上的文件、自启动项、已证实的连接),并附上账户与日期,以及一份以「不要删除证据」开头的、编号的「该做什么」。


八、指标数据与互操作

当前源数据集共 405 条指标:292 个域名、111 个 IP 地址、1 个间谍软件哈希、1 个合法漏洞驱动哈希,位于 iocs/adfection_iocs.txt,每行一条,带层级、置信度与来源。

v0.1.2 内嵌了全部 405 条指标,相比 v0.1.1 新增 67 个域名/主机名。更早的已签名发布资产保持不变;后续的源码/情报源更新不会替换它们。

覆盖范围合并了 Citizen Lab 的 AdFection(2026)、Hooking Candiru(2021)与 CatalanGate(2022)报告,Confiant ADINT(2026)、Recorded Future(2025)、Microsoft DevilsTongue(2021)、ESET(2021)、Avast(2022)、Google TAG(2021),以及国际特赦组织安全实验室的印尼研究(2024)。只纳入其中与 Candiru 相关的指标。 每份导出都保留该指标的实际引用。

它们被导出到 dist/ 下的多种格式:

•STIX 2.1 与 MISP —— 供 MISP、SIEM,或国际特赦组织的 Mobile Verification Toolkit 使用:

mvt-ios check-backup --iocs dist/adfection.stix.json <backup>

•DNS/广告拦截列表 —— hosts、Adblock/uBlock/AdGuard、dnsmasq,以及纯域名列表,用于手机或路由器的 DNS 过滤、Pi-hole 或 AdGuard Home。当前列表包含 291 个经复核的域名/主机名。共享云 IP 与托管母域被排除。裸域 adtimizer.co 仍作为扫描器证据保留,但被排除在拦截之外;其具体记录在案的运营主机则被纳入。历史归属不构成当前所有权或活动的证明。 用 --no-historical 重新生成可省略历史层级;这仍会包含 Recorded Future 单独归因的 2025 年基础设施。hosts 文件拦截精确名称;Adblock 与 dnsmasq 规则同时覆盖子域。

用 python build/emit_stix.py、build/emit_misp.py、build/emit_denylist.py 重新生成导出。

给既有 STIX 用户的更正:合法驱动的哈希 6a4875ae86131a594019dec4abd46ac6ba47e57a88287b814d07d929858fe3e5 已从活跃 STIX 指标中排除。如果你导入过更早的情报源,请在支持 STIX 撤销的消费端处理 dist/adfection.withdrawals.stix.json,或显式移除旧的驱动规则及其关系:indicator--80275ed1-64f2-58c7-97dc-9cdacac0ff5d 与 relationship--66b188af-2489-5b41-a84f-b90c34f5fc73。该撤销文件用于移除早先的对象,不是检测/MVT 情报源。扫描请继续使用 dist/adfection.stix.json。扫描器与 MISP 仍将驱动保留为明确标注的调查线索;它的存在不是间谍软件的证据。

更新指标

这份列表会过期——新基础设施出现,旧域名失效。用一个单独、显式运行脚本来刷新(扫描器本身不发起任何有意的网络请求):

python scan/update-iocs.py            # 抓取、校验、显示变更(试运行)python scan/update-iocs.py --apply    # 同时替换本地列表

它通过 HTTPS 下载,用公布的 SHA-256 校验文件,在替换任何内容之前先确认可解析,并先显示差异。信任模型与更新器的局限记录在脚本顶部。它不会自动验证 GPG 签名。 已签名的发布清单认证的是随已签名版本发布的 IOC 文件,而非后续开发分支的更新;详见 SIGNING.md。


九、设计原则

永不接触指标。 一个 Python socket 守卫阻断直接的 DNS 与网络调用。本地路径检查拒绝重定向路径与 Windows 远程驱动器,而 POSIX 网络挂载可能表现为本地文件系统路径;可能获取证书的 Authenticode 检查被禁用。socket 守卫不是操作系统级网络沙箱;需要严格离线执行边界时,请使用系统隔离。

只测量,不推断。 一项没能跑起来的检查,会被报告为缺口,永远不会被报告为「干净」。这一点由结构强制,而不是靠约定。

精度优先于覆盖率。 用户可写路径下的一个未签名二进制,不构成发现;大量正当软件都长这样。毫无意义的告警,只会教会人们忽略这个工具。

只查询必需的元数据。 Cookie 查询选取主机名与时间戳,不取值。临时快照会复制整个被锁定的数据库文件;扫描器不解密浏览器凭据。

只读,无管理员权限,无遥测,无依赖。


十、测试

cd scan && python -m unittest discover -s tests

测试套件覆盖网络守卫、证据分级、边界匹配(一个仅仅包含指标的更长名称或数字不应匹配)、加载器的失败模式,以及行为性检查——确认 Cookie 查询排除了取值,且扫描器不读取浏览器的主密钥。如上所述,快照副本仍会包含数据库字节。


十一、联系与许可

问题或反馈:项目 Telegram —— https://t.me/+t9gq13mSKcE4NGI0[1]

报告安全问题,请见 SECURITY.md。

软件以 Apache License 2.0 许可(LICENSE)。iocs/ 与 dist/ 中的指标数据以 CC0 1.0 释入公有领域(iocs/LICENSE.md),因此可以被无限制地复制进拦截列表、MISP、STIX 及其他工具。

本项目与 The Citizen Lab、Confiant、Recorded Future、国际特赦组织、Access Now 无隶属关系,也未获其背书。它们的工作被引用为指标的来源,以及寻求专家帮助的去处。详见 NOTICE。


附一:项目结构(tree)

zero-breach/├── .github/│   └── workflows/                  CI:Windows / macOS / Linux × Python 3.8–3.12├── build/                          构建脚本(确定性生成单文件)│   ├── build.py                    → dist/zero-breach.py,并打印 SHA-256│   ├── emit_stix.py                → STIX 2.1 导出│   ├── emit_misp.py                → MISP 导出│   └── emit_denylist.py            → hosts / Adblock / dnsmasq / 域名列表├── dist/                           发布与导出产物│   ├── zero-breach.py              单文件扫描器(可复现构建)│   ├── adfection.stix.json         STIX 2.1 情报源(扫描 / MVT 用)│   ├── adfection.withdrawals.stix.json   撤销文件(仅用于移除旧对象)│   └── (MISP / 拦截列表等)├── iocs/                           指标源数据│   ├── adfection_iocs.txt          405 条:292 域名 / 111 IP / 1 间谍哈希 / 1 驱动哈希│   └── LICENSE.md                  CC0 1.0├── release-signatures/             发布验证产物(GPG 分离签名 + 校验清单)├── scan/                           扫描器源码│   ├── adint-scan.py               主扫描入口│   ├── update-iocs.py              指标更新器(需显式运行)│   └── tests/                      单元测试├── third_party/candiru/            可选的 Candiru 文件特征(有界检测)├── requirements-patterns.txt       锁定哈希的 YARA-X 依赖├── README.md├── SIGNING.md                      签名验证步骤与密钥指纹├── SECURITY.md├── CONTRIBUTING.md├── COVERAGE-UPGRADE.md             扫描覆盖范围与离线限制├── DETECTION-UPGRADE.md├── NOTICE├── LICENSE                         Apache-2.0└── .gitattributes / .gitignore
---
## 附二:报告结构索引(tree)

扫描报告
├── 摘要 SUMMARY
│ ├── 结果(发现 / 未发现)
│ ├── 这不是健康证明
│ └── 未能检查的缺口(gap)—— 逐条列出
├── 覆盖信息 COVERAGE
│ ├── 查了哪些浏览器 / 配置档
│ ├── 文件指纹是否启用
│ └── DNS 历史是否完整(完整 / 部分 / 不可用)
├── 发现 FINDINGS(按证据强度降序)
│ ├── on-disk 落盘文件命中
│ ├── persistence 自启动注册
│ ├── contacted 连接记录
│ ├── dns-record 本地解析器数据
│ ├── configured 本地配置映射
│ └── referenced 仅出现在已保存内容中
└── 证据位置 + 下一步(编号行动项,首条:不要删除证据)

---
*本文为 GitHub 项目 `interplains/zero-breach` README 的中文完整译述,事实、数据、命令与结论均来自原文,未作增补或改写。*

你的电脑「没问题」,可能只是因为没人记录过" 网络安全文章

你的电脑「没问题」,可能只是因为没人记录过"

本文介绍ZeroBreach扫描器,用于检查Candiru间谍软件在设备上留下的痕迹。工具基于CitizenLab报告构建指标集,检查浏览器历史、文件哈希及主机配置等,每条命中标注证据等级。核心观点是干净结果不等于健康证明,工具仅缩小不确定性而非消除。文章提供安装运行、结果解读及验证下载等操作建议,强调需结合专家帮助。
漏洞预警|WindowsShell安全功能绕过漏洞" 网络安全文章

漏洞预警|WindowsShell安全功能绕过漏洞"

本文披露WindowsShell安全功能绕过漏洞CVE-2026-96951,高危等级。攻击者通过投递特制SettingContent-ms或appcontent-ms文件诱导用户打开,可绕过MOTW安全控制执行任意命令,影响多个Windows版本及Outlook.com。官方已发布修复版本,建议用户立即升级至安全版本。
专项行动持续加码!今年3.8万起行政案件,政企单位最容易栽在这5道题上" 网络安全文章

专项行动持续加码!今年3.8万起行政案件,政企单位最容易栽在这5道题上"

公安部护网2026专项行动通报显示,累计排查发现安全隐患漏洞3.8万个,侦办行政案件3.8万起。政企单位在网站内容安全、数据安全、等保、关基保护、应急响应五方面易出问题。文章对比传统应付与精细化运维模式,建议通过持续运营、自动化监测和留痕管理提升合规水平,并推广晟晖安全运营平台。
评论:0   参与:  0