七月台灣發生金融史上頭一遭,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。
概述
這份分析是根據原來使用的惡意軟體跟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.dll和XFS_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 WFSExecute和WFSAsyncExecute和特定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_DATA給WFSAsyncExecute來從數字鍵盤讀取使用者輸入。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(資深威脅研究員)