溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

用Golang編寫惡意軟件的示例分析

發(fā)布時間:2021-12-15 09:30:33 來源:億速云 閱讀:180 作者:小新 欄目:網(wǎng)絡(luò)安全

這篇文章主要為大家展示了“用Golang編寫惡意軟件的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“用Golang編寫惡意軟件的示例分析”這篇文章吧。

僅供參考學(xué)習(xí)使用

Golang (Go)是一種相對較新的編程語言,發(fā)現(xiàn)其編寫的惡意軟件并不常見。 然而,用Go編寫的新變種正在慢慢出現(xiàn),這給惡意軟件分析人員帶來了挑戰(zhàn)。 使用這種語言編寫的應(yīng)用程序體積較大,在調(diào)試器下看起來與使用其他語言(如C / C ++)編譯的應(yīng)用程序有很大不同。

最近,我們觀察到一種新的Zebocry惡意軟件變種,用Go編寫(詳細分析可在此處獲得)。我們在實驗室中捕獲了另一個用Go編寫的惡意軟件。這一次,我們將Trojan.CryptoStealer.Go視為一個非常簡單的竊取程序。本文將詳細介紹其功能,同時展示可用于分析Go編寫的其他惡意軟件的方法和工具。

分析樣本

Malwarebytes將此竊取程序檢測為Trojan.CryptoStealer.Go:

·992ed9c632eb43399a32e13b9f19b769c73d07002d16821dde07daa231109432

·513224149cd6f619ddeec7e0c00f81b55210140707d78d0e8482b38b9297fc8f

·941330c6be0af1eb94741804ffa3522a68265f9ff6c8fd6bcf1efb063cb61196 – HyperCheats.rar (原始安裝包)

·3fcd17aa60f1a70ba53fa89860da3371a1f8de862855b4d1e5d0eb8411e19adf – HyperCheats.exe (UPX 加殼)

·0bf24e0bc69f310c0119fc199c8938773cdede9d1ca6ba7ac7fea5c863e0f099 – 脫殼之后

行為分析

在底層,Golang調(diào)用WindowsAPI,我們可以使用典型工具跟蹤其調(diào)用,例如PIN跟蹤器。 我們發(fā)現(xiàn)惡意軟件會在以下路徑中搜索文件:

"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\"

這些路徑指向從瀏覽器存儲的數(shù)據(jù)。一個有趣的事實是其中一條路徑指向Yandex瀏覽器,該瀏覽器主要在俄羅斯流行。下一個搜索的路徑"C:\Users\tester\Desktop\*"找到的所有文件都復(fù)制到在%APPDATA%中創(chuàng)建的一個文件夾中:用Golang編寫惡意軟件的示例分析“Desktop”文件夾包含從桌面及其子文件夾復(fù)制的所有TXT文件。 我們的測試機器示例:用Golang編寫惡意軟件的示例分析搜索完成后,文件被壓縮:用Golang編寫惡意軟件的示例分析我們可以看到這個數(shù)據(jù)包被發(fā)送到C&C服務(wù)器(cu23880.tmweb.ru/landing.php):用Golang編寫惡意軟件的示例分析內(nèi)在Golang編譯的二進制文件通常比較大,所以樣本采用UPX打包來壓縮并不奇怪。 我們將其脫殼。就得到了簡單的Go二進制文件。導(dǎo)出表顯示了編譯路徑和一些其他有趣的函數(shù):用Golang編寫惡意軟件的示例分析看看這些導(dǎo)出的數(shù)據(jù),我們可以了解其內(nèi)部使用的靜態(tài)庫。其中許多函數(shù)(與trampoline有關(guān))可以在模塊sqlite-3中找到:<    https://github.com/mattn/go-sqlite3/blob/master/callback.go>。函數(shù)crosscall2來自Go運行時,它與從C/C++應(yīng)用程序調(diào)用Go相關(guān)( https://golang.org/src/cmd/cgo/out.go)。

工具

為了分析,我使用了IDA Pro以及George Zaytsev編寫的腳本IDAGolangHelper。首先,Go可執(zhí)行文件必須加載到IDA中。然后,我們可以從菜單(文件 - >腳本文件)運行腳本。然后,我們會看到以下菜單,可以訪問特定功能:用Golang編寫惡意軟件的示例分析首先,我們需要確定Golang版本(該腳本提供了一些有用的啟發(fā)式)。在這種情況下,它將是Go 1.2。然后,我們可以重命名函數(shù)并添加標(biāo)準的Go類型。完成這些操作后,代碼看起來更具可讀性。下面,您可以看到使用腳本之前和之后的函數(shù)視圖。之前(僅導(dǎo)出的函數(shù)被命名):用Golang編寫惡意軟件的示例分析之后(大多數(shù)函數(shù)都自動解析并添加了它們的名稱):用Golang編寫惡意軟件的示例分析其中許多功能來自靜態(tài)鏈接庫。因此,我們需要主要關(guān)注注釋為main_*- 特定于特定可執(zhí)行文件的函數(shù)。用Golang編寫惡意軟件的示例分析

代碼概述

在函數(shù)“main_init”中,我們可以看到將在應(yīng)用程序中使用的模塊:

用Golang編寫惡意軟件的示例分析它與以下模塊靜態(tài)鏈接:

GRequests(https://github.com/levigross/grequests)

go-sqlite3(https://github.com/mattn/go-sqlite3)

嘗試(https://github.com/manucorporat/try)分析此功能可以幫助我們預(yù)測功能; 即查看上面的庫,我們可以看到它們將通過網(wǎng)絡(luò)進行通信,讀取SQLite3數(shù)據(jù)庫并拋出異常。其他初始化器建議使用正則表達式,zip格式和讀取環(huán)境變量。此函數(shù)還負責(zé)初始化和映射字符串。我們可以看到其中一些是第一個base64解碼的: 

用Golang編寫惡意軟件的示例分析

在字符串初始化中,我們看到對加密貨幣錢包的引用。Ethereum:

用Golang編寫惡意軟件的示例分析

Monero:

用Golang編寫惡意軟件的示例分析

Golang二進制文件的主要功能是注釋“main_main”。 

用Golang編寫惡意軟件的示例分析

在這里,我們可以看到應(yīng)用程序正在創(chuàng)建一個新目錄(使用函數(shù)os.Mkdir)。這是將要復(fù)制(找到的)文件的目錄。之后,有幾個Goroutine已經(jīng)開始使用runtime.newproc。(Goroutines可以像線程一樣使用,但它們的管理方式不同。更多細節(jié)可以在here找到)。 這些例程負責(zé)搜索文件。 同時,Sqlite模塊用于解析數(shù)據(jù)庫以竊取數(shù)據(jù)。之后,惡意軟件將其全部壓縮到一個包中,最后,壓縮包被上傳到C&C。 

用Golang編寫惡意軟件的示例分析

盜取了什么?

要查看攻擊者究竟對哪些數(shù)據(jù)感興趣,我們可以更詳細地了解執(zhí)行SQL查詢的函數(shù),并查看相關(guān)字符串。Golang中的字符串以連續(xù)形式存儲在批量中:

用Golang編寫惡意軟件的示例分析

之后,根據(jù)需要檢索來自此批量的單個塊。因此,看看每個字符串被引用的代碼中的哪個位置并不容易。下面是代碼中打開“sqlite3”數(shù)據(jù)庫的片段(檢索長度為7的字符串): 

用Golang編寫惡意軟件的示例分析

另一個例子:通過給定的偏移量和長度,從完整的字符串塊中檢索此查詢:

用Golang編寫惡意軟件的示例分析

我們來看看這些查詢試圖獲取的數(shù)據(jù)。獲取調(diào)用引用的字符串,我們可以檢索并列出所有字符串:

select name_on_card, expiration_month, expiration_year, card_number_encrypted, billing_address_id FROM credit_cards
select * FROM autofill_profiles
select email FROM autofill_profile_emails
select number FROM autofill_profile_phone
select first_name, middle_name, last_name, full_name FROM autofill_profile_names

我們可以看到瀏覽器的cookie數(shù)據(jù)庫被查詢與在線交易相關(guān)的數(shù)據(jù):信用卡號,到期日以及姓名和電子郵件地址等個人數(shù)據(jù)。所有搜索的文件的路徑都存儲為base64字符串。其中許多與加密貨幣錢包有關(guān),但我們也可以找到對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

總結(jié)

此惡意軟件中使用的一些概念提醒我們,例如Evrial,PredatorTheThief和Vidar。它有類似的目標(biāo),并將被盜數(shù)據(jù)作為ZIP文件發(fā)送給C&C。但是,沒有證據(jù)證明這個竊取者的作者與這些案件有某種聯(lián)系。當(dāng)我們看一下這個惡意軟件的實現(xiàn)和功能時,它相當(dāng)簡單。它的大尺寸來自許多靜態(tài)編譯的模塊??赡苓@個惡意軟件還處于開發(fā)的早期階段 - 作者可能剛剛開始學(xué)習(xí)Go并正在進行實驗。我們將密切關(guān)注其發(fā)展。

起初,分析Golang編譯的應(yīng)用程序可能會感到壓倒性,因為它具有龐大的代碼庫和不熟悉的結(jié)構(gòu)。但是在適當(dāng)?shù)墓ぞ叩膸椭?,安全研究人員可以輕松地在這個迷宮中導(dǎo)航,因為所有的功能都被貼上標(biāo)簽。由于Golang是一種相對較新的編程語言,我們可以預(yù)期分析它的工具會隨著時間的推移而成熟。用惡意軟件寫出威脅發(fā)展的新興趨勢嗎?這有點太早了。但我們知道,用新語言編寫的惡意軟件的意識對我們的freehuf的讀者來說非常重要。

以上是“用Golang編寫惡意軟件的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI