📢 Gate廣場 #MBG任务挑战# 發帖贏大獎活動火熱開啓!
想要瓜分1,000枚MBG?現在就來參與,展示你的洞察與實操,成爲MBG推廣達人!
💰️ 本期將評選出20位優質發帖用戶,每人可輕鬆獲得50枚MBG!
如何參與:
1️⃣ 調研MBG項目
對MBG的基本面、社區治理、發展目標、代幣經濟模型等方面進行研究,分享你對項目的深度研究。
2️⃣ 參與並分享真實體驗
參與MBG相關活動(包括CandyDrop、Launchpool或現貨交易),並曬出你的參與截圖、收益圖或實用教程。可以是收益展示、簡明易懂的新手攻略、小竅門,也可以是現貨行情點位分析,內容詳實優先。
3️⃣ 鼓勵帶新互動
如果你的帖子吸引到他人參與活動,或者有好友評論“已參與/已交易”,將大幅提升你的獲獎概率!
MBG熱門活動(帖文需附下列活動連結):
Gate第287期Launchpool:MBG — 質押ETH、MBG即可免費瓜分112,500 MBG,每小時領取獎勵!參與攻略見公告:https://www.gate.com/announcements/article/46230
Gate CandyDrop第55期:CandyDrop x MBG — 通過首次交易、交易MBG、邀請好友註冊交易即可分187,500 MBG!參與攻略見公告:https://www.gate.com/announcements
代碼別拿來就用!中國研究者14頁論文預警:Copilot生成程式碼35.8%有漏洞、C++成“重災區”
原文來源:CSDN
GitHub Copilot 作為基於大模型語言的程式碼自動產生工具,自推出以來,受到了無數程式設計師的歡迎,其紛紛表示,終於有了不用加班的程式碼神器!
根據CSDN 最新發起的《2023 AI 開發者生態研究問卷》中期收集的數據顯示,已有90% 的受訪者表示在生產、測試、娛樂等不同場景使用了代碼生成工具,其中35% 的受訪者稱每天都在使用。
近日,為了研究Copilot 生成程式碼的安全性,來自武漢大學、華中師範大學、紐西蘭梅西大學、皇家墨爾本理工大學的六位大學研究員進行了一項關於GitHub 上Copilot 產生程式碼安全漏洞的實證研究,並發表了一篇主題為《Security Weaknesses of Copilot Generated Code in GitHub》的學術論文,最新揭曉了未來「動嘴即可完成編碼」的AI 編程神器的安全性。
樣本:生產環境中435 段程式碼、覆蓋6 種主流程式語言
在實驗過程中,研究人員從GitHub 的公開專案中選取了435 段由GitHub Copilot 產生的程式碼片段,涵蓋了Python、Java、Java、C++、Go 和C# 多種主流程式語言。
同時,其採用了支援多種語言(包括Java、Java、C++、C# 和Python)的開源靜態分析工具CodeQL,對程式碼片段進行安全掃描和分析,並使用常見漏洞枚舉(CWE)分類程式碼段中的安全漏洞。
進而,研究者基於下列研究流程,從三個維度提出了需要研究、驗證的問題。
提出此問題的理由:Copilot 可能會產生包含安全漏洞的程式碼建議,而開發人員可能會接受這些建議,這可能會讓程式容易受到攻擊。 RQ1 的答案有助於理解開發人員在生產中使用Copilot 時遇到安全漏洞的頻率。
RQ2:Copilot 產生的程式碼段中存在哪些安全漏洞?
提出此問題的理由:Copilot 產生的程式碼可能包含安全漏洞,開發人員在接受Copilot 產生的程式碼之前,應進行嚴格的安全審查。正如GitHub Copilot 的文檔所明確的「Copilot 的使用者有責任確保其程式碼的安全性和品質」。 RQ2 的答案可以幫助開發人員更了解Copilot 產生程式碼中的可能安全漏洞,從而更有效地防止和修復這些漏洞。
RQ3:有多少安全漏洞屬於MITRE CWE Top-25?
提出此問題的理由:此清單包含25 個最危險的安全漏洞。 RQ3 的答案可以幫助開發人員了解Copilot 產生的程式碼是否包含廣受認可的安全漏洞類型以及Copilot 處理這些最常見漏洞的能力。
第一步:識別GitHub 上「真」AI 產生的程式碼
之所以想要以GitHub 作為回答研究問題的主要資料來源,在研究人員看來,GitHub 包含了數百萬公開程式碼庫,可以存取大量程式碼資源,使其可以在研究中覆蓋多種程式語言和項目類型。
然而,要直接取得GitHub 中由Copilot 產生的程式碼實則並不容易,因為即使有許多工具輔助,也難辨程式碼是出自AI 還是人類工程師之手。
面對這種窘境,6 位研究人員選擇透過搜尋儲存庫描述和程式碼中提供的註釋來識別許多程式碼段,譬如以「by GitHub Copilot」、「use GitHub Copilot」和「with GitHub Copilot」等關鍵字來搜索,最終得到瞭如下結果:
在完成試點資料標註後,論文的第一作者檢查了其餘搜尋結果,並獲得了總共465 個程式碼片段。刪除重複結果後,最後獲得了435 個不同的程式碼片段。其中249 個來自儲存庫標籤,186 個來自程式碼標籤,詳細如下所述:
第二步:資料分析
在測試環節中,研究人員為了提高結果的覆蓋範圍和準確性,對每個程式碼段使用兩種靜態分析工具進行安全檢查(即CodeQL 加上特定語言的專用工具)。
在本研究中,研究人員首先使用CodeQL 分析資料集中的程式碼。 CodeQL 標準查詢套件中的預設查詢套件為codeql-suites /-code-scanning.qls。每個套件的codeql-suite 目錄中都包含幾個有用的查詢套件。
同時,其使用了與安全性弱點相關的-security-and-quality.qls 測試套件掃描程式碼片段。這些測試套件可以檢查多個安全屬性,涵蓋許多CWE。例如:Python 測試套件提供了168 項安全檢查;Java 測試套件提供了203 項安全檢查;C++ 測試套件提供了163 項安全檢查。
除此之外,研究員為每個程式語言選擇了其他流行的靜態安全分析工具對文件進行掃描。譬如,Python 使用Bandit、Java 使用ESLint、C++ 使用Cppcheck、Java 使用Findbugs、C# 使用Roslyn、Go 使用Gosec。如果無法直接從掃描結果中取得與安全性問題相關的CWE ID,研究人員也會手動將掃描結果提供的安全屬性映射到對應的CWE。
35.8% 的程式碼段有安全漏洞、C++ 程式碼漏洞最多、覆蓋42 種CWE 類型
經過分析,研究者基於上述提出的三個問題,得到了最終結論。
RQ1:GitHub 專案中的Copilot 產生程式碼安全嗎?
在435 個由Copilot 產生的程式碼片段中,有35.8% 包含安全漏洞,不管使用哪種程式語言,都會產生安全性問題。
為了回答RQ2,研究員處理了RQ1 進行的掃描結果,消除了在相同程式碼段位置偵測到的重複安全性問題。最終總共在435 個代碼段中識別出600 個安全漏洞。
在識別的42 個CWE 中,有11 個屬於目前公認的2022 年CWE Top-25 大漏洞。
寫在最後
對此,也有網友調侃,自己寫Bug 的本領可能比GitHub Copilot 更高一些。
當然,本研究並非旨在勸說開發者不要在日常工作中使用AI 輔助編碼工具,而是想要表明在實際開發中使用Copilot 生成代碼能提高開發效率之時,也提醒大家自行進行安全評估。
同時,在接受Copilot 的程式碼建議時執行適當的安全檢查,有效避免一些潛在風險,並降低損失。
更多詳細內容,請見論文: