很久很久以前,也就是 2010 年,一个名叫 Barnaby Jack 的家伙在黑帽大会上展示了让 ATM 提款机狂吐钞票的过程。
此人先前就在安全圈有颇为响亮的名气,这次的 ATM 攻击让他更加闻名遐迩。Jack 说他小时候看电影《魔鬼终结者 2:审判日》的时候就很羡慕 ATM 提款机吐钱的桥段,能够将这样的桥段变成现实也是他的梦想。
▲ Barnaby Jack
2013 年 7 月,Jack 意外身亡,外界对他身亡的原因众说纷纭,不过这个故事也就结束了。但你可能不知道的是,针对 ATM 攻击的历史,在那年黑帽大会之前就已经存在了。这次,我们就来聊聊相关 ATM 提款机的攻击和安全故事,毕竟从 ATM 白拿钱的事,大概是大家都会去想的。
ATM 提款机攻击思路在哪?
ATM 提款机攻击的确是 21 世纪才逐渐摆上台面的话题,不过 ATM 本身的存在历史可以追溯上世纪 60 年代,这跟“骇客”一词的出现差不多是同期。迪堡(Diebold)公司宣称,最早的 ATM 是他们在 1967 年造的,但实际上,1961 年 Luter G.Simjiande 最早提出的 ATM 设想就已经成真了。当年 ATM 实在造价不菲,使用率也不高,其真正普及是从 70 年代后期开始的。
那个时候科技和网络都不发达,1969 年的 ATM 都还没有连上网络。为了安全,银行只向信用纪录还不错的人开放 ATM。早期基本也没什么人从技术手段上对其进行攻击,大抵上也就是把 ATM 搬走这种暴力攻击手段。
ATM 做为一款商品,是仅针对金融机构的,加上不同国家政府对 ATM 的要求有差异(比如中国规定,存取款整合式机种,存入的钱和取出的钱必须完全分开,不能循环利用;比如美国的 ATM 在程式执行方面更受银行控制,所以流程更可控),我们这些普通人很难了解或者概括这类设备的内部详细组成,和具体的软件定制。
不过最基本的组成还是不变的:
钞票箱──就是 ATM 下方用来放钱的部分。这部分各厂商和不同国家的配备都存在差异,比如几个取款箱、几个存款箱,具体怎么运作;另外可能还有用于存放异常钞票的回收箱。
电脑部分──标准的电脑配置,据说规格一般并不主流;如人们所知,现如今的 ATM 绝大部分采用定制的 Windows XP 系统,前几年欧美普遍还有采用 IBM OS/2 系统的 ATM(这是个已经有近 30 年历史的操作系统)。
更多周边模组──如验钞范本(现如今的存取款一体机,取款过程也会进行验钞)、读卡器(读银行卡的)、收据 / 日志打印机、键盘、摄影机;
网络连接──ATM 一般并不会连接网络,但肯定是需要连接银行自家网络的。
从这几个组成部分下手,攻击 ATM 的思路也就有了。
思路一:直接把 ATM 机搬走──从钞票箱入手
企业服务器安全,讲究保证服务器的物理安全,就是不能让坏人靠近或直接接触到服务器。ATM 天然不具备这种属性,它需要面向普通人,有些甚至是露天的,所以直接搬走听起来是个很不错的主意。
问题是,现在这种方案越来越不可行。中国某些 ATM 周围是全钢骨结构,水泥地面下面还埋了钢板,设备底部就焊接在钢板上;穿墙型的 ATM,周围的墙体也是钢结构,要拉走基本就等于撕裂墙体;更不用说很多取款机还有专门的值班人员,还有外部监控摄影机。
就算真的把 ATM 拉走了,内部钞箱的开锁过程据说也是异常痛苦的。中国的内部钞箱起码需要经过 2 把锁,外加转盘密码,里面还有震动探测。其外部钢板厚,人为暴力破坏几乎是不大可能的。
如果真的致力于这种方案,成本和收益算起来实在不够划算。听说有这能耐的人,也不会去觊觎 ATM 里面区区几十万钞票。
思路二:从网络连接入手
ATM 攻击出现至今,从网络入手的案例不多。原因很简单,如中国的 ATM 只接入银行自己的网络。如果真的有人搞定了银行的内部网络,何苦要去搞 ATM 上那点小钱呢?
文首我们就谈到了 Barnaby Jack 的事迹。实际上他在那次骇客大会上演示了两种攻击方案,第一种是针对 Tranax 所生产的 ATM 机种。这种攻击方案利用的是 Windows CE 系统的远端监控特性,这项特性透过网络或者拨号就能连线──所以在展示的时候,Jack 没有去碰 ATM,就完成了远端修改程式的目的,但不知道展示的时候,Jack 走的是否是网络这条线,抑或只是内部局域网络。
利用身份认证绕过漏洞,可以透过网络往 ATM 上传软件甚至覆盖整个硬件。所以 Jack 所做的是在系统中安装了名为 Scrooge 的恶意程式。这个程式会潜伏在后台,可以透过 ATM 的键盘,或者插入特定控制板来启动。启动出现的隐藏功能表,攻击者就可操作令其吐钱了。另外其他人在这台 ATM 提钱的话,Scrooge 还能获取银行卡的磁条资料。
不过 Tranax 很快就建议使用者禁用远端系统,这个问题也就被封堵了。
思路三:ATM Skimmer──从周边模组入手
这算是真正可靠的方案:ATM Skimmer 也就是 ATM 分离器。我们去 ATM 提钱的时候,喇叭广播反复强调:“请注意插卡口是否有异常情况”。这里所谓的“异常情况”就是指 ATM Skimmer 了:即伪造一个插卡口,获取卡片资讯。
不过 ATM Skimmer 的奥义并不在于让 ATM 吐钱,或者取走钞票箱内的钱,而在于在神不知鬼不觉的情况下,记录一般使用者的信用卡资讯。实际上,ATM Skimmer 更像是个木马,不过它是硬件木马。比如说,伪造个假的数位键盘,在这个键盘内将使用者输入的密码记录下来。
比较典型的 ATM Skimmer 应该是在 ATM 极其隐蔽的位置再加个镜头,这种部署方式也比较灵活。上面这台 ATM 位于印尼,攻击者是从在键盘上方的遮挡部分入手的。
仔细研究其内部,会发现里面隐藏了镜头、主板、SD 储存卡,还有内建的电池──镜头由于对着键盘(最近对焦距离还真是近),也就能够拍下前来取钱使用者输入密码时的动作了。
而且实际上,这个 ATM Skimmer 还显得比较高阶:内部芯片整合了运动侦测感测器,这样镜头就能在仅侦测到有动作的时候才拍摄了,自然也就省电了很多(毕竟这个小装置需要自己供电)。
另外它还配有麦克风,透过按键声音是可以记录到有效资讯的──而且还可以听一听提钱的声音,以便判断目标信用卡是否有攻击价值(此人有钱没钱的问题)……
▲ 传说中那台整机伪造的 ATM Skimmer。
我们听过最高阶的 ATM Skimmer 应该是整机伪造:这年头都有人伪造银行,ATM 当然也可以伪造。这个案例出现在巴西,攻击者更为完整地伪造了一台 ATM,然后将之放到原有 ATM 上面,感觉为了获取卡片资讯,这些人还真是蛮拼的。
相比 2010 年,Barnaby Jack 让 ATM 吐钞票,可考最早的 ATM Skimmer 至少比他早 2 年,所以 ATM Skimmer 这种攻击手法的历史显得更悠久一些。
思路四:植入恶意程式──从电脑部分入手
说到 Barnaby Jack 在骇客大会上让 ATM 吐钞票一事,上面在谈到利用网络这一点时,其本质主要还是对 Windows CE 系统的利用。在演讲中,他另外还展示了针对一台 Triton 制造 ATM 的攻击,这台设备采用的也是 Windows CE 系统,基本思路就是纯粹从系统下手。
如果设备不接入网络,要搞定 ATM 中的的电脑,肯定要接近 ATM 本身。在 Jack 的展示中,它首先用钥匙打开了 ATM 的前方面板,然后给 ATM 接上 USB 设备──里面就有 Scrooge 恶意程式,利用了系统允许未授权程式执行的安全性漏洞。那个时候,人类的安全意识还没有现在这么强,所以 Jack 展示的这种 ATM 都采用统一的锁头,据说花 10 美元就能在网上买到钥匙,一把就能开所有的 Triton ATM。
Triton 公司后来还特别就这么问题狡辩了一番,他们说是客户要求一把锁到底的,这样便于管理;但如果以后谁有需要的话,可以换上安全级别高得多的锁。
▲ 钥匙孔
就这件事很容易总结出,若考虑仅从操作系统入手,令其感染恶意程式。在没有网络的情况下,只能靠物理接触,也就是如果你要给 ATM 植入木马的话,至少你得去接近它,并且要打开它,然后透过物理界面向其中传入恶意程式码才行。
实际上,这的确是令 ATM 感染恶意程式的一般途经,你得修行开锁或者钻孔技能,又或者你自己混进银行中去。除了上面谈到的 Scrooge 之外,针对现如今在 ATM 上广泛流行的 Windows XP,比较典型的恶意软件像是前年和去年很流行的 Ploutus 和 Tyupkin。
其中 Ploutus 是透过手机和 ATM 连接(USB 界面),启用手机的 USB 共用网络连接,安装 Ploutus 恶意软件;再向这支手机发送特定的 2 封短讯(一条包含有效的启动 ID,用以启动恶意程式;另一条就是提钱的具体指令了),手机会将短讯以 TCP / UDP 包转发给 ATM,恶意程式的网络包监视模组能够接收 TCP / UDP 包,然后 Ploutus 就会执行、ATM 吐钱(感染方式其实还是跟网络有关)。
如若将 Ploutus 进一步延伸,可以在 ATM 内部再放个黑盒子(此处手机就是黑盒子),便于进行远端控制(发送简讯亦算是远端控制),甚至伪造一个银行处理中心连接到 ATM,虽然这么做的难度甚大,却连恶意程式都不需要植入。严格说这也是需要配合网络连接的,隐蔽性并不好,所以这类方式并不常见。
这里再提一个 2015 年出现的 ATM 恶意程式:GreenDispenser,它在行为上比 Ploutus 要高级:启动的时间有限制,而且需要进行双重身份认证才会吐钱,也就是说只有攻击者本人才能操作。
另一方面,GreenDispenser 当然也需要物理接触 ATM才能植入,但它的传播方式主要是透过维护 ATM 的工程师,或者是贿赂银行内部管理人员──是不是感觉轻松很多,不用再偷跑去 ATM 机硬干了。
这部分最后特别值得一提的是,绝大部分 ATM 恶意程式的分析报告都会谈到一个叫 XFS 中介软件的东西。这是因为 ATM 的系统,结构大致上是底层为操作系统,往上是底层驱动和厂商应用,再往上一层就是 XFS 了,这是个统一跨平台界面──银行的应用就建基于此。绝大部分供应商有他们自己的 XFS 管理器,恶意程式都是透过它和 ATM产生互动的。所以卡巴斯基今年才在呼吁对 XFS 标准进行修订,引入更安全的验证方式。
思路四延伸:利用 Windows XP 的功能──仍从电脑部分入手
还有一些技术含量并不高的手法也是从 Windows XP 系统部分入手的。这招在对付中国某些银行终端设备非常有效。
不过它们主要针对的实际上是服务终端机,就是我们经常能在 ATM 取款点看到的,除了 ATM 之外用于查询各种业务资讯的设备。现今的 ATM 则已经不大能玩这一招了,毕竟这样的方法实在是老少咸宜、男女通吃啊。比如直接载入网页的画面,是否感觉有可乘之机呢?
▲ 看看上面这台 ATM,操作后就变成这样了,Windows XP 原貌出现。
▲ 或者你可能还会看到这样的画面
▲ 甚至还有人利用银行系统本身的一些操作特性,竟然叫出了维护功能表
ATM 安全在持续完善中
其实说到这儿,根据 ATM 的组成,ATM 攻击思路就已经说完了,而且的确我们见过的 ATM 攻击也就这几类。但实际上还有一些是利用银行系统的一些 BUG 或者漏洞,或者配合攻击其他银行相关的设备来进行更为复杂攻击。比如说 2015 年年末俄罗斯的一种“反向 ATM 攻击”技术,攻击者先在 ATM 机存钱(分别存入 5,000、10,000和 30,000),然后再马上取出来,打印交易收据。
收据上会有提款金额和一个支付参考号。然后骇客使用这个资讯,对境外的一台 PoS 机终端执行逆向操作,让银行认为取款操作已取消,这样就可以反复领钱了──在此过程中,在 PoS 机看来似乎是货物被退回,或者支付被拒。严格地说,这种攻击涉猎范围早就不限于 ATM 了,而且还需要攻击者掌握大量 PoS 机的远端存取,以及多人配合跨境操作。
说了这么多,总结 ATM 攻击的主要手法无非两种:ATM Skimmer 和恶意程式感染(或者说从 ATM 的电脑部分入手)。看起来后者需要动到的心思明显更多,一不小心还会被逮到,至少除了恶意程式本身之外,如何物理连接 ATM,需要更为周密的安排。
而 ATM Skimmer 从目标上看,甚至都不在钞票箱内的钞票,而在银行卡资讯获取。可见要抢个 ATM 还真是不怎么方便啊。
不过随着 ATM 安全问题的日益暴露,ATM 机供应商和银行也在想办法弥补。比如说中国大量 ATM 机开始支援无提款卡取款或操作,或者透过手机扫描二维码实现取款,这种设计至少是可以很大程度预防 ATM Skimmer 攻击的。
招商银行的某些 ATM 还推出了“脸部辨识取款”功能,这实际上是加增强式验证机制的表现,对于那些会记录银行卡磁条芯片资讯、密码的恶意程式而言,这也具备了加强安全性的作用。
另外,很多 ATM 内部的安全性也在加强,比如采用加密硬盘驱动器,可一定程度预防恶意程式植入。
如果能在 ATM 上阻止未经授权的媒介启动,如 CDROM、随身碟等,或者像上面说的修订 XFS 标准,并加密通讯过程,都可以进一步有效预防问题发生。
至于为什么 ATM 这些年来始终没有发生大规模的攻击事件,原因大抵上应该就是其可操作性并没有那么强,论赚钱可能还不如做钓鱼网站或恶意程式来得便利,成本收益外加风险,大概不足以吸引太多人加入。
(本文由 雷锋网 授权转载;首图来源:shutterstock)