大模型應用實踐(一):AI助力Code Review安全漏洞發現

隱藏在代碼中的安全漏洞如同一條通往業務核心數據資產的隱秘通道,極易被黑客盯上和利用。及時識別和修復代碼漏洞對防止黑客入侵和數據泄露至關重要。借助混元大模型, AI代碼助手與代碼安全團隊合作,推出代碼評審(Code Review,下文簡稱CR)之安全漏洞檢出能力,可極大提升公司核心數據資產安全性。

一、背景

代碼漏洞作為一種特殊的代碼缺陷,是黑客竊取數據的主要途徑。業界代碼漏洞導致的安全事件頻繁發生。23年5月,著名文件傳輸系統MoveIt Transfer被曝存在sql注入漏洞,導致2095個組織和超過6200萬人的數據被泄露。同樣在23年5月,梭子魚發現其郵件網關產品存在遠程命令執行漏洞,且已經被黑客利用超過8個月。

CR是保證代碼質量的重要手段,通過CR可以在開發階段提前發現并修復漏洞,避免漏洞流入線上造成嚴重數據泄露,并可極大提升漏洞風險閉環的效率。Steve McConnel在《Code Complete》中提到,通過CR能夠發現高達60%至65%的潛在缺陷,而大多數測試的潛在缺陷發現率僅在30%左右。SmartBear經過實際調研發現,引入代碼CR可以解決節約六成代碼修復成本。

由此可見,代碼漏洞如果不能在上線之前及時解決,流入到線上環境后,不但對業務影響大,而且發現難度高。在CR階段發現并修復漏洞,能夠更及時、高效地避免漏洞引發的安全威脅,保障業務安全穩定運營。

二、傳統代碼漏洞檢測方法的弊端

代碼本質上是一種高維的自然語言。在大模型技術涌現之前,代碼漏洞檢測主要依賴靜態分析:先將代碼解析成低維的語法結構,通過數據流和污點分析對代碼進行掃描,檢測代碼中的漏洞。靜態分析通常需要提供漏洞完整的上下文信息,包括source點(用戶控制入口)、sink點(漏洞作用位置)和數據流(傳播路徑),因此只適用于項目級代碼掃描。

CR 場景中,用戶合入的代碼通常是代碼片段,只包含項目代碼中的一小部分。直接使用靜態分析方法掃描整個項目,以檢測合入代碼的漏洞情況,會引入大量冗余的掃描動作,效率極低。據統計,靜態分析工具對項目級的掃描耗時平均需要20分鐘以上。如果用戶合入代碼后,需要等待幾十分鐘,甚至數個小時才能獲取代碼掃描結果,這遠遠無法滿足開發人員快速迭代的要求。而如果只基于合并的代碼片段進行漏洞檢測,由于沒有完整數據流,靜態分析方法難以奏效。

得益于大模型天然的代碼理解和分析能力,將代碼漏洞檢測回歸到語義層面理解,為代碼片段的漏洞檢測問題提供了新的契機。

三、大模型應用于片段代碼漏洞檢測的可行性探究

(1)利用大模型代碼理解能力分析代碼功能

CR 場景下檢測代碼漏洞的基礎是理解代碼功能。以 SQL 注入為例,檢測 SQL 注入風險的關鍵是識別不合理的SQL語句拼接。然而變量命名、函數用法等在代碼層面有各式各樣的寫法,單純從語言規則層面難以辨別。

利用大模型在代碼理解方面的強大能力,可以正確識別此類代碼功能。

(2)利用大模型上下文理解能力分析數據流

雖然代碼片段缺乏項目級數據流,但是我們依然需要基于代碼片段的上下文,分析是否存在sink 點信息是否會被外部可控。例如數據是否從安全的上下文中獲取,或者代碼片段中是否存在過濾函數等。

利用大模型,可以準確捕獲代碼片段的上下文信息,并且聚焦與漏洞相關的代碼,規避漏洞誤報,提高漏洞檢測準確率。

四、基于大模型的CR場景代碼漏洞檢測落地實踐

從上文可知,大模型的通用代碼理解能力為代碼漏洞檢測提供了良好的基礎。接下來我們詳細介紹如何設計代碼漏洞檢測提示詞,從而更好地發揮大模型的能力。

(1)CoT提升大模型漏洞檢測推理能力

借鑒思維鏈(Chain-of-Thought,簡稱CoT)思想,在提示詞中給出漏洞檢測詳細且明確的推理過程示例,并引導大模型按照步驟逐步分析。

由于大模型會將已輸出的內容作為上下文的一部分,因此顯式輸出推理過程可以有效引導大模型得到正確結果,顯著提升結果準確性。

(2)大模型與傳統規則相結合

即使提供了詳細的推理步驟,但是大模型還是存在偶發事實認定錯誤的情況。例如在明文賬密的場景,只有當賬密直接暴露在代碼中,才有泄露風險。但是大模型會偶發識別錯誤,將變量認定成字符串常數,從而認為存在賬密泄露問題。

這種現象存在一定隨機性,難以通過固定 prompt 模板徹底解決。起初,我們嘗試利用規則的方式消除這種隨機性帶來的誤報。然而在代碼域難以用規則或正則全部枚舉所有情況。

因此我們借助大模型的代碼理解和生成能力,先讓大模型將關鍵代碼內容按照指定模式輸出,然后在一個固定模式下,通過規則規避誤報情況。

(3)大模型輸出結果結構化

如何讓大模型輸出結構化的結果是一個常見的問題。

在CR 漏洞檢測場景中,我們在代碼存在漏洞的情況下,需要向用戶反饋結果,并提示漏洞所在具體的代碼行、漏洞類型、漏洞描述。由此可知,CR 場景要求大模型反饋的信息較多且結構化要求高。

初期我們嘗試了讓大模型在每一部分加入指定前綴,便于后續內容解析,但是經常遇到大模型不按指定格式輸出的情況。如:增加換行、冒號等字符,輸出格式外的額外信息等,最終導致解析失敗。

為了解決這一問題,我們選擇讓大模型按照 json 格式輸出。由于 json 是一種通用的結構化數據,大模型經過廣泛的預訓練可以很好輸出 json 格式數據,使得輸出結果更加準確。

五、CR場景漏洞檢測效果

經過多輪優化,漏洞檢出準確率提升 69%(26%->95%),日均發現 300+個代碼安全風險,可起到在代碼上線前提前阻斷風險的效果。

典型案例 1:成功檢出某業務Web前端代碼中存在AKSK硬編碼。若直接發布到線上環境,黑客掃描網頁即可獲取相應AKSK,進而使用該賬號下的所有資源。可能造成嚴重的數據泄露事故。

典型案例2:?某訂單系統項目中,業務同學在提交代碼時直接將上游變量拼接到 SQL 語句中,引入SQL注入漏洞,被模型成功檢出。若該缺陷代碼發布到線上環境,黑客可從客戶端入口構造惡意輸入,進而直接操作后端 DB,竊取用戶信息和訂單信息,獲取業務核心數據。

典型案例 3:非安全掃描案例,但同樣的,對代碼文件掃描出空指針異常、哈希算法優化、代碼邏輯優化空間成功檢出。在實際用法中,我們將安全掃描和代碼評審封裝成“/cr”命令,使大模型能力更加綜合,用法更加高效。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,837評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,196評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,688評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,654評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,456評論 6 406
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,955評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,044評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,195評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,725評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,608評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,802評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,318評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,048評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,422評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,673評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,424評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,762評論 2 372

推薦閱讀更多精彩內容