一、285KB 是什么概念
285KB,大概是一张手机照片的十分之一。
2004 年 3 月,CCleaner 早期公开版本 ccsetup106 的安装包,就这么大——285.2 KB。它能干的事简单到一句话能说完:扫一遍 Windows,把临时文件、浏览器缓存、日志文件、注册表残留列出来,你点一下,它删掉。没有弹窗,没有捆绑,没有后台常驻进程。
二十二年后的今天,从官网下载的同一个安装包是 84.3 MB。这是本文实测的数字:请求官网下载地址,服务端返回的内容长度是 88,427,352 字节,最后修改时间写着 2026 年 6 月 23 日。按 285.2 KB 折算,体积膨胀了大约 300 倍。
但真正让这个名字在这些年里被反复提起的,不是体积。
是 2017 年秋天的那一个月。在它被一家杀毒软件公司宣布收购之后不到一个月,官方下载服务器上分发的安装包,多了一段不属于它的代码。227 万人下载了那个版本。
而最先发现问题的,不是刚刚把它买下来的那家杀毒公司。
二、从 285KB 到 20 亿次下载,再到那个 28 天 一条体积曲线,也是一条信任曲线
CCleaner 最初叫 Crap Cleaner,2003 年 9 月 23 日首次发布。开发它的 Piriform 公司 2005 年 9 月 15 日在伦敦完成注册,创始人是 Guy Saner 和 Lindsey Whelan。
关于这段历史,有一处需要说清楚:软件和公司创始人的署名上是两个人,不是一个人。这类"一个人写的某某工具"的说法在中文圈流传很广,放在那个程序的最初构想上勉强成立,放在完整的公司历史上就不准确了。
它早期的增长曲线很直白:
时间
版本
安装包体积
2004-03
v1.06.050
285.2 KB
2008-02
v2.1
958.8 KB
2016-02
v5.14
6.5 MB
2017-09
v5.34
约 7.3 MB
2018-05
v6.0
50.7 MB
2025-08
v6.39
18.4 MB
2026-06
当前版本
84.3 MB
表中早期几行来自老版本归档站的原始文件记录,中间几行来自公开的软件引用集记录,最后一行是本文实测的官网响应值。口径不完全统一——有的是安装包解压前的体积,有的是主程序的体积——所以这一列只适合看趋势,不适合逐行相减。
下载量一路是:2010 年突破 10 亿次,2016 年 11 月超过 20 亿次。收购公告里那家买方自己写的一句话是,CCleaner 有约 1.3 亿名用户,其中包括 1500 万安卓用户。
那 28 天里到底发生了什么
2017 年 7 月 18 日,杀毒软件公司 Avast 宣布收购 Piriform,交易金额双方未公布。这里顺手纠正一个在中文互联网流传的说法:有文章称这笔交易是 13 亿美元,那不是这次——13 亿美元是 Avast 在 2016 年收购 AVG 的价格。
收购宣布之后的第 28 天,也就是 2017 年 8 月 15 日,CCleaner 5.33 版发布。这个版本在官网下载服务器上一直挂到 9 月 12 日才被 5.34 取代。整整四周。
事件的关键节点如下:
时间
事件
2017-07-18
Avast 宣布收购 Piriform
2017-08-15
CCleaner 5.33 发布并开始分发
2017-08 下旬
安全公司 Morphisec 在客户环境拦截到异常安装
2017-09-12
Morphisec 通知 Avast;同日干净版 5.34 发布
2017-09-13
思科 Talos 团队通知 Avast 同样发现
2017-09-15
攻击者的指挥服务器在执法机构协助下下线
2017-09-18
事件对外公开
有几个技术细节值得记住。第一,被植入的代码挂在 32 位主程序里,安装包本身是通过官方渠道分发的。第二,它带着 Piriform 自己的合法数字签名——由赛门铁克颁发给 Piriform Ltd,有效期到 2018 年 10 月 10 日。第三,运行时会先检查当前用户是不是管理员,不是就直接退出;是的话开始收集信息。第四,收集的内容包括操作系统版本、系统架构、是否有管理员权限、主机名与域名、已安装软件清单、正在运行的进程列表,发往一个硬编码的指挥服务器;同时用一套域名生成算法做备用通道。第五,执行前会先等大约十分钟,用来避开自动化沙箱。
三个数字,三个口径,不能相加
这是整个事件里最容易被混起来的部分。流传最广的三个数字,说的其实是三件事:
数字
口径
2,270,000
下载或安装了受影响版本的用户数
1,646,536
按网卡地址去重后,实际上向指挥服务器汇报过的机器数
700,000
在 9 月 12 日到 16 日期间向服务器汇报的机器数
40 台
最终收到二阶段载荷的机器,涉及约 20 家公司
第三行和第四行需要解释一下。调查过程中,攻击者的服务器因为磁盘空间不足把自己的数据库清掉了,调查人员最初只看到三天窗口、二十来台机器。后来找到了那份被删除数据库的备份,才把规模还原到一百六十多万台这个量级。而 40 台这个数字,是最终被投递了二阶段载荷的机器数量——它占受害规模的 0.0018%。
所以 227 万不是"被攻陷的规模",40 台也不是"受害的规模"。思科 Talos 团队当时给出的定性是:这是一个极其有针对性的行动者,在寻找有价值的智力资产。名单上出现的是一批科技与电信公司的域名,服务器上还保存着按目标动态增删这份名单的能力。也就是说,绝大多数下载了那个版本的普通用户,从头到尾都不是目标,只是这段代码的分布样本。调查还在受感染机器里发现约 540 台政府系统、51 台域名中含"银行"字样的机器。
谁先看到的
把它拆开看,发现链条其实有两环,而不是一环。
第一环是安全公司 Morphisec。它在 2017 年 8 月下旬就在客户环境里拦截到了异常的 CCleaner 安装行为,9 月 12 日正式通知 Avast。第二环是思科 Talos 团队,他们在测试一套新的漏洞检测技术时碰巧撞上同一个可执行文件,9 月 13 日通知 Avast。
中文世界里常见的说法是"发现者是思科 Talos",这个说法少了一天——Morphisec 更早。两家都通知了买方,买方随后发布干净版本、下线服务器、公开说明。
三、真正值得琢磨的三件事 接手它的是一家杀毒公司,出问题的却是构建链
先肯定这件事本身的价值:整件事的响应速度在同类事件里不算慢——从正式通知到干净版本发布是同一天,三天内指挥服务器下线,五天后面向公众说明。买方还承担了后续的构建环境重建、设备更换与第三方审计。
但有一个事实上的反差没法回避:一家以查杀恶意代码为主业的公司,接手了一个被下载过 20 亿次的软件,并没有在第一时间发现自己分发的安装包多了一段代码。四周时间里,那个带后门的版本就挂在官方下载服务器上。
这里必须补一句公道话,否则这个对比就变成了嘲讽:Avast 当时的说法是,恶意代码在它完成收购之前就已经被植入 5.33 版本。所以时间上的"近"不等于责任上的"是它干的"。攻击者拿下的是构建环境,不是买方接手之后新增的某个漏洞。
可即便如此,这件事暴露出的结构问题依然成立:签名是真的、服务器是官方的、渠道是正规的——三道防线全都站在"信任"这一侧。攻击者不需要骗过任何一道,他只是站到了这些防线背后。
合法签名证明的不是安全,只是身份
数字签名的用途是证明这段代码由谁发布,不是证明这段代码里没有多余的东西。
Windows 看到签名会显示"已验证的发布者:Piriform",杀毒软件不响警报,用户不产生任何怀疑。所有这一切都是对的——签名确实是真的,发布者确实是 Piriform。问题在于,攻击者用的正是发布者自己的那本证书。
所以"验签通过"这件事的含义,严格来说只有一句:这段代码确实出自那个发布者的构建流程。而这次事件说明,构建流程本身是可以被人动过的。
关于攻击者身份,只能说公开确认的那部分
到目前公开的资料为止,攻击者的身份没有得到公开确认。调查方在服务器上发现过一些线索,也明确表示过这些线索不足以支撑归因。
所以这篇文字写到这里就停下:不知道是谁,就不写成是谁。这不是回避,这是这类事件的正确写法——归因一旦写错,整篇文章的所有推理都会跟着一起错。
四、这件事对今天的我们意味着什么
第一,对普通用户来说,"只从官方渠道下载"这句话在供应链攻击面前不提供任何保护。这次的安装包就是官方渠道的,签名就是官方的。真正能补上的动作只有两个:装完之后确认一下拿到的是不是那个发布者分发的东西,以及不要长期停留在旧版本上。
第二,对开发者来说,构建环境和分发服务器属于同一个信任边界,中间不该有可以单独被拿下的环节。签名证书是需要轮换、需要隔离、需要有人盯着的资产,不是签一次就能用到底的工具。
第三,对管理者来说,一个被下载过 20 亿次的软件,它的全部价值建立在"用户相信它"这件事上。信任被用掉一次,换回来需要很多年。
这也是 CCleaner 后来那条曲线的起点。收购之后,它逐步加入了后台常驻的主动监控、遥测与捆绑安装;2020 年 7 月,微软的 Defender 把它的免费版标记为"潜在不受欢迎程序",理由是捆绑了第三方软件——微软的原话是,捆绑本身合法,但可能带来意料之外的软件行为;Piriform 几天后更新,把第三方软件安装改成可选。2022 年,Avast 与另一家安全公司合并,Piriform 归入新集团旗下。
到 2026 年,它的版本号已经走到 7.12,安装包 84.3 MB,专业用户之间普遍的态度是劝阻安装。一个 285KB 的清理工具,二十二年间长成了一个 84 MB 的程序,中间隔着一整套它自己也无法完全掌控的构建与分发体系。
五、留一个问题
从 285KB 到 84MB,膨胀了 300 倍;从被收购到带后门的版本上线,只隔了 28 天。这两条线放在一起看,会发现"体积"和"信任"的走向正好相反——一个越来越大,一个越来越薄。
你上一次认真看过一个安装包的数字签名,是什么时候?
热门跟贴