這篇文章主要為大家展示了“用Golang編寫惡意軟件的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學習一下“用Golang編寫惡意軟件的示例分析”這篇文章吧。
創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的湯原網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
僅供參考學習使用
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)建的一個文件夾中:“Desktop”文件夾包含從桌面及其子文件夾復(fù)制的所有TXT文件。 我們的測試機器示例:搜索完成后,文件被壓縮:我們可以看到這個數(shù)據(jù)包被發(fā)送到C&C服務(wù)器(cu23880.tmweb.ru/landing.php):內(nèi)在Golang編譯的二進制文件通常比較大,所以樣本采用UPX打包來壓縮并不奇怪。 我們將其脫殼。就得到了簡單的Go二進制文件。導(dǎo)出表顯示了編譯路徑和一些其他有趣的函數(shù):看看這些導(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版本(該腳本提供了一些有用的啟發(fā)式)。在這種情況下,它將是Go 1.2。然后,我們可以重命名函數(shù)并添加標準的Go類型。完成這些操作后,代碼看起來更具可讀性。下面,您可以看到使用腳本之前和之后的函數(shù)視圖。之前(僅導(dǎo)出的函數(shù)被命名):之后(大多數(shù)函數(shù)都自動解析并添加了它們的名稱):其中許多功能來自靜態(tài)鏈接庫。因此,我們需要主要關(guān)注注釋為main_*
- 特定于特定可執(zhí)行文件的函數(shù)。
在函數(shù)“main_init”中,我們可以看到將在應(yīng)用程序中使用的模塊:
它與以下模塊靜態(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ù)還負責初始化和映射字符串。我們可以看到其中一些是第一個base64解碼的:
在字符串初始化中,我們看到對加密貨幣錢包的引用。Ethereum:
Monero:
Golang二進制文件的主要功能是注釋“main_main”。
在這里,我們可以看到應(yīng)用程序正在創(chuàng)建一個新目錄(使用函數(shù)os.Mkdir)。這是將要復(fù)制(找到的)文件的目錄。之后,有幾個Goroutine已經(jīng)開始使用runtime.newproc。(Goroutines可以像線程一樣使用,但它們的管理方式不同。更多細節(jié)可以在here找到)。 這些例程負責搜索文件。 同時,Sqlite模塊用于解析數(shù)據(jù)庫以竊取數(shù)據(jù)。之后,惡意軟件將其全部壓縮到一個包中,最后,壓縮包被上傳到C&C。
要查看攻擊者究竟對哪些數(shù)據(jù)感興趣,我們可以更詳細地了解執(zhí)行SQL查詢的函數(shù),并查看相關(guān)字符串。Golang中的字符串以連續(xù)形式存儲在批量中:
之后,根據(jù)需要檢索來自此批量的單個塊。因此,看看每個字符串被引用的代碼中的哪個位置并不容易。下面是代碼中打開“sqlite3”數(shù)據(jù)庫的片段(檢索長度為7的字符串):
另一個例子:通過給定的偏移量和長度,從完整的字符串塊中檢索此查詢:
我們來看看這些查詢試圖獲取的數(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
此惡意軟件中使用的一些概念提醒我們,例如Evrial,PredatorTheThief和Vidar。它有類似的目標,并將被盜數(shù)據(jù)作為ZIP文件發(fā)送給C&C。但是,沒有證據(jù)證明這個竊取者的作者與這些案件有某種聯(lián)系。當我們看一下這個惡意軟件的實現(xiàn)和功能時,它相當簡單。它的大尺寸來自許多靜態(tài)編譯的模塊。可能這個惡意軟件還處于開發(fā)的早期階段 - 作者可能剛剛開始學習Go并正在進行實驗。我們將密切關(guān)注其發(fā)展。
起初,分析Golang編譯的應(yīng)用程序可能會感到壓倒性,因為它具有龐大的代碼庫和不熟悉的結(jié)構(gòu)。但是在適當?shù)墓ぞ叩膸椭?,安全研究人員可以輕松地在這個迷宮中導(dǎo)航,因為所有的功能都被貼上標簽。由于Golang是一種相對較新的編程語言,我們可以預(yù)期分析它的工具會隨著時間的推移而成熟。用惡意軟件寫出威脅發(fā)展的新興趨勢嗎?這有點太早了。但我們知道,用新語言編寫的惡意軟件的意識對我們的freehuf的讀者來說非常重要。
以上是“用Golang編寫惡意軟件的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!