原文地址:http://drops.wooyun.org/news/16450

Author:360追日团队

近期,孟加拉国、厄瓜多尔、越南、菲律宾等多个国家的银行陆续曝出曾经遭遇黑客攻击并试图窃取金钱事件,这些事件中黑客都瞄准了SWIFT银行间转账系统,对相关银行实施攻击和窃取。360追日团队深入分析了截获的黑客攻击越南先锋银行所使用的恶意代码样本,并由此对此次事件中的黑客攻击技术进行了初步探索。

0x00 概述


随着孟加拉国央行被黑客攻击导致8100万美元被窃取的事件逐渐升温,针对银行SWIFT系统的其他网络攻击事件逐一被公开,具体如下表所示:

表 1 针对银行攻击事件汇总

通过对相关恶意代码和攻击手法的研究,以及其他安全厂商的研究结论,360追日团队推测针对孟加拉国央行和越南先锋银行发起攻击的幕后组织或许是同一个组织,该组织可能是Operation Blockbuster所揭秘披露的Lazarus组织,中国相关机构也是该组织主要攻击目标之一。

本报告主要就越南先锋银行的相关攻击事件、样本展开深入分析,暂不深入关联孟加拉国央行被攻击事件和Lazarus组织,对相关事件或组织之间的关联归属分析等,我们在之后的关联分析报告中会有详细的介绍。

关于Lazarus黑客组织

2016年2月25日,Lazarus黑客组织以及相关攻击行动由卡巴斯基实验室、AlienVault实验室和Novetta等安全企业协作分析并揭露。2013年针对韩国金融机构和媒体公司的DarkSeoul攻击行动和2014年针对索尼影视娱乐公司(Sony Pictures Entertainment,SPE)攻击的幕后组织都是Lazarus组织。

表 2 Lazarus组织历史活动相关重大事件节点

0x01 关于SWIFT


SWIFT全称是Society for Worldwide Interbank Financial Telecommunication,中文名是“环球同业银行金融电信协会”。1973年5月,由美国、加拿大和欧洲的—些大银行正式成立SWIFT组织,其总部设在比利时的布鲁塞尔,它是为了解决各国金融通信不能适应国际间支付清算的快速增长而设立的非盈利性组织,负责设计、建立和管理SWIFT国际网络,以便在该组织成员间进行国际金融信息的传输和确定路由。

目前全球大多数国家大多数银行已使用SWIFT系统。SWIFT的使用,使银行的结算提供了安全、可靠、快捷、标准化、自动化的通讯业务,从而大大提高了银行的结算速度。由于SWIFT的格式具有标准化,目前信用证的格式主要都是用SWIFT电文。

1. SWIFT提供的服务

2. SWIFT CODE

SWIFT Code是由该协会提出并被ISO通过的银行识别代码,其原名是BIC (Bank Identifier Code)。

每个申请加入SWIFT组织的银行都必须事先按照SWIFT组织的统一规则,制定出本行SWIFT地址代码,经SWIFT组织批准后正式生效。SWIFT Code由8位或11位英文字母或数字组成。

代码格式:

各部分的含义如下:

a. 银行代码:由四位易于识别的银行行名字头缩写字母构成,如 ABOC、ICBK、CITI 等;

b. 国家代码:根据国际标准化组织的规定由两位字母构成,如 CN、HK、GB、US、DE 等;

c. 地区代码:由两位数字或字母构成,标明城市,如 BJ、HH、SX 等;

d. 分行代码:由三位数字或字母构成,标明分行,如 100、010、CJ1、400 等,若表示总行,则使用XXX。

3. SWIFT报文

SWIFT组织根据国际结算业务开展的需要,制定了相关的标准格式的报文,SWIFT的标准格式分为两种:

MTs(Message Type ,MTs通用表达式为MTnXX):n(0~9)表示报文类型,XX表示在n类型中的分类,目前共有10类报文,应用较多的是第1、2、3、5、7、9类型。

MXs :在1999年,SWIFT组织选择了XML编码作为新一代标准,同时决定最终应用新一代以XML为基础的标准(MXs), 目前两种标准共存,MX标准由12类报文组成。

SWIFT MT报文

根据银行的实际运作,SWIFT MT报文共划分为十大类:

表 3 SWFIT MT报文十大类

SWIFT报文第1类至第8类均为押类电报,需要使用SWIFT密押。SWIFT密押是独立于电传密押之外,在代理行之间交换,且仅供双方在收发SWIFT电讯时使用的密押。其他两类属于不加押报文。

4. T950对帐单

MT950范围

这是由帐户行发送给开户行,用来说明所开帐户上所有发生额详细情况的报文格式。

MT950准则

MT950域详述

该域内容必须与前一份该帐户对帐单报文域“62a”相同。只有当该报文系某一时期对帐单的第一分页,或对帐单没有分页,这份报文中该域代号才为“60F”。

0x02 攻击事件分析


1. 整体流程

图 1 整体关系流程

针对越南先锋银行的攻击中,相关恶意代码内置了8家银行的SWIFT CODE,越南银行均在这些银行中设有代理帐户。目前看到的Fake PDF Reader样本目的不是攻击列表中的这些银行,而是用来删除越南银行与其他家银行间的转帐确认(篡改MT950对帐单)。这样银行的监测系统就不会发现这种不当交易了。

2. 功能概述

Fake PDF Reader伪装成Foxit reader(福昕PDF阅读器),原始Foxit Reader.exe被重命名为Foxlt Reader.exe,在银行系统调用Foxit打印pdf时激活,将pdf转换为xml,根据配置文件匹配是否有符合要求的报文,找到匹配的报文修改后转换回pdf并调用原始的FoxitReader打印。并删除临时文件和数据库的符合条件的交易记录。

图 2 关系图

图 3 配置文件格式

3. 案例:MT950对帐单(PDF)详解

图 18 MT950对帐单(PDF)

上图是MT950对帐单的PDF版本,图中就对帐单的关键报文域进行了对应的解释(黑体字所示),另外蓝色框是Fake PDF Reader恶意程序需要判断和修改的地方(蓝色字体是相关具体动作的说明)。

下图是正常的PDF对帐单和篡改后的PDF对帐单,其中左图红色底色部分内容,就是攻击者想要删掉帐单记录和需要修改的帐面余额和有效余额。

图 19 正常PDF对帐单(左图),篡改后的PDF对帐单(右图)

4. 技术细节

Fake PDF Reader分析

图 4 功能流程图

Fake PDF Reader程序来自于Foxit PDF SDK,依赖动态库fpdfsdk.dll。

A、读取配置文件

配置文件使用异或加密,KEY为7C4D5978h。路径为 c:\windows\temp\WRTU\LMutilps32.dat

图 5 读取配置文件

B、处理参数

参数个数必须大于等于4个,应该为:“FoxitReader路径”、“/t”、“pdf路径”和“打印机ip”。

C、PDF修改

图 6 PDF修改执行流程

图 9 删除临时文件

D、使用原参数调用真正的FoxitReader.exe

图 10 调用真正的FoxitReader

E、失败则调用LogClear

图 11 调用LogClear

F、最后删除临时文件

LogClear分析

图 12 功能流程图

根据传入参数个数进行相关初始化操作,如果有进行初始化操作,如果没有参数则直接开始执行清除操作;

命令参数格式:'-f <message filename> -l <logfile path>'

图 13 相关参数格式

进一步进行循环删除文件中记录的内容,根据参数格式化一个文件名称,进行删除消息文件相关记录操作。

文件名格式:%s\\%s_%d%.2d%.2d.txt,第一个%s是从配置文件中读取的路径,第二个%s的字符串内容如下,后面的%d依次表示年、月、日。

图 14 读取的相关内容

最后通过sqlcmd.exe 执行数据库操作删除数据库中消息文件相关记录.

图 15 清理错误日志1

图 16 清理错误日志2

图 17 清理graft_history

同源性分析

在本报告中主要就越南先锋银行相关攻击事件、样本展开深入分析,暂不就其他攻击

事件中的同源样本展开详细介绍,本节只简单证明二者之间的存在一定的联系。

关于越南先锋银行、孟加拉国央行和Lazarus组织之间的关系,我们在之后的关联分析报告中会有详细的介绍。

0x03 总结


从将恶意程序构造伪装成Foxit reader(福昕PDF阅读器)到对MT950对帐单PDF文件的解析和精确的篡改等攻击手法,都反映出攻击者对银行内部交易系统和作业流程非常熟悉。

针对越南先锋银行的针对性攻击和之前针对孟加拉国央行等其他银行的攻击之间,并非独立无关的攻击事件,从360追日团队对相关样本同源性分析和其他厂商的研究分析来看,针对越南先锋银行和孟加拉国央行的攻击有可能来自同一个组织,其幕后组织有可能是Operation Blockbuster所揭秘披露的Lazarus组织。