您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“用Golang編寫惡意軟件的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“用Golang編寫惡意軟件的示例分析”這篇文章吧。
僅供參考學習使用
Golang (Go)是一種相對較新的編程語言,發現其編寫的惡意軟件并不常見。 然而,用Go編寫的新變種正在慢慢出現,這給惡意軟件分析人員帶來了挑戰。 使用這種語言編寫的應用程序體積較大,在調試器下看起來與使用其他語言(如C / C ++)編譯的應用程序有很大不同。
最近,我們觀察到一種新的Zebocry惡意軟件變種,用Go編寫(詳細分析可在此處獲得)。我們在實驗室中捕獲了另一個用Go編寫的惡意軟件。這一次,我們將Trojan.CryptoStealer.Go視為一個非常簡單的竊取程序。本文將詳細介紹其功能,同時展示可用于分析Go編寫的其他惡意軟件的方法和工具。
Malwarebytes將此竊取程序檢測為Trojan.CryptoStealer.Go:
·992ed9c632eb43399a32e13b9f19b769c73d07002d16821dde07daa231109432
·513224149cd6f619ddeec7e0c00f81b55210140707d78d0e8482b38b9297fc8f
·941330c6be0af1eb94741804ffa3522a68265f9ff6c8fd6bcf1efb063cb61196 – HyperCheats.rar (原始安裝包)
·3fcd17aa60f1a70ba53fa89860da3371a1f8de862855b4d1e5d0eb8411e19adf – HyperCheats.exe (UPX 加殼)
·0bf24e0bc69f310c0119fc199c8938773cdede9d1ca6ba7ac7fea5c863e0f099 – 脫殼之后
在底層,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打包來壓縮并不奇怪。 我們將其脫殼。就得到了簡單的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)
嘗試(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_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數據庫被查詢與在線交易相關的數據:信用卡號,到期日以及姓名和電子郵件地址等個人數據。所有搜索的文件的路徑都存儲為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是一種相對較新的編程語言,我們可以預期分析它的工具會隨著時間的推移而成熟。用惡意軟件寫出威脅發展的新興趨勢嗎?這有點太早了。但我們知道,用新語言編寫的惡意軟件的意識對我們的freehuf的讀者來說非常重要。
以上是“用Golang編寫惡意軟件的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。