很多人认为开源的密码管理器更安全,理由是:由于任何人都可以阅读源代码。开发者如果做了什么坏事,我们都能看到。
源代码(也称源程序)是指未编译的按照一定的程序设计语言规范书写的文本文件,是一系列人类可读的计算机语言指令。 在现代程序语言中,源代码可以是以书籍或者磁带的形式出现,但最为常用的格式是文本文件,这种典型格式的目的是为了编译出计算机程序。计算机源代码的最终目的是将人类可读的文本翻译成为计算机可以执行的二进制指令,这种过程叫做编译,通过编译器完成。-- 来自 百度百科 开放源码软件(open-source)是一个新名词,它被定义为描述其源码可以被公众使用的软件,并且此软件的使用,修改和分发也不受许可证的限制 -- 来自 百度百科
真的是这样吗?要搞清楚这个问题,让我们仔细看看从开源代码到我们使用的 App 软件,这个过程中可能发生些什么。
请不要误解,本文并非攻击开源,而是试图理清密码管理器开源与安全的关系。
要知道,开放出来的源代码并不能直接运行。而是要先编译构建成 App,然后我们安装 App 到设备上,才能打开使用。
除了少数极客会自己从源代码编译构建 App 外,绝大多数用户都是从应用商店或者下载站下载安装。
具体来说,开发者是怎样把源代码,变成我们从应用商店下载安装的 App 呢?
源代码变成 App 三要素:源代码,第三方库,构建工具。
1. 源代码 就是开发者为了实现 App 功能,编写的程序代码。
2. 第三方库(third-party libraries) 对普通用户来说可能比较陌生。开发者通常需要很多第三方提供的功能模块(源代码形式或 SDK 形式),帮助实现 App 的全部功能。安全研究人员在LastPass当中发现7个跟踪器后建议不要使用这款应用文章中提到的跟踪器就是由第三方提供的功能模块,帮助 LastPass 实现追踪用户行为的能力。
现代 App 都非常复杂,很多功能都会依赖大量第三方库才能实现。
3. 电脑和手机运行 App 执行的是二进制的计算机指令,构建工具 就负责将源代码和第三方库翻译成计算机指令(编译),并组装成我们可以使用的 App。
打个比方,我们用面粉做面包,面粉就是源代码,水,酵母,油,盐等就是第三方库,烤箱就是构建工具。揉好面团放入烤箱,出来了面包 :)
仔细看这个开发流程时,我们就能发现这些隐秘的角落,也可能存在风险。
1. 开发者用于构建的源代码和开放出来的源代码是否完全一致?
2019 年,有安全研究员发现 walletGenerator.net 网站源代码和公开在GitHub上的源代码不一致。
该网站在 GitHub 上公开的源代码没有问题,但用户访问的网站上部署的代码存在严重的安全漏洞,导致用户生成的加密币钱包面临巨大的风险。中文报道见 开源代码与网站代码不一致?WalletGenerator 曝出惊人漏洞
由于网页程序的开放性,浏览器可以直接执行 Javascript 代码,发现源代码不一致相对容易。而需要经过编译安装的 App,编译前修改源代码更隐蔽,难以验证。如果开发者作恶,完全有机会植入恶意代码。
2. 第三方库可能存在漏洞或恶意代码
开源供应链安全问题正成为近几年热点。早在 2014 年,爆出互联网安全基础库 OPENSSL 存在心脏滴血漏洞,而该漏洞在发现时,已经存在两年了。让全球2/3网站“心脏滴血”后,OpenSSL 经历了什么指出:“全球三分之二的网站可被攻击,这种攻击还是“敞开了门,可以随意掠夺信息”的那种。”比如你打开淘宝输入密码登录后,有黑客攻击淘宝的服务器,就可能偷到你的密码。
2021 年,全球近一半企业受到影响!Log4j 2 漏洞或将长存一文指出,在 log4j 开源组件漏洞爆发 72 小时后,仅 CPR 传感器捕捉到利用该漏洞尝试攻击的行为就已超过 83 万次。这个漏洞在评级中得到了满分 10 分,一旦被利用,黑客可能完全控制服务器,不仅可以偷密码,甚至有可能偷钱。
2022 年,也就是今年年初,自毁项目,拒绝“开源白嫖”?知名 NPM 包作者删库、注入恶意代码,数千个应用崩溃ing!,开源库作者更是主动注入恶意代码,让供应链无数下游项目遭受损失,其中不乏亚马逊云服务 AWS 这样的重量级厂商。如果开源产品中使用了包含恶意代码的第三方库,最终用户就可能蒙受损失。
3. 开发者使用了包含恶意代码的构建工具
2015 年,爆发大面积 iOS App 感染木马病毒,数百款 App 中招,包括微信,滴滴,网易云音乐,高德地图等诸多知名产品,甚至还有若干银行 App。病毒会偷取 App 中的数据发送到黑客控制的服务器。见 用易懂的话告诉你苹果 iOS APP 大面积感染 XcodeGhost 病毒到底是什么回事。
苹果开发人员再次被盯,针对Xcode的供应链攻击再现一文报道,2020 年和 2021 年又出现了 XcodeSpy, XCSSET 等攻击,可以偷取用户密码,录音录像,屏幕截图等,并将数据发送到黑客控制的服务器。
由于存在这些隐蔽的角落,作为用户,我们很难确保开源 App 就是绝对安全的。
退一步说,就算开源了,用户能够发现代码中的漏洞吗?
像 OPENSSL 和 log4j 这样的开源组件,几乎地球上所有最强大的计算机公司都有使用,但他们也没能及时发现其中存在的漏洞。更让人吃惊的是,log4j 的漏洞已存在约 20 年之久了...
看回普通用户,他们真的会花时间去查看密码管理器的源代码吗?他们不是安全专家,更不是密码管理器安全专家,就算真的去查看,要发现其中的漏洞也绝非易事。
而另一方面,如果黑客发现软件的一些小错误,他们很多时候都会猜想软件可能存在的漏洞,然后想办法验证。如果源代码是公开的,那漏洞会更容易被确认,因为黑客可以修改源代码并且调试程序。
应对这种风险最好的办法是:提供资金悬赏,鼓励白帽子们更早发现漏洞并及时修复。
开源极大地降低软件研发的成本,提升了软件的透明度。对今天的软件生态至关重要,做出了无与伦比的贡献。
但是,如果用户被开源营销
忽悠,没能充分理解:开源从哪些方面让密码管理器变得更安全的,是否同时也存在潜在的风险;而是简单地相信:开源 = 安全
这样一个口号,那可能只会带来虚假的安全感。
下一篇我们将进一步探讨:密码管理器需要使用哪些技术来安全地守护密码。
(未完待续)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。