DEFCON 25趣事之“玩转投票机”-华盟网

DEFCON 25趣事之“玩转投票机”

华盟学院山东省第二期线下学习计划

image

前言

这是我第一次参加DEF CON,体验过才理解其中的各种妙不可言!这次举办的“Voting Machine Village”活动就非常有趣,该活动在房间中提供用于美国大选的30台不同投票设备,包括Sequoia AVC Edge、ES&S iVotronic、Diebold Expresspoll 4000等。我和朋友Sean忍不住手痒,于是也参与到这场妙趣横生的活动中去了。

投票设备

由于还没有人在ExpressPoll 5000上有实质性的进展,想要勇(zhuang)于(yi)争(ge)先(bi)的我们毅然选择了该投票设备。

image

其使用了一块过时了的PCMCIA/CF插槽用以传输数据,保存各种数据库文件。辛运的是,活动现场有提供大量可供我们亵玩的PCMCIA卡片,以及一台能将PCMCIA转换为USB的转换器,因此我们可以将其作为笔记本电脑中的一个存储设备来看待。

综合发现

进行初步测试后,对设备也有了一个大概的认识:

机器上安装的是Windows CE 5.0系统

ExpressPoll机器中运行的软件是一款名为ExPoll的.NET应用

ExpressPoll机器上运行的软件的UI是由WinForms完成

专用Bootloader

使用ARM处理器架构

数据库文件存储在内存卡中(稍后会详细讲述)

利用

已经尝试了数个exploit,比如投票机经常都会存在的:缓冲区溢出,Win键的利用,网络攻击等等。心累啊,尝试半天一无所获。

固件注入

将内存卡插入机器然后启动机器,bootloader在第一时间检测名为NK.BIN的文件。如果该文件存在,则将其加载到RAM,之后以无签名验证的方式进行引导,再之后就是刷入固件。
通常Windows CE 5.0的NK.BIN文件是由机器捆绑的ExpressPoll软件进行更新,但攻击者可以上传并运行自定义NT内核,理论上来讲甚至是Linux镜像文件
在ExpressPoll 5000进行测试,果然能够正常加载我们提供的Windows CE:

image

Bootloader注入

与固件注入利用非常相似,bootloader在引导时也会查找EBOOT.BIN文件进行更新检测,其加载也不需要验证签名,但我们没能找到能在该机器上正常运行的bootloader。然而这个思路是没有错的,因为事实上我们的EBOOT.BIN是有刷入,且取下内存卡重启时该文件依旧存在。我说这话的意思也可以理解成这台机器被我们刷成砖了。嘿嘿嘿,DefCon老板赶紧免费给我换一台

重载.resources文件

当点击Launch Express Poll按钮,启动ExpressPoll搭载的软件时它将会读取内存卡中名为ExPoll.resources文件,这是用来定义APP内各种诸如翻译文本,图像,按钮,布局等等资源的资源文件。它通常被用于对注册过程的重载以及自定义(比如添加你自己头像来替换默认头像)
该系统存在的缺陷则是按钮(或者潜在的其他UI元素)可以被重载执行不同的操作,例如运行存储在内存卡中的可执行文件(需要挂载)或者执行命令
如果找到ExPoll.resources文件,它将在第一时间加载到内存中进行使用,同时还会将其复制到设备的内部存储以方便再次使用。
创建一个随机的.NET .resources文件,将其命名为ExPoll.resources之后复制到内存卡中即可确认该漏洞。我们将其传入机器,按下Launch Express Poll按钮,之后如预期一样返回错误提示。Woohoo!机器确实有加载该文件。由于同时还复制到内存中,如果你传送的是一个损坏的文件那么机器本质上来说也就变砖了(不能点击Launch Express Poll按钮)

漏洞

随着前文对exploit的叙述,我们还发现可用于有效攻击的数种安全漏洞

用户名/密码硬编码

当你打开ExpressPoll软件,会被要求键入以数字开头的用户名/密码
以下这组用户名/密码将以硬编码方式传递给软件:

Username: 1

Password: 1111

未加密的SQLite3数据库

启动ExpressPoll软件时,它会在内存卡中搜索PollData.db3文件。这是一个标准的未加密SQLite3数据库,其中包含了票数,党派,选民信息等。利用这些信息,攻击者可以进行多钟类型的攻击:

数据泄露:在进行投票之前,攻击者使用自己的空白内存卡去替换机器内的,之后在投票结束后悄悄的把这张卡片换回来。以此获得投票数据库(其中包括:姓名,地址,SSN码后4位,签名以及其他信息)

伪造选民信息:攻击者可以使用虚构的选民信息(比如改变其投票结果,签名等)来替换真实的数据库

其他攻击方式:当你获得整个数据库之后,不要吝啬你的想象力!

image

两个开放的USB端口

该模型结构减少了许多威胁,但并不是就没有了威胁。攻击者可以插入任意多个USB设备(例如一个USB Rubber Ducky或者LAN Turtle)以进行攻击。我使用Bash Bunny向其中一个文本框发送无意义的a字符串,尝试触发缓冲区溢出然后导致该.NET应用崩溃。

image

默认的WinCE Web服务

Windows CE Web服务默认开启80端口,这是一个潜在威胁点。使用该服务没有什么发现,留待以后进一步研究。

尝试其他攻击方式

尝试进行其他攻击,但是没能成功

尝试内存溢出

使用Bash Bunny,我写了一个向文本框不断发送无意义的a字符的payload,将其插入机器运行大约一小时之后机器之后变得超级卡,但没有崩溃。

再次尝试内存溢出

使用之前提到的SQLite3数据库ConsolidationMaps表,我将其中一个映射镜像指向了一个大小超过1GB的文件之后再进行加载。如我预期一样,它没有退出.NET应用。它返回了一个malloc()内存不足的错误,但依然没有让应用崩溃,仅仅只是重启而已

安装Grub

我尝试给ARM架构创建一个Grub镜像,但这项工作不能在活动结束前搞定。如果你有ARM架构的Grub镜像以及一台ExpressPoll 5000,可以使用上面描述的技巧利用EBOOT.BIN进行安装。

总结

www.idc126.com

DEFCON 25非常精彩,这也是我最喜欢的环节。如果你本文有疑问,或者是有新的发现可以通过Twitter: @tjhorner 联系我

*参考来源:horner,freebuf小编鸢尾编译,转载请注明来自FreeBuf.com

本文由 华盟网 作者:小龙 发表,其版权均为 华盟网 所有,文章内容系作者个人观点,不代表 华盟网 对观点赞同或支持。如需转载,请注明文章来源。

0

发表评论