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參數位置動作
serviceParentParent參數連接1st和2nd參數:/autorun、/uninstall、/install、/stop和/cleanup
/autorunservice1st惡意軟體被指示休眠10分鐘
/uninstallservice1st刪除以下autorun註冊鍵

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

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

/installservice1st檢查下列程序是否在記憶體中執行(圖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)

/stopservice1st這等於是摧毀一切的指令

當使用/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註冊鍵和在短暫暫停後刪除自身

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

 

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

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

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

 

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

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

函數名稱自何DLL輸入函數描述傳遞的參數
WFSCloseMSXFS.dll終止應用程式和特定服務間的會話(session)。
WFSAsyncExecuteMSXFS.dll發送服務特定指令給服務供應商。WFS_CMD_PIN_GET_DATA – 從鍵盤取得使用者輸入資料
WFSFreeResultMSXFS.dll通知XFS Manager釋出動態分配給服務供應商的記憶體緩衝
WFSGetInfoMSXFS.dll從特定服務供應商取得資訊
WFSExecuteMSXFS.dll發送服務特定指令給服務供應商。WFS_CMD_IDC_EJECT_CARD – 讓提款機退出卡片
WFS_CMD_CDM_DISPENSE – 讓提款機吐錢
WFS_CMD_IDC_READ_RAW_DATA – 從金融卡(磁條和EMV晶片)讀取原始資料
WFSRegisterMSXFS.dll使用指定視窗對特定服務啟用事件監視.
WFSOpenMSXFS.dll初始化應用程式和特定服務間的會話(session)。
WFSCancelAsyncRequestMSXFS.dll在特定服務所進行的特定非同步請求完成前加以取消。
WFSStartUpMSXFS.dll在應用程式和XFS Manager間建立連線。
WFSCleanUpMSXFS.dll從XFS Manager將應用程式斷線
WFMQueryValueXFS_CONF.dll從特定開啟鍵內取得特定值的資料。
WFMOpenKeyXFS_CONF.dll開啟特定鍵。
WFMEnumKeyXFS_CONF.dll列出特定開啟鍵內的子鍵值。
WFMCloseKeyXFS_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的更新:

 

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

 

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