280,000人已经在线投票,才被发现漏洞
在一次实时选举中已有280,000张选票被投出,两名研究人员发现了官方安全审查遗漏的漏洞——而本应用来捕捉它的验证系统本身也已损坏。
时间是2015年3月,在新南威尔士州的某个地方,一位选民打开浏览器,点击一个链接,在州选举中投下一张选票。整个过程只需几分钟。没有队伍。没有投票站。只是一个表单、一次点击和一条确认信息。
这位选民不知道的是——在这个小型研究团队之外,没人知道——运行在他们浏览器下的代码是通过一个存在已知安全漏洞的连接加载的。一个位于选民和服务器之间的网络攻击者原则上可能会在页面加载前篡改该代码。系统提供的独立电话验证服务作为其完整性检查,本身也可能被利用。而且之前的安全审查已经查看过该系统,却没有发现任何这些问题。
当研究人员J. Alex Halderman和Vanessa Teague公开披露时,大约280,000张选票已经被投出。
自我通过审查的系统
iVote系统并非一个流氓实验或仓促的事后补救。新南威尔士州是刻意投资建设的,向盲人、视力障碍者、偏远地区选民或只是更喜欢在线投票便利性的选民提供。它通过了官方的选前安全审查。当局了解互联网投票的风险——他们已审查过该系统是否存在这些风险。他们得出结论,该系统已准备就绪。
一个通过系统审查的闭域审查不等同于该系统是安全的。
根据Halderman和Teague在E-Vote-ID 2015发表的同行评审论文,官方审查没有发现以下情况:iVote通过容易受到FREAK和Logjam攻击的连接从分析服务器加载外部JavaScript——在选民浏览器中运行的代码。这些是已被公开披露的已知TLS漏洞。一个在网络中处于有利位置、利用该漏洞的攻击者可能会在iVote页面到达选民之前向其中注入恶意代码,可能在选民不知情的情况下操纵投票记录方式。攻击者不需要入侵选举委员会自己的服务器。他们只需要位于网络中的正确位置。
研究人员还检查了iVote的电话验证服务——该系统提供的功能,让选民能够确认他们的投票已被正确记录。他们发现的是,该服务本身容易受到操纵,可能使被篡改的投票显示为已验证。这个检查是对一个也可能被修改的来源进行检查。
这不是一个安全网。这是一个虚幻的安全网。
"在之前审查通过后"实际意味着什么
让我们精确梳理事件顺序,因为顺序就是整个故事。
选举前进行了安全审查。审查没有发现Halderman和Teague发现的漏洞。选举开始。选票不断累积——最终达到约280,000张。然后两名独立研究人员,在选举委员会及其签约审查人员之外工作,分析了运行中的系统并发现了严重漏洞。他们披露了这些问题。在投票仍在进行时部署了修复。
换句话说:官方的选前审查给予了许可。两名对答案没有制度利益的局外人发现了官方审查遗漏的内容。这些问题之所以被发现,不是因为流程有效,而是因为独立研究人员决定进行查看——完全出于他们自己的主动,在实时选举期间。
"它通过了安全审查"是对一个快照的陈述。它不是对选举日运行的系统的陈述。
这是认证快照问题。审查在某个特定时间点进行,针对存在于该时刻的代码和配置,使用审查人员带来的测试计划和威胁模型。如果威胁模型忽略了一个已知的TLS攻击类别,这些漏洞不会出现在报告中。系统略有变化——第三方分析库更新,配置参数转移——审查不再涵盖实际运行的内容。
德国宪法法院在2009年面对了这个问题的一个版本,当时它裁定电子投票只有在普通公民能够在没有专业知识的情况下验证每个必要步骤时才具有宪法合法性。选民点击"提交"后检查屏幕并收到确认信息无法做到这一点。事实证明,不碰巧查看通过TLS加载的特定外部依赖的选前安全团队也无法做到。
未能验证的验证机制
值得你深思片刻的细节是电话检查。
iVote让选民可以打电话进来验证他们的投票是否按预期被记录。这是正确的直觉。端到端可验证性——选民能够确认他们的选票被正确捕获的能力——是真正的安全要求,而不是营销特性。 挪威、爱沙尼亚和瑞士都已认真解决如何提供这种能力的问题。瑞士邮政的2019系统使用密码学证明提供它所谓的通用可验证性,直到独立研究人员在mixnet中发现了一个后门,可以生成看起来令人信服的证明,同时隐藏被篡改的投票。
给予选民对系统进行检查的冲动完全是正确的。问题出现在当该检查运行在与其检查的事物相同的基础设施上时——或者当它可以被可能篡改投票本身的相同攻击者操纵时。
这不是假设风险。Halderman和Teague记录了iVote的电话验证本身容易受到可能产生虚假确认的操纵。一个打电话检查他们的选票的选民会听到一切都很好。一个投票被网络攻击者篡改的选民也会听到一切都很好。验证服务和漏洞存在于同一生态系统中。
一个可能被与底层系统相同的攻击所欺骗的验证机制验证什么都不是。它提供安慰,安慰不是安全属性。
为什么"独立"在做所有工作
这是NSW事件的尴尬真相:官方链条中没有人发现这一点。
不是供应商。不是选举委员会自己的团队。不是签约安全审查人员。它被两名学者发现,他们没有被要求、没有被支付,也没有获得测试环境的特殊访问权限。他们分析了生产系统——处理真实选民投出的真实选票的系统——并发现了官方流程没有发现的东西。
2010年华盛顿特区是最接近的有用对比。在为海外选民部署互联网选票返回系统之前,特区运行了开放公开试验并明确邀请公众进行攻击。由Halderman领导的密歇根大学团队在大约48小时内获得了对试点服务器的近乎完全控制,改变了已投的选票,并留下战歌作为他们访问权限的证据。特区放弃了该系统。没有真实选票受到影响。漏洞被发现是因为测试明确开放——任何人都可以尝试,进行尝试的团队发现了闭域内部测试没有发现的东西。
NSW案例是特区的镜像。没有开放公开测试。通过系统的闭域审查。漏洞仍被发现,由独立研究人员,在真实选票已经进入系统之后。
灾难和被发现的缺陷之间的区别通常只是正确的局外人是否碰巧进行了查看。
这是一个令人不安的句子,因为它意味着选举的安全可能取决于不是官方流程的一部分、可能根本不会进行查看的研究人员的主动性。它也意味着当他们进行查看并发现问题时,官方回应应该是"谢谢,这是我们改变的内容"——而不是"我们的审查已经通过了系统"。
通过系统的审查是应该让你担心的数据点,而不是让你放心。它告诉你闭域审查没有发现开放审查后来发现的东西。适当的回应是询问闭域审查可能还没有发现什么。
快照问题更加深层
世界上每个经认证的投票系统都是在现已成过去的某个时刻被认证的。
美国选举援助委员会根据自愿投票系统指南认证投票系统。美国政府问责局2005年的报告发现,即使是该认证计划的基本基础设施也不完整,这是在《帮助美国投票法案》授权多年之后。标准被建立。系统被根据标准进行测试。认证被颁发。
然后时间流逝。新的攻击类别被发现。依赖项被更新。配置偏移。认证——它是系统对某个时间点的标准的快照——仍然像一幢已被翻新的建筑的相框照片一样挂在墙上。
更深层的问题是,没有认证流程可以解决审查进行时威胁模型中不存在的攻击类别。FREAK和Logjam是iVote运行时已被公开的弱点。它们在学术文献中。它们有名字。它们显然不在清除该系统的测试计划中。
这不是反对认证的论证——这是认证是必要但不充分的论证,其充分性随时间推移而降低的论证。"这个系统已认证"的诚实版本是:"这个系统通过了针对特定标准的审查,由特定团队进行,使用特定威胁模型,在特定时间点。这些都不保证保持当前。"
解决方案不是更好的快照。解决方案是连续的、开放的、独立的可验证性——所以问题不是"它通过审查了吗?"而是"你能给我看数学吗?"
"独立可检查"实际需要什么
NSW iVote故事以在选举中期部署的修复和继续运行的系统而结束。选举没有停止。已投出的280,000张选票没有重新进行。没有机制来回溯性确认在修复前是否有任何选票被篡改。
这是故事中不能整洁解决的困难部分。
Springall、Finkbeiner和Halderman团队在2014年分析的爱沙尼亚i-voting系统至少为独立审查提供了部分源代码。研究人员发现了严重的运营安全弱点,并得出结论,一个资源充足的攻击者可以不易察觉地改变投票。爱沙尼亚对此结论有异议。该系统继续运行。异议和继续不等同于解决。
瑞士邮政的2019系统走得更远——它在绑定选举前部署前发布了其全部源代码供公众审查。独立研究人员发现了混洗证明中的后门。瑞士当局暂停了该系统。这是该领域最接近成功故事的事物:源代码发布、漏洞发现、系统在真实选票受影响前停止。
从NSW到爱沙尼亚到瑞士的进展是走向开放的进展。NSW:闭域审查、在实时选举期间发现漏洞、选民没有回溯性验证机制。爱沙尼亚:部分开放、独立分析、争议结论。瑞士:完整发布、发现密码学漏洞后停止绑定使用、系统暂停。
方向很重要。但注意瑞士需要什么来发挥作用:不仅是发布,而是具有工具和知识来发现mixnet证明中微妙后门的密码学家。Vanessa Teague——在NSW分析和瑞士邮政分析中都工作过——是世界上少数几个能够阅读混洗证明并注意到其中有问题的人之一。
"独立可检查"不等同于"任何公民在技术上都可以检查。" 对于密码学互联网投票,真正的独立可验证性需要来自合格局外人的积极、开放的参与——以及主动征求它的流程,而不是仅在研究人员决定凭自己主动进行查看后容忍它的流程。
巴西选举法院每个选举周期都运行官方公开安全测试计划,邀请任何合格公民尝试破坏系统并修复他们发现的内容。这不是完美模式——它在特定时间点测试特定配置中的特定系统,且在测试中没有出现的问题仍可能存在于生产系统中。但它在结构上优于闭域审查,因为它是开放的、对抗的、制度化的,而不是偶然的、事故性的。
仍然无法检查的内容
官方NSW选后审查和独立研究论文都无法告诉你的是:在部署修复前投出的280,000张选票中是否有任何被篡改。
不是因为坏意。不是因为任何人在隐瞒什么。而是因为系统的设计不允许在事后回答该问题。没有选民可检查的记录在投票提交前被承诺并可在之后进行比较。没有密码学审计轨迹选民可以检查以确认他们的选票被计数如投。可能会服用该功能的电话验证服务本身可能已被破坏。
这是官方声明无法弥补的鸿沟。当局可以说——而且确实说了——他们不知道任何投票被篡改。这是一个真诚的陈述。它也是一个不可证伪的陈述。"不知道"和"没有发生"被整个问题的宽度分隔。
德国宪法法院的标准值得在这里重复,因为它以全力适用:选举只有在从选票到结果的必要步骤可由公民在没有专业知识的情况下检查时才具有合法性。对于通过容易受攻击的连接加载代码的在线投票,选民无法检查他们收到的代码是服务器发送的代码。对于本身可能被操纵的验证服务,选民无法确认确认是真实的。对于没有回溯审计轨迹的系统,运行它的官员无法确认没有投票被改变。
正确的问题不是"我们是否发现任何篡改证据?"正确的问题是:"如果篡改已发生,任何人都能发现它吗?"
如果对第二个问题的回答是否定的,第一个问题不提供任何保证。
来源
- Halderman, Teague — 新南威尔士州iVote系统:实时在线选举中的安全故障和验证缺陷, E-Vote-ID 2015 (arXiv:1504.05646)
- Wolchok, Wustrow, Halderman, Prasad — 攻击华盛顿特区互联网投票系统, Financial Cryptography 2012
- Springall, Finkbeiner, Durumeric, Kitcat, Hursti, MacAlpine, Halderman — 爱沙尼亚互联网投票系统的安全分析, ACM CCS 2014
- Lewis, Pereira, Teague — Ceci n'est pas une preuve(Scytl-SwissPost互联网投票系统中的后门承诺), 2019
- 德国联邦宪法法院, 2009年3月3日判决书, 2 BvC 3/07和2 BvC 4/07 (英文翻译)
- 美国政府问责局-05-956, '选举:改进电子投票系统安全性和可靠性的联邦努力正在进行中,但关键活动需要完成' (2005年9月21日)