首頁>技術>

在過去的兩個月裡,我一直在研究採用GO語言編寫的惡意軟體。

Go,又稱Golang,是谷歌公司開發的一種程式語言,現在正在被越來越多的惡意軟體開發者所使用的。

在這篇文章中,我就將針對一款採用GO語言編寫的新型Linux勒索軟體進行分析。

GO二進位制檔案概述

這裡分析的樣本,是一個被剝離了編譯和除錯資訊的ELF可執行檔案,這使得逆向工程變得困難。值得慶幸的是,一款補救工具(REDRESS: https://go-re.tk/redress/)可以為我們提供幫助。

下面是使用引數“-src”分析此樣本的輸出:

通過圖1,我們可以看出該惡意軟體由三個Go檔案組成。

此外,我們還可以看到它所有的函式以及它們的程式碼行號。根據一些函式的名稱,我們大致就能判定,它應該是一種勒索軟體。

原始碼僅有300多行,說明這款勒索軟體並不複雜,可能還處於初始開發階段。

接下來,就讓我們在偵錯程式中開始動態除錯吧。

在這裡,我使用的是Radare2(Radare2: https://rada.re/r/)。這是因為對於分析被剝離了的Go二進位制檔案而言,它比GDB更合適。

Go二進位制檔案的動態分析

我在Radare2中發出命令“aaa”以執行自動分析,在圖2中,我們可以看到Radare2很好地還原並識別了函式名和符號名。

如你所見,函式init()在主函式之前執行,函式check()在函式init()中呼叫。

在函式check()中,勒索軟體首先會通過向hxxps://ipapi.co/json/傳送一個http請求來獲取受感染主機的位置資訊,目的是避免感染一些特定國家的使用者,如白俄羅斯(BY)、俄羅斯(RU)和烏克蘭(UA)。

接下來,它將呼叫函式makesecret(),目的是使用以二進位制形式硬編碼的RSA公鑰來加密AES金鑰。在這個函式中,它通過呼叫函式EncryptPKCS1v15以使用RSA加密和PKCS#1 v1.5中的填充方案對給定的AES金鑰進行加密。

使用RSA加密後的資料如下:

圖6.使用RSA加密後的AES金鑰

接下來,它將在Golang包編碼/base64中呼叫函式EncodeToString,以使用base64演算法對先前加密的資料進行編碼。

然後,它將為解密的README檔案(贖金票據)形成一個緩衝區,如圖8所示:

我們可以看到,加密的AES金鑰以Base64編碼的形式被寫入了解密的README檔案中。

在加密檔案之前,它還會通過發出命令“service stop [pname]”或“systemctl stop [pname]”來殺死以下程序。

當它嘗試停止apache2.service時,會彈出一個標題為“Authentication Required(需要身份驗證)”的對話方塊,提示使用者輸入系統密碼以完成此操作。

圖10. apache2.service身份驗證對話方塊

最後,它將通過在Golang包“path/filepath”中呼叫函式Walk(根字串,walkFn WalkFunc)來遍歷根目錄“/”,然後開始加密檔案。

值得一提的是,該勒索軟體還包含一份加密目錄黑名單,目的是避免加密這些目錄下面的檔案。

圖12.加密目錄黑名單

加密演算法使用的是AES-256-CFB,被加密檔案將被附加副檔名“.encrypted”,README檔案如圖13所示:

圖13. README檔案

用於執行加密的函式是EncFile(),它首先會獲取目標檔案的大小。如果檔案小於0x986880(1,000,000)位元組,它將使用AES-256-CFB演算法加密所有檔案資料。否則,它將讀取資料的前0x986880(1,000,000)位元組並將其加密,然後將原始檔案的剩餘資料複製到加密後文件的末尾。

結論

通過上述分析,我們可以看到這種勒索軟體並不複雜,可能還處於初始開發階段。

但是,我們應該意識到,Go語言正在被用來開發越來越多的惡意軟體,各大防毒軟體廠商更是有必要注意這一點。

  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • deepin筆記——linux發行版不屬於任何國家嗎?