騰訊混元大模型在研發(fā)安全漏洞修復(fù)的實(shí)踐
大模型漏洞修復(fù)插件是騰訊朱雀實(shí)驗(yàn)室在安全垂類場(chǎng)景的一個(gè)重要實(shí)踐。我們希望通過AI大模型,實(shí)現(xiàn)研發(fā)安全場(chǎng)景的漏洞自動(dòng)修復(fù),給出修復(fù)建議并提供修復(fù)代碼,幫助更多開發(fā)人員提高研發(fā)效率。在騰訊混元大模型的支持下,漏洞修復(fù)插件通過精調(diào)后部署的私有化模型,實(shí)現(xiàn)了在帳密硬編碼、SQL注入、命令注入等漏洞類型的修復(fù)建議輸出和修復(fù)代碼生成等功能,實(shí)現(xiàn)安全左移,更有效地在編程中使用插件收斂漏洞風(fēng)險(xiǎn)。
圖1. IDE插件示意圖
一、研發(fā)安全場(chǎng)景的現(xiàn)狀和挑戰(zhàn)
利用傳統(tǒng)方法做漏洞修復(fù)提效,只適用于比較簡單的場(chǎng)景,比如根據(jù)版本號(hào)判斷使用的開源組件是否存在漏洞,更多高危險(xiǎn)的如導(dǎo)致數(shù)據(jù)泄露的注入類漏洞/賬密類等,該方案難以通用。主要原因總結(jié)如下:
- 規(guī)則限制:傳統(tǒng)靜態(tài)分析技術(shù)通?;陬A(yù)定義的規(guī)則和模式進(jìn)行漏洞檢測(cè)和修復(fù),無法覆蓋所有的漏洞類型和場(chǎng)景;
- 上下文和語義理解限制:傳統(tǒng)靜態(tài)分析技術(shù)通常難以理解代碼的上下文和語義信息,導(dǎo)致無法準(zhǔn)確地理解代碼的含義和邏輯;
- 創(chuàng)造性限制:傳統(tǒng)靜態(tài)分析技術(shù)通常只能分析已有的代碼,無法創(chuàng)造新的代碼片段來修復(fù)漏洞,限制了漏洞修能力。
相比傳統(tǒng)程序分析技術(shù),大模型具備強(qiáng)大的推理能力,尤其是在代碼生成方面表現(xiàn)突出,可通過訓(xùn)練來學(xué)習(xí)漏洞修復(fù)的模式和規(guī)律。
二、為何在研發(fā)安全場(chǎng)景引入大模型?
1. 大模型可解釋性
大模型擁有豐富的預(yù)訓(xùn)練語料信息,如:書籍文檔、代碼素材、網(wǎng)頁文本等等。基于預(yù)訓(xùn)練語料信息,并對(duì)基座大模型進(jìn)行垂類領(lǐng)域的精調(diào),大模型能結(jié)合知識(shí)信息進(jìn)行整合和解釋,產(chǎn)生有效的回復(fù)。對(duì)于研發(fā)安全場(chǎng)景來說,我們不僅需要生成有效的修復(fù)代碼,也希望為更多的開發(fā)同學(xué)提供具體和明確的修復(fù)分析指引,從而更好地提效。
2. 大模型代碼生成能力
各類基座大模型和代碼類Codex大模型,具有強(qiáng)大的代碼生成能力。這些模型可以理解自然語言指令,并根據(jù)這些指令生成相應(yīng)的代碼。這種能力使得它們可以用于各種編程任務(wù),包括但不限于編寫新的函數(shù)、修復(fù)代碼中的錯(cuò)誤、優(yōu)化現(xiàn)有代碼等。這些模型的代碼生成能力基于其在大量代碼庫上的訓(xùn)練。在訓(xùn)練過程中,模型學(xué)習(xí)了各種編程語言的語法和語義以及如何將自然語言指令轉(zhuǎn)化為代碼。因此,只要給出清晰的指令,這些模型就能生成相應(yīng)的代碼。但這些生成的代碼中仍存在一些安全問題,即:潛在的不正確、含漏洞的代碼等。因此,我們需要利用大模型的代碼生成能力,同時(shí)希望通過精調(diào)等操作,使大模型能有效修復(fù)漏洞代碼,盡量生成安全無漏洞的代碼片段。
3. 大模型在安全防護(hù)領(lǐng)域的應(yīng)用已成為趨勢(shì)
2023年,大模型成為了各行各業(yè)的熱門關(guān)注點(diǎn),其中安全垂類領(lǐng)域的安全大模型也呈現(xiàn)了百花齊放的態(tài)勢(shì),主要覆蓋安全咨詢、安全培訓(xùn)、安全監(jiān)控、安全修復(fù)等能力。微軟2023年3月份正式發(fā)布集成GPT-4的Microsoft Security Copilot,旨在更好地提供安全工具和專家知識(shí),輔助企業(yè)識(shí)別和檢測(cè)安全風(fēng)險(xiǎn)。谷歌2023年4月發(fā)布“谷歌云AI安全工作臺(tái)”,利用 Sec-PaLM 來幫助用戶查找、總結(jié)和應(yīng)對(duì)安全問題。國內(nèi)公司也推出了自己獨(dú)有的安全大模型,主要對(duì)于安全場(chǎng)景,提供專家級(jí)別的咨詢建議,提效運(yùn)營效率。
三、混元一站式如何快速定制司內(nèi)自研的研發(fā)安全大模型
1. 騰訊混元大模型能力
(1) 訓(xùn)練優(yōu)化
騰訊混元大模型通過大量實(shí)驗(yàn),對(duì)預(yù)訓(xùn)練數(shù)據(jù)進(jìn)行了語料豐富擴(kuò)充,已覆蓋 100 多種自然語言,32 種編程語言;并經(jīng)過了數(shù)據(jù)清洗、過濾、去重等流程,對(duì)各類數(shù)據(jù)進(jìn)行了大量的數(shù)據(jù)配比實(shí)驗(yàn),保證了較為平穩(wěn)的訓(xùn)練過程。同時(shí),項(xiàng)目組對(duì)于長文能力、位置編碼等技術(shù)細(xì)節(jié)進(jìn)行了改進(jìn)和優(yōu)化。
(2) 模型效果
騰訊混元項(xiàng)目組參考業(yè)界主流做法,一共選用數(shù)十個(gè)數(shù)據(jù)集合,分為中文NLP、英文NLP任務(wù)、代碼、數(shù)學(xué)、AGIEval、CMMLU、CEval等維度,綜合評(píng)估模型在各項(xiàng)維度上的能力。其中,騰訊混元十億級(jí)別大模型在代碼能力上的提升更加顯著,這點(diǎn)與我們使用中的精調(diào)體驗(yàn)也非常一致。
2. 漏洞相關(guān)高質(zhì)量數(shù)據(jù)的收集及模型結(jié)果
通用大模型的崛起,依賴于大規(guī)模的數(shù)據(jù)灌輸;大模型能否在垂直領(lǐng)域落地,同樣依賴是否有高質(zhì)量的領(lǐng)域數(shù)據(jù)。對(duì)于研發(fā)安全場(chǎng)景,我們也積累了系統(tǒng)且豐富的高質(zhì)量數(shù)據(jù)處理經(jīng)驗(yàn)。
(1) 漏洞修復(fù)數(shù)據(jù)的格式
漏洞修復(fù)數(shù)據(jù),最基礎(chǔ)的是漏洞類型、漏洞代碼、修復(fù)后代碼三個(gè)屬性。
圖2. JavaScript SQL注入漏洞修復(fù)樣例
但在實(shí)踐過程中僅使用這三部分信息來精調(diào)大模型,效果并不好。為此,我們擴(kuò)至漏洞類型、漏洞代碼、修復(fù)后代碼、代碼描述、漏洞信息、修復(fù)建議、修復(fù)過程七個(gè)屬性,組成“漏洞代碼 -> 代碼做了什么 -> 存在什么漏洞 -> 應(yīng)該怎么修復(fù) -> 修復(fù)后代碼 -> 具體修復(fù)過程”的整體邏輯,實(shí)際訓(xùn)練效果更好。
圖3. Java SQL注入漏洞修復(fù)示例
(2) 漏洞修復(fù)數(shù)據(jù)源及處理方式
我們采用的漏洞修復(fù)數(shù)據(jù)源,包含GitHub數(shù)據(jù)、公開數(shù)據(jù)、業(yè)務(wù)數(shù)據(jù)等,數(shù)據(jù)質(zhì)量依次上升。下面我們大致介紹各數(shù)據(jù)源的潛在問題和處理過程。
①GitHub數(shù)據(jù)
Github是主流開源社區(qū)之一,其歷史數(shù)據(jù)中含有大量的漏洞代碼及修復(fù)的記錄,但不同開發(fā)者的編程水平參差不齊。我們根據(jù)關(guān)鍵詞召回與漏洞相關(guān)的數(shù)據(jù),但實(shí)踐中發(fā)現(xiàn)大部分(>90%)召回?cái)?shù)據(jù)存在與漏洞修復(fù)無關(guān)、錯(cuò)誤的修復(fù)方式、代碼質(zhì)量低等等問題,因此我們需要一些自動(dòng)化的方法來過濾這些數(shù)據(jù)。
缺點(diǎn):
- 不可用數(shù)據(jù)的占比較高,人工審核成本上升;
- 單個(gè)樣本可能存在代碼塊分散、缺失上下文信息等問題;
優(yōu)點(diǎn):
- 數(shù)據(jù)量級(jí)較大;
- 代碼多樣性豐富;
- 可按需召回指定類型的漏洞;
②公開數(shù)據(jù)
公開數(shù)據(jù),更多指的是學(xué)術(shù)界開源的數(shù)據(jù)。這類數(shù)據(jù),已經(jīng)被大量學(xué)術(shù)工作借鑒使用,本身具備一定的可信度。目前,我們使用的主要是CVE-Fixes數(shù)據(jù)集。
圖4. CVE-Fixes Top-5漏洞與SQL漏洞占比圖
缺點(diǎn):
- 數(shù)據(jù)量級(jí)不大;
- 漏洞類型分布與實(shí)際業(yè)務(wù)漏洞類型分布差距大;
優(yōu)點(diǎn):
- 數(shù)據(jù)質(zhì)量有一定保障;
- 代碼多樣性豐富;
③業(yè)務(wù)數(shù)據(jù)
業(yè)務(wù)數(shù)據(jù),即收集公司業(yè)務(wù)歷史修復(fù)數(shù)據(jù),清洗后作為訓(xùn)練數(shù)據(jù)。業(yè)務(wù)數(shù)據(jù)優(yōu)點(diǎn)非常多,最貼近模型使用的場(chǎng)景、含有更符合公司業(yè)務(wù)場(chǎng)景的修復(fù)方式。但業(yè)務(wù)數(shù)據(jù)與GitHub數(shù)據(jù)有相同的缺點(diǎn),清洗難度較大。
缺點(diǎn):
- 歷史誤報(bào)、錯(cuò)誤修復(fù)的數(shù)據(jù)占比較高,人工審核壓力大;
- 符合實(shí)際訓(xùn)練需求的高質(zhì)量數(shù)據(jù)量級(jí)有限;
優(yōu)點(diǎn):
- 代碼多樣性豐富;
- 與落地場(chǎng)景完全契合;
(3) 訓(xùn)練數(shù)據(jù)構(gòu)造
基于上文獲取的漏洞數(shù)據(jù),我們進(jìn)行了大量的實(shí)驗(yàn)。總結(jié)得到,在數(shù)據(jù)總量和質(zhì)量不變的情況下,“Prompt工程”和“數(shù)據(jù)配比”對(duì)實(shí)驗(yàn)結(jié)果會(huì)產(chǎn)生影響。同時(shí),我們指出:不同垂直領(lǐng)域下得到的實(shí)驗(yàn)結(jié)論大概率不同,例如我們?cè)跀?shù)據(jù)配比時(shí)配比了部分通用數(shù)據(jù)和代碼數(shù)據(jù),而其他團(tuán)隊(duì)可能只是用垂直領(lǐng)域的數(shù)據(jù)。所以,我們建議大家在聚焦的垂直領(lǐng)域多實(shí)驗(yàn)、再總結(jié)。
(4) Prompt 工程
通過調(diào)整對(duì)模型提問的方式,使得模型的回答效果更好。具體的,我們通過業(yè)界的論文以及經(jīng)驗(yàn)分享,總結(jié)了一個(gè)相對(duì)通用的模板:expert+COT+輸出格式+變量。如圖5所示。其中,expert是一種增強(qiáng)提示策略,用于指示LLM像專家一樣回答問題。COT,即思維鏈,通過增加一系列中間推理步驟,能顯著提高大型語言模型復(fù)雜推理的能力。
圖5. prompt構(gòu)造
(5) 數(shù)據(jù)配比
除了漏洞數(shù)據(jù)外,我們還收集了開源的通用、代碼、數(shù)學(xué)sft數(shù)據(jù)集,并進(jìn)行了相應(yīng)的配比實(shí)驗(yàn)。我們發(fā)現(xiàn),數(shù)學(xué)數(shù)據(jù)集對(duì)漏洞修復(fù)準(zhǔn)確率的提升基本無影響,而適當(dāng)比例的代碼、通用數(shù)據(jù),有助于提升模型的漏洞修復(fù)準(zhǔn)確率。
經(jīng)過調(diào)優(yōu),我們的最佳數(shù)據(jù)配比如圖6所示。當(dāng)我們代碼:通用:漏洞=1:2:4的時(shí)候,結(jié)果達(dá)到最優(yōu)。
圖6. 最佳數(shù)據(jù)配比圖
我們將開源的通用(general)、代碼(code)、數(shù)學(xué)(math)、漏洞(vulnerability)數(shù)據(jù)集,輸入到模型中,抽取倒數(shù)第二層對(duì)應(yīng)的embedding,使用t-sne算法對(duì)其進(jìn)行可視化,得到的結(jié)果如圖7所示??梢钥吹綌?shù)學(xué)數(shù)據(jù)集距離漏洞數(shù)據(jù)集最遠(yuǎn),這也解釋了為什么數(shù)學(xué)數(shù)據(jù)集對(duì)漏洞修復(fù)準(zhǔn)確率的提升基本無影響。
圖7. t-sne結(jié)果圖
(6) 實(shí)驗(yàn)結(jié)果
我們將實(shí)驗(yàn)結(jié)果與gpt3.5進(jìn)行比較,結(jié)果如表1所示。從表1中可以看出,我們的平均準(zhǔn)確率比gpt3.5高1.67%,具體到每個(gè)漏洞類型,均超過或持平gpt3.5。
表1 自建模型與gpt3.5結(jié)果對(duì)比表
(7) 上下文長度對(duì)結(jié)果的影響
在前文介紹處理業(yè)務(wù)數(shù)據(jù)時(shí),我們提出借助于污點(diǎn)傳播技術(shù),只摘取漏洞觸發(fā)點(diǎn)所在行的上下文代碼。那么,這個(gè)上下文取多少行合適呢?這里我們?cè)谕评黼A段取不同大小的上下文進(jìn)行了測(cè)試,如圖8所示。從結(jié)果中可以看出,不同大小的上下文確實(shí)對(duì)結(jié)果有影響,并且對(duì)于不同漏洞,影響不太相同。
對(duì)于SQL注入以及命令注入漏洞來說,適中大小的上下文有助于提升測(cè)試準(zhǔn)確率。當(dāng)上下文過少時(shí),模型抽取的與漏洞相關(guān)的語義信息不足,通過這些信息無法判斷是否存在漏洞,導(dǎo)致準(zhǔn)確率下降;相反,當(dāng)上下文過多時(shí),模型定位漏洞所在行可能存在困難,導(dǎo)致準(zhǔn)確率下降。
對(duì)于帳密硬編碼漏洞來說,測(cè)試準(zhǔn)確率隨著上下文行數(shù)的增多而減少,猜測(cè)可能是因?yàn)閷?duì)于該漏洞類型,較少的行數(shù)就足以讓模型判斷存在帳密硬編碼,也足以讓模型進(jìn)行修復(fù)。相反,當(dāng)測(cè)試上下文過多時(shí),模型定位漏洞所在行可能存在困難,導(dǎo)致準(zhǔn)確率下降。
圖8. 不同漏洞類型修復(fù)準(zhǔn)確率隨上下文長度的變換曲線圖
3. 插件支持漏洞檢測(cè)和修復(fù)
目前我們基于騰訊混元大模型,推出了漏洞檢出和修復(fù)功能的插件。插件目前重點(diǎn)發(fā)現(xiàn)三大類研發(fā)過程中對(duì)現(xiàn)網(wǎng)產(chǎn)生嚴(yán)重影響的漏洞:SQL注入、命令注入和賬密泄漏,并較業(yè)內(nèi)大幅提升發(fā)現(xiàn)風(fēng)險(xiǎn)的準(zhǔn)確性。目前插件已支持在vs code內(nèi)使用,僅需在vs code內(nèi)安裝插件,即可實(shí)現(xiàn)在提交代碼前檢測(cè)安全風(fēng)險(xiǎn)并及時(shí)修復(fù)。
(1) 插件的漏洞檢測(cè)+修復(fù)示例
圖9. 插件的漏洞檢測(cè)+修復(fù)示例圖
(2) 與競(jìng)品模型回復(fù)的對(duì)比
我們將自建模型與gpt3.5模型的回復(fù)進(jìn)行對(duì)比,其中一個(gè)典型案例如下。gpt3.5與自建模型均能判斷出代碼中存在SQL注入漏洞,但是gpt3.5無法對(duì)其進(jìn)行正確修復(fù),而自建模型可以。
圖10. 自建模型與gpt3.5回復(fù)對(duì)比
4. 插件模型版本的自動(dòng)化測(cè)評(píng)和迭代
模型評(píng)測(cè)迭代的過程中,針對(duì)漏洞修復(fù),我們完全自建了benchmark以及對(duì)應(yīng)的評(píng)判規(guī)則:
- 待評(píng)測(cè)數(shù)據(jù)通過自研模型,拿到修復(fù)結(jié)果。
- 將修復(fù)前后的代碼,輸入到代碼相似度模型中,防止模型吐出與原始代碼不相關(guān)的代碼。
- 使用算法/工具判斷脫敏后的漏洞代碼是否修復(fù)。
- 根據(jù)實(shí)際測(cè)試,我們發(fā)現(xiàn)以上流程無法對(duì)修復(fù)前后代碼語義是否更改進(jìn)行判斷。如圖11所示,修復(fù)后代碼漏掉了=號(hào),導(dǎo)致語義的改變。因此我們補(bǔ)充設(shè)計(jì)了一套規(guī)則,來判斷修復(fù)前后代碼語義是否有更改。
圖11. 修復(fù)前后代碼語義改變示意圖
四、總結(jié)與展望
以研發(fā)安全場(chǎng)景為切入點(diǎn),擁有均衡能力的騰訊混元大模型未來在安全領(lǐng)域會(huì)有更廣泛的應(yīng)用場(chǎng)景和前景,幫助安全業(yè)務(wù)提高安全防護(hù)的效率,可以降低業(yè)務(wù)的投入成本,提高經(jīng)濟(jì)效益。
- 在數(shù)據(jù)安全領(lǐng)域,大模型可以通過對(duì)大量數(shù)據(jù)的分析,發(fā)現(xiàn)數(shù)據(jù)中的異常行為,及時(shí)預(yù)警并采取措施,防止數(shù)據(jù)泄露、數(shù)據(jù)篡改等安全問題的發(fā)生。
- 在網(wǎng)絡(luò)安全領(lǐng)域,大模型可以通過對(duì)網(wǎng)絡(luò)流量的實(shí)時(shí)監(jiān)控,發(fā)現(xiàn)并阻止網(wǎng)絡(luò)攻擊,保障網(wǎng)絡(luò)的正常運(yùn)行。
- 在安全運(yùn)營領(lǐng)域,大模型可以通過對(duì)用戶數(shù)據(jù)、設(shè)備狀態(tài)數(shù)據(jù)的持續(xù)監(jiān)控,發(fā)現(xiàn)并預(yù)防各種安全風(fēng)險(xiǎn),提高安全運(yùn)營的效率。
- 同時(shí),大模型還可以通過對(duì)安全審計(jì)的支持,幫助企業(yè)更好地遵守各種安全法規(guī),避免因違規(guī)操作而帶來的法律風(fēng)險(xiǎn)。
總的來說,騰訊混元大模型的出現(xiàn),將會(huì)在安全領(lǐng)域開辟出更廣闊的應(yīng)用場(chǎng)景,充分利用好公司內(nèi)已有的安全數(shù)據(jù),做好業(yè)務(wù)數(shù)據(jù)處理和沉淀,將大大提高安全水位和業(yè)務(wù)效率。
本文轉(zhuǎn)載自騰訊技術(shù)工程,作者:騰訊程序員
原文李鏈接:???https://mp.weixin.qq.com/s/KwyuQPmInzXwqWjV46OmhQ????
