近期,孟加拉國(guó)、厄瓜多爾、越南、菲律賓等多個(gè)國(guó)家的銀行陸續(xù)曝出曾經(jīng)遭遇黑客攻擊并試圖竊取金錢事件,這些事件中黑客都瞄準(zhǔn)了SWIFT銀行間轉(zhuǎn)賬系統(tǒng),對(duì)相關(guān)銀行實(shí)施攻擊和竊取。360追日?qǐng)F(tuán)隊(duì)深入分析了截獲的黑客攻擊越南先鋒銀行所使用的惡意代碼樣本,并由此對(duì)此次事件中的黑客攻擊技術(shù)進(jìn)行了初步探索。
一、概述
隨著孟加拉國(guó)央行被黑客攻擊導(dǎo)致8100萬(wàn)美元被竊取的事件逐漸升溫,針對(duì)銀行SWIFT系統(tǒng)的其他網(wǎng)絡(luò)攻擊事件逐一被公開,具體如下表所示:
表 1 針對(duì)銀行攻擊事件匯總
通過(guò)對(duì)相關(guān)惡意代碼和攻擊手法的研究,以及其他安全廠商的研究結(jié)論,360追日?qǐng)F(tuán)隊(duì)推測(cè)針對(duì)孟加拉國(guó)央行和越南先鋒銀行發(fā)起攻擊的幕后組織或許是同一個(gè)組織,該組織可能是Operation Blockbuster所揭秘披露的Lazarus組織,中國(guó)相關(guān)機(jī)構(gòu)也是該組織主要攻擊目標(biāo)之一。
本報(bào)告主要就越南先鋒銀行的相關(guān)攻擊事件、樣本展開深入分析,暫不深入關(guān)聯(lián)孟加拉國(guó)央行被攻擊事件和Lazarus組織,對(duì)相關(guān)事件或組織之間的關(guān)聯(lián)歸屬分析等,我們?cè)谥蟮年P(guān)聯(lián)分析報(bào)告中會(huì)有詳細(xì)的介紹。
關(guān)于Lazarus黑客組織
2016年2月25日,Lazarus黑客組織以及相關(guān)攻擊行動(dòng)由卡巴斯基實(shí)驗(yàn)室、AlienVault實(shí)驗(yàn)室和Novetta等安全企業(yè)協(xié)作分析并揭露。2013年針對(duì)韓國(guó)金融機(jī)構(gòu)和媒體公司的DarkSeoul攻擊行動(dòng)和2014年針對(duì)索尼影視娛樂公司(Sony Pictures Entertainment,SPE)攻擊的幕后組織都是Lazarus組織。
表 2 Lazarus組織歷史活動(dòng)相關(guān)重大事件節(jié)點(diǎn)
二、關(guān)于SWIFT
SWIFT全稱是Society for Worldwide Interbank Financial Telecommunication,中文名是“環(huán)球同業(yè)銀行金融電信協(xié)會(huì)”。1973年5月,由美國(guó)、加拿大和歐洲的—些大銀行正式成立SWIFT組織,其總部設(shè)在比利時(shí)的布魯塞爾,它是為了解決各國(guó)金融通信不能適應(yīng)國(guó)際間支付清算的快速增長(zhǎng)而設(shè)立的非盈利性組織,負(fù)責(zé)設(shè)計(jì)、建立和管理SWIFT國(guó)際網(wǎng)絡(luò),以便在該組織成員間進(jìn)行國(guó)際金融信息的傳輸和確定路由。
目前全球大多數(shù)國(guó)家大多數(shù)銀行已使用SWIFT系統(tǒng)。SWIFT的使用,使銀行的結(jié)算提供了安全、可靠、快捷、標(biāo)準(zhǔn)化、自動(dòng)化的通訊業(yè)務(wù),從而大大提高了銀行的結(jié)算速度。由于SWIFT的格式具有標(biāo)準(zhǔn)化,目前信用證的格式主要都是用SWIFT電文。
1. SWIFT提供的服務(wù)
接入服務(wù)(Connectivity):
包括SWIFTAlliance Access and Entry 、SWIFTAlliance Gateway 、SWIFTAlliance Webstation 、File Transfer Interface 等接入模式;
金融信息傳送服務(wù)(Messaging):
包括SWIFTNet FIN 、SWIFTNet InterAct 、SWIFT FileAct 、SWIFTNeBrowse 等傳輸模式;
交易處理服務(wù)(transaction processing):
提供交易處理匹配服務(wù) 、實(shí)時(shí)報(bào)告的雙邊凈額清算服務(wù) 、支持B2B的商務(wù)中的端對(duì)端電子支付等;
分析服務(wù)與分析工具(Analytical Services/Tools):
向金融機(jī)構(gòu)提供一些輔助性的服務(wù),即分析服務(wù)與分析工具。
2. SWIFT CODE
SWIFT Code是由該協(xié)會(huì)提出并被ISO通過(guò)的銀行識(shí)別代碼,其原名是BIC (Bank Identifier Code)。
每個(gè)申請(qǐng)加入SWIFT組織的銀行都必須事先按照SWIFT組織的統(tǒng)一規(guī)則,制定出本行SWIFT地址代碼,經(jīng)SWIFT組織批準(zhǔn)后正式生效。SWIFT Code由8位或11位英文字母或數(shù)字組成。
代碼格式:
8碼長(zhǎng)—XXXXXXXX
11碼長(zhǎng)—XXXXXXXXXXX
各部分的含義如下:
銀行代碼:由四位易于識(shí)別的銀行行名字頭縮寫字母構(gòu)成,如 ABOC、ICBK、CITI 等;
國(guó)家代碼:根據(jù)國(guó)際標(biāo)準(zhǔn)化組織的規(guī)定由兩位字母構(gòu)成,如 CN、HK、GB、US、DE 等;
地區(qū)代碼:由兩位數(shù)字或字母構(gòu)成,標(biāo)明城市,如 BJ、HH、SX 等;
分行代碼:由三位數(shù)字或字母構(gòu)成,標(biāo)明分行,如 100、010、CJ1、400 等,若表示總行,則使用XXX。
3. SWIFT報(bào)文
SWIFT組織根據(jù)國(guó)際結(jié)算業(yè)務(wù)開展的需要,制定了相關(guān)的標(biāo)準(zhǔn)格式的報(bào)文,SWIFT的標(biāo)準(zhǔn)格式分為兩種:
基于FIN的標(biāo)準(zhǔn)MTs;
基于XML的新標(biāo)準(zhǔn)MXs。
MTs(Message Type ,MTs通用表達(dá)式為MTnXX):n(0~9)表示報(bào)文類型,XX表示在n類型中的分類,目前共有10類報(bào)文,應(yīng)用較多的是第1、2、3、5、7、9類型。
MXs:在1999年,SWIFT組織選擇了XML編碼作為新一代標(biāo)準(zhǔn),同時(shí)決定最終應(yīng)用新一代以XML為基礎(chǔ)的標(biāo)準(zhǔn)(MXs), 目前兩種標(biāo)準(zhǔn)共存,MX標(biāo)準(zhǔn)由12類報(bào)文組成。
SWIFT MT報(bào)文
根據(jù)銀行的實(shí)際運(yùn)作,SWIFT MT報(bào)文共劃分為十大類:
表3 SWFIT MT報(bào)文十大類
SWIFT報(bào)文第1類至第8類均為押類電報(bào),需要使用SWIFT密押。SWIFT密押是獨(dú)立于電傳密押之外,在代理行之間交換,且僅供雙方在收發(fā)SWIFT電訊時(shí)使用的密押。其他兩類屬于不加押報(bào)文。
4. MT950對(duì)帳單
MT950范圍
這是由帳戶行發(fā)送給開戶行,用來(lái)說(shuō)明所開帳戶上所有發(fā)生額詳細(xì)情況的報(bào)文格式。
MT950準(zhǔn)則
費(fèi)用、利息及其它調(diào)整所應(yīng)用的方式 :
1. 列明已發(fā)送的費(fèi)用通知MTn90報(bào)文編號(hào);
2. 如該費(fèi)用系通過(guò)本對(duì)帳單首先通知開戶行,則必須符合以下條件:
① 必須用相關(guān)業(yè)務(wù)編號(hào)加以識(shí)別,如開戶行原業(yè)務(wù)的編號(hào);
② 本金必須在對(duì)帳單中單獨(dú)列明。
對(duì)帳單中的金額必須與原業(yè)務(wù)中的金額一致。如有費(fèi)用已在業(yè)務(wù)報(bào)文中清楚列明,或是某一報(bào)文的必要組成部分(如托收款項(xiàng)),則該費(fèi)用不必在對(duì)帳單中特別注明;
帳戶行不得將各自獨(dú)立的業(yè)務(wù)并筆。如原收付報(bào)文系多筆業(yè)務(wù),對(duì)帳單中仍應(yīng)分別記帳,每筆借記均須引用原各自報(bào)文中域20;
建議在每個(gè)營(yíng)業(yè)日日終,只要帳戶中有發(fā)生額,帳戶行就發(fā)送MT950;
為便于人工核對(duì),建議對(duì)帳單中的發(fā)生額先按借記和貸記排列,在借記和貸記兩類中分別按起息日排列,同一起息日的借、貸記中,按金額由小到大排列;
一份對(duì)帳單的內(nèi)容可由數(shù)份報(bào)文組成。
MT950域詳述
域 20:發(fā)報(bào)行的編號(hào)
域 25:帳號(hào)
列明該對(duì)帳單的帳號(hào)。
域28C:對(duì)帳單號(hào)碼 / 分頁(yè)序號(hào)
該域內(nèi)容前后分別表示對(duì)帳單連續(xù)號(hào)碼和每一份對(duì)帳單報(bào)文的分頁(yè)序號(hào)。
域60a:起始余額
列明某對(duì)帳單所涉及的一段時(shí)期開始時(shí),有關(guān)帳戶的帳面余額;或當(dāng)報(bào)文出現(xiàn)分頁(yè)時(shí),每一分頁(yè)的過(guò)渡起始余額。
其內(nèi)容包括:
該域內(nèi)容必須與前一份該帳戶對(duì)帳單報(bào)文域“62a”相同。只有當(dāng)該報(bào)文系某一期對(duì)帳單的第一分頁(yè),或?qū)螞]有分頁(yè),這份報(bào)文中該域代號(hào)才為“60F”。
域61:對(duì)帳單細(xì)目
列明每筆業(yè)務(wù)的詳情。在報(bào)文的容量允許范圍內(nèi),該域可重復(fù)使用,其內(nèi)容共有九個(gè)子域,順序如下:
業(yè)務(wù)類型,其出現(xiàn)方式有以下三種:
1. 如系通過(guò)SWIFT報(bào)文收付的金額及其費(fèi)用,其類型表現(xiàn)為:“Snnn”字母“S”后的三位數(shù)字即SWIFT報(bào)文格式代號(hào)。
2. 如系通過(guò)非SWIFT報(bào)文收付的金額及其費(fèi)用,其類型表現(xiàn)為“Nxxx”字母“N”后的三個(gè)字母為下列代碼之一所替換以表示該資金收付的理由:
3. 由本對(duì)帳單首次通知開戶人的收付金額(該收付發(fā)生在帳戶行,在發(fā)送本對(duì)帳單之前未曾通知過(guò)開戶人),其類型表現(xiàn)為:“Fxxx”。字母“F”后的三個(gè)字母必須為適當(dāng)?shù)拇a以表示該借記或貸記的原由(代碼同2)。
域62a:帳面余額(結(jié)束余額)
如對(duì)帳單沒有分頁(yè),或某報(bào)文是對(duì)帳單的最后一個(gè)分頁(yè)(在對(duì)帳單由數(shù)份報(bào)文組成時(shí)),在這樣的報(bào)文中,該域代號(hào)為“62F”,其內(nèi)容為該對(duì)帳單結(jié)束時(shí)的帳面結(jié)存的最后余額,其余額必須出現(xiàn)在下期對(duì)帳單的域“60F”中。如該報(bào)文不是對(duì)帳單的最后一個(gè)分頁(yè),該域代號(hào)為“62M”,其內(nèi)容為過(guò)渡帳面余額,其余額必須出現(xiàn)在下一分頁(yè)的“60M”中。其內(nèi)容有四個(gè)子域,結(jié)構(gòu)同域“60a”。
域64:有效余額
如該域列明貸方余額,則為有效余額。如列明借方余額,則開戶人須為此支付利息。其內(nèi)容有四個(gè)子域,結(jié)構(gòu)同域“60a”。
三、攻擊事件分析
1. 整體流程
圖1 整體關(guān)系流程
針對(duì)越南先鋒銀行的攻擊中,相關(guān)惡意代碼內(nèi)置了8家銀行的SWIFT CODE,越南銀行均在這些銀行中設(shè)有代理帳戶。目前看到的Fake PDF Reader樣本目的不是攻擊列表中的這些銀行,而是用來(lái)刪除越南銀行與其他家銀行間的轉(zhuǎn)帳確認(rèn)(篡改MT950對(duì)帳單)。這樣銀行的監(jiān)測(cè)系統(tǒng)就不會(huì)發(fā)現(xiàn)這種不當(dāng)交易了。
2. 功能概述
Fake PDF Reader偽裝成Foxit reader(福昕PDF閱讀器),原始Foxit Reader.exe被重命名為Foxlt Reader.exe,在銀行系統(tǒng)調(diào)用Foxit打印pdf時(shí)激活,將pdf轉(zhuǎn)換為xml,根據(jù)配置文件匹配是否有符合要求的報(bào)文,找到匹配的報(bào)文修改后轉(zhuǎn)換回pdf并調(diào)用原始的FoxitReader打印。并刪除臨時(shí)文件和數(shù)據(jù)庫(kù)的符合條件的交易記錄。
圖2 關(guān)系圖
圖3 配置文件格式
3. 案例:MT950對(duì)帳單(PDF)詳解
圖4 MT950對(duì)帳單(PDF)
上圖是MT950對(duì)帳單的PDF版本,圖中就對(duì)帳單的關(guān)鍵報(bào)文域進(jìn)行了對(duì)應(yīng)的解釋(黑體字所示),另外藍(lán)色框是Fake PDF Reader惡意程序需要判斷和修改的地方(藍(lán)色字體是相關(guān)具體動(dòng)作的說(shuō)明)。
下圖是正常的PDF對(duì)帳單和篡改后的PDF對(duì)帳單,其中左圖紅色底色部分內(nèi)容,就是攻擊者想要?jiǎng)h掉帳單記錄和需要修改的帳面余額和有效余額。
圖5 正常PDF對(duì)帳單(左圖),篡改后的PDF對(duì)帳單(右圖)
4. 技術(shù)細(xì)節(jié)
Fake PDF Reader分析
圖6 功能流程圖
Fake PDF Reader程序來(lái)自于Foxit PDF SDK,依賴動(dòng)態(tài)庫(kù)fpdfsdk.dll。
A、讀取配置文件
配置文件使用異或加密,KEY為7C4D5978h。路徑為 c:windows empWRTULMutilps32.dat。
圖7 讀取配置文件
B、處理參數(shù)
參數(shù)個(gè)數(shù)必須大于等于4個(gè),應(yīng)該為:“FoxitReader路徑”、“/t”、“pdf路徑”和“打印機(jī)ip”。
C、PDF修改
圖8 PDF修改執(zhí)行流程
PDF轉(zhuǎn)XML:以參數(shù)-xml調(diào)用了pdf2html庫(kù),轉(zhuǎn)換成xml,文件放在臨時(shí)目錄。
圖9 PDF轉(zhuǎn)XML
讀取xml文件:查找Instance Type and Transmission所在的行,跳過(guò)9行,匹配SWIFT消息類型字符串,有FIN 950則進(jìn)入950消息處理,沒有則進(jìn)入非950消息處理。
950消息處理:匹配Sender字段,查找發(fā)報(bào)方的SWIFT Code,匹配是否在列表中。符合條件則定位Opening Balance行,并跳過(guò)9行,讀取Amount數(shù)值,轉(zhuǎn)換為Int64。繼續(xù)跳過(guò)2行,匹配是否為Debit,循環(huán)讀取Opening Balance的所有交易和配置文件中的字符串比較,符合則設(shè)置刪除標(biāo)記并對(duì)數(shù)據(jù)做累加操作,繼續(xù)讀取Closing Balance節(jié)中的Amount字段,轉(zhuǎn)換為Int64。根據(jù)前面累加的數(shù)據(jù)和此數(shù)據(jù)對(duì)比,平帳后寫入數(shù)據(jù)并設(shè)置Debit/Credit標(biāo)記。完成修改后,新添加1頁(yè),重新添加所有行,并刪除前面的1頁(yè)。
圖10 惡意代碼內(nèi)部預(yù)設(shè)的SWIFT CODE
表4 惡意代碼內(nèi)部預(yù)設(shè)的SWIFT CODE對(duì)應(yīng)的具體銀行名稱
非950消息處理:從Sender行開始讀取,和配置文件匹配,成功后刪除整頁(yè)。
修復(fù)xml中的行的坐標(biāo),修復(fù)指定行的字體,并修正Closing Avail Bal (Avail Funds)的值。
刪除臨時(shí)文件。
圖11 刪除臨時(shí)文件
XML轉(zhuǎn)PDF。
D、使用原參數(shù)調(diào)用真正的FoxitReader.exe
圖12 調(diào)用真正的FoxitReader
E、失敗則調(diào)用LogClear
圖13 調(diào)用LogClear
F、最后刪除臨時(shí)文件
LogClear分析
圖14 功能流程圖
根據(jù)傳入?yún)?shù)個(gè)數(shù)進(jìn)行相關(guān)初始化操作,如果有進(jìn)行初始化操作,如果沒有參數(shù)則直接開始執(zhí)行清除操作;
命令參數(shù)格式:'-f
圖15 相關(guān)參數(shù)格式
進(jìn)一步進(jìn)行循環(huán)刪除文件中記錄的內(nèi)容,根據(jù)參數(shù)格式化一個(gè)文件名稱,進(jìn)行刪除消息文件相關(guān)記錄操作。
文件名格式:%s\%s_%d%.2d%.2d.txt,第一個(gè)%s是從配置文件中讀取的路徑,第二個(gè)%s的字符串內(nèi)容如下,后面的%d依次表示年、月、日。