分析用Golang編寫的新竊取程式
Golang (Go) 是一種相對較新的程式語言,發現其編寫的惡意軟體並不常見。 然而,用Go編寫的新變種正在慢慢出現,這給惡意軟體分析人員帶來了挑戰。 使用這種語言編寫的應用程式體積龐大,在偵錯程式下看起來與使用其他語言(如C / C ++)編譯的應用程式有很大不同。
最近,我們觀察到一種新的Zebocry惡意軟體變種,用Go編寫(詳細分析可在此處 here 獲得)。
我們在實驗室中捕獲了另一個用Go編寫的惡意軟體。這一次,Malwarebytes將 Trojan.CryptoStealer.Go 視為一個非常簡單的竊取程式。本文將詳細介紹其功能,同時展示可用於分析Go編寫的其他惡意軟體的方法和工具。
一、分析的樣本
Malwarebytes將此竊取程式檢測為Trojan.CryptoStealer.Go:
·992ed9c632eb43399a32e13b9f19b769c73d07002d16821dde07daa231109432
· 513224149cd6f619ddeec7e0c00f81b55210140707d78d0e8482b38b9297fc8f
· 941330c6be0af1eb94741804ffa3522a68265f9ff6c8fd6bcf1efb063cb61196 – HyperCheats.rar (原始安裝包)
·3fcd17aa60f1a70ba53fa89860da3371a1f8de862855b4d1e5d0eb8411e19adf– HyperCheats.exe (UPX 加殼)
· 0bf24e0bc69f310c0119fc199c8938773cdede9d1ca6ba7ac7fea5c863e0f099– 脫殼
二、行為分析Behavioral analysis
在底層,Golang呼叫WindowsAPI,我們可以使用典型工具跟蹤其呼叫,例如PIN跟蹤器。 我們發現惡意軟體會在以下路徑中搜索檔案:
· "C:\Users\tester\AppData\Local\Uran\User Data\""C:\Users\tester\AppData\Local\Amigo\User\User Data\"
· "C:\Users\tester\AppData\Local\Torch\User Data\""C:\Users\tester\AppData\Local\Chromium\User Data\"
· "C:\Users\tester\AppData\Local\Nichrome\User Data\""C:\Users\tester\AppData\Local\Google\Chrome\User Data\"
· "C:\Users\tester\AppData\Local\360Browser\Browser\User Data\""C:\Users\tester\AppData\Local\Maxthon3\User Data\"
· "C:\Users\tester\AppData\Local\Comodo\User Data\""C:\Users\tester\AppData\Local\CocCoc\Browser\User Data\"
· "C:\Users\tester\AppData\Local\Vivaldi\User Data\""C:\Users\tester\AppData\Roaming\Opera Software\"
· "C:\Users\tester\AppData\Local\Kometa\User Data\""C:\Users\tester\AppData\Local\Comodo\Dragon\User Data\"
· "C:\Users\tester\AppData\Local\Sputnik\Sputnik\User Data\""C:\Users\tester\AppData\Local\Google (x86)\Chrome\User Data\""C:\Users\tester\AppData\Local\Orbitum\User Data\"
·"C:\Users\tester\AppData\Local\Yandex\YandexBrowser\User Data\""C:\Users\tester\AppData\Local\K-Melon\User Data\"
這些路徑指向瀏覽器儲存的資料。一個有趣的事實是其中一個路徑指向Yandex瀏覽器,該瀏覽器在俄羅斯很流行。
下一個搜尋的路徑是桌面:
"C:\Users\tester\Desktop\*"
找到的所有檔案都複製到在%APPDATA%中建立的一個資料夾中:
“Desktop”資料夾包含從桌面及其子資料夾複製的所有TXT檔案。 我們的測試機器示例:
搜尋完成後,檔案被壓縮:
我們可以看到這個資料包被髮送到C&C(cu23880.tmweb.ru/landing.php):
三、內在
Golang編譯的二進位制檔案通常很大,所以樣本採用UPX打包來壓縮就不足為奇。 我們可以使用標準UPX輕鬆脫殼。結果,我們得到了簡單的Go二進位制檔案。匯出表顯示了編譯路徑和一些其他有趣的函式:
看看這些匯出,我們可以瞭解其內部使用的靜態庫。
其中許多函式(與trampoline有關)可以在模組sqlite-3中找到: https://github.com/mattn/go-sqlite3/blob/master/callback.go 。
函式crosscall2來自Go執行時,它與從C/C++應用程式呼叫Go相關( https://golang.org/src/cmd/cgo/out.go )。
四、工具
為便於分析,我使用了IDA Pro以及George Zaytsev編寫的指令碼 IDAGolangHelper 。首先,Go可執行檔案必須載入到IDA中。然後,我們可以從選單(檔案 – >指令碼檔案)執行指令碼。之後,我們會看到以下選單,可以訪問特定功能:
首先,我們需要確定Golang版本(該指令碼提供了一些有用的啟發式)。在本案例中,它是Go 1.2。然後,我們可以重新命名函式並新增標準的Go型別。完成這些操作後,程式碼看起來更具可讀性。下面,可以看到使用指令碼之前和之後的函式檢視。
之前(僅匯出的函式被命名):
之後(大多數函式都自動解析並添加了它們的名稱):
其中許多函式來自靜態連結庫 因此,我們需要主要關注main_ *的函式 – 特定可執行檔案的函式。
五、程式碼
在函式“main_init”中,我們可以看到在應用程式中使用的模組:
它與以下模組靜態連結:
· GRequests (https://github.com/levigross/grequests)
· go-sqlite3 (https://github.com/mattn/go-sqlite3)
· try (https://github.com/manucorporat/try)
分析此函式可以幫助我們預測功能; 即檢視上述庫,我們可以看到它們將通過網路進行通訊,讀取SQLite3資料庫並丟擲異常。其他初始化建議使用正則表示式,zip格式和讀取環境變數。
此函式還負責初始化和對映字串。 我們可以看到其中一些是第一個base64解碼的:
在字串初始化中,我們看到對加密貨幣錢包的引用。
Ethereum:
Monero:
Golang二進位制檔案的主函式為“main_main”。
在這裡,我們可以看到應用程式正在建立一個新目錄(使用函式os.Mkdir)。這是將要複製(找到的)檔案的目錄。
之後,有幾個Goroutine已經開始使用runtime.newproc。(Goroutines可以像執行緒一樣使用,但它們的管理方式不同。更多細節可以在 here 找到)。 這些例程負責搜尋檔案。 同時,Sqlite模組用於解析資料庫以竊取資料。
之後,惡意軟體將其全部壓縮到一個包中,最後,壓縮包被上傳到C&C。
五、竊取什麼?
要檢視攻擊者究竟對哪些資料感興趣,我們可以更詳細地瞭解執行SQL查詢的函式,並檢視相關字串。
Golang中的字串以串聯形式儲存在一起:
之後,根據需要檢索來自此批量的單個塊。 因此,看看每個字串被程式碼中的哪個位置引用並不容易。
下面是程式碼中開啟“sqlite3”資料庫的片段(獲取長度為7的字串):
另一個例子:通過給定的偏移量和長度,從完整的字串塊中檢索此查詢:
我們來看看這些查詢試圖獲取的資料。通過呼叫引用的字串,我們可以獲取並列出所有字串:
select name_on_card, expiration_month, expiration_year, card_number_encrypted, billing_address_id FROM credit_cardsselect * FROM autofill_profilesselect email FROM autofill_profile_emailsselect number FROM autofill_profile_phoneselect first_name, middle_name, last_name, full_name FROM autofill_profile_names
我們可以看到瀏覽器的cookie資料庫被查詢與線上交易相關的資料:信用卡號,到期日以及姓名和電子郵件地址等個人資料。
所有搜尋的檔案的路徑都儲存為base64字串。其中許多與加密貨幣錢包有關,但我們也可以找到對Telegram的引用。
Software\\Classes\\tdesktop.tg\\shell\\open\\command\\AppData\\Local\\Yandex\\YandexBrowser\\User Data\\ \\AppData\\Roaming\\Electrum\\wallets\\default_wallet \\AppData\\Local\\Torch\\User Data\\ \\AppData\\Local\\Uran\\User Data\\ \\AppData\\Roaming\\Opera Software\\ \\AppData\\Local\\Comodo\\User Data\\ \\AppData\\Local\\Chromium\\User Data\\ \\AppData\\Local\\Chromodo\\User Data\\ \\AppData\\Local\\Kometa\\User Data\\ \\AppData\\Local\\K-Melon\\User Data\\ \\AppData\\Local\\Orbitum\\User Data\\ \\AppData\\Local\\Maxthon3\\User Data\\ \\AppData\\Local\\Nichrome\\User Data\\ \\AppData\\Local\\Vivaldi\\User Data\\ \\AppData\\Roaming\\BBQCoin\\wallet.dat \\AppData\\Roaming\\Bitcoin\\wallet.dat \\AppData\\Roaming\\Ethereum\\keystore\ \AppData\\Roaming\\Exodus\\seed.seco \\AppData\\Roaming\\Franko\\wallet.dat \\AppData\\Roaming\\IOCoin\\wallet.dat \\AppData\\Roaming\\Ixcoin\\wallet.dat \\AppData\\Roaming\\Mincoin\\wallet.dat \\AppData\\Roaming\\YACoin\\wallet.dat \\AppData\\Roaming\\Zcash\\wallet.dat \\AppData\\Roaming\\devcoin\\wallet.dat
六、龐大但不成熟的惡意軟體
此惡意軟體中使用的一些概念提醒我們其他竊取程式,例如Evrial,PredatorTheThief和 Vidar 。它有類似的目標,並將被盜資料作為ZIP檔案傳送給C&C。但是,沒有證據證明此竊取程式的作者與這些案件有某種聯絡。
當我們看這個惡意軟體的實現和功能時,它相當簡單。它的大個頭來自許多靜態編譯的模組。可能這個惡意軟體還處於開發的早期階段 – 作者可能剛剛開始學習Go並正在進行實驗。我們將密切關注其發展。
起初,分析Golang編譯的應用程式可能會感到很難,因為它具有龐大的程式碼庫和不熟悉的結構。但是在適當的工具的幫助下,安全研究人員可以輕鬆地在這個迷宮中導航,因為所有的函式都被貼上標籤。由於Golang是一種相對較新的程式語言,我們可以預期分析它的工具會隨著時間的推移而成熟。
用Go編寫惡意軟體是威脅發展的新興趨勢嗎?這有點太早了。但我們知道,用新語言編寫的惡意軟體的意識對安全社群非常重要。