ATM 提款機自動吐錢 ! 剖析Ripper提款機惡意軟體

七月台灣發生金融史上頭一遭,ATM自動吐鈔盜領事件!國際犯罪集團以惡意程式入侵台灣第一銀行自動櫃員機電腦系統,利用遠端操控模式讓全台34台提款機自動提款機(ATM)自動吐鈔,盜領八千萬。接著八月泰國亦發生銀行ATM遭盜領1229萬泰銖(約合新台幣1130萬元)事件。資安趨勢部落格曾報導過ATM 盜領事件非偶發,自動提款機惡意程式逐年攀升,以下這篇文章將分析新提款機( ATM )惡意軟體:Ripper。

 

 Ripper能夠讓提款機吐出大量金錢,也稱為「jackpotting中大獎」。它可以從插入卡片的EMV晶片和磁條讀取資料。這可能是種認證方式,確認共犯實際上位在提款機前。這個惡意軟體還具備自毀功能,可以從受影響系統消除自身的所有痕跡。這可以阻礙目標銀行發現和解決攻擊。

————————————————-

八月資安研究人員發表一篇報告討論稱為Ripper的新提款機( ATM )惡意軟體,認為它跟泰國最近的自動提款機(ATM)攻擊有關。作為預防措施,曾有大批自動提款機被暫時關閉。

這份研究綜述了此惡意軟體所使用的技術,針對的三大提款機廠商及Ripper和之前自動提款機(ATM)惡意軟體的比較。他們的分析是根據MD5雜湊值為15632224b7e5ca0ccb0a042daf2adc13的檔案。此檔案在8月23日從泰國使用者上傳到Virustotal。

趨勢科技在分析過程中注意到一些其他的細節,這是在之前的分析中所沒有或似乎有所矛盾的地方。我們將在本篇文章中強調這些差異。並且提供一些技術指標(如code offset程式碼偏移量)來讓其他研究人員可以繼續延伸我們的工作。

在今年四月,趨勢科技的前瞻性威脅研究小組和歐洲刑警組織EC3合作一篇關於當時所有提款機惡意軟體威脅的綜合報告。我們在之後一直注意新出現的惡意軟體。該份報告提供給金融和執法機構社群的成員。如果你身為這些產業的一份子而沒有收到這份報告,可以聯絡Robert McArdle

skimer-atm-malware

概述

這份分析是根據原來使用的惡意軟體跟NCR(一家提款機廠商)在8月30日一份安全公告所分享的樣本。主要分析樣本是c9381c5d6f39c54aad5b57c3b1deecab6887af57(SHA1值)。它使用了UPX壓縮。經過解壓縮指令:upx -d <packed_file>所產生的未壓縮檔案是5ffded28ee96493e3ad0b4c59b13484f9edc1abe(SHA1值)。

這惡意軟體被命名Ripper的原因是來自除錯PDB字串「W:\ATMRipper\Release\ATMRipper.pdb」(在未壓縮檔案的offset 0x30b80),顯示攻擊者的專案名稱是ATMRipper。該惡意軟體是用Visual C ++開發,而且_main_函數從0x4016ef(虛擬地址)開始。

Ripper能夠讓提款機吐出大量金錢,也稱為「jackpotting中大獎」。它可以從插入卡片的EMV晶片和磁條讀取資料。這可能是種認證方式,確認共犯實際上位在提款機前。這個惡意軟體還具備自毀功能,可以從受影響系統消除自身的所有痕跡。這可以阻礙目標銀行發現和解決攻擊。

 

命令列參數

Ripper接受以下命令列參數格式:

<malware_executable> ParentSwitch / 1stSwitch / 2ndSwitch

 

各參數及觀察到的動作如下:

參數名稱 Parent 參數位置 動作
service Parent Parent參數連接1st和2nd參數:/autorun、/uninstall、/install、/stop和/cleanup
/autorun service 1st 惡意軟體被指示休眠10分鐘
/uninstall service 1st 刪除以下autorun註冊鍵

·         HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run DBackup或FwLoadPm

·         HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run DBackup或FwLoadPm

/install service 1st 檢查下列程序是否在記憶體中執行(圖1)

·         C:\Program Files\NCR Aptra\bin\NCRPRS.exe – 針對NCR提款機

·         C:\Program Files\Diebold\Agilis Startup\DBackup.exe – 針對Diebold提款機

·         C:\Probase\cscw32\bin\FwLoadPm.exe – 針對Wincor提款機

如果發現,會將自己更名為製造商特定檔名。如果沒有發現這些程序,就會更名為FwLoadPm.exe,並且將更名過的檔案加入autorun註冊鍵

·         HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run (使用參數/autorun)

·         HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run (使用參數/autorun)

/stop service 1st 這等於是摧毀一切的指令

當使用/stop參數,Ripper會檢查sdelete(Sysinternals工具)是否被放入磁碟中。它會在<TEMP>目錄搜尋sdelete程式(sd.exe)。如果找不到,它會植入惡意程式內建的sdelete程式(放在未壓縮檔案的offset 0x00036718)。它會用taskkill來終止下列程序(圖2):aptra*、ncr*、java.exe、wrapper.exe、aiw.exe、*came*、snmp.exe、*gbr*和ul*.exe。

接著使用sdelete來刪除下列檔案:D:\*、E:\*、F:\*、G:\*、H:\*、C:\*.log、C:\*.jrn、C:\*.brc、C:\*.xml、C:\*.zip、C:\*.bak、C:\*.err、C:\*.idx、C:\*.dat、C:\*.gsb和C:\*.txc。

Ripper接著刪除C:\*(圖3)。最後刪除autorun註冊鍵和在短暫暫停後刪除自身

/cleanup service 2nd 作為/stop之後的第二個參數。一旦使用,這參數會顯示使用者選單來提供清除選項。Ripper會清除\temp\clnup.dat。這可能包含了惡意軟體所產生的日誌檔。
install Parent 這個選項會先執行指令「taskkill /IM dbackup.exe /T /F」。接著對Service Control Manager建立連線,並且使用API CreateServiceW來新增\System32\dbackup.exe服務。
Remove Parent 開啟Service Control Manager並刪除服務「DBackup Service」。
Start Parent 開啟Service Control Manager並啟動服務「DBackup Service」。
Stop Parent 開啟Service Control Manager並結束服務「DBackup Service」。

 

圖1、尋找目標提款機廠商的相關程序(點擊放大)

圖2、Taskkill現有程序和sdelete各個磁碟和檔案(點擊放大)

圖3、Sdelete C磁碟上的所有檔案(點擊放大)

 

使用XFS(金融服務擴展)功能

Ripper從MSXFS.dllXFS_CONF.dll輸入函數來與提款機周邊設備互動。下表是輸入的函數和用法:

函數名稱 自何DLL輸入 函數描述 傳遞的參數
WFSClose MSXFS.dll 終止應用程式和特定服務間的會話(session)。
WFSAsyncExecute MSXFS.dll 發送服務特定指令給服務供應商。 WFS_CMD_PIN_GET_DATA – 從鍵盤取得使用者輸入資料
WFSFreeResult MSXFS.dll 通知XFS Manager釋出動態分配給服務供應商的記憶體緩衝
WFSGetInfo MSXFS.dll 從特定服務供應商取得資訊
WFSExecute MSXFS.dll 發送服務特定指令給服務供應商。 WFS_CMD_IDC_EJECT_CARD – 讓提款機退出卡片
WFS_CMD_CDM_DISPENSE – 讓提款機吐錢
WFS_CMD_IDC_READ_RAW_DATA – 從金融卡(磁條和EMV晶片)讀取原始資料
WFSRegister MSXFS.dll 使用指定視窗對特定服務啟用事件監視.
WFSOpen MSXFS.dll 初始化應用程式和特定服務間的會話(session)。
WFSCancelAsyncRequest MSXFS.dll 在特定服務所進行的特定非同步請求完成前加以取消。
WFSStartUp MSXFS.dll 在應用程式和XFS Manager間建立連線。
WFSCleanUp MSXFS.dll 從XFS Manager將應用程式斷線
WFMQueryValue XFS_CONF.dll 從特定開啟鍵內取得特定值的資料。
WFMOpenKey XFS_CONF.dll 開啟特定鍵。
WFMEnumKey XFS_CONF.dll 列出特定開啟鍵內的子鍵值。
WFMCloseKey XFS_CONF.dll 關閉特定鍵。

 

被針對的三大提款機廠商

Ripper針對三大廠商Diebold、NCR和Wincor Nixdorf的提款機。它使用輸入自XFS_CONF.dll的API來查詢.DEFAULT\XFS\LOGICAL_SERVICES並找到XFS服務安裝的特定名稱:CDM(吐鈔模組)、IDC(讀卡機)和PIN(密碼鍵盤)。這些XFS服務在不同廠商的機器具備不同的安裝名稱,惡意軟體需要正確識別才能運作。它增加了程式碼複雜性,但同時也讓惡意軟體可以從更多型號的提款機竊取金錢。

安裝位置依各個廠商而異:

  • C:\Program Files\NCR Aptra\bin\NCRPRS.exe (NCR)
  • C:\Program Files\Diebold\Agilis Startup\DBackup.exe (Diebold)
  • C:\Probase\cscw32\bin\FwLoadPm.exe (Wincor Nixdorf)

 

竊盜能力

Ripper呼叫API WFSExecuteWFSAsyncExecute和特定XFS參數來從金融卡讀取資料,讓提款機吐錢,並從數字鍵盤讀取使用者輸入。

我們並不知道從金融卡讀取的確切資料。Ripper可能從特製卡片讀取指令或是竊取存在卡片上的帳戶資料。WFS_CMD_IDC_READ_RAW_DATA指令可以讀取磁條和EMV晶片的資料。插入特製卡片可能用作身份認證,像是惡意軟體的鑰匙。惡意軟體會使用正規式來比對讀取的資料,如下所示。

圖4、從插入金融卡的磁條讀取原始資料

圖5、使用正規式解析金融卡上Track 1或2的資料

 

Ripper將參數WFS_CMD_CDM_DISPENSE傳遞到WFSExecute來讓機器吐鈔。取款機通常會限制每次吐鈔數量。攻擊者需要多次吐鈔來提光機器內所有的錢。

圖6、列出吐鈔訊息

 圖7、透過WFSExecute使用標準WFS_CMD_CDM_DISPENSE指令來吐鈔

 

惡意軟體傳遞參數WFS_CMD_PIN_GET_DATAWFSAsyncExecute來從數字鍵盤讀取使用者輸入。Ripper還可以在提款機螢幕上顯示虛擬數字鍵盤:

圖8、虛擬數字鍵盤

 

使用者選單

Ripper顯示兩個使用者選單來跟攻擊者互動。極不尋常的是大部分出現的選項並沒有啟用。這有兩種可能原因:

  • 我們所分析的樣本還在早期開發階段。許多功能還沒有加上去。
  • 開發者決定去繁留簡,只包含從提款機取錢所需的最少功能。

 

設定選單選項 吐鈔選單選項
1. Ignore cassete balance
2. CLEAN LOGS
3. HIDE
4. BACK
5. UNINSTALL
6. UNINSTALL SERVICE
7. NETWORK: ENABLE
0. NETWORK: DISABLE
DISPENSE
SETTINGS
HIDE
REBOOT

 

我們看了Ripper使用者選單有以下結論:

  • 使用者選單的許多選項可以透過命令列參數來進行。
  • Ripper目前不具備任何網路功能,也沒有輸入任何網路API。

 

自我監控服務

Ripper最有意思的特點之一是它在虛擬地址0x401795產生自我監控服務:

圖9、自我監控服務(點擊放大)

這個函數呼叫API WaitForSingleObject來poll hHandle。如果它收到返回值WAIT_OBJECT_0,那特定物件的狀態已經確認,函數終止。如果它收到非零的返回值,它會進行清除,使用「毀滅一切」的功能(見圖3和/stop的描述)。自我監控服務也可以繞過「毀滅一切」的功能,另外複製一份自己(透過CreateProcessUserAsUserA),並用/autorun來啟動自己,有效的休眠10分鐘。

我們的猜測是自我監控服務確保惡意軟體並非在閒置狀態,可以在攻擊者取得金錢後馬上進行清理。或者它會刪除自己跟整個作業環境,以防止銀行發現惡意檔案。

 

最終想法

我們沒有取得這惡意軟體的安裝程式,所以其它元件可能也是這攻擊的一部分。這些分析對於瞭解Ripper的運作非常有用。目前它仍在早期開發階段,只具備基本的功能而尚未加入其他功能。

趨勢科技所發現的樣本似乎主要是針對Wincor Nixdorf的機器,雖然Diebold和NCR的機器也有危險。未來啟用網路功能後將會將此惡意軟體提升到另一個層次,不過目前尚未出現使用網路的變種。

 

附錄

下面是來自趨勢科技研究報告的提款機惡意軟體比較表,包含Ripper和對GreenDispenser的更新:

 

Skimer Ploutus Padpin/Tyupkin NeoPocket Suceful GreenDispenser Ripper
發現年份 2007 2013 2014 2014 2015 2015 2016
真正會散播In-the-wild Yes Yes Yes Yes No Yes Yes
受影響區域 俄羅斯,烏克蘭,其他歐盟國家 墨西哥 東歐,東南亞 未知 N/A 墨西哥 泰國
針對廠商 Diebold NCR NCR Diebold Diebold, NCR (聲稱) Wincor Diebold, NCR, Wincor
安裝方式 未知 CD-ROM CD-ROM 未知 N/A 未知 未知
出現多個變種 Yes Yes No No No No No
開發語言 Delphi C# compiled into .NET C# compiled into .NET VB Borland C++ Visual C++ Visual C++
存取周邊的程式庫 DbdDevAPI.dll ncr.aptra.axfs.
activexfscontrols.dll
MSXFS.dll 不存取周邊 MSXFS.dll MSXFS.dll MSXFS.dll
具備存取控制 Yes Yes Yes Yes No Yes (兩階段認證) 未確認
吐鈔 Yes Yes Yes No No Yes Yes
竊取資料 Yes No No Yes Yes No 未知
使用者選單 Yes Yes Yes No Yes Yes Yes
使用者指令接收自 數字鍵盤 鍵盤、簡訊 數字鍵盤 原始通訊端,檔案 鍵盤,滑鼠 數字鍵盤 鍵盤,數字鍵盤,金融卡 (聲稱)
語言 西班牙文 英文,西班牙文 英文 西班牙文 俄文 英文 英文
加密竊取的資料 Yes No No Yes No No No
有期限的活動 No 需要每廿四小時啟動一次 僅運作特定次數 在2014年五月21日前活動 No 在2015年1月1日到8月31日間活動 No
重開機後仍存在 Yes Yes Yes Yes No No Yes
關閉防毒程式 No No Yes (透過其他工具) Yes No No No
關閉提款機感應器 No No No No Yes No No

 

@原文出處:Untangling the Ripper ATM Malware 作者:Numaan Huq(資深威脅研究員)