这款清理工具好吗?
清理工具索要的权限与众不同:在证明自身价值之前,就要求获得在整个系统广泛删除文件的许可。这个品类让情况更糟,因为从外面看,诚实的软件和不诚实的软件长得一模一样。没有哪一项检查能一锤定音,但风险可以拆成几种不同的形态,每种都有破绽。(如果你站在这个问题的另一边,正在开发一款清理工具,请看为什么编写系统清理工具很难。)
先想清楚你是否真的需要
- 对很多人来说,更合适的工具是通用的存储空间分析器:它显示空间被什么占用,但不删除任何东西。它能回答“磁盘为什么满了”,而不必把删除权限交给任何应用。
- 操作系统自带的存储工具比过去覆盖得更广,而且完全没有第三方风险。
信任是一种特性,而且极易伪造
- 清理工具是恶意行为者的首要目标。它是用户批准的工具,触达整个系统,包括存放会话和凭据的浏览器数据。
- 如今,做出一个令人信服、甚至能用的山寨应用轻而易举:真实软件的克隆体,二进制文件里藏着恶意代码。试用什么都证明不了,因为假的一样能清理。
- GitHub 仓库不是信任信号。托管模仿真实项目的假仓库是一种流行的攻击手法。
- 那些较软的信号也不是。“独立个人开发者”、“由一个受够了传统清理工具的用户打造”、“开源”:每一个都被有针对性地滥用过,恰恰因为它们正是快速核查的人会寻找的信号。
说句公道话:大多数新应用并不是骗局。有很多新清理工具,包括个人开发者的小型 GitHub 项目,是安全且做得不错的。问题不在于新应用不好,而在于好与坏在安装前确实难以分辨,因为每一个快速信号都已经被伪造过了。
风险不只来自恶意
清理工具有好几种伤害你的方式,并不都需要一个反派。它们从蓄意恶意到纯粹的疏忽不等:
- 恶意的发布者。 应用本身就是攻击,为窃取数据、打开后门而构建或被收购。这不是假设:我们已经收录过一个。SwiftClean 在 Reddit 上被宣传为 Windows 和 macOS 的“免费开源 MIT”清理工具,但它的仓库根本没有任何源代码,唯一的发布版本是一个带密码的压缩包,经人工分析确认为恶意。
- 掠夺性的商业模式。 商业化恐吓软件自成一类:合法注册的公司销售激进的工具软件,把追加销售模糊成勒索。扫描结果中人为制造的紧迫感、藏在付费墙后的“修复”,以及后台守护进程、弹窗、系统托盘警报乃至人为的性能降速的长期存在,都在逼用户掏钱。
- 好应用反噬自身。 攻击者通过从未经过实战检验的代码路径滥用合法软件:自动更新器、定义加载器、没人运行过的偏僻清理例程。
- 扭曲的激励。 清理工具卖的是“释放了多少 GB”,所以即便是行为端正的应用,也会忍不住把那些看起来安全但有用的文件算进去:缓存、日志、缩略图,系统会重建它们。什么都不算“丢”,但你要付出重建时间、写入次数,以及一切重新预热期间变慢的机器。
- 诚实的意外。 没有软件是无 bug 的,而清理工具的 bug 会删东西。一个善意的开发者可能在没有任何人怀有恶意的情况下,发出一个符号链接 bug 或一条糟糕的定义。
- 被放弃的应用。 维护停了,定义过时了,但规则仍按去年的地图删除。一个无人维护的清理工具可能悄悄变成一个错误的清理工具。
没有反派的风险随复杂度增长。一个既清理、又优化、又卸载、又查重、又监控的全能应用,承载的代码多得多,其中以提权运行的更多,测试从未覆盖的角落也更多。代码越多,bug 越多,别人藏一个 bug 的地方也越多。
最低门槛
在任何正面信号作数之前,有些行为会直接终结评估。确认的恶意软件显然是这条线的终点,但取消资格远在这之前就开始了。Google 的垃圾软件政策(Unwanted Software Policy),即 Safe Browsing 下载警告背后的标准,读起来就像对这个品类最恶劣习惯的盘点。对清理工具来说,底线是这样的:
- 广告与应用必须一致。 下载广告必须说明软件的真实面目,背书和标志必须获得授权。“你的电脑已感染”的广告装上的却是清理工具,这就是社会工程,无论应用装好之后做什么。
- 捆绑的附加件必须可以跳过,且捆绑者要为其负责。 安装程序必须给用户明确的方式拒绝每一个附加组件,发布者要为其随应用分发的一切负责。一个带着合作方工具栏或预勾选“推荐”安装到来的清理工具,已经暴露了它的商业模式。
- 扫描不得制造恐慌。 该政策点名了这个品类:清理和优化工具不得声称系统处于危急状态或已感染,也不得承诺应用无法兑现的修复。在每台健康机器上都找出数百个“问题”的扫描,是在制造销售。
- 免费必须是真的免费。 宣称免费的产品不得对广告中的服务设付费墙。免费扫描发现问题、付费下载才能清除,这就是恐吓软件的漏斗。
- 清单留在本机。 用户的隐私数据只能在应用功能所需时、经披露并加密后才会到达服务器。清理工具读取浏览历史、已安装应用和文件名是正当的;但若未经披露就上传这份清单,单凭这一条就该出局。
- 不得削弱平台。 不得安装根证书颁发机构,不得拦截加密连接,不得压制操作系统自身的安全警告。
- 卸载必须找得到、卸得净、不吵不闹。 卸载程序要移除每一个组件,且不得警告说移除本软件会损害系统。一个无法完全卸载的清理工具,和它声称要防范的东西没什么两样。
以上每一条都只有过与不过:年头、星标数和市场份额都无法抵消任何一条。即便整张清单全过,也说明不了太多,因为这只是地板;真正区分开过关应用的,是下面的信号。
降低风险的信号
没有单一信号能定案,所以要放在一起看:
- 成熟度。 多年实战意味着代码路径在许多真实机器上被跑过,而不只是开发者那一台。
- 庞大的用户群。 用户越多,随手测试的人越多,读代码的开发者越多,察觉异常的人也越多。
- 专注。 只做一件事的工具,审计面更小,出错的方式也更少。
- 新鲜度。 最近的发布或提交意味着定义跟得上平台。陈旧是警报;被放弃更糟。
- 发布纪律。 看测试周期是否跑在稳定版之前:beta、候选发布版、分阶段推出。一天之内发两个“稳定版”,通常意味着用户就是测试员。
- 发布二进制的数字签名:Windows 的 Authenticode、macOS 的 Apple 公证、Linux 的 GPG 签名包,最好来自有历史的身份。
- 源代码可得。 并非硬性要求,但公开源代码抬高了信任上限:任何人都可以审计,而不必听信营销说辞。
- 可复现构建。 光有源代码只算一半:确定性或可复现构建让任何人都能验证所分发的二进制确实由那份经过审计的源码构建,中间没有被篡改的构建管道。
以上没有一条是担保,也没有哪种商业模式天生全占:付费产品不因付费而安全,免费开源应用也不因开源而安全。
沉默不等于安全
bug 数和 CVE 数在两个方向上都是弱信号。零,多半只说明没什么人认真查过。
- 绿旗:公开的安全修复。 更新日志标注安全修复、有安全联系方式或披露政策、有审计或漏洞赏金:证明项目有人审查、有人维护。
- 红旗:“零 bug”历史。 完美无瑕的代码不存在。一个提权运行、用户众多、却从未报告过一次安全修复的应用,是没人查过,而不是安全。
- 红旗:悄悄发货的修复。 被折进笼统的“改进与修复”条目里的安全补丁,意味着项目不想让你计数。
透明的修复记录才是真正的特性,而不是一张干净的成绩单。
结语
没有任何单一信号能定案,因为每一个快速信号都已经被伪造过了。真正有帮助的是伪造起来很贵的证据:多年可用的代码、公开可见的问题修复史、较小的特权攻击面,以及一个会察觉异样的社区。这正是本目录试图记录的东西,一次一个条目。
Last reviewed