隨著網路威脅不斷演變和變得更加複雜,安全研究人員和專業人士保持領先至關重要。在本文中,我們將探討ChatGPT如何協助分析惡意軟體,特別是遠端存取木馬(RAT)AsyncRAT,並深入探討ChatGPT的能力,討論如何透過分析網路流量和揭露指令與控制(C2)基礎設施來協助識別威脅指標。但在繼續之前,先簡單介紹一下ChatGPT。
ChatGPT是由人工智慧(AI)驱动的,于2022年11月由OpenAI推出的原型,旨在回答长篇复杂问题。ChatGPT的革命性在于它被训练学习问题背后的含义。因此,所报告的答案非常类似于人类的回答。目前尚不确定ChatGPT是否会在打击网络犯罪方面提供支持或构成挑战,但现在让我们专注于ChatGPT及其恶意软件分析能力。
因此,無論您是經驗豐富的安全專業人員還是剛入門的人員,本文將為您提供有關在惡意軟體分析中使用高級語言模型的有價值見解。
讓我們開始吧!
為了了解ChatGPT的能力和功能,我們開始分析AsyncRAT。我們很好奇這種尖端AI技術如何幫助揭示這種惡意軟體的內部工作原理,並有可能透過分析網路流量和揭示命令和控制(C2)基礎設施來協助識別威脅指標。
作為我們研究的結果,我們發現以下程式碼片段作為AsyncRAT的第1階段載入器,包含大量混淆和一個base64編碼的字串。程式碼是用Python編寫的,並利用公共語言運行時(CLR)庫與.NET Framework交互,載入和運行一個以base64編碼的組件。
在進一步研究中,我們發現ChatGPT在分析AsyncRAT等惡意軟體方面非常有用,但也發現它在某些領域仍有其限制。儘管如此,我們認為在打擊網路威脅方面使用高階語言模型如ChatGPT是一個有前景的發展。

在這裡,我們決定將此程式碼作為ChatGPT 的輸入,並深入了解該程式碼。


提供的程式碼使用base64 編碼的字串,由於其字串長度限制和允許執行的操作限制,ChatGPT 無法對其進行解碼。但是,ChatGPT 仍然能夠對程式碼的功能和潛在的惡意意圖提供簡單易懂的解釋。值得注意的是,ChatGPT 是一種功能強大的語言模型,但它應該與其他方法和技術結合使用,並不是所有與惡意軟體分析相關的任務的靈丹妙藥。


這就是我們使用Cyberchef 解碼base64 字串的原因,結果證明這是第二階段載入程式python 腳本。


我們再次將這段程式碼當作ChatGPT 的輸入,看看它能告訴我什麼,

同樣,我們有一個長的base64 編碼字串,我們必須使用Cyberchef 對其進行解碼。

這個字串原來是PE檔。我們無法將PE 檔案傳遞給ChatGPT,因此從PE 檔案分析的角度來看沒有任何幫助。但我們決定繼續查看PE 文件中的內容。

我們將使用Dnspy 反編譯這個二進位。

如您所見,base64 解碼函數的輸出會作為輸入傳遞給解壓縮函數。

上面的程式碼是一個C# 函數,它似乎正在解壓縮一個名為「gzip」的位元組數組。此函數使用GZipStream 類別建立一個新流,並向其傳遞一個使用「gzip」位元組數組建構的MemoryStream 物件。然後使用GZipStream 讀取4096 位元組區塊中的壓縮資料並將其寫入新的MemoryStream 物件。然後函數使用MemoryStream 物件的ToArray 方法將解壓縮的資料作為位元組數組傳回。
簡單來說,這個函數接受一個壓縮的位元組數組,並使用Gzip 演算法對其進行解壓縮,並將解壓縮的資料作為位元組數組傳回。此函數可用於解壓縮先前使用Gzip 演算法壓縮的資料。
我們再次決定使用Cyberchef 來解碼,

這又是一個PE 文件,在分析時是一個.NET 程式集。我們使用Dnspy 對其進行分析。

這個二進位檔案有base64 編碼的字串,但如果你仔細看最後一個字,你會知道base64 字串在解碼時會變成一個powershell 腳本。

如您所見,powershell 非常模糊,所以我們決定檢查ChatGPT 是否可以為我們解碼。下面是輸出。


當被問及此類腳本的功能是什麼時,收到的輸出如下所示。

.NET 程式集中多了一個base64 編碼的字串。它首先傳遞給一個名為cipher 的函數,其參數是密碼的金鑰。
![]()

所以我們決定看看Cipher 函數的邏輯是什麼。

現在,我們決定將此代碼作為ChatGPT 的輸入,並要求它識別密碼。
這個輸出讓我們感到驚訝。

我們在python 中實作了相同的邏輯,以便進入下一階段。
這是輸出。最終的PE 檔:

這又是一個.NET 檔案。在Dnspy 中檢查時,這是我們得到的。


透過查看函數,我們對這個文件的功能有了一個清晰的認識,即它的反分析技術和註冊表功能等等。我們很想知道ChatGPT 是否會理解這段程式碼的用途並識別它是什麼類型的惡意軟體。

程式碼中的關鍵函數是“Install”方法,它似乎負責在啟動時安裝和運行指定的檔案。
“FileInfo”物件用於指定程式碼試圖安裝和運行的檔案。
「Process.GetCurrentProcess().MainModule.FileName」和「fileInfo.FullName」用來檢查目前執行的程序是否與指定檔案相同。
「Process.GetProcesses()」方法用於取得所有正在運行的進程的列表,程式碼遍歷它們以停止與指定檔案具有相同檔案路徑的任何進程。
「Methods.IsAdmin()」方法用於檢查使用者是否具有管理員權限。
「schtasks」命令用於建立排程任務以在登入時執行指定檔案(如果使用者俱有管理員權限)。
“Registry.CurrentUser.OpenSubKey”方法用于打开HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun键,“registryKey.SetValue”方法用于将键值设置为指定文件路径文件(如果用户没有管理员权限)。
“File.Exists”方法用於檢查指定檔案是否已經存在,“File.Delete”方法用於在存在時將其刪除。
「FileStream」物件用於在指定的文件路徑下建立一個新文件,並將目前運行進程的文件內容寫入其中。
執行“Methods.ClientOnExit()”方法。
「Path.GetTempFileName()」方法用於建立臨時.bat 文件,「StreamWriter」物件用於向其寫入一系列命令。
「Process.Start」方法用於啟動.bat文件,「Environment.Exit(0)」方法用於退出目前進程。
從這段程式碼可以推斷,該程式碼試圖在啟動時安裝並運行一個特定的文件,而且它似乎旨在確保指定的文件在啟動時運行,並且以管理權限運行。該程式碼還嘗試刪除原始文件並創建一個具有相同名稱和內容的新文件,這可能表明它正試圖用惡意版本替換原始文件。使用檢查使用者是否具有管理員權限、排程任務建立和註冊表項修改的方法表示它正在嘗試在任何可能的情況下啟動時執行該檔案。還有就是使用各種方法來隱藏文件的執行,例如建立一個bat文件,以隱藏方式運行,執行完再刪除bat文件,

它能夠理解程式碼是惡意的,並正確地將其識別為遠端存取工具(RAT)。
透過這個訓練,我們能夠更好地解密ChatGPT,並了解它如何協助惡意軟體分析。雖然ChatGPT已經展現了它的基本能力,但目前它還無法與人類智慧驅動的惡意軟體分析相匹敵,後者更具綜合能力。我們將繼續關注ChatGPT,並在未來分享更多更新,以增強其能力和力量。
原创文章,作者:首席安全官,如若转载,请注明出处:https://www.cncso.com/tw/asyncrat-analysis-with-chatgpt.html