金融攻击事件分析:Tyupkin样本技术分析及攻击过程还原

背景概述

前段时间,卡巴斯基发现并报告了一种新型的恶意程序Tyupkin,该恶意程序针对银行的ATM自动取款机发起攻击,通过微软提供的金融服务控件MSXFS.dl来直接操控ATM设备来实现从取款机任意取钱。

虽然事件过去了很久,没有太多的热度了,但是深入研究彻底分析下金融领域的攻击还是很有必要的。了解针对金融ATM的攻击手法,做到知己知彼。

根据卡巴斯基的描述,攻击者需要一张可启动的CD来安装恶意软件,被植入的恶意程序的ATM取款机会在指定的时间激活,攻击者只需要输入特定的按键即可直接提取现金。根据VT上提交的样本来源地区,该恶意程序主要分布在欧洲,同时在国内似乎也存在该恶意程序的痕迹,目前该恶意程序已经成功窃取了数百万美元。

攻击过程还原

故翰海源团队对该样本进行了技术细节的分析,由于没有ATM设备环境,但为了尽量还原攻击者的攻击流程,我们通过Hook MSXFS.dll的API函数来实现模拟按键的输入,基本还原了攻击者从ATM取钱的攻击流程。

技术分析

2.1 背景知识

2.1.1 WOSA/XFS概述

WOSA全称是Windows Open System Architecture,是基于Windows开放式系统体系机构,是微软专门为全球金融行业设计的软件架构,WOSA提供一套基于C的WIN32 API,开发者可以通过这些API来对采用该框架的金融设备进行操作。

2.1.2 MS Manager组成

1) msxfs.dll: 提供基本的API和调用SPI函数。
2) xfs_supp.dll: 提供一些支持函数。如内存分配,包括申请和释放空间等。
3) xfs_conf.dll: 提供配置函数。如读写配置信息,主要是对注册表的操作,配置日志、SP等信息。

2.1.3 MS Manager组成

1) DevInit: 初始化设备,包括打开串口,分配空间等。
2) GetInfo: 获取设备具有的信息及状态能力等。
3) Execute: 执行设备所支持的操作。
4) Cancel: 取消当前的设备操作。

2.2 样本技术细节分析

2.2.1 样本文件基本属性

MD5: AF945758905E0615A10FE23070998B9B
编写语言:C#
编译时间:2014年3月16日
样本主要通过调用MXFS.dll的导出函数来实现与ATM设备的交互:

2.2.2 技术细节

1) 样本运行后,会有一个长达10分钟的Sleep操作用于躲避安全软件的动态检测。我们在进行模拟的时候,将Sleep的时间做了修改。

2) 恶意程序会创建一个标题为”APTRAST”的窗体并设置为隐藏。

3)恶意程序会创建一下文件及注册表来实现开机自启动
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\AptraDebug
C:\WINDOWS\system32\ulssm.exe(恶意程序的拷贝)

4)恶意程序在设置完自启动后,会进行ServiceProvider的初始化,由于我们没有安装ATM的底层环境,所以该初始化会失败,我们在进行模拟的时候会将该处的判断PATCH掉。

之后程序会开启两个线程,一个用于验证是否满足激活时间,一个未程序的功能模块。

5)TimeInterval线程会判断当前系统时间是否是周日或周一,同时是否在凌晨的1点到5点之间,如果满足,会将PIN_PAD_ACTIVE_TIME标记为1。

6)MainLoop线程首先会对全局标记PIN_PAD_ACTIVE_TIME进行检测,为1时才会接收PINPAD的接口按键信息。通过调用WSExecute来执行WFS_CMD_PIN_GET_DATA(0×198)获取键盘输入,以WFS_PIN_FK_ENTER (0×400) 回车键来作为结束标记。我们模拟的时候,会HOOK该函数,来构造键盘的输入按键值。

WFSExecute用来向SPI发送指定的命令,这里通过指定发送“WFS_CMD_PIN_GET_DATA”即可获取PINPAD接口的明文按键信息。PINPAD按键会产生一个WFS_PIN_FK事件信息并将转换后的数据写入到_wfs_pin_data结构体中。
_wfs_pin_data的结构体定义如下:

usKeys:用户输入的键数目
lpPinKeys:指向含有用户输入的WFSPINKEY结构体指针的数组的指针
wCompletetion:说明结束输入的原因

最后判断PINPAD上是否为特定的按键序列,并执行以下操作:
MKEY_CLOSE_AND_ERASE_APP:关闭并删除程序,对应的按键序列为(333333)
MKEY_SHOW_APP:显示应用程序的主界面,对应的按键序列为(22222)
MKEY_HIDE_APP:隐藏应用程序的主界面,对应的按键序列为(111111)
MKEY_EXTEND_TIME:修改应用程序的激活时间,将程序的激活时间段扩展为凌晨1点到早上10点,对应的按键序列为(555555)

7)当输入MEKY_SHOW_APP,并按Enter后,程序会显示界面,并产生一个随机CODE,同时根据该CODE产生对应的SESSION KEY。

8)其中CODE是一个随机生成的8位数字,攻击者需要根据这8位数字按指定的算法生成一个SESSION KEY,当输入的SESSION KEY正确后,执行以下操作:
a. 禁用本地网络连接,获取当前现金箱信息。
b. 通过WFSExecute发送“WFS_CMD_CDM_DISPENSE”从指定的现金箱中吐出40张钞票。

9)SESSION KEY算法为根据上次的CODE作为种子,产生随机数,然后经过简单乘法运算,乘以一个固定的数值。

10)恶意程序会在系统目录下生成一个名为XFSTrace.LOG的日志文件。

程序在运行中会打印如下调试信息:

演示视频

点我查看

安全排查

检查ATM设备是否存在以下文件:
C:\Documents and Settings\All Users\Start Menu\Programs\Startup\AptraDebug.lnk
C:\WINDOWS\system32\ulssm.exe
检查是否存在以下注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\AptraDebug

附件一:参考资料

Tyupkin: Manipulating ATM Machines with Malware
http://securelist.com/blog/research/66988/tyupkin-manipulating-atm-machines-with-malware/