近期,孟加拉國、厄瓜多爾、越南、菲律賓等多個國家的銀行陸續曝出曾經遭遇黑客攻擊并試圖竊取金錢事件,這些事件中黑客都瞄準了SWIFT銀行間轉賬系統,對相關銀行實施攻擊和竊取。360追日團隊深入分析了截獲的黑客攻擊越南先鋒銀行所使用的惡意代碼樣本,并由此對此次事件中的黑客攻擊技術進行了初步探索。
一、概述
隨著孟加拉國央行被黑客攻擊導致8100萬美元被竊取的事件逐漸升溫,針對銀行SWIFT系統的其他網絡攻擊事件逐一被公開,具體如下表所示:
攻擊時間 | 被攻擊銀行 | 計劃竊取 | 實際損失 |
---|---|---|---|
2013年 | 索納莉銀行(Sonali Bank) | 未知 | 25萬美元 |
2015年1月 | 厄瓜多爾銀行(Banco del Austro) | 未知 | 1200萬美元 |
2015年10月 | 疑似菲律賓某銀行 | 未知 | 未知 |
2015年12月8日 | 越南先鋒銀行(Tien Phong Bank) | 120萬歐元 | 無 |
2016年2月5日 | 孟加拉國央行(Bangladesh Central Bank) | 10億美元 | 8100萬美元 |
未知 | 疑似香港某銀行 | 未知 | 未知 |
未知 | 疑似菲律賓、新西蘭某銀行和其他10多家金融機構 | 未知 | 未知 |
表 1 針對銀行攻擊事件匯總
通過對相關惡意代碼和攻擊手法的研究,以及其他安全廠商的研究結論,360追日團隊推測針對孟加拉國央行和越南先鋒銀行發起攻擊的幕后組織或許是同一個組織,該組織可能是Operation Blockbuster所揭秘披露的Lazarus組織,中國相關機構也是該組織主要攻擊目標之一。
本報告主要就越南先鋒銀行的相關攻擊事件、樣本展開深入分析,暫不深入關聯孟加拉國央行被攻擊事件和Lazarus組織,對相關事件或組織之間的關聯歸屬分析等,我們在之后的關聯分析報告中會有詳細的介紹。
關于Lazarus黑客組織
2016年2月25日,Lazarus黑客組織以及相關攻擊行動由卡巴斯基實驗室、AlienVault實驗室和Novetta等安全企業協作分析并揭露。2013年針對韓國金融機構和媒體公司的DarkSeoul攻擊行動和2014年針對索尼影視娛樂公司(Sony Pictures Entertainment,SPE)攻擊的幕后組織都是Lazarus組織。
相關時間節點 | 具體事件描述 |
---|---|
2007.03.07 | “Flame”行動中第一代惡意軟件開發完成,該活動最終與“1Mission”行動、“Troy”行動、2013年DarkSeoul攻擊聯系在一起。 |
2009.07.04 | 使用惡意工具MYDOOM、Dozer對美國、韓國網站發動大規模DDOS攻擊,該惡意軟件在MBR寫入文本信息“Memory of Independence Day”。 |
2009-2013 | “Troy”網絡間諜行動活躍數年,在2013年DarkSeoul攻擊達到頂峰。 |
2011.03 | “Ten Days of Rain”行動攻擊韓國媒體、金融、基礎設施。利用韓國地區的肉雞發動DDOS攻擊。 |
2011.04 | 韓國農協銀行被DDOS攻擊。 |
2012 | 發動“1Mission”行動,該行動的攻擊者被報道稱從2007年就開始活躍。 |
2012.06 | 韓國保守媒體報紙聲稱受到具有清除功能的惡意軟件的攻擊,但未成功。網站被未知黑客團體“IsOne”篡改。 |
2013.03.20 | DarkSeoul清除行動攻擊韓國廣播公司、金融機構、及一家ISP。兩個未知黑客團隊NewRomanic Cyber Army Team 和 WhoIs Team聲稱對此負責。 |
2014.03 | 疑似有黑客試圖竊取韓國軍方數據,使用的服務器之一也被用于DarkSeoul攻擊。 |
2014.11.24 | 索尼影視娛樂公司網絡被植入破壞性惡意軟件,信息被竊取。早前的未知黑客組織GOP聲稱負責。 |
表 2 Lazarus組織歷史活動相關重大事件節點
二、關于SWIFT
SWIFT全稱是Society for Worldwide Interbank Financial Telecommunication,中文名是“環球同業銀行金融電信協會”。1973年5月,由美國、加拿大和歐洲的—些大銀行正式成立SWIFT組織,其總部設在比利時的布魯塞爾,它是為了解決各國金融通信不能適應國際間支付清算的快速增長而設立的非盈利性組織,負責設計、建立和管理SWIFT國際網絡,以便在該組織成員間進行國際金融信息的傳輸和確定路由。
目前全球大多數國家大多數銀行已使用SWIFT系統。SWIFT的使用,使銀行的結算提供了安全、可靠、快捷、標準化、自動化的通訊業務,從而大大提高了銀行的結算速度。由于SWIFT的格式具有標準化,目前信用證的格式主要都是用SWIFT電文。
1. SWIFT提供的服務
l 接入服務(Connectivity)
包括SWIFTAllianceAccess and Entry 、SWIFTAlliance Gateway 、SWIFTAlliance Webstation 、File TransferInterface 等接入模式;
l 金融信息傳送服務(Messaging)
包括SWIFTNetFIN 、SWIFTNet InterAct 、SWIFT FileAct 、SWIFTNeBrowse 等傳輸模式;
l 交易處理服務(transactionprocessing)
提供交易處理匹配服務 、實時報告的雙邊凈額清算服務 、支持B2B的商務中的端對端電子支付等;
l 分析服務與分析工具(AnalyticalServices/Tools)
向金融機構提供一些輔助性的服務,即分析服務與分析工具。
2. SWIFT CODE
SWIFT Code是由該協會提出并被ISO通過的銀行識別代碼,其原名是BIC (Bank Identifier Code)。
每個申請加入SWIFT組織的銀行都必須事先按照SWIFT組織的統一規則,制定出本行SWIFT地址代碼,經SWIFT組織批準后正式生效。SWIFT Code由8位或11位英文字母或數字組成。
代碼格式:
l 8碼長—XXXXXXXX
a | b | c | |||||
---|---|---|---|---|---|---|---|
X | X | X | X | X | X | X | X |
l 11碼長—XXXXXXXXXXX
a | b | c | d | |||||||
---|---|---|---|---|---|---|---|---|---|---|
X | X | X | X | X | X | X | X | X | X | X |
各部分的含義如下:
a. 銀行代碼:由四位易于識別的銀行行名字頭縮寫字母構成,如 ABOC、ICBK、CITI 等;
b. 國家代碼:根據國際標準化組織的規定由兩位字母構成,如 CN、HK、GB、US、DE 等;
c. 地區代碼:由兩位數字或字母構成,標明城市,如 BJ、HH、SX 等;
d. 分行代碼:由三位數字或字母構成,標明分行,如 100、010、CJ1、400 等,若表 示總行,則使用XXX。
3. SWIFT報文
SWIFT組織根據國際結算業務開展的需要,制定了相關的標準格式的報文,SWIFT的標準格式分為兩種:
l 基于FIN的標準MTs
l 基于XML的新標準MXs
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報文
根據銀行的實際運作,SWIFTMT報文共劃分為十大類:
類 | 名稱 | 是否加密押 |
---|---|---|
1 | 客戶匯款與支票(CUSTOMER TRANSFERS CHEQUES) | 加押 |
2 | 銀行頭寸調拔(FINANCIAL INSTITUTION TRANSFERS) | 加押 |
3 | 外匯買賣與存放款(FOREIGN EXCHANGE) | 加押 |
4 | 托收(COLLECTIONS,CASH LETTERS) | 加押 |
5 | 證券(SECURITIES) | 加押 |
6 | 貴金屬和辛迪加(PRECIOUS METALS AND SYNDICATIONS) | 加押 |
7 | 跟單信用證和保函(DOCUMENTARY CREDITS AND GUARANTEES) | 加押 |
8 | 旅行支票(TRAVELLER’S CHEQUES) | 加押 |
9 | 銀行帳務(BANK STATEMENT) | 不加押 |
0 | SWIFT系統報文 | 不加押 |
表 3 SWFIT MT報文十大類
SWIFT報文第1類至第8類均為押類電報,需要使用SWIFT密押。SWIFT密押是獨立于電傳密押之外,在代理行之間交換,且僅供雙方在收發SWIFT電訊時使用的密押。其他兩類屬于不加押報文。
4. MT950對帳單
MT950范圍
這是由帳戶行發送給開戶行,用來說明所開帳戶上所有發生額詳細情況的報文格式。
MT950準則
l 費用、利息及其它調整所應用的方式
1.列明已發送的費用通知MTn90報文編號;
2.如該費用系通過本對帳單首先通知開戶行,則必須符合以下條件:
① 必須用相關業務編號加以識別,如開戶行原業務的編號;
② 本金必須在對帳單中單獨列明。
l 對帳單中的金額必須與原業務中的金額一致。如有費用已在業務報文中清楚列明,或是
某一報文的必要組成部分(如托收款項),則該費用不必在對帳單中特別注明;
l 帳戶行不得將各自獨立的業務并筆。如原收付報文系多筆業務,對帳單中仍應分別記帳,每筆借記均須引用原各自報文中域20;
l 建議在每個營業日日終,只要帳戶中有發生額,帳戶行就發送MT950;
l 為便于人工核對,建議對帳單中的發生額先按借記和貸記排列,在借記和貸記兩類中分別按起息日排列,同一起息日的借、貸記中,按金額由小到大排列;
l 一份對帳單的內容可由數份報文組成。
MT950域詳述
l 域 20:發報行的編號
l 域 25:帳號
列明該對帳單的帳號。
l 域28C:對帳單號碼 / 分頁序號
該域內容前后分別表示對帳單連續號碼和每一份對帳單報文的分頁序號。
l 域60a:起始余額
列明某對帳單所涉及的一段時期開始時,有關帳戶的帳面余額;或當報文出現分頁時,每一分頁的過渡起始余額。其內容包括:
借貸標志 D:借方余額 C:貸方余額
日期 用YYMMDD表示
貨幣
金額
該域內容必須與前一份該帳戶對帳單報文域“62a”相同。只有當該報文系某一時期對帳單的第一分頁,或對帳單沒有分頁,這份報文中該域代號才為“60F”。
l 域61:對帳單細目
列明每筆業務的詳情。在報文的容量允許范圍內,該域可重復使用,其內容共有九個子域,順序如下:
起息日用 YYMMDD表示
記帳日期(可省略) 用MMDD表示
借貸標志 D:借記C:貸記RC:以借沖貸RD:以貸沖借
貨幣代號(在需要時使用) 填入貨幣符號的第三個字母
金額
業務類型 其出現方式有以下三種:
1. 如系通過SWIFT報文收付的金額及其費用,其類型表現為:“Snnn”字母“S”后的三位數字即SWIFT報文格式代號。
2. 如系通過非SWIFT報文收付的金額及其費用,其類型表現為“Nxxx”字母“N”后的三個字母為下列代碼之一所替換以表示該資金收付的理由:
BOE | 匯票 | DIV | 股利 |
---|---|---|---|
BRF | 紀經人傭金 | EQA | 等值金額 |
CHG | 有關費用 | ECK | 歐洲支票 |
CHK | 支票 | FEX | 外匯買賣 |
CLR | 光票信用及票匯 | INT | 利息 |
CMI | 資金管理 | LBX | 專用信箱 |
CMN | 資金管理 | LDP | 貸款保證金 |
CMS | 資金管理 | MSC | 雜項 |
CMT | 資金管理 | RTI | 還款 |
CMZ | 資金管理 | SEC | 證券(記入本金時使用) |
COL | 托收 | STO | 長期訂單 |
COM | 傭金 | TCK | 旅行支票 |
DCR | 跟單信用證 | TRF | 頭寸調撥 |
DDT | 直接借記 | VDA | 調整起息日 |
1.由本對帳單首次通知開戶人的收付金額(該收付發生在帳戶行,在發送本對帳單之前未曾通知過開戶人),其類型表現為:“Fxxx”。字母“F”后的三個字母必須為適當的代碼以表示該借記或貸記的原由(代碼同2)。
供開戶行參考的編號 | 該子域內至少應出現一個有效字符 |
---|---|
帳戶行的編號(需要時使用) | 列明帳戶行有關業務的編號。如某業務發生在帳戶行,那么帳戶行的編號應和第七個子域中的編號一致,在這種情形下,該子域可以不用。 |
補充內容 | 填寫業務的詳細情況 |
l 域62a:帳面余額(結束余額)
如對帳單沒有分頁,或某報文是對帳單的最后一個分頁(在對帳單由數份報文組成時),在這樣的報文中,該域代號為“62F”,其內容為該對帳單結束時的帳面結存的最后余額,其余額必須出現在下期對帳單的域“60F”中。如該報文不是對帳單的最后一個分頁,該域代號為“62M”,其內容為過渡帳面余額,其余額必須出現在下一分頁的“60M”中。其內容有四個子域,結構同域“60a”。
l 域64:有效余額
如該域列明貸方余額,則為有效余額。如列明借方余額,則開戶人須為此支付利息。其內容有四個子域,結構同域“60a”。
三、攻擊事件分析
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 empWRTULMutilps32.dat。
圖 5 讀取配置文件
B、處理參數
參數個數必須大于等于4個,應該為:“FoxitReader路徑”、“/t”、“pdf路徑”和“打印機ip”。
C、PDF修改
圖 6 PDF修改執行流程
lPDF轉XML:以參數-xml調用了pdf2html庫,轉換成xml,文件放在臨時目錄。
圖 7 PDF轉XML
l 讀取xml文件:查找InstanceType and Transmission所在的行,跳過9行,匹配SWIFT消息類型字符串,有FIN 950則進入950消息處理,沒有則進入非950消息處理。
l 950消息處理:匹配Sender字段,查找發報方的SWIFT Code,匹配是否在列表中。符合條件則定位Opening Balance行,并跳過9行,讀取Amount數值,轉換為Int64。繼續跳過2行,匹配是否為Debit,循環讀取Opening Balance的所有交易和配置文件中的字符串比較,符合則設置刪除標記并對數據做累加操作,繼續讀取Closing Balance節中的Amount字段,轉換為Int64。根據前面累加的數據和此數據對比,平帳后寫入數據并設置Debit/Credit標記。完成修改后,新添加1頁,重新添加所有行,并刪除前面的1頁。
圖 8 惡意代碼內部預設的SWIFT CODE
SWIFT CODE | 銀行名稱 | 國家 | 城市 |
---|---|---|---|
UOVBSGSG | 大華銀行有限公司 | 新加坡 | |
ANZBAU3M | 澳大利亞和新西蘭銀行集團有限公司 | 澳大利亞 | 墨爾本 |
BOTKJPJT | 三菱東京銀行有限公司 | 日本 | 東京 |
MHCBJPJT | 瑞穗銀行 | 日本 | 東京 |
CZNBKRSE | 國民銀行 | 韓國 | 首爾 |
*******N | 中國某銀行境外分行1 | 越南 | 河內 |
UNCRITMM | 聯合信貸銀行 | 意大利 | 米蘭 |
*******3 | 中國某銀行境外分行2 | 美國 | 紐約 |
表 4 惡意代碼內部預設的SWIFT CODE對應的具體銀行名稱
l 非950消息處理:從Sender行開始讀取,和配置文件匹配,成功后刪除整頁。
l 修復xml中的行的坐標,修復指定行的字體,并修正Closing Avail Bal (Avail Funds)的值。
l 刪除臨時文件。
圖 9 刪除臨時文件
l XML轉PDF。
D、使用原參數調用真正的FoxitReader.exe
圖 10 調用真正的FoxitReader
E、失敗則調用LogClear
圖 11 調用LogClear
F、最后刪除臨時文件
LogClear分析
MD5 | 909e1b840909522fe6ba3d4dfd197d93 |
---|---|
文件大小 | 20,480字節 |
編譯器 | Microsoft Visual C++ 6.0 |
圖 12 功能流程圖
根據傳入參數個數進行相關初始化操作,如果有進行初始化操作,如果沒有參數則直接開始執行清除操作;
命令參數格式:'-f
圖 13 相關參數格式
進一步進行循環刪除文件中記錄的內容,根據參數格式化一個文件名稱,進行刪除消息文件相關記錄操作。
文件名格式:%s\%s_%d%.2d%.2d.txt,第一個%s是從配置文件中讀取的路徑,第二個%s的字符串內容如下,后面的%d依次表示年、月、日。
圖 14 讀取的相關內容
SWIFT CODE | 銀行名稱 | 國家 | 城市 |
---|---|---|---|
TPBVVNVX | 越南先鋒銀行 | 越南 |
最后通過sqlcmd.exe 執行數據庫操作刪除數據庫中消息文件相關記錄.
圖 15 清理錯誤日志1
圖 16 清理錯誤日志2
圖 17 清理graft_history
同源性分析
在本報告中主要就越南先鋒銀行相關攻擊事件、樣本展開深入分析,暫不就其他攻擊事件中的同源樣本展開詳細介紹,本節只簡單證明二者之間的存在一定的聯系。
關于越南先鋒銀行、孟加拉國央行和Lazarus組織之間的關系,我們在之后的關聯分析報告中會有詳細的介紹。
四、總結
從將惡意程序構造偽裝成Foxitreader(福昕PDF閱讀器)到對MT950對帳單PDF文件的解析和精確的篡改等攻擊手法,都反映出攻擊者對銀行內部交易系統和作業流程非常熟悉。
針對越南先鋒銀行的針對性攻擊和之前針對孟加拉國央行等其他銀行的攻擊之間,并非獨立無關的攻擊事件,從360追日團隊對相關樣本同源性分析和其他廠商的研究分析來看,針對越南先鋒銀行和孟加拉國央行的攻擊有可能來自同一個組織,其幕后組織有可能是Operation Blockbuster所揭秘披露的Lazarus組織。