Voatz是美国联邦选举中使用的第一个互联网投票应用程序,在2018年的中期选举中,西弗吉尼亚州成为美国第一个允许选民通过名为“ Voatz”的专有应用程序在手机上进行投票的州。尽管没有公开描述Voatz的安全模型,但该公司声称选举安全性和完整性是通过在用户设备上使用许可的区块链,生物识别技术,混合网和硬件支持的密钥存储模块来维护的。在这项工作中,基于其Android应用程序的逆向工程和系统的最小可用文档,对Voatz进行了首次公共安全分析。对Voatz服务器进行了无尘室重新实现,并提供了从应用本身可见的选举过程分析。
发现Voatz具有漏洞,这些漏洞使各种类型的攻击者可以更改,停止或公开用户的投票,包括侧信道攻击,其中完全被动的网络攻击者可能会收回用户的秘密投票。此外,发现Voatz由于将第三方服务用于关键应用功能而存在许多隐私问题。
0x01 Introduction
2018年,总部位于波士顿的私人公司Voatz通过发布首个用于高风险美国联邦选举的互联网投票应用程序创造了历史。 Voatz主要针对海外军事和其他缺席选民,已被用于西弗吉尼亚州,丹佛,俄勒冈州和犹他州的联邦,州和市政选举,以及2016年《马萨诸塞州民主公约》和2016年《犹他州共和党公约》。
在本文中,将对Voatz进行首次公共安全审查。发现Voatz容易受到多种攻击的攻击,这些攻击可能会破坏选举的完整性(上表的摘要)。例如,发现拥有对选民设备具有root访问权限的攻击者可以轻松逃避系统防御,了解用户的选择(即使事件结束后)以及更改用户的投票。进一步发现,他们的网络协议可能泄露用户投票的详细信息,而且令人惊讶的是,系统对区块链的使用不太可能防止服务器端攻击。
尽管在美国引入互联网投票相对较新,但围绕电子投票的历史却并非如此。在计算错误,重述差异和无法解释的投票给2000年美国总统大选造成严重破坏之后,美国国会通过了《帮助美国投票法》(HAVA),该法案旨在帮助各州摆脱过时和麻烦重重的困境。由HAVA创建的新的执行机构选举援助委员会(EAC)负责分配这些资金,此后已向各个州提供了超过33亿美元的资金,以帮助改善选举基础设施。
HAVA在允许购买何种替代系统方面缺乏严格的指导方针,结果许多州都购买了未经审查的纯电子投票机,即直接记录电子(DRE)系统。此后的大量研究表明,缺少纸质备份的DRE系统极易受到各种攻击的攻击,从而使攻击者可以秘密更改选举结果。
由于责任制和透明系统(例如区块链)的最新进展,以及对加密操作以及生物识别技术进行硬件支持的安全设备的移动设备的激增,人们对加密技术有了新的兴趣。结果是有关如何使用移动设备安全地允许通过互联网进行投票的创想增多。在撰写本文时,至少有四家公司试图为高风险的选举提供互联网或移动投票解决方案,而一名2020年民主党总统候选人已将通过区块链从移动设备进行投票纳入其政策范围。
有关Voatz系统的公共信息不完整, Voatz的FAQ ,博客和白皮书仅提供了对其整体系统和威胁模型的模糊描述; Voatz声称,它利用许可的区块链,生物识别技术和硬件支持的密钥库的某种组合来提供端到端的加密和经选民验证的选票。然而,尽管呼吁发表更详细的分析和选举安全团体中许多人以及民选代表提出的关切,但沃茨拒绝提供正式细节,理由是需要保护他们的知识。更糟糕的是,当密歇根大学的研究人员在2018年对Voatz应用程序进行动态分析时,该公司将研究人员视为恶意行为者,并向当局报告了这一事件,这导致联邦调查局对研究人员进行了调查。
这种不透明的姿态对选举过程的完整性构成了威胁。鉴于高风险选举的争议性质,投票系统的严格安全要求以及外国政府情报机构将来可能进行干预的可能性,至关重要的是,公众必须对任何现场选举系统的细节进行分析。政府的合法性取决于民主进程的审查和透明性,以确保任何政党或外部参与者都不能不适当地改变选举结果。
从方法上讲,分析由于Voatz缺乏透明度而变得非常复杂。在以前对已部署的互联网投票系统的安全性审查中,研究人员分享了有关投票基础结构的重要信息,通常包括系统的设计和系统本身的源代码。
相反,本文被迫采用纯黑盒方法,并通过对Voatz的公开可用的Android应用程序进行逆向工程获得的服务器的无尘室重新实现进行分析。尽管付出了更多的努力并增加了有效性的风险,但本文的分析足以使人们对Voatz的缺点有一个公正的了解。特别是证明了攻击违反了对Voatz基础架构未知部分的乐观假设。希望这项工作对决策者和未来的研究人员来说是有用的讨论点,并且可以用来鼓励系统开发人员更加透明。
0x02 Background
在本节中描述了在提议的密码投票系统中常见的一些安全要求,然后讨论了Voatz提出的主张,并通过概述Voatz的先前分析得出结论。
在应用漏洞发现和密码学领域中,投票作为研究主题并不是什么新鲜事。以下是投票系统文献中常用的安全性定义的简短描述。
正确性和可用性:为了确保选举的合法性,投票系统必须令人信服地表明,所有符合条件的选票均按预期投了票,按票数收集,并计为票数。
秘密投票要求:
1)没有投票者能够证明自己的选择,并且
2)任何投票者的选择都不能被秘密发布或推理。
无记名投票的目的是提供不受不当影响的选举:如果选民能够证明自己的投票方式,他们可以出售自己的选票;如果选民的偏好被泄露,他们可能会受到骚扰和胁迫。
端到端可验证性:E2E可验证投票系统具有以下属性,选民会收到证明,他们的选择已被包括在内,并且未经修改,最终计入所有收集的选票,而无需信任任何单独的授权机构都可以这样做。已经开发出了一些研究原型,可以使用视觉密码学,同态密码学,不可见墨水和混合网等技术在保证秘密投票的同时提供此类保证。
尽管没有公开,正式的系统描述,但Voatz确实通过其FAQ对其系统的安全性提出了许多主张。
通过许可的区块链实现不可变性:Voatz声称,一旦提交投票,Voatz就使用“ …区块链技术来确保…票经过验证,并且不可变地存储在多个地理位置分散的验证服务器上。” FAQ进一步详细介绍了为每种投票方式和候选人提供代币的方法。
端到端投票加密:Voatz对投票本身进行了多次引用,这些投票本身被“端到端”加密。据作者所知,没有“端对端投票加密”的正式定义;例如,不清楚端到端加密投票方案的“端”在哪里。值得注意的是,存在同态加密方案,可以对投票密文进行计票,因此仅需解密汇总票,即可维护个人选民的隐私,但是从FAQ中尚不清楚Voatz是否打算这样做。
选民匿名:Voatz声称“智能手机和区块链将投票者的身份进行了双重匿名”,并且“一旦提交,所有信息将被匿名化,通过混合网进行路由并发布到区块链上。”
设备破坏检测:Voatz声称使用多种方法来检测设备是否已越狱或包含恶意软件,并且“如果操作系统受到破坏,则Voatz应用不允许投票者投票。”
选民核实的审计追踪记录:Voatz声称,选民在提交选票后会收到加密签名的数字收据。这种收据的担保尚不清楚,尽管也许是为了提供类似的担保,如上述端对端可验证密码系统所示。
0x03 Experimental Methodology
由于对正在运行的选举服务器执行安全性分析会引起许多令人无法接受的法律和道德问题,因此,选择在“无尘室”环境中执行所有分析,仅连接到自己的服务器。为了确保静态和动态分析技术永远不会直接干扰Voatz或任何相关服务,付出了巨大的努力,以确保没有任何内容有意传输到Voatz的服务器。
为了更好地了解Voatz的基础架构,首先对截至2020年1月1日在Google Play商店中找到的最新版本的Android9应用程序进行反编译,然后迭代地实现了一个最小的服务器,该服务器执行选举程序,从应用本身。这包括与设备注册,投票者标识和投票表决有关的交互。使用了两种设备进行动态分析和开发:运行Android 9的Voatz支持的Pixel 2 XL和运行Android 8的Lineage OS的不支持Voatz的Xiaomi Mi 4i,两者均通过Magisk框架进行了越狱。
为了将控制权重定向到自己的服务器,被迫对应用程序的控制流进行一些小的更改。为了减少对有效性的威胁,将这些修改限制在必要的最低限度,以便重定向所有网络通信:
1.禁用证书固定,并替换了自己服务器的所有外部连接;
2.禁用了应用程序的内置恶意软件和越狱检测功能;
3.删除了设备与所有仍在活动的第三方之间的附加加密,将这些服务与自己的服务器之间的所有通信重新定位为目标,并重新实现了其协议的必要部分。
虽然所有这些都可以通过静态修改程序的代码来完成,但选择在运行时动态修改或hook代码的相关部分。因此,修改不需要更改应用程序代码本身,而只需更改运行在测试设备上的代码,就可以快速开发并透明地分析在每个分析阶段所修改的内容。
尽管进行了冗长的描述,代码库还是相对简单的。设备上的hook代码由约500行Java组成,这些代码利用了Xposed Framework,这是一系列hook库,在Android modding社区中得到了很好的支持和欢迎。服务器实现是使用Flask Web框架用Python编写的约1200行代码。
0x04 Voatz’s System Design
(1)流程概述
上图给出了从登录到选举投票在应用内进行的步骤图:
1.设备启动与服务器的握手,创建一个共享密钥,该共享密钥可启用除TLS之外的额外加密层(框1)。
2.用户通过提供其电子邮件地址,电话号码和8位PIN码来创建帐户(框2-4)。
3.用户使用此PIN登录(框5)。
4.用户使用Voatz与称为Jumio的第三方服务的集成来验证其身份(框6)。该应用程序请求扫描用户的照片ID,面部记录以及用户的地址,然后将所有这些信息发送到Jumio的服务器以进行验证和OCR。
5.用户从公开选举列表中进行选择,然后标记并提交投票。根据选举配置,Voatz可以允许“投票”,因此可以在选举结束之前重复此过程(框7-8)。
上图显示了Voatz组件与其他实体之间的通信。由于只能直接观察涉及Voatz应用程序的通信,因此该图的其余部分是根据Voatz 和丹佛选举司发布的文档尝试进行的重构。
Voatz应用程序使用的三个主要第三方服务是身份验证服务Jumio,崩溃报告服务Crashlytics和设备安全服务Zimperium。其中,最重要的是Jumio,Voatz依靠它来进行ID验证,并且该应用向其发送大量个人信息。
(2)Voatz服务器握手和协议
Voatz的服务器实现为REST应用程序-Voatz的服务器与该应用程序之间的所有通信均以一系列JSON编码的HTTPS GET,PUT和POST命令进行。该应用程序的REST服务器是voatzapi.nimsim.com,而voatz.com仅用于静态资产,例如图像和文本。该协议的所有部分均利用Android OS的内置TLS堆栈,并使用证书固定功能来确保传入的证书来自特定的颁发证书颁发机构。
接下来,在TLS之上,系统通过以下步骤执行“设备握手”:
1.该应用程序生成100个ECDSA SECP256R1密钥对,并向服务器发送所有100个相应的公共密钥。设备仅保存第57个密钥对(PKD,SKD)。
2.服务器生成100个ECDSA SECP256R1密钥对,选择第57个(PKS,SKS),然后执行其余ECDH密钥交换以生成共享密钥(SKecdh)。
3.服务器生成AES-GCM参数;随机AES-GCM 256位对称密钥(SKaes),随机16位随机数(N)和标签(T)。
4.然后,服务器发送到设备:
5.从服务器发送的100个公共密钥中,应用程序选择第57个公共密钥(PKS),并完成ECDH握手以创建ECDH共享密钥SKecdh。最后,它解密并解析AES-GCM参数(SKaes,N,T)。
每次首次启动应用程序时都会执行一次握手,并且从此刻开始,在应用程序执行过程中,还会通过SKaes使用标准AES-GCM算法对应用程序与服务器之间的所有通信进行加密。 TLS提供的加密。请注意,除了封装的TLS证书之外,该应用程序没有对ECDSA密钥的身份验证。这使得重新定位服务器非常简单-将应用程序中所有必需的URL替换为自己的URL,并遵循了协议。此外,这使握手的使用有些不清楚,因为它无法提供针对TLS已经提供的身份验证的主动MITM攻击的保护。
还值得一提的是,除第57个密钥外,所有其他密钥都立即在设备侧被丢弃-第一步中生成的设备的无关密钥和从服务器接收到的公共密钥。得出的结论是,这种100密钥的交换很可能是对混淆的尝试,而不是对安全协议有任何有用的用途。
(3)用户注册和ID验证
应用完成设备握手后,用户可以开始注册过程,如上图所示。在这里,要求用户提交电子邮件和电话号码,并通过SMS进行一次一次性密码操作。最后,用户选择一个8位PIN码,然后将其发送到服务器,并广泛用于用户身份验证。
如果用户在设备上注册了指纹,则可以选择“注册”指纹作为替代的身份验证机制。有效地,这可以通过将PIN存储在磁盘上来实现,该PIN使用通过Android Keystore API与用户指纹进行生物识别绑定的密钥进行加密。
Android Keystore是一项系统服务,如果使用得当,它将代表应用程序对应用程序级别的数据执行各种加密操作,而不会将必需的密钥材料暴露给应用程序的主机内存。此外,当设备的硬件支持时,这些设备级密钥存储在制造商的受保护硬件中,可以使用户要求使用前输入设备密码或指纹。
注册后,要求用户通过PIN登录(或PIN的指纹解密)。除了PIN之外,登录时还会向服务器发送四条信息以验证用户身份:通过Android的ANDROID_ID系统生成的唯一设备ID,客户ID号,“ nextKey”值和“ auditToken” 。 nextKey和auditToken最初是从API服务器接收的,除非由服务器更新,否则从不修改,并且似乎未在任何设备端加密中使用。
验证后,用户可能仍需要提供身份证明,这需要从主屏幕访问验证菜单(上图a)。当用户选择标识选项时,该应用程序将启动Jumio的子活动以选择文档类型(上图b)。提示用户拍摄其身份证或护照的照片(上图c),并拍摄自拍照照片(上图d),此后,对话框提示用户输入其注册的投票地址(未显示)。然后,该应用程序会将数据上传到Jumio的服务器中,包括用户的照片,选民的姓名,地址和照片ID(上图e)。最后,在收到Jumio的服务器的响应后,该应用程序会将用户数据的一部分发送到Voatz的服务器也一样。
值得注意的是,在此过程中拍摄的照片右下角的小而透明的徽标(上图c,d)似乎是向用户显示Jumio存在的唯一应用内指示。这是用户可能知道敏感数据正在发送给第三者的唯一方法。
(4)投票
验证用户身份之后,应用程序将向服务器查询与允许选民参与哪些事件有关的配置数据,从而激活菜单供用户从可用事件中选择(请参见下图)。此配置数据包括选民可以访问的所有事件,这些事件的选票,每个选票的特定问题以及这些问题的可用选项。
投票者从选择事件(上图a)开始,然后能够查看与这些特定事件相关的问题,选择响应(或完全不响应,取决于事件配置),并将其响应提交给服务器。在提交时,再次要求用户解密其PIN(上图e),将其用作最终身份验证机制,然后再将选票提交给服务器
重要的是要注意,投票不会直接提交给任何类似区块链的系统,而是通过此API服务器提交。此外,尽管要求用户在提交之前进行身份验证,但与AES-GCM算法关联的MAC和封闭TLS会话的用户除外,否则不会对投票文本本身进行签名。提交或交换的类似区块链令牌的唯一指示是“ auditToken”,但此字符串不会被应用程序更改,并且看起来是一个静态值。下图显示了用户提交投票后以AES加密方式发送到服务器的全部内容。
(5)设备端防御措施
在执行分析的过程中,发现Voatz采用了多种混淆技术,利用了第三方病毒扫描服务,并使用加密的数据库来保护本地存储的敏感数据。在下面进行探讨:
磁盘上加密数据库:完成注册后,使用Realm数据库框架,将用户的登录凭据(nextKey,auditToken和客户ID号)以及投票者的整个投票历史记录存储在加密数据库中。当Voatz的应用尝试查询数据库时,密钥库会要求用户通过指纹或PIN进行身份验证(请参见上图f),然后再执行所需的操作。
数据库的密钥直接链接到用户的PIN;具体来说,系统在PIN上运行带有SHA1的PBKDF2以生成密钥。回想一下,这允许系统使用指纹作为解密数据库的另一种方法-登录后,应用程序可以通过指纹进行身份验证以解密PIN,或直接使用PIN解密数据库并获得对其余数据库的访问权限的应用程序。
第三方恶意软件检测(Zimperium):Voatz利用称为Zimperium的第三方防病毒解决方案。在初始化时,Voatz应用程序将Zimperium的代码作为单独的服务加载,并注册了一系列回调,如果Zimperium检测到威胁,这些回调将向API Server发出警报。该消息包括威胁的详细信息,用户ID和设备ID,以及有问题的设备的IP地址。
Zimperium的扫描包括(但不限于)已知的概念漏洞利用证明,已知的恶意软件以及用户安装了已知超级用户工具(表明设备已生根/越狱)的指示器。 此外,如果用户似乎已启用Android的本地调试功能(例如远程adb调试),则Zimperium将触发回调。
部分代码混淆和打包:如果开发人员无需采取额外的预防措施,则可以通过APKTool和JADX 等易于使用的工具轻松地将Android应用程序解压缩并反编译为原始源代码。 然而,大多数Voatz应用程序是使用打包程序进行混淆的,该打包程序会带来一些分析障碍。
首先,许多类和函数名称被重命名为随机Unicode字符串。除了使最终的反编译更加难以阅读之外,这种混淆还导致APKTool崩溃,而JADX成功完成了反编译,但使许多资源文件(包括应用程序字符串和图像)不可读。 Voatz的应用程序还包含一些zip文件,这些文件似乎执行了zip炸弹攻击,该攻击破坏了一些unzip的实现。最后,所有包含的第三方ARM本机库都未能在使用的IDA版本中打开,尽管目前尚不清楚这是否是一种主动的防御措施,因为它们已使用Ghidra成功拆解。
通过密集的手动分析能够克服混淆,并且在某些情况下,应用程序本身可以帮助恢复原始变量名。首先,该应用程序使用许多内部依赖Java反射库,从而使混淆器无法重命名以此方式引用的任何类或方法。其次,该应用程序及其某些库是用Kotlin编写的。尽管某些Kotlin习惯用法无法轻松地反编译为Java,但使用Kotlin总体上有助于逆向工程-Kotlin编译器在代码中插入了许多运行时检查,每个运行时检查都包括一个带有错误消息的字符串,以便在失败时显示。类、函数和变量名通常存储在这些字符串中。
字符串混淆为了进一步使静态分析复杂化,使用基于XOR的方案对控制设备握手的加密参数的字符串(例如“ AES-GCM”)进行混淆,然后在运行时对其进行自动混淆。由于以这种方式隐藏的字符串包括由Kotlin编译器生成的错误消息,因此这似乎是仅针对这些特定方法启用的自动化工具的结果。
(6)过程中未确认的部分
由于无法访问Voatz的服务器,并故意避免与之进行任何交互,因此不幸的是,在某些情况下,无法确认系统中某些第三方参与者的行为。
Zimperium执行确认:Zimperium可能会发回其自己的服务器,以确认该服务正在运行,然后直接向Voatz传达Zimperium是否处于活动状态。没有公开文档表明Zimperium的工作方式,并且从Zimperium关联的回调中没有发现这种情况的发生。
Jumio选民确认:Jumio的文档详细讨论了Jumio的服务器进行通信以进行用户带外验证的能力。由于有据可查,因此假设Voatz的API服务器正在直接与Jumio通信以进行ID验证。
投票收据和区块链:根据Voatz白皮书,投票记录在分布于多个Amazon AWS和Microsoft Azure数据中心的32个节点的许可区块链上。2019年丹佛市大选审计的录像显示,审计过程包括手动解密指示交易的区块链块,获得多个字段,包括选民选择的哈希值。然后,审核员通过查找表将哈希值与显示选民选择的PDF进行手动比较。据称,这些PDF也已由选举当局以纸质记录的形式打印出来,并且是通过电子邮件发送给选民的收据的删节版本。虽然在丹佛大选中,许多选民回答说他们收到了收据,但没有证据表明Voatz可以自动验证收据的交付。
在代码探索中,没有发现任何迹象表明该应用程序已接收或验证已通过身份验证或存储在任何形式的区块链中的任何记录。没有发现哈希链,透明度日志或其他包含加密的证据。得出的结论是,Voatz对区块链的任何使用都可能纯粹发生在后端,或者通过使用其他某种机制在接收阶段。
唯一引用应用程序内收据的对话框来自一个对话框,该对话框要求从服务器输入密码,以及一个QR码阅读器。出现选民收据对话框的文本,以确认确实将选票收据通过电子邮件发送给选民,并用密码进行加密(参见上图)。 Voatz的QR码阅读器具有用于接收组织ID的带外方法的功能代码,该方法可让投票人参与特定事件,还有一个用于验证投票的未实现的存根-尝试扫描会启动投票的QR码。投票验证过程将导致图中显示“尚不支持”消息。
0x05 Analysis and Attacks
在本节中,将假设攻击者具有控制选举系统特定部分的角色,探索各种攻击。这包括三个对整个基础架构的各个部分具有不同访问权限的攻击者:
1.攻击者已经控制了用户的设备,
2.攻击者已经控制了Voatz的API服务器,
3.网络攻击者可以拦截选民设备和API服务器之间的所有网络活动,但没有关键材料或对选民和Voatz系统的其他访问权限。
鉴于打算使用Voatz的选举具有高风险性质以及相关攻击者的资源,因此这些攻击者是可信的。可以通过需要各种技能水平的多种方式来获得用户设备的root控制权,例如通过恶意软件,亲密伴侣或配偶等。网络攻击者可能以多种形式出现,包括那些利用用户的家庭路由器(众所周知不安全),用户投票所在的未加密咖啡店wifi或用户的ISP。
出于多种原因,在此分析中包括Voatz的API服务器很有用。尽管访问Voatz的服务器可能比用户的设备和/或服务器与用户之间的网络基础结构更加困难,但是如果要提高Voatz的使用率,以至于他们的用户群可能会改变选举结果。此时,情报机构利用未公开的0day漏洞,间谍活动,胁迫或人身攻击,花费大量资源获得关键系统或关键材料的访问权限。此外,区块链的主要承诺是,它提供了一个环境,在该环境中,选民和选举当局可能能够信任该系统,而不仅仅是Voatz,该选举已经正确进行。
有效性的假设和威胁由于缺乏有关服务器基础架构或后端的具体实施细节,因此无法对Voatz登录到其区块链的内容,服务器的运行安全性,区块链或所使用的加密密钥做出假设。
请注意,这是对该系统中使用区块链的乐观分析。不太可能每次交互都通过区块链存储,并且他们自己的西弗吉尼亚州选举文档表明,验证服务器在Amazon AWS和Microsoft的Azure之间平均分配,这表明它们的方案容易受到Microsoft或Amazon秘密添加资源和执行一次51%的攻击,或执行只需要计算量1/3的自私的挖矿攻击。
尽管在有限的系统访问权限下,在可证明的问题上表明该分析足以证明许多重大攻击。
(1)客户端攻击
发现在设备上具有root特权的攻击者可以禁用Voatz的所有基于主机的保护,从而秘密控制用户的投票,公开她的私人投票,并泄露用户的PIN和其他用于向服务器验证身份的数据。
a)逃避基于主机的恶意软件检测
Voatz中包含的Zimperium SDK设置为检测调试和其他尝试修改应用程序的尝试,并收集有关发现的任何恶意软件的情报。默认情况下,它会检测到安全分析,阻止该应用正常运行,并向API服务器通知操作。
Zimperium通过在加载应用时启动的一组回调与Voatz应用进行通信,并最终与Voatz的API服务器进行通信。因此,绕过Zimperium就像覆盖其入口点以防止SDK执行一样简单。 Xposed Framework提供的挂钩实用程序使攻击者能够以最小的努力转移控制流-下图显示了禁用其两个入口点之一的代码;总体而言,禁用Zimperium需要四行代码,并且对用户而言是不可感知的。
假设Zimperium和Voatz之间没有带外通信,并且在Zimperium的文档或对应用程序的分析中都没有发现该服务存在的迹象。另外,如果确实存在这种通信,那么只会稍微增加破坏这种通信所需的精力;人们可能需要钩连Zimperium的其他执行检测或直接与其服务器通信的部分。
b)完全控制用户(打开或关闭设备)
一旦基于主机的恶意软件检测被中止,具有root特权的攻击者就可以完全控制用户,用户看到的内容,并泄露用户的投票决定和个人信息。
窃取用户身份验证数据:尽管已使用可利用Android密钥库的密钥进行了加密,但用户的PIN和其他登录信息并未存储在受保护的存储区中,并确实通过了应用程序的内存。泄露这些关键信息将使远程攻击者可以将用户直接伪装到Voatz的服务器上,甚至是在设备外。
发现具有root用户访问权限的设备的攻击者可以秘密窃取PIN和Voatz的其余身份验证数据。在执行分析的过程中开发了一种工具,该工具可以在使用SKaes加密设备以及将数据加密并存储到本地数据库之前,拦截并记录设备与服务器之间的所有通信。这样就可以以纯文本形式查看用户的原始PIN和其他身份验证数据。尽管概念证明不止是通过Android的系统调试功能(adb logcat)来记录此信息,但通过网络广播这些请求,对其进行修改或完全停止它们都是微不足道的。
攻击者不必等到用户决定投票时,对Voatz方案的离线攻击也是完全可能的。回想一下,数据库仅需要用户的PIN即可解锁,并且绝不限制尝试此PIN的次数。更糟糕的是,该应用程序人为地将PIN码严格限制为8个数字字符,这意味着可能只有100,000,000个PIN码。暴破攻击可以通过重复生成密钥并尝试解密数据库,恢复PIN码,登录,轻松地重新发现PIN码。信息以及用户的投票历史记录。
这样的暴破攻击可以相当迅速地进行。请注意,攻击者无需在设备上执行此操作,因为可以导出加密的数据库文件。实施了此攻击的原型,并确认攻击者可以在相对较新的商用笔记本电脑上大约两天内对密钥进行暴力破解。得出的结论是,这种威胁是可行的,特别是如果在多次选举中使用同一装置的Voatz。
隐形用户界面修改攻击:可以轻松修改应用程序,使其提交攻击者想要的任何投票,但呈现的UI与应用程序记录用户提交的投票时相同。如果选举配置允许投票,则该攻击还有一种变体,已在爱沙尼亚电子投票系统上进行了演示,允许用户正常投票,但是一旦用户关闭应用程序便可以更改投票。
同样,如果攻击者选择了不希望的候选人,则攻击者可能会悄悄地抑制选民的选择,但会继续显示验证对话框,就好像投票已经成功进行一样。对于选举当局来说,这与没有提交选票的选民没有区别。对于选民而言,这与正确投票没有区别,至少直到当局发布该次选举的选民记录为止。
(2)服务器攻击
假设乐观地使用了威胁模型中讨论的区块链,Voatz的服务器仍能够秘密侵犯用户隐私,更改用户的投票并控制选举结果。
特别是,发现协议不能保证API服务器主动更改,查看或发明来自设备的通信。服务器可以在用户设备与另一端存在的任何区块链或mixnet机制之间执行主动MITM攻击。请注意,除了AES加密外,在设备和服务器之间没有执行任何其他加密操作,包括通过设备或设备的密钥库进行的任何类型的加密签名。如果服务器本身执行这些加密操作(服务器可以使用SKaes),则它可以在将用户的选票提交给任何外部日志之前对其进行解密,并令人信服地重新加密要发送至日志的任何值。
即使SKaes对服务器不可用(例如,如果所有加密操作都在硬件安全模块(HSM)中执行),那么它也必须至少有权访问未加密的TLS流,因此服务器仍然可以使用执行主动的MITM攻击。
回想一下,没有将公钥认证作为设备握手的一部分来执行,并且设备也没有证据或验证这些交互曾经记录在区块链上。因此,服务器可以在HSM之前终止连接,并通过例如重播整个设备握手以及所有将来通过HSM返回到区块链的通信来任意模拟用户的设备。
发现能够查看用户的网络活动而无需访问任何关键材料的攻击者仍然可以推断用户的投票方式。具体来说,在本节中演示该应用程序泄漏了纯文本的长度,这可以使攻击者至少了解用户投票支持的候选对象。
该漏洞源于用户选择完选项后将选票提交给服务器的方式。投票提交中的“选择”列表仅包含用户选择的选项,并且与该选择一起包括服务器提供的有关该候选人的全部元数据。反过来,这导致密文的长度根据选民的选择而变化很大。
上图b显示了在上图a的应用程序内显示的两个候选者之间发送到服务器和从服务器发送的元数据的差异。请注意,所提供的URL的长度也可能是可变的,并且这些URL的长度对于用户来说是完全不可察觉的。
通过在应用程序和API服务器之间设置代理并记录所有通过tcpdump的通信来验证此漏洞。然后,使用该应用两次参加选举,一次是为“空缺”候选人投票,一次是为“长期”候选人投票。上图显示了两次运行中得到的密文大小(以字节为单位)(特别是TLS应用程序数据字段的每个数据包的长度)-在两种情况下,第2个数据包(第1个数据包)都与实际的投票提交相对应,其余均为其他杂项协议投票和用户维护中涉及的查询。加密数据包的长度明显泄漏了选择的候选对象,可以轻易地将其大小与协议中的其他数据包区分开,重要的是,其大小不受用户变化的任何参数的影响。
值得注意的是,具有讽刺意味的是,Voatz的其他加密技术加剧了此漏洞。在典型的HTTPS连接中,在对明文进行加密之前先对其进行gzip压缩,这提供了一定的保密性,因为分组密码填充可能更可能隐藏明文之间的大小差异,或者至少混淆明文的大小。由于Voatz会在传出数据到达HTTPS层之前对其进行加密,并且压缩已加密的数据包不会减小其大小,因此压缩步骤变得无关紧要,并且最终数据包的密文大小将与纯文本的大小保持成比例。结果是(尽管此处显示的数字确实有意添加文本以夸大教学目的),但只有几个字节的差异可能会很明显。
为了使这种攻击起作用,做出以下两个假设:
1.攻击者可以自己使用该应用程序并学习显示的投票选项(也许自己投票并获得投票选项的JSON表示形式)。
2.服务器没有以某种方式将选票发送到填充长度相同的设备。
鉴于之前所述的攻击,第一个假设可能不是问题。例如,攻击者只需是注册选民,或者以前已经利用注册选民的设备并目睹了他们的投票选项,或者只是目睹了选民以特定方式进行选票并记录了结果。
第二个假设对于攻击者来说也可能不是问题,因为发现几乎没有证据表明该应用程序正在防御这种攻击-没有代码可以在投票问题出现之前删除多余符号或空格以及其他交易,涉及敏感的用户信息是完全在设备端生成的,并且在很大程度上与服务器无关(例如用户的姓名,年龄和位置),也没有填充。最终即使这种假设不成立,攻击的有限形式仍然可行:如果用户不投票给候选人,并且完全跳过该问题,设备将向服务器发送一个空列表。
请注意,通过此辅助渠道,攻击者可以在选票到达服务器之前检测出选民的意图。如果攻击者可以阻止到达服务器的数据包(例如ISP或网络所有者),则攻击者可能会故意丢弃此数据包并自适应地阻止投票人提交选票。对用户而言,这似乎是Voatz结束时的服务中断,并且可能会使体验降级到足以使选民根本无法投票的程度。
(3)其他观察和缺点
隐私和地缘战略问题:总结Voatz的隐私影响,发送给Voatz和/或与此服务相关的第三方的信息包括用户的电子邮件,实际地址,确切生日,IP地址,他们自己的当前照片,他们的设备的型号和OS版本以及首选语言。识别提供给Jumio和Voatz的数据,Voatz不会向用户表示有关此类信息的保留,存储时间或是否共享(超出了未明确讨论的一般隐私政策)更糟糕的是,如果Jumio被证明确实是恶意的,则它有可能完全拒绝验证特定用户。此外,注意到该应用在首次登录时会请求读取用户GPS的权限,尽管尚未确定该信息对应用的确切作用。
据报道,Voatz软件的使用之一是UOCAVA(海外军事)选民,这表明泄露有关其用户的信息也有可能为攻击者提供有关美国军事部署的信息。请注意,除了发送给Voatz和Jumio的PII之外,仅选民的IP地址就可以承载有关用户位置的信息,因此所有第三方都可以大致了解用户所在的位置(Jumio,Crashlytics,Zimperium)。最后,Voatz大量使用了来自各种第三方开发人员的代码。
旁载恶意软件和不受支持的设备的风险:Voatz的安全性要求该应用程序只能在某些设备上使用,特别是在具有最新操作系统的现代手机上。他们通过应用商店首选项来实现此目的; Google Play商店将仅允许某些设备型号安装该应用程序,并且如果该设备不符合Voatz的标准,则该应用程序将不可见。
这样,攻击者就可以通过建立一个看起来合法的网站,其中包含有关如何投票的信息,并指示读者安装恶意版本的Voatz应用,诱使不支持设备的用户安装包含恶意软件的应用。这不是假设的问题-流行的游戏Fortnite为避免Google的费用而在Play商店外发布后,恶意软件作者使用非常相似的策略欺骗了许多幼稚的用户。
强制性:该应用程序从不要求选民在注册后登录时重新输入PIN,并且似乎不会向用户显示投票是否被重新投票或破坏了。这表明该应用使用户容易受到强制攻击。考虑选民睡着了或丧失能力。假设攻击者可以物理访问设备和用户,并且可以通过用户的指纹将设备解锁,那么攻击者将很容易能够代表用户投票。
(4)选民验证收据
在之前中提到的密码请求功能之外,没有提及应用程序中的收据,而且应用程序本身似乎也没有提供任何方法来验证选票是否已记录在记录的区块链中,或者超出了该范围。 Voatz的文档证明存在任何此类记录区块链。
无论如何,提供这种收据都存在重大的实际挑战。如果该应用确实提供了某种具体的密码验证,则可以允许用户证明自己的投票方式-违反了无记名投票的要求,并允许选民出售自己的选票。如果收据以加密的PDF格式到达,则尚不清楚Voatz如何向用户验证加密的PDF实际来自Voatz,并且,如果在应用内进行了验证,那么如何保护UI的验证过程§5中介绍了修改攻击。
最后,收据存在重大的可用性问题,需要进行分析-如果选票和收据不匹配,用户将进行何种补救?用户如何知道何时需要收据?如果收据已发送或延迟到选举后的证明,是否不会纠正错误?设计的透明性将帮助选民了解这些折衷,如果没有进一步的信息,就不可能对这些收益进行全面分析。
0x06 Discussion & Conclusion
责任披露:鉴于对选举安全问题的敏感性日益提高,并且出于对潜在报复的担忧,选择通知国土安全部(DHS),并通过其网络安全和基础设施安全局(CISA)匿名协调披露。在公开宣布发现之前,已收到供应商对漏洞的确认,尽管他们对问题的严重性存有争议,但似乎可以确认是否存在侧通道漏洞和PIN熵问题。还直接与受影响的选举官员进行了交谈,以减少损害任何选举程序的可能性。
漏洞赏金的实用性:如前所述,使用了2020年1月1日的最新版本的应用程序。Voatz通过名为HackerOne的第三方提供了该应用程序的“漏洞赏金”版本。由于某些原因选择不检查此版本的应用程序。
其次,至关重要的是,赏金并没有提供对Voatz服务器基础结构的任何其他有用的见解,也没有为API服务器提供任何可测试的源代码或二进制文件。确实,做出此决定后,Voatz的漏洞赏金应用程序和Google Play应用程序都无法连接。
最后,尚不清楚发现的许多问题已被漏洞赏金所涵盖。例如,假设攻击者在设备上具有root特权,而漏洞赏金会拒绝需要物理访问的攻击。由于开发使用了需要物理访问的手动越狱技术,这不同于一个黑客组织(该黑客组织很可能使用0day漏洞允许远程利用),因此该限制将排除本文所有的设备端攻击。此外,赏金计划将MITM攻击明确地排除在范围之外,这将消除侧信道攻击或对控制API服务器的攻击者的潜在攻击的分析。
得出的结论是,漏洞赏金与提高该系统的安全性并没有特别的关系,并且可以作为此类约定可能无法像人们期望的那样有效的一个例子。
关于透明度的说明:增加透明度可能会帮助Voatz更好地保护其系统。发现的漏洞都不是新颖的。实际上,在加密工程和研究文献中,侧信道攻击是众所周知的,许多其他问题似乎是不良设计的结果。如果Voatz对他们的系统更加公开,那么这些故障将很容易被识别。
同样清楚的是,Voatz缺乏透明度并没有严重阻碍发现本文中提出的缺陷的能力,并且同样无法阻止资源丰富的攻击者采取同样的行动。如果有的话,情报机构不太可能花费本文中花费的大量时间和精力来遵守法律。在分析中从未故意连接到Voatz的服务器,而是将所有通信(包括Crashlytics,Jumio和Voatz的API服务器)重新定位到自己的基础架构。另一方面,犯罪分子或外国情报机构可能对破坏正常运行毫无疑虑,包括通过连接到Voatz的服务器或直接攻击Voatz。因此,此类攻击者将更容易发现可利用的漏洞,并且有可能发现本文无法找到的缺陷。 Voatz的后端,服务器基础结构,区块链实现及其服务的其他部分可能存在无法进一步访问而无法分析的问题。
最后,缺乏有关第三方服务使用的信息对用户而言是可疑的,发现的唯一一条向用户表明Jumio存在的通知是放置在应用程序照片右下角的徽标,没有发现完全使用Zimperium或Crashlytics的迹象。此外,尽管隐私政策确实声明“我们可能出于提供服务的目的将个人信息转让给第三方”,但它从不透露什么信息或向谁透露。一个有理智的人可能会误解并认为他们的数据,尤其是其ID信息仅与Voatz共享。尽管在隐私权政策中已从一般意义上公开了它,但认为投票系统作为至关重要的民事程序,应保持更高的标准。
结论:从西弗吉尼亚州,犹他州和科罗拉多州开始,美国就冒险进行互联网投票。尽管专家表达了担忧,但一家公司还是出售了使用生物识别技术,区块链和硬件支持的加密技术进行安全移动投票的承诺。
然而分析表明,此应用程序不安全。被动的网络攻击者可以发现用户的投票,而主动的攻击者则可以打断用户的投票。控制用户设备的攻击者还可以控制他们的投票,很容易就忽略了应用程序的内置对策。对协议的分析表明,控制服务器的人可能有完全的权力观察,更改和添加选票。
这项工作提出的问题超过了投票率的潜在收益,正如在本文中所显示的,Voatz中的漏洞和由于缺乏透明性而引起的问题是非常真实的。这里的选择不是投票率,而是控制选举结果的攻击者和选民隐私的丧失,从而损害了选举的完整性。
考虑到本文所讨论的失败的严重性、缺乏透明度、选民隐私的风险以及攻击的琐碎性质,建议放弃将这个应用程序用于高风险选举的任何近期计划。还建议将投票系统(和相关系统,例如电子投票书)的任何未来设计公开,并公开其详细信息,来源,威胁模型以及社会和人为过程。
请注意,无论应用程序声称使用了区块链,生物识别技术,硬件支持的飞地和混合网,本文中提出的所有攻击都是可行的。和其他研究人员一样,仍然对基于区块链的投票解决方案所提供的安全性持怀疑态度,并认为所谓的一系列工具使用并不表示解决方案可以提供任何真正的安全保证。
目前尚不清楚是否有任何纯电子移动或互联网投票系统可以实际克服选举系统上严格的安全要求。确实,这项工作增加了在纯电子方法中发现的一系列严重缺陷,并支持以下结论:当前标准(使用选民验证的纸质投票和风险限制审计的独立于软件的系统)仍然是最安全的选择。