ChatGPT(Chat Generative Pre-trained Transformer)是當今備受矚目的智慧AI聊天機器人之一。它不僅能夠實現基本的語言交流,還具備許多強大的功能,例如文章撰寫、程式碼腳本編寫、翻譯等等。那我們是否可以利用 ChatGpt 去輔助我們完成一些工作呢?例如當一個產品存在安全風險需要漏洞偵測時,我們就需要編寫對應的POC來實現。目前進行多次驗證,我們初步證實了這個實驗的可行性,可以訓練ChatGPT 去編寫簡單的PoC,但是它對細節的把控並不夠完善,例如對輸出內容進行匹配的正則表達式的編寫和一些複雜邏輯的處理等存在一定的誤差,還需要人工幹預修改處理。另外我們利用比對的方式驗證了 ChatGPT 的一些安全猜想和訓練模型的準確度。如下是將其與 Goby 實戰化網路攻防工具所結合進行利用偵測的實現效果。
我們利用ChatGPT 與Goby 結合編寫PoC 與EXP 有兩種方法:半自動編寫和全自動編寫(過程中使用ChatGPT-Plus 帳號)。
半自動編寫利用 ChatGPT 進行語言格式轉換,轉換後產生的程式碼可能有細節問題,需要進一步排錯完善,最後修改對應的語句和函數內容完成 PoC 與 EXP 的編寫。
全自動編寫透過將使用到的程式碼模板、漏洞詳細資訊給到 ChatGPT,讓它自動生成對應模板的 PoC,在給出詳細資訊時需要注意資訊的完整與準確。目前可以實現自動編寫簡單的 PoC,對於EXP來說還需要進一步訓練 ChatGPT 對 Goby 內建函數的使用等。
Adobe ColdFusion 是一款高效率的網路應用伺服器開發環境。 Adobe ColdFusion 9.0.1 及先前版本的管理控制台中存在多個目錄遍歷漏洞。遠端攻擊者可藉助向 /CFIDE/administrator/enter.cfm 和 /CFIDE/administrator/archives/index.cfm 等發送的 locale 參數讀取任意檔案。
首先嘗試讓ChatGPT 將CVE-2010-2861 目錄遍歷漏洞的Python 格式EXP 轉換為Go 語言格式的程式碼,這樣可以利用ChatGPT 取代人工完成程式碼解釋及代碼轉換的過程。
我們在漏洞公開平台中選取該漏洞的EXP 程式碼:
#在使用ChatGPT 將對應漏洞的EXP 程式碼轉換之前,先示範原始Python 程式碼的執行效果,如下:
開始轉換格式:
此外,他也提供了該程序的使用方法。然而,每次 ChatGPT 的回答都可能不完全相同。先前的回答中並沒有詳細說明函數的具體用法,但在另一個回答中給出了以下解釋:(如果需要,可在問題中增加“並介紹函數的具體用法”)
#最後進行程式碼偵錯後,發現無法立即使用,未能成功讀取所需的檔案內容:
那麼就需要開始排沒錯,以下是排錯程序:
檢查正規匹配後字串是否為空:
檢查傳回包內容是否正常,有無所需內容,如下回傳資料包顯示正常:
#判斷正規表示式有問題,無法配對對應內容:
透過排查發現正規表示式中沒有正確匹配,因此無法將檔案的內容正確取出,做出以下修改,修改後內容具體如下:
修改前:
最終執行結果,完成Python—Go 的轉換:
前面我們已經成功將Python 格式的EXP轉換為了Go 語言格式,現在嘗試將其轉換為Goby 格式的PoC 和EXP。
由於Goby 使用的是基於Go 語言開發的自研漏洞框架,為方便用戶使用,其中已有很多內建函數可供用戶使用,所以只需要利用上述部分程式碼即可完成PoC 和EXP ,以下是EXP 修改的大致說明與詳細內容:
修改import 內容:
##由於產生的EXP 在命令列使用時需要手動輸入參數:
#那麼在PoC 轉換時,需要重新定義常數,並利用Goby 中的httpclient.FixUrl.IP 與httpclient.FixUrl.Port 取得測試的IP 與埠號,決定測試的檔案路徑path:
##接著在PoC 中加入條件判斷語句,判斷漏洞存在的特徵,並回傳true(有漏洞):
最後刪除多餘的輸出列印程式碼即可完成PoC 轉化,如:
EXP 轉換時,需重新定義變量,利用Goby 中的expResult.HostInfo.IP 與expResult.HostInfo.Port 取得測試的IP和連接埠號,利用ss.Params["filePath"] . (string) 取得使用者輸入的EXP 參數-測試檔案路徑filePath:
#接著在EXP 程式碼中加入條件判斷語句,判斷EXP 是否執行成功,並輸出EXP 執行結果,完成EXP 轉換:
3.2 全自動寫
在使用ChatGPT 與人工結合撰寫後,我們進一步嘗試使用它來撰寫Goby 格式的PoC。
###首先將Goby 格式的範本給出:###############接著將漏洞的編號、產品、類型、Url、漏洞檔案、參數和判斷成功條件給出,說明相關的字段格式,我們最終得到了下面的程式碼,它已經可以通過Goby 前端的編譯,並且可以成功地生成簡單的PoC:##############模型訓練初步完成,繼續使用第二個案例驗證模型完善程度:###############發現Name 欄位還是存在格式錯誤,再次訓練修改(若驗證中Name 欄位等輸出正確,那麼即可跳過此糾錯步驟):###############最後使用第三個案例進行驗證最終的訓練結果,訓練成功:###將程式碼放入Goby 中,並填入缺少的漏洞描述資訊(後續還可繼續深入訓練),運行效果如下:
當我們在利用ChatGPT 去幫助編寫一個新鮮出爐的0day 漏洞或其他機密漏洞的檢測PoC 這個過程當中,是否會導致程式註入或資訊外洩等問題呢?也就是說當模型訓練完成後,其他使用者提問相關的內容,ChatGPT 是否會直接將訓練好的模型或資料直接輸出呢?
為了驗證 ChatGPT 自我學習的猜想是否存在,分別透過「不同會話」與「不同帳戶」來進行訓練。經過以下實踐,得到的結論是ChatGPT 並不會進行跨會話與跨帳號的自我學習,訓練好的模型與資料是掌握在OpenAI 手中的,其他使用者並不會得到相關的模型,所以目前還不存在相關資訊資料外洩的安全風險,但日後的情況也需要根據OpenAI 採取的決策來做判斷。
將使用的模板(此處省略示意圖)和漏洞資訊給出,可以看到PoC 中的Name 和Desc ription 欄位並沒有按照上一個會話中的訓練模式來進行填充,因此在不同會話當中ChatGPT 並不會自我學習,每個會話間的訓練模型獨立:
同樣將模板(此處省略示意圖)和漏洞資訊給出,也可以看到PoC 中的相關字段並沒有按照先前的訓練模型來進行填充,由此可得知ChatGPT 並不會跨帳號自我學習:
ChatGPT4 已經更新上線,那麼去使用ChatGPT4 進行同樣的全自動編寫訓練和ChatGPT3 訓練出來的模型有什麼差別呢?答案是 ChatGPT4 比 3 更「聰明靈動」一些,模型的生成更為準確。
我們將所需的各種資訊給出,經過一次訓練後(此處省略部分示意圖),達到了下圖中正確的效果:
另外我們進行了10 輪的訓練,針對模型中的Name字段進行比對,來判斷ChatGPT3 與4 的PoC 編寫準確率,發現均會出現概率性的出錯情況,其中3 的模型輸出準確率要比4 低一些,在一定情況下仍需進行糾錯訓練,如下表格所示:
總的來說,ChatGPT 確實能夠幫助完成一部分的工作,對於日常的工作例如編寫漏洞PoC,可以利用它的代碼轉換能力加速編寫;也可以將漏洞的詳細信息給出,利用ChatGPT 訓練合適的模型,直接輸出一份簡單的漏洞驗證PoC 程式碼,更加方便快速。但它所提供的回答內容不一定能直接複製使用,還需要進行一些人工的修正來完善。另外目前我們也可以相對放心使用ChatGPT,它不會將單一使用者的訓練模型資料輸出給其他使用者來使用(不混淆會話可能是擔心使用者資料互相污染),但日後還需要針對OpenAI 總部所做的決策來進一步判斷。因此ChatGPT 的合理使用,可以輔助提高一定的工作效率,若日後可以再延續進一步的訓練開發,例如是否可以利用其編寫資訊描述規範且較為複雜的PoC 甚至是EXP,或者將其工程化批量完成內容去探索更多的應用場景和潛力。
參考
[1] https://gobysec.net/exp
[2] https://www.exploit-db.com/exploits/14641
[3] https://zhuanlan.zhihu.com/p/608738482?utm_source=wechat_session&utm_medium=social&utm_oi=1024775085344735232##>
文章來自Goby社群成員:LPuff@白帽匯安全研究院,轉載請註明出處。
以上是ChatGPT 寫 PoC,拿下漏洞!的詳細內容。更多資訊請關注PHP中文網其他相關文章!