ChatGPT是人工智能研究實驗室OpenAI新推出的一種人工智能技術驅動的自然語言處理工具,使用了Transformer神經網絡架構,也是GPT-3.5架構,這是一種用于處理序列數據的模型,擁有語言理解和文本生成能力,尤其是它會通過連接大量的語料庫來訓練模型,這些語料庫包含了真實世界中的對話,使得ChatGPT具備上知天文下知地理,還能根據聊天的上下文進行互動的能力,做到與真正人類幾乎無異的聊天場景進行交流。ChatGPT不單是聊天機器人,還能進行撰寫郵件、視頻腳本、文案、翻譯、代碼等任務。
接下來就讓我們看看ChatGPT如何幫助我們解決一些常見的逆向工程和惡意軟件分析難題。
1.學習如何更有效地使用逆向工程工具
軟件工具通常帶有不同程度的內置幫助,它們所缺少的通常由專門的用戶論壇和問答網站(如Stack Overflow、Stack Exchange等)來彌補。ChatGPT為快速獲得逆向工程工具的幫助增加了另一條途徑。
無論你是使用IDA Pro、Ghidra、Radare2、Hopper、Cutter還是其他一些逆向引擎平臺,ChatGPT都能提供幫助。雖然所有這些平臺都包含自己的內置幫助功能,但如果ChatGPT的培訓模型中已經涵蓋了這些問題,那么你可能會發現它能夠回答與你自己的用例相關的特定問題,這是一種更快完成任務的方式。
使用ChatGPT作為radare2的交互式幫助助手
2.自學匯編語言
ChatGPT擅長傳達相關信息。
例如,ChatGPT提供了關于函數調用基礎知識和相關堆棧內存管理活動的回答。
我們可以要求ChatGPT在其輸出中或多或少詳細一些。例如,在這里,我們希望得到一個堆棧幀的視覺表示。
ChatGPT描述了一個堆棧框架
匯編代碼是特定于平臺和編譯器的。如果向ChatGPT發出的程序集相關問題不包括與編譯程序集的平臺(即指令集)或更高級別語言相關的特性,ChatGPT將提供相關的免責聲明信息,以正確定位答案。
ChatGPT可以幫助攻克匯編難題的另一種方式是將用戶熟悉的高級代碼轉換為匯編代碼。這通過將熟悉的概念映射到其內部來促進學習。我們觀察到,ChatGPT可以很好地處理各種主題,包括在學習匯編時至關重要的重要概念,例如指針和函數指針調用。ChatGPT的響應通常包括帶注釋的匯編代碼,這進一步提高了學習效果。
ChatGPT將高級代碼轉換為程序集
3.了解源代碼如何轉換為反匯編
作為惡意軟件分析師,我們大部分時間都是從反匯編者的角度來看待惡意軟件。編程語言的經驗和知識在這里至關重要,但ChatGPT可以幫助我們了解已知源代碼在反匯編程序中的樣子,以及代碼更改如何在反匯編中反映出來。新手可以通過編寫自己的源代碼來推斷一些反匯編代碼可能會做什么,并查看它是否與他們正在查看的反匯編類似。這可以幫助經驗不足的分析人員加深對惡意代碼的理解。
4.快速編寫PoC源代碼
ChatGPT甚至可以幫助我們編寫測試理論所需的源代碼。例如,我們可以問AI以下問題:
然而,有時候ChatGPT需要一點引導。在寫完我們請求的函數后,它決定將分解任務委托給我們:
首先,我們從前面的答案中復制代碼,然后在給出明確的指令后粘貼它。
現在,我們得到了我們正在尋找的分解結果。
5.指令集之間的轉換
鑒于匯編代碼是特定于平臺的,經驗更豐富的逆向工程師可以利用ChatGPT查詢不同的指令集,而不是他們已經熟悉的指令集。一種方法是指示ChatGPT將編寫在一個指令集中的匯編代碼轉換為另一個指令集。
ChatGPT將x64匯編代碼轉換為ARM
這為進一步探索感興趣的指令集提供了基礎,例如,通過查詢ChatGPT關于翻譯后代碼中指令的進一步信息。
ChatGPT解釋了blx ARM指令
6. 比較語言或特定于平臺的約定
有經驗的逆向工程師還可以從使用ChatGPT查詢編程語言和平臺的內存管理技術的差異中受益,例如調用約定。
ChatGPT比較調用約定
在撰寫本文時,ChatGPT正在使用2021年之前的訓練數據進行訓練。因此,如果某些平臺或高級語言的特性在某個時間點之后發生了變化,ChatGPT不會提供當前信息。調用約定更改的一個例子是在Golang語言中從基于堆棧的調用約定轉換為基于寄存器的調用約定。
有經驗的逆向工程師,特別是惡意軟件分析師,可以利用ChatGPT來熟悉日益流行的編程語言的高級結構,以及這些結構是如何在匯編中表示的。例如,內存安全的Golang和Rust越來越多地被惡意軟件開發人員采用。
7.分析惡意軟件樣本中的代碼段
ChatGPT能夠解釋和分析與逆向工程相關的代碼,包括偽代碼和匯編代碼。這使得ChatGPT在分析惡意軟件可執行文件的代碼段(如函數)時非常有用,主要是因為ChatGPT可以提供代碼執行活動的摘要。
這可以顯著提高惡意軟件逆向工程師的效率。Gepetto IDA Pro插件在IDA Pro中集成了ChatGPT,并查詢語言模型以提供由Hex-Rays反匯編程序反編譯的函數的含義。
解釋代碼的能力還可以對代碼進行比較,使惡意軟件分析人員能夠了解不同惡意軟件樣本實現之間的差異。
為了在分析人員通常需要的描述性級別上總結代碼的功能,ChatGPT可能缺少所需的關于分析中的可執行文件的更廣泛的上下文,而分析人員可能擁有這些上下文。
假設分析師很少或沒有向ChatGPT提供上下文,如果所分析的代碼與其目的相關,那么該模型將提供最大的即時價值。在實踐中,這通常意味著代碼不會調用以ChatGPT未知的方式擴展代碼功能的用戶定義函數,但如果它調用函數,則它們是已知的、公開記錄的庫函數。由于ChatGPT是基于公開可用的數據進行訓練的,因此語言模型此時可以準確地解釋在用戶提供的代碼中使用這些函數的情況。
例如,如果提供給ChatGPT的偽代碼引用了公開記錄的庫函數,則ChatGPT對代碼用途的解釋將圍繞這些函數的功能展開。
ChatGPT通過解釋十六進制射線偽代碼來討論函數的用途
為了從ChatGPT中獲得更好的代碼分析輸出,用戶仍然需要:
制定實質性的ChatGPT查詢,以便提供所需的上下文;
與ChatGPT進行對話,在對話期間提供上下文,并完善ChatGPT的答案;
嘗試在回答的末尾使用“重新生成響應”選項,這似乎是對ChatGPT的一種“再努力一點”的指示。
向ChatGPT添加更多上下文可以包括用戶定義函數的功能,這些功能是分析師所了解的。上下文信息可以以編程的方式提供,以減少人工分析人員的工作量,例如,通過為此目的開發的反匯編程序插件。
這同樣適用于從非技術角度改進ChatGPT的輸出。例如,ida_gpt(一個通過查詢ChatGPT來協助程序集代碼分析的IDA Pro插件)分別為分析和重構程序集代碼制定了下面的查詢。
下面是ida_gpt ChatGPT查詢的幾個示例:
8.識別代碼中的惡意活動
惡意軟件分析師可以使用ChatGPT來識別某個功能可能實現的潛在惡意活動的指示器。這對于將惡意軟件可執行文件中的功能映射到特定的惡意功能非常重要,類似于capa IDA Pro插件的功能。
在這種情況下,我們觀察到ChatGPT能夠對函數中惡意活動的所有指標的強度進行優先級排序。因此,惡意軟件分析師可以確定與ChatGPT的交互范圍,以更詳細地討論最強指標。
例如,OpenGPT將vssadmin.exe的執行確定為下面偽代碼中惡意活動的最強指標。
ChatGPT評估惡意活動的指標
9.推測功能目的和目標
除了識別惡意活動指標外,惡意軟件分析師還可以進一步與ChatGPT對話,以推測并更好地了解惡意軟件如何使用特定平臺或軟件結構以及達到何種目的。即使在分析師沒有提供全面背景的情況下,這也可能是有效的。
例如,下面的勒索軟件偽代碼代碼使用Microsoft Cryptographic API(CAPI),也稱為CryptographicAPI:下一代(CNG)加密架構,用于加密數據。
ChatGPT討論了惡意軟件對CAPI的使用
10. 了解漏洞并利用代碼
了解漏洞是如何工作的,惡意軟件開發者如何利用它們,以及我們如何識別和檢測它們在代碼中的使用是一項極具挑戰性的任務。ChatGPT在這方面也可以幫助我們。
讓我們以CVE-2022-468889為例,看看ChatGPT是否可以幫助我們理解代碼的工作原理。
ChatGPT為我們提供了以下解釋。
人工智能最初找到的答案還是可以的,但它顯然不了解漏洞的更廣泛背景。我們可以通過提供更多信息來幫助它。因為ChatGPT是上下文感知的,所以我們不需要重復前面的問題或再次粘貼前面的代碼。
讓我們看看它現在提供了什么答案。
ChatGPT解釋了CVE-2022-46889的漏洞代碼
由于ChatGPT的上下文意識,研究人員有可能深入了解這一解釋中他們希望了解更多信息的任何特定部分。
正如我們在前面的挑戰中看到的,我們還可以要求在反匯編中表示,以查看惡意軟件示例中的部分或全部利用代碼。
11. 協助自動化逆向工程任務
反向工程師轉而使用腳本語言來自動化手動完成的重復或容易出錯的任務,例如重命名變量或大規模地對混淆的代碼進行解混淆。這可以顯著地加快和提高逆向工程任務的效率。ChatGPT能夠編寫代碼,包括IDAPython/ target=_blank class=infotextkey>Python, IDA Pro反匯編程序的腳本語言。
ChatGPT編寫IDAPython腳本
由于ChatGPT目前使用2021之前的數據進行培訓,并且IDAPython正在進行定期更改,我們觀察到ChatGPT經常編寫過時的IDAPythin腳本。因此,我們評估了ChatGPT生成的IDAPython代碼最實際的用例可能是作為模板代碼,用戶可能需要對其進行輕微或適度的調整,以使代碼在當前部署中發揮作用。這通常涉及更改引用的模塊和函數名,以適應IDAPython API中的更改。需要少量或適度修改的模板IDAPython代碼在需要編寫的IDAPython代碼中非常實用。
總結
總的來說,ChatGPT可以:
生成惡意代碼執行的功能和操作的解釋和摘要,這可以幫助逆向工程師和惡意軟件分析師了解其目的和行為。
協助分解和反編譯代碼,將其分解為更小、更易于管理的塊進行分析。
幫助逆向工程師和惡意軟件分析師了解代碼庫不同部分之間的關系以及它們如何協同工作,這對識別和理解代碼依賴性很有用。
通過生成漏洞及其潛在影響的解釋和摘要,協助識別和理解代碼漏洞。
幫助逆向工程師和惡意軟件分析師了解用于混淆代碼的技術,這對于分析和消除惡意代碼非常有用。
協助生成代碼分析和惡意軟件分析結果的文檔和報告。
為進一步分析提供指導和建議,幫助逆向工程師和惡意軟件分析人員確定工作的優先級,并將重點放在工作的最重要方面。
用于創建逆向工程和惡意軟件分析培訓的教材和練習,幫助培養這些領域的技能和知識。
通過提供信息和分析結果的共享存儲庫,幫助促進團隊成員之間的協作,這有助于提高效率和有效性。
協助生成用于代碼和惡意軟件分析的測試用例和場景,幫助確保分析是徹底和全面的。
通過生成代碼和惡意軟件行為的解釋和摘要,為法律和法醫調查提供幫助,這對于構建案例和演示惡意活動的影響非常有用。
對于初學者,ChatGPT可以全面介紹掌握逆向工程所需的概念和技能,例如匯編語言的基礎知識和了解程序如何構造和運行所需的背景知識。
對于經驗豐富的逆向工程師和惡意軟件分析師,ChatGPT可以用于自動化和加速逆向工程任務,例如分析代碼和了解其功能。ChatGPT對逆向工程師和惡意軟件分析師的回答的價值取決于提供給語言模型的上下文信息的數量。這可以通過向ChatGPT發出上下文完整查詢或與ChatGPT進行對話以改進答案來實現。
在未來,ChatGPT有可能變得更強大,對逆向工程師和惡意軟件分析師更有用。隨著不斷的發展,可能會克服其當前的一些限制,例如對數據的操作依賴性是有限的,并且具有過去的時間戳。通過解決這些限制,ChatGPT可以成為逆向工程師和分析師不可或缺的工具,提供準確高效地分析代碼所需的信息。
參考及來源:https://www.sentinelone.com/labs/11-problems-chatgpt-can-solve-for-reverse-engineers-and-malware-analysts/