http://p7.qhimg.com/t01231a9cc2b1daaaff.jpg

 


介绍


自动取款机由各种设备组成的,并且每种设备都具有自己的固件。应用程序控制是我们最感兴趣的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也是一种提升权限的好方法。 

http://web.archive.org/web/20160309015106/archives.neohapsis.com/archives/fulldisclosure/2010-01/0346.html 


超时


最近,有人公布了针对KESS的超时攻击方法。该方式通过并行运行大量二进制实例来耗尽系统资源。这种攻击会令验证模块超载,从而使得针对启动进程的系统调用的检测超时,这样,就会允许进程启动而不必等待KESS的决定了。

这样,您可以绕过设备控制和应用程序启动控制白名单,从而在本地或远程访问PC的过程中实现任意代码执行了。下一步是提升权限,以绕过操作系统的访问控制。



本文由 安全客 翻译,作者:shan66

原文链接:https://embedi.com/files/white-papers/Hack-ATM-with-an-anti-hacking-feature-and-walk-away-with-1M-in-2-minutes.pdf