【技术分享】黑客如何破解ATM,2分钟顺走百万现金 (上)
作者:admin | 时间:2017-10-19 01:33:30 | 分类:黑客技术 隐藏侧边栏展开侧边栏
介绍
自动取款机由各种设备组成的,并且每种设备都具有自己的固件。应用程序控制是我们最感兴趣的ATM软件型保护方案。现在,虽然该保护方案在市场上随处可见,但是仍然有人能够成功攻陷ATM。因此,我们对这款软件针对ATM的保护机制非常感兴趣,以便进一步提高黑客窃取现金的难度。
ATM
在本文中,我们研究的主题是ATM的安全性。
我们将把ATM视为一个由计算机控制的保险箱。放入ATM的钱,被装入两个安全装置中:一个用于取款,另一个用于存款。计算机通过封闭式网络连接到银行卡处理服务器。当然,ATM的制造、安装和操作会涉及到许多人员。那么,这些人都有可能利用自己的访问权限来窃取ATM中的现金。
内部的侵犯者:
软件开发人员:在代码中留下后门和bug
承包商:将加密密钥交给攻击者
服务工程师:对硬件和软件组件动手脚,恶意使用密钥,玩忽职守(在保险箱打开的时候故意离开)
运钞车押运员:偷货币箱
外部的侵犯者:
银行客户:对纸币做手脚,取出部分已经存入ATM机的纸币。
没有专业知识的攻击者:盗窃ATM、运钞车押运员、社交工程
具有专业知识和机械工具的攻击者:破坏设备、访问保险箱、操纵存款槽
具有专业知识并且能够现场左右硬件和软件的攻击者:拆解、黑盒攻击、银行卡克隆、访问ATM内的PC
具有专业知识并且能够远程左右硬件和软件的攻击者:通过本地网络进行未经授权的访问、安装恶意软件、利用软件和操作系统的漏洞
我们的特长在于针对设备可编程组件的威胁分析。
在本文中,我们将分析如何利用ATM内置PC上的软件漏洞来发动攻击。利用这些漏洞,攻击者能够以该环境中的最高权限执行任意代码。在内置计算机上执行自己的代码的好处是,允许将命令发送到吐钞器,并且每次插入银行卡时都可以发送该命令。 但是,我们的代码与内置软件不同,省略了所有不相关的细节,例如输入PIN或查看余额等。它要做的只是吐钞,并且是立即吐钞。
演示视频:
ATM的ISS规范
确保ATM安全运行的关键之一是保护系统的完整性。信息安全系统(ISS)禁止任何修改系统或添加外部组件的尝试,包括:软件(可执行文件、软件安装包、脚本)和硬件(USB存储设备、CD/DVD设备)。这样做的目的是防止任何无关的代码在设备上运行。 该系统必须仅实现其自身的功能,并且始终如此。这听起来非常不错,但是现实中,仍存在很多方法可以将恶意软件上传到ATM电脑中:
本地访问:
连接USB总线,方法是弄掉相机,或在电线的位置打孔
打开ATM主体,并通过复制的服务密钥插入磁盘、U盘、无线键盘插头
远程访问:
从银行通过远程桌面上传恶意软件
利用为监控和管理设备而安装的网络服务中的漏洞
此外,访问控制也同样重要。对设备、进程、文件系统、注册表对象和其他元素的访问是由系统控制的,并且如果配置正确的话,攻击者在攻击的初始阶段只具有有限的权限。即使绕过了上述完整性控制,攻击者仍然需要进行提权才能访问关键的资源,例如吐钞器。
此外,市场上面也有一些旨在减轻运营ATM的银行的风险的产品。其中许多产品都是由知名的AV供应商提供的,已经开发的技术包括:支持签名、启发式、仿真器和脱壳功能的AV扫描软件;HIPS(主动保护、行为分析);防火墙。鉴于这类设备具有特殊的安全性要求,所以这些产品还提供了更严格的安全对策,例如应用程序白名单和设备控制(通常称为完整性控制工具)以及辅助访问控制工具(与OS本机工具相关) 。
我们研究了其中一些ISS组件,并了解了它们的一些有趣的工作原理。下面,我们来考察一下作为这种产品的一员的卡巴斯基嵌入式系统安全(KESS)。
KESS功能概述
在其最低配置情况下,该解决方案仅执行系统完整性控制。完成该任务的有两个模块:
设备控制——控制USB存储设备(如闪存驱动器、外接HDD、MTP Media Player设备等)的连接
应用程序启动控制——控制系统中运行的代码。其中有些规则用于:
进程的运行和库的加载
脚本的运行和MSI软件包。通常情况下,对象是通过数字签名、哈希值和路径来进行标识的
KESS遵循“默认拒绝”策略:禁止所有未明确允许的内容。
此外,您还可以添加实时文件保护——防病毒功能。AV扫描软件将在访问文件时通过签名和启发式方法对文件进行检测。
有关该产品的更多信息,请参阅如下演示文稿: http://www.bts.md/BTS_files/Kaspersky%20Embedded%20Systems%20Security.pdf6
KESS的体系结构
该系统分为两层:
内核模式:KESS驱动程序将在这个特权内核执行模式下运行
用户模式:介于用户和系统进程之间运行的KESS服务在这个模式下运行
图中的组件包括:
驱动程序KLAM.SYS,卡巴斯基实验室拦截器和活动监视器。它为文件系统注册一个过滤器,并在访问文件系统对象时获得对回调的控制权。注册将通知例程去创建进程和线程。因此,它的作用是在内核模式下执行系统范围的监视和控制。该驱动程序是应用程序启动控制和实时文件保护的一部分。
驱动程序KLFLTDEV.SYS,卡巴斯基实验室PNP设备过滤器,用于控制标示为“大容量存储”的PNP设备的使用情况;它属于设备控制的一部分。
驱动程序KLRAMDISK.SYS,卡巴斯基实验室虚拟RAM磁盘。
KlamMsgPort是驱动程序KLAM.SYS和进程KAVFSWP.EXE的消息通道。来自用户模式的各种请求将通过该通道传递给驱动程序。
KAVFS.EXE服务和KAVFSWP.EXE子进程。ISS的检测和解决方案的逻辑都集中在这里。将判决结果传递给驱动程序,从而决定允许或阻止受监视进程的操作(例如,加载DLL)
KAVFSWH.EXE服务进程:实现应用程序和外部代理之间的互连以实现进程内存的保护。
KAVFSGT.EXE服务进程:提供KESS管理功能。
攻击KESS
我们将尝试绕过该安全系统,并在机器上实现代码的提权,这样我们的代码就可以控制吐钞器了。根据该产品提供的解决方案的结构,我们的攻击策略分为以下几个阶段:
首先,获取本地访问权限,绕过设备控制,为在PC上输入我们的数据扫清障碍。我们将绕过过滤器(它会阻止第三方设备连接),并将我们的二进制文件和脚本放到主机上,以便进行下一步的工作。
然后,我们将绕过“应用程序启动控制”机制,在机器上运行我们的代码。
最后一步:我们将通过利用KESS漏洞,通过Windows访问控制系统提升我们的进程的权限。这将使我们能够随意访问系统的对象。
绕过KESS
绕过设备控制
KESS限制使用USB驱动器。如果该功能已启用并进行了正确的配置,则可阻止攻击者使用的USB工具。
但是,它是唯一一种可以控制的设备。
如果ATM的主机有一个物理上可以访问的CD驱动器,那就根本无法阻止攻击者从外部上传文件。另外,通过远程桌面访问也是一样的。
如果这些尝试没有成功,那么还有其他绕过方法,包括:
USB、PS/2键盘键盘仿真器,它们可用于:
VBS脚本或内置的Certutil实用程序将打印字符解码为二进制数据
作为十六进制编辑器的旧式DEBUG调试器
空闲的COM端口也可用于数据传输,并且可从cmd命令行获得
所以,有许多方法可以在机器上输入数据。将键盘添加到白名单是不可能的,因为这会令维护服务变得异常复杂。
绕过启动控制
KLAM.SYS驱动程序捕获可执行文件和脚本的启动,以及程序库的加载。
之后,它将其发送给KAVFSWP.Exe(根据指定的规则)进行检查。如果是外部的组件,则不允许使用。
PowerShell
在操作系统中存在许多内置的解释器,如WScript,尽管禁止执行任意脚本,但它们仍然是可以使用的。例如,可以这样做:
1
|
mshta.exe vbscript:close(eval(CreateObject(“Scripting.FileSystemObject”).OpenTextFile(“1.vbs”).ReadAll()))
|
这样,文件中的代码就会在解释器中执行,我们就可以完成读写文件和注册表项、启动进程等(请参阅Windows Script Host)操作。虽然这很有趣,但是对于使用吐钞器来说,这是远远不够的。我们需要的是在本地运行代码。
PowerShell在这方面要更加灵活,因为它可以直接访问系统API。为了运行shellcode,可以调用VirtualAlloc、WriteProcessMemory和CreateThread,其实很简单。你可以用之前介绍过的相同方法来解决禁止执行脚本的问题:
1
|
powershell.exe Invoke-Expression $( Get-Content hello.ps1)
|
但是,PowerShell通常不会安装在Windows XP机器上。在这种情况下,您可以使用以下方法。
带签名的可执行文件
在默认情况下,机器会允许运行带有操作系统信任的数字签名的二进制文件。这适用于所有Windows组件。例如,您可以使用Microsoft签名的调试器将shellcode注入合法进程。也就是说,可以将NTSD调试器与Windows XP一起使用;在所有版本的Windows中都有一个带有签名的调试库,即dbgeng.dll。
NTVDM
对于KESS来说,它并没有禁止运行DOS可执行文件(EXE,COM)。同时,人们发现,NTVDM也是一种提升权限的好方法。
超时
最近,有人公布了针对KESS的超时攻击方法。该方式通过并行运行大量二进制实例来耗尽系统资源。这种攻击会令验证模块超载,从而使得针对启动进程的系统调用的检测超时,这样,就会允许进程启动而不必等待KESS的决定了。
这样,您可以绕过设备控制和应用程序启动控制白名单,从而在本地或远程访问PC的过程中实现任意代码执行了。下一步是提升权限,以绕过操作系统的访问控制。
本文由 安全客 翻译,作者:shan66