ChatGPT在資訊保安領域的應用前景

Editor發表於2023-02-10

一.  關於ChatGPT


據報導,GPT-3.5系列模型自2021年四季度就開始混合使用文字和程式碼進行訓練[1]。而在今年11月30日,OpenAI推出了一款新的自然語言對話模型ChatGPT,該模型是對GPT-3.5中一個2022年初完成訓練的模型的微調實現[2]。


在釋出至今的一週時間裡,ChatGPT模型便受到全球範圍的廣泛關注,並獲得了普遍正面的評價[3]。ChatGPT不僅能夠以非常自然的詞句與人類使用者交流,還能保持聊天過程的上下文狀態。不僅如此,ChatGPT在資訊行業中的應用也非常令人驚豔,它可以在短短几秒內按照使用者的要求編寫簡單的程式碼實現。


目前,OpenAI開放了ChatGPT的WEB互動皮膚https://chat.openai.com/chat,本文案例如無特殊標註均透過該介面執行得到。關於資訊保安領域之外的應用,已有大量文章進行探討,本文不再深入。


二.  ChatGPT在安全行業的應用


2.1  安全工具開發

首先,既然ChatGPT能夠按照使用者的要求編寫程式碼,那自然就可以用來製作安全工具(不論是用於進攻還是防禦)。目前已經有人指出透過ChatGPT可以生成實際可用的漏洞利用工具[4]:

圖片

圖1  透過ChatGPT生成漏洞利用程式碼


我們粗略地測試了一些用例,大部分情況下都能得到質量上乘的結果。但可能由於測試方法尚不完善,也可能是安全領域的訓練樣本相對較少,ChatGPT的發揮似乎並不是非常穩定:

圖片

圖2  非常不錯的功能實現


圖片

圖3  雖然有待最佳化,但姑且實現了功能


圖片

圖4  看上去有模有樣,但並沒有正確實現功能


結果看來,ChatGPT確實能夠幫助使用者完成相當一部分的程式碼編寫工作,而且程式碼註釋、變數命名等都非常完善。但由於輸出質量的不穩定性,這種方法仍然對使用者自身的技術水平有一定的要求,至少需要能夠驗證AI模型輸出的程式碼是否正確。


只要運用得當,ChatGPT將會大大提高安全工具的開發效率,但要想完全依賴該模型完成複雜系統的實現,目前看來還有一段距離。


2.2  逆向分析

ChatGPT還在逆向分析領域大放異彩。例如,可以用它來分析機器語言ShellCode的功能:

圖片

圖5  ChatGPT解析ShellCode

圖片擴散廣泛而原始出處不詳,有知情者還請留言告知


甚至還有人為知名逆向分析工具IDA製作了一個外掛,可以透過OpenAI的API(davinci-003,為GPT-3.5系列中的一個[1])為反編譯程式碼生成註釋描述和修復變數名[5]:

圖片

圖6  IDA外掛Gepetto


我們也進行了一些相關測試,要求ChatGPT對給定的反編譯程式碼進行解釋:

圖片

圖7  CobaltStrike Beacon中的一個函式,效果還可以


圖片

圖8  GMiner中的一個函式,效果一般


圖片

圖9  來自一個加有VMP殼的惡意樣本,效果不太好


從測試情況看來,如果程式碼中包含有對標準庫或API函式(如上面的LoadLibraryW等)的顯式呼叫,ChatGPT就能夠從更抽象的、注重目的而非實現的角度去解釋。但除此之外的情況,往往就只會按程式碼字面意思進行翻譯:資料從哪裡複製到哪裡、做了什麼加減乘除比較操作等,諸如此類。此外,由於ChatGPT目前開放的介面有輸入長度的限制,每次只能輸入少量程式碼,這導致現階段實際使用起來還是不太方便。


2.3  安全檢查和漏洞挖掘

目前已有很多利用ChatGPT在現有程式碼中尋找潛在BUG或漏洞的成功案例。對此我們也進行了一些嘗試:

圖片

圖10  DVWA靶場中SQL隱碼攻擊漏洞頁面high.php,ChatGPT正確識別並修復了漏洞


圖片

圖11  但ChatGPT給出的漏洞驗證指令碼明顯是不正確的


圖片

圖12  DVWA靶場中命令注入漏洞頁面high.php,ChatGPT正確識別了漏洞


圖片

圖13  給出的測試程式碼雖然邏輯正確,但受頁面中的過濾機制影響,實際上不可用


圖片

圖14  ChatGPT確實理解了頁面中的過濾機制,但始終無法給出有效的繞過方法


目前看來,ChatGPT確實在一定程度上具備發現漏洞的能力,但還是不太擅長處理較為複雜的漏洞結構。如果要與程式碼審計等常規方法比較,ChatGPT的準確性和有效性尚需觀察。除此之外,受“content policy”影響,透過ChatGPT生成漏洞利用程式碼時也會受到一些限制。


但ChatGPT的一個優勢是能夠給出完整且定製化的修復方案。相比傳統漏洞掃描或自動化SAST等給出的模板化修復方案而言,ChatGPT對於企業安全運營來說無疑是更具有吸引力的。


2.4  安全告警評估

告警評估是安全運營過程中費時費力的一環,各個企業SOC至今為止已經採取了各種方法嘗試進行告警篩選。ChatGPT能否用於安全告警評估呢?

圖片

圖15  Jenkins RCE漏洞利用載荷,ChatGPT給出了非常準確的結論


看上去好像還不錯?我們再試試正常業務誤報告警載荷:

圖片

圖16  一個正常業務誤報告警載荷,ChatGPT也給出了正確的識別結論


目前開放的查詢介面似乎存在一些限制,查詢提交經常失敗(可能與包含惡意程式碼有關)。雖然API具備內建的Base64解碼功能,但似乎表現得不太穩定:

圖片

圖17  蟻劍WebShell列出目錄操作,提交完整請求或請求體都未能正確處理


圖片

圖18  但如果單獨提交表單引數值,就能得到相對正確的識別結論


菜刀WebShell的情況和蟻劍差不多:

圖片

圖19  PHP中國菜刀通訊,提交完整請求不能判斷


圖片

圖20  但提交請求體就可以判斷了


我們再追加一些測試用例:

圖片

圖21  ThinkPHP RCE漏洞攻擊(可能來自某種蠕蟲),直接提交完整請求報文即可


圖片

圖22  Java反序列化RCE漏洞利用載荷片段,未能正確判斷


圖片

圖23  GoAhread RCE漏洞利用載荷,未能正確判斷


結果看來,ChatGPT在很多情況下確實作出了準確的判斷和良好的解釋,尤其是對於包含明顯作業系統命令、程式語言函式和關鍵字的情況,幾乎都能正確識別,且受混淆措施干擾較小。


但它的效果很不穩定,對輸入資料格式要求反覆無常,解釋資訊也時好時壞。對於非文字類的載荷(比如序列化資料、ELF片段等),ChatGPT的識別能力似乎也未達預期。此外,非常致命的一點是,ChatGPT執行起來實在太慢了,根本不可能應對企業SOC龐大的告警數量和實時處理需求。綜上,僅針對告警評估任務,現階段還不適合直接投入使用。


但ChatGPT在告警評估場景中是沒有價值的嗎?顯然不是。長久以來,我們一直苦於無法有效地從告警載荷中提取關鍵資訊——這是人類專家判斷告警性質時最關注的因素之一。此前的難點在於,我們很難從告警資料中提取出足以適應現代資訊系統複雜程度的,關於作業系統、程式語言、應用元件的知識。一段惡意程式碼如果成功執行會導致怎樣的後果,此前所使用的模型根本不得而知,而這對於準確判斷一個告警所指示網路行為的危害程度而言是不可或缺的。


以筆者淺見,ChatGPT透過在程式碼專案和自然語言上進行訓練,確實提煉出了這些目前告警評估任務中最缺失的知識。雖然當前這種文字到文字的聊天機器人模式未能充分滿足告警評估的需要,但這種預訓練方法和模型如果用於告警評估中的分類任務,想必能夠成為非常強大的輸入特徵或系統單元。


三.  後記和展望


除了上面提到的幾種應用之外,目前我們也正在嘗試將ChatGPT用於二進位制漏洞挖掘、滲透測試用例生成、專案交付報告編寫等諸多細分領域。

風雲變幻莫能測,且看今朝誰英雄。這份來自NLP學科的大禮包,也許能夠給安全行業的發展帶來一股新風。

更多前沿資訊,還請繼續關注綠盟科技研究通訊。


如果您發現文中描述有不當之處,還請留言指出。在此致以真誠的感謝~


參考文獻

[1] OpenAI. Model index for researchers[J/OL] 2022, https://beta.openai.com/docs/model-index-for-researchers.

[2] OpenAI. ChatGPT: Optimizing Language Models for Dialogue[J/OL] 2022, https://openai.com/blog/chatgpt/.

[3] OpenAI. ChatGPT[J/OL] 2022, https://en.wikipedia.org/wiki/ChatGPT.

[4] dyngnosis.無標題[J/OL] 2022, https://twitter.com/dyngnosis/status/1598750927447502848

[5] Ivan K. Gepetto[J/OL] 2022, https://github.com/JusticeRage/Gepetto.

相關文章