深入分析新型POS機(jī)木馬LogPOS
近幾年P(guān)OS惡意軟件活動(dòng)頻繁,本文就2015年發(fā)現(xiàn)的一個(gè)新成員LogPOS樣本進(jìn)行分析。該惡意軟件的一個(gè)重要的特點(diǎn)是其利用了郵件槽,可以躲避傳統(tǒng)的檢測機(jī)制。
此外,在該樣本中,主程序創(chuàng)建了郵件槽,并作為郵件槽服務(wù)器,而注入到各個(gè)進(jìn)程中的代碼則作為客戶端,它們將獲取到的信用卡號碼寫入郵件槽,然后通過郵件槽直接將數(shù)據(jù)傳輸出去。
前言
在這之前,已經(jīng)有過一次POS惡意軟件的惡意活動(dòng)。
2014年,Jeremy Humble和我發(fā)現(xiàn)了2個(gè)未曾曝光過的POS惡意軟件家族,接著在2015年我們又發(fā)現(xiàn)了一個(gè)POS惡意軟件的新家族。這次發(fā)現(xiàn)的惡意軟件我們命名為“LogPOS”,它跟前段時(shí)間發(fā)現(xiàn)的POS惡意軟件有幾個(gè)顯著的差異。
在本文接下來的部分中,我們將對LogPOS進(jìn)行詳細(xì)分析,該樣本哈希值為:
af13e7583ed1b27c4ae219e344a37e2b。
科普:郵件槽(Mailslots)
Windows系統(tǒng)中提供了幾種進(jìn)程間通信的方式,郵件槽(Mailslots)就是其中的一種。
郵件槽提供進(jìn)程間單向通信能力,任何進(jìn)程都能建立郵件槽成為郵件槽服務(wù)器。其它進(jìn)程,稱為郵件槽客戶,可以通過郵件槽的名字給郵件槽服務(wù)器進(jìn)程發(fā)送消息。進(jìn)來的消息一直放在郵件槽中,直到服務(wù)器進(jìn)程讀取它為止。一個(gè)進(jìn)程既可以是郵件槽服務(wù)器也可以是郵件槽客戶,因此可建立多個(gè)郵件槽實(shí)現(xiàn)進(jìn)程間的雙向通信。
通過郵件槽可以給本地計(jì)算機(jī)上的郵件槽、其它計(jì)算機(jī)上的郵件槽或指定網(wǎng)絡(luò)區(qū)域中所有計(jì)算機(jī)上有同樣名字的郵件槽發(fā)送消息。廣播通信的消息長度不能超過400字節(jié),非廣播消息的長度則受郵件槽服務(wù)器指定的最大消息長度的限制。
郵件槽與命名管道相似,不過它傳輸數(shù)據(jù)是通過不可靠的數(shù)據(jù)報(bào)(如TCP/IP協(xié)議中的UDP包)完成的,一旦網(wǎng)絡(luò)發(fā)生錯(cuò)誤則無法保證消息正確地接收。不過郵件槽有簡化的編程接口和給指定網(wǎng)絡(luò)區(qū)域內(nèi)的所有計(jì)算機(jī)廣播消息的能力,所以郵件槽不失為應(yīng)用程序發(fā)送和接收消息的一種好的選擇。#p#
深入分析
幾乎在看到該樣本的那一刻,一個(gè)字符串在我腦海中浮現(xiàn)出來:
\\.\mailslot\LogCC。
在大多數(shù)的POS變種中,都是利用一個(gè)進(jìn)程讀取其他進(jìn)程的內(nèi)存,然后將發(fā)現(xiàn)的跟蹤數(shù)據(jù)寫入到日志中。因?yàn)長ogPOS將代碼注入到了各種進(jìn)程中,然后令其搜索各個(gè)進(jìn)程的內(nèi)存,所以此時(shí)無法使用日志,因?yàn)樗鼈儾荒芡瑫r(shí)以寫入訪問模式打開同一個(gè)文件。所以,LogPOS選擇使用了郵件槽。
使用郵件槽進(jìn)行通信或存儲對惡意軟件來說并不是一種新機(jī)制,在火眼(FireEye)關(guān)于APT28的一份報(bào)告中,它提到該組織曾使用過郵件槽“check_mes_v5555”。郵件槽是一種IPC機(jī)制,它允許多個(gè)客戶端向服務(wù)器發(fā)送消息。在本文所分析的樣本中,主程序創(chuàng)建了郵件槽,并作為郵件槽服務(wù)器,而注入到各個(gè)進(jìn)程中的代碼則作為客戶端,它們將獲取到的信用卡號碼寫入郵件槽,然后通過郵件槽直接傳輸?shù)紺2。
在程序執(zhí)行的開始處,程序以郵件槽名字\\.\mailslot\LogCC為參數(shù)調(diào)用了CreateMailslotA函數(shù)。
如果郵件槽創(chuàng)建失敗,程序?qū)顺?否則,程序?qū)⑦M(jìn)入一個(gè)無限循環(huán),并按順序執(zhí)行下面的函數(shù):
1、休眠500毫秒 2、遍歷進(jìn)程 (1)與白名單進(jìn)行比較 (2)將shellcode注入到進(jìn)程中(如果不在白名單中) (3)掃描信用卡跟蹤信息 (4)使用Luhn算法進(jìn)行驗(yàn)證 3、讀取郵件槽 4、將數(shù)據(jù)發(fā)送出去
最有趣的是注入的代碼,所以接下來我們將更詳細(xì)地對其進(jìn)行分析。
在遍歷進(jìn)程(如上所述)時(shí),惡意軟件會將進(jìn)程名與白名單進(jìn)行比對,白名單主要包含以下名字:
windbg.exe logounui.exe taskmgr.exe skype.exe thunderbird.exe devenv.exe steam.exe winlogon.exe wininit.exe csrss.exe smss.exe svchost.exe firefox.exe chrome.exe explorer.exe psi.exe pidgin.exe System
實(shí)現(xiàn)比較字符串功能的代碼如下所示:
一旦發(fā)現(xiàn)某個(gè)進(jìn)程名不在白名單中,就會利用函數(shù)WriteProcessMemory將代碼注入到該進(jìn)程的內(nèi)存空間。Shellcode所做的第一件事就是尋找kernel32的基地址,利用其開始創(chuàng)建導(dǎo)入模塊。尋找kernel32的方法在很多博客中都已經(jīng)總結(jié)的很詳細(xì)了。
一旦發(fā)現(xiàn)了基地址,shellcode將開始通過自己的哈希技術(shù)重建入口。一些哈希和對應(yīng)值的列表如下所示。
建立入口之后,惡意軟件會以文件名\\.\mailslot\LogCC為參數(shù)調(diào)用函數(shù)CreateFileA來獲取一個(gè)用于寫操作的文件句柄。
當(dāng)掃描內(nèi)存時(shí),惡意軟件將使用一個(gè)自定義搜索算法來查找跟蹤信息的常見的標(biāo)志。
然后,將找到的信息傳遞給實(shí)現(xiàn)的Luhn算法來進(jìn)行驗(yàn)證。一旦此信息有效,則它們將會被發(fā)送到郵件槽中,以供后面主程序的讀取。當(dāng)按順序增加一個(gè)數(shù)字后,惡意軟件將創(chuàng)建一個(gè)格式化字符串,并將該信息發(fā)送到遠(yuǎn)程站點(diǎn)上。
然后,數(shù)據(jù)被發(fā)送到遠(yuǎn)程站點(diǎn)上(通過HTTP的GET方法)。
站點(diǎn)接收到的內(nèi)容會被存放在一個(gè)表單中(在寫本文時(shí),表單內(nèi)容并未加密)。表單中大部分的號碼都在rdpclip和notepad的進(jìn)程空間中,所以我們猜想可能該惡意軟件作者正在測試他們的代碼。相應(yīng)內(nèi)容和相關(guān)IP信息的截圖如下圖所示。
檢測方法
因?yàn)長ogPOS并不是通過掃描文件來獲取未加密的信用卡信息,而是利用郵件槽的方法,所以它能夠避開傳統(tǒng)的檢測機(jī)制。然而,如果使用類似yara這樣的工具的話,將能夠很容易地檢測到該惡意軟件的各種變體。下面的規(guī)則將能夠幫助你在網(wǎng)絡(luò)中找到這個(gè)惡意工具。
- rule LogPOS
- { meta:
- author = "Morphick Security"
- description = "Detects Versions of LogPOS"
- md5 = "af13e7583ed1b27c4ae219e344a37e2b"
- strings:
- $mailslot = "\\\\.\\mailslot\\LogCC"
- $get = "GET /%s?encoding=%c&t=%c&cc=%I64d&process="
- //64A130000000 mov eax, dword ptr fs:[0x30]
- //8B400C mov eax, dword ptr [eax + 0xc]
- //8B401C mov eax, dword ptr [eax + 0x1c]
- //8B4008 mov eax, dword ptr [eax + 8]
- $sc = {64 A1 30 00 00 00 8B 40 0C 8B 40 1C 8B 40 08 }
- condition:
- $sc and 1 of ($mailslot,$get)
- }
除了yara,這種POS惡意軟件也能通過它的URI模式被檢測出來,下面的簽名將能夠從網(wǎng)絡(luò)中檢測出該惡意軟件。
- signature LogPOS {
- #source: Morphick Security
- #version: 1
- #Ref: af13e7583ed1b27c4ae219e344a37e2b
- ip-proto == tcp
- dst-port == 80,443
- http-request /.*encoding\=.*\&t\=.*\&cc\=.*\&process\=.*\&track\=/
- event "LogPOS Credit Card GET Request Pattern"
- }
結(jié)論
近幾年,POS惡意軟件已經(jīng)在很多方面引起了關(guān)注。趨勢科技最近報(bào)道說,在過去6個(gè)月中發(fā)現(xiàn)的POS惡意軟件變種,比過去幾年中發(fā)現(xiàn)的都要多。
例如,今年早些時(shí)候,Josh Grunzweig發(fā)現(xiàn)了一個(gè)Alina的新變種,該變種被命名為“eagle”;Trustwave記錄了另一個(gè)新版本(稱為Spark)。然而,隨著這一切的發(fā)生,新的家族如Getmypass、LusyPOS、Daredevil、NewPOSThings和Backoff的發(fā)現(xiàn)歷程則才剛剛開始。