在3月的荷兰大选即将到来之际,安全专家Sijmen Ruwhof通过Youtube上有关荷兰大选使用的计票软件介绍视频,对荷兰大选中使用的投票计票软件OSV programma进行了全面的安全分析和风险识别。最终,荷兰国家选举委员会通过Sijmen Ruwhof发表的分析文章,确认这套软件系统存在安全隐患,并对外宣布,在接下来的总统大选中,将不会使用任何电子投票计票系统,改用原始的手工计票。以下为Sijmen Ruwhof对OSV programma计票软件的详细安全分析。
正如大家所听闻到的那样,去年的美国总统大选,卷入了大多黑客暗影,从始至终的一系列网络攻击对政治进程造成的影响,意义深远。这或许将成为载入史册的经典案例,也将开启网络攻击的新篇章。
对OSV programma的分析原由
1月中旬,荷兰RTL电视台记者曾联系我,想就快要开始的荷兰大选是否会面临黑客攻击作一些采访。而据他们透露,当前荷兰选举计票系统软件使用了不安全的SHA1机制,甚至还存在弱口令。对此,我表示惊讶和感慨,我们竟然还敢使用电脑计票系统?
荷兰官方早在2009年就禁止使用电子投票和计票系统
2009年6月,出于网络安全原因,荷兰政府宣布禁用电子投票系统进行选举,之后改用规定的红色铅笔和白纸投票。RTL电视台记者告诉我,虽然选民使用铅笔和纸质选票手工投票,但在后台计票过程中,为了方便高效,负责选举的官员却把选票输入电脑程序进行计票。
2009年后电子计票系统一直被在选举后台使用
该电脑计票程序运行后会按不同区域生成合计的投票计数,并存储在一个USB载体中,通过向上级区域层层汇总,最终形成的电子数据将交由中央选举委员会进行合计。
使用电子计票系统面临的严重风险
如果没人质疑最终选票的电子合计结果,也将不会对纸质选票进行复审核实,如果没有纸质选票复审过程,也就意味着,这种纸笔方式投票对电子投票系统本身而言就是一种安全风险(风险1:严重),因为,纸质选票产生的结果最后一样是通过电子计票程序完成,没有任何人工核实。对于这个事实,我既惊讶又害怕。
其实在这些关键应用方面,任何有点IT技能的人都清楚,电脑程序并不总是可信。因为无论采取什么加固措施,总会存在被黑风险,更别提面对的是那些经验老道技术高明的国家支持黑客,直接点说,在他们面前,我们都将束手无策。
选举委员会对当前的网络威胁毫无意识
现在的情况是,荷兰国家选举委员会对当前的网络威胁形势毫无认知,竟然还认为他们使用的选举计票软件非常可靠,不存在任何安全风险。
我对这套2009年以来一直在用的,决定着国家元首的计票软件系统非常好奇,因此,我决定仔细研究研究。
对OSV programma的详细安全分析和风险识别
关于该计票软件,荷兰国家选举委员会制作了几个操作演示视频投放到Youtube上。在视频中,选举委员会讲师讲解如何用该软件进行选举计票:
视频泄露了其内部网络共享信息
视频刚开始很无聊,但在01:19之后就变得有点意思了,该讲师无意间打开了Windows的资源管理器,从画面上可以看到,系统中存在8个内部网络共享位置,其中一个清楚地标记为“阿姆斯特丹”(Amsterdam)。内部网络设置对于投票系统来说,算是比较保密的技术信息了,可惜,该讲师却通过这种方式无意间泄露了!(风险2:低)
计票软件使用了不安全的网页服务
在视频介绍中,我注意到在计票软件的初始部署时,需要在使用者电脑中安装一个web服务模块,之后请求该web服务器并打开一个浏览器页面才能正常进行计票操作。从安全角度来说,桌面应用程序使用基于浏览器的服务,可能会存在以下安全风险(风险3:中):
为黑客增加攻击面
由于web服务的存在,所以攻击者没有必要通过特定的TCP端口连接计票软件
如果主机防火墙策略设置不当,网络内其它主机可以无限制访问到web服务
如果网络内路由器开启了UPnP功能,web服务可能会直接暴露在互联网上
计票软件可以安装在任何电脑上
视频介绍,该计票软件可以安装到任何电脑中,而荷兰国家选举委员会竟然未对软件的安装环境作出任何安全性限制(风险4:高),这将会面临以下风险:
一些缺乏更新或未安装杀毒软件的老旧电脑同样适配
未对个人携带电脑作出安装限制
计票软件支持存在很多漏洞隐患的XP系统,另外,未对一些不安全的浏览器版本作出限制
对于一些关键系统应用,为了从理论上保证绝对的安全,应该禁用互联网连接,或采用其它方式实现某种意义上的物理隔绝。虽然该计票软件安装文档上注明,安装系统应该禁用WIFI,但却未对互联网网络连接作出限制,这种疏忽让我吃惊。
计票软件使用了不安全的HTTP连接
在对本地本地web服务的访问中,计票软件使用了不安全的HTTP浏览器连接(风险5:中),虽然这种本地浏览器流量不会形成直接威胁,但也存在其它安全风险:
如果投票系统或区域内置其它外连链接,将会泄露HTTP的referrer头信息
在浏览器和web服务之间形成了攻击面,攻击者可能会在电脑中安装恶意软件,对计票软件的发起流量进行监听
如果安装系统内使用了其它HTTPS连接,就又会激活浏览器启用其它安全性设置,如网页缓存设置等,对计票软件的正常使用造成干扰
所以,对于这类关键系统应用,即使使用了本地的HTTP服务,最好请使用HTTPS方式。
计票软件未针对哈希校验和密码口令的使用作出强制说明
在视频介绍的02:41时刻,可以看到以下画面
视频里,虽然软件介绍者的操作速度很快,但在其中一个瞬间,一幅重要画面闪现而出,计票软件需要用户手工输入一串40个字符的HASH值判断投票结果是否被篡改,但是,介绍者却对此项重要安全设置只字未提,完全忽视(风险6:高);更糟糕的是,计票软件却没有强制用户输入校验HASH码(风险7:高);而且,让人觉得意外的是,这些HASH码使用的竟是不安全的SHA1加密方式(风险8:高),而SHA1只适用于一些小型文件和服务的校验。
哈希值文件和选票数据文档生成在同一文件夹内
在视频的02:52时刻,可以看到以下画面:
画面中,生成的XML文档内包含了选票计数,而为了保证每个XML文档的完整性,将利用不同SHA1哈希值对每个XML文档进行校验,如果XML文档被更改,将会产生不一样的SHA1值。而生成的PDF文档内就包含了对XML文档进行校验的SHA1哈希值。
PDF和XML文档的创建过程
当计票软件生成包含选票计数的XML文档时,同时也会创建一个对应的,包含由计票软件生成SHA1哈希校验值的PDF文档,该文档为打印之用,而哈希值理论上不会被黑客远程更改。
计票软件生成的这些XML和PDF文档随后将存储到一个USB载体中,这个USB载体将被通过物理转移方式递交到上一级选区,上一级选区通过汇总所辖管地区的所有XML文档,并把其输入到计票软件中进行电脑程序计票。
未加密保护的XML文档
计票软件生成的,包含选票计数的XML文档没有任何加密保护设置,在USB载体的物理转移中,任何人都可以对其内容进行篡改(风险9:高)
生成的PDF文档在打印之后应该删除
包含哈希校验值的PDF文档在打印之后,应该立即删除,然而视频讲解者却没意识到这个问题,坦然地把其和XML文档保存在同一个文件夹中(风险10:中),计票软件系统也未就此发出任何强制删除PDF文档的安全提示(风险11:中)。打印PDF文档是可选步骤,当然,有了电子数据谁还会想着去处理纸质文档呢?
另外,针对SHA1哈希值的校验,视频讲解者展示了如何在PDF阅读器中对SHA1值进行验证:
我猜想该计票软件设计者的初衷是希望用户能打印PDF文档,用纸质方式进行文档的完整性校验,而视频讲解者并没有真正了解这种意图,同时,软件设计者也没有认真检查过软件的生成文档(风险12:中)。
而且,由于存储XML文档的USB载体无任何加密措施保护,在把数据转移到另外一台计票电脑的过程中,可能会产生安全风险(风险13:高)。
事实上,计票系统开启USB接入方式,本来就是一种非常危险的安全短板,因为不可避免会被插入一些未知的不安全的USB载体,使计票电脑系统面临被黑风险。主要隐患如下:
攻击者使用程序自启动技术,在USB载体上放置可以自动运行的恶意软件
攻击者使用类似BadUSB形式的攻击
即使设置了很好的加密或签名认证机制,利用USB的恶意接入,一样可以绕过这些安全设置(风险14:高),而且针对数百公里外的上一级选区数据文档转移,USB载体方式很容易出现安全问题。
视频讲解者使用了短密码并开启了密码自动保存功能
在03:07时刻,计票软件的登录界面显示以下画面:
讲解者使用了名为“OSV”的用户名,点击TAB键后,发现系统已经自动保存了对应的登录密码(风险点15:中),但讲解者又重新手动输入了长度为3位数的密码进行登录,有点搞笑,我猜想她的密码可能也是“OSV”。
显然,开启密码保存设置后,计票软件可能存在他人未授权访问的情况(风险17:低),同时,计票软件允许设置弱口令的做法也极不安全(风险18:中)。
安全标记Sessionid显示在地址栏
登录进入后,在管理界面浏览器地址栏可以看到如下图所示的链接信息:
仔细观察可以发现session标识jsessionid为可见状态(风险19:低),为了安全起见,应该对cookie机制进行安全设置,如httponly、secure、sameSite等以保护session不被劫持。主要存在的隐患如下:
黑客可能利用该标识绕过登录验证
在不安全的HTTP连接下,该标识符可能被泄露到其它网站
该标识还会被自动保存在浏览器历史记录中
使用了系统高权限运行软件
在03:44时刻可以看到以下画面:
计票软件把用户文件写入到其安装路径:C:Program Files (x86)OSV,一般来说,只有具备系统高权限的用户才能操作该路径文件,而给一些日常性任务赋予高权限本来说是一种安全风险(风险20:中)。而该软件编写者似乎对用户隔离和安全加固了解不够,所以才会把用户文件默认存储到系统限制区域C:/Program Files/ 下(风险21:中)。
恶意软件可以轻易篡改选票
视频在04:08时,画面中显示了包含投票计数生成的XML文档,而讲解者需要通过用户接口导入这些文件让软件进行统计分析:
虽然这些文件是在同一个电脑上生成的,但是在这个步骤却没有进行SHA1校验(风险22:高)。
而且,这些运行有计票软件的电脑很容易通过日常浏览或邮件方式感染恶意软件,而一旦感染上了那些针对选举的恶意软件,它们只需更改存储在C:Program Files (x86)OSV 目录下的XML文档,因为这些文档没有经过任何加密保护和校验,这对黑客来说轻而易举。
包含计票数据的XML文档竟然可以通过电子邮件方式寄出
在视频的04:45时刻,计票软件竟然提示用户可以通过电邮方式把XML文档寄到中央选举委员会:
电子邮件方式传送类似重要数据非常不安全(风险23:高),对于那些想达目的的黑客来说,窃取或更改电子邮件信息非常简单容易,这些软件开发者难道是脑子进水了吗?!
没有任何PDF文档打印提示
视频在生成文档格式介绍中,虽然提到了如何生成PDF和XML文档,以及这些文档将会存储在一个USB载体中被转移到另外一台电脑中,但是没有提及任何打印PDF的提示。
软件加密校验机制越来越糟
从视频讲解中可知,该软件是由德国软件公司开发的,而进行哈希校验的做法也是这家德国软件公司的想法。正常来说,导入XML文档时,必须与USB载体中PDF文档的哈希值进行比较,才可选择下一步导入动作,但一些用户会选择忽略此步骤。因此,为了实现”额外强制性校验“措施,该软件公司想出了以下这招:
必须输入哈希编码的前4个字符进行校验,才能执行下一步动作。由于只要求输入4个字符,对SHA1编码来说,即2^16(65,536)种组合,在强力破解工具面前,这种密码强度算是非常脆弱的了(风险24:高),而正常的SHA1是2^160种组合。所以,从这个角度上来说,目前该计票软件的所谓的“额外安全机制”完全起到了相反的作用,没有任何安全可言!
其它风险漏洞情况
我还进行了其它漏洞识别和检测,由于比较繁杂,就不一一赘述:
计票软件系统直接接入互联网
在部署计票软件时没有IT专家进行指导
计票软件存在部分开源代码
我发现了某处XSS漏洞
没有部署任何日志存储服务,文件信息很容易被篡改
未部署任何入侵检测服务
软件未经任何第三方安全机构或个人进行过安全检测
软件不具备任何可信的安全检测报告
软件信息的完整性很难保证
……
看来选举委员会和其聘请的软件公司完全没有考虑到黑客威胁,这简直难以置信,但是请注意,从以上分析研究可以看出,黑客能以多种方式,实现操纵大选结果的目的,而这些安全隐患,自2009年就一直存在。真心希望从此刻起,荷兰政府能重视选举相关的信息安全,因为这种现状非常糟糕,不可接受!
后记
2017年1月30日,在我发表了这篇文章之后,荷兰RTL电视台邀请我和其它安全专家就我提及的选举系统安全问题进行了验证讨论,节目作了直播;
2017年1月31日,荷兰NOS电视台报道了我的该篇分析文章,并就此采访了负责大选的当值官员;
2017年1月31日,媒体报道,早在6年前,Radboud大学学生MaartenEngberts曾发现了该计票软件的多个漏洞,并发表在其硕士论文中,但荷兰选举委员会一直忽视这些安全漏洞;
2017年2月1日,在多家媒体对该文进行转载报道后,荷兰内政部长Ronald Plasterk发表声明,确认荷兰选举信息系统可能存在一些潜在的安全威胁,并宣布在3月即将到来的荷兰大选中不会使用电子计票软件,将会彻底使用手工计票。
2017年2月3日,《今日美国》节目就此文作了报道。
*参考来源:sijmen.ruwhof,FB小编clouds编译,转载请注明来自FreeBuf.COM