0
很久很久以前,也就是2010年,一个名叫Barnaby Jack的家伙在黑帽大会上演示了让ATM取款机狂吐钞票的过程。
此人先前就在安全圈有颇为响亮的名气,这次的ATM机攻击让他更加闻名遐迩。Jack说他小时候看电影《终结者2》的时候就很羡慕ATM取款机吐钱的桥段,能够将这样的桥段变成现实也是他的梦想。
Barnaby Jack
2013年7月,Jack意外身亡,外界对他身亡的原因众说纷纭,不过这个故事也就结束了。但你可能不知道的是,针对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 Skimmer(点击这里)。上面这台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机,虽然这么做的难度甚大,却连恶意程序都不需要植入。严格说这也是需要配合网络连接的,隐蔽性并不好,所以这类方式并不常见。
这里再提一个去年出现的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攻击也就这几类。但实际上还有一些是利用银行系统的一些BUG或者漏洞,或者配合攻击其他银行相关的设备来进行更为复杂攻击。比如说去年年末俄罗斯的一种“反向ATM攻击”技术,攻击者先在ATM机存钱(分别存入5000、10000和30000),然后再马上取出来,打印交易收据。
收据上会有取钱金额,和一个支付参考号。然后黑客使用这个信息,对境外的一台PoS机终端执行逆向操作,令银行认为取款操作已取消,这样就可以反复取钱了——在此过程中,在PoS机看来似乎是货物被退回,或者支付被拒。严格地说,这种攻击涉猎范围早就不限于ATM机了,而且还需要攻击者掌握大量PoS机的远程访问,以及多人配合跨境操作。
说了这么多,总结ATM机攻击的主要手法无非两种:ATM Skimmer和恶意程序感染(或者说从ATM机的计算机部分入手)。看起来后者需要动到的心思明显更多,一不小心还会被逮到,至少除了恶意程序本身之外,如何物理连接ATM机,需要更为周密的安排。
而ATM Skimmer从目标上看,甚至都不在钞箱内的钞票,而在银行卡信息获取。可见要抢个ATM机还真是不怎么方便啊。
不过随着ATM机安全问题的日益暴露,ATM机供应商和银行也在想办法弥补。比如说国内大量ATM机开始支持无卡取款或操作,或者通过手机扫描二维码实现取款,这种设计至少是可以很大程度预防ATM Skimmer攻击的。
招商银行的某些ATM机还推出了“刷脸取款”功能,这实际上是加强身份验证机制的表现,对于那些会记录银行卡磁条芯片信息、密码的恶意程序而言,这也具备了加强安全性的作用。
另外,很多ATM机内部的安全性也在加固,比如采用加密硬盘驱动器,可一定程度预防恶意程序植入。
如果能在ATM机上阻止未经授权的媒介启动,如CDROM、U盘等,或者像上面说的修订XFS标准,并加密通讯过程,都可以进一步有效预防问题发生。
至于为什么ATM机这些年来始终没有发生大规模的攻击事件,原因大抵上应该就是其可操作性并没有那么强,论赚钱可能还不如做钓鱼网站或恶意程序来得便利,成本收益外加风险,大概并不足以吸引太多人加入。
雷锋网注:本文原创作者欧阳洋葱,由FreeBuf投稿雷锋网发布,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)
雷峰网原创文章,未经授权禁止转载。详情见转载须知。