コードだけを使用しないでください。中国の研究者の14ページの論文は、Copilotによって生成されたコードの35.8%に脆弱性があり、C++が「最も大きな被害を受けている分野」になっていると警告している。

元のソース: CSDN

画像ソース: Unbounded AI によって生成

GitHub Copilot は、ラージ モデル言語に基づく自動コード生成ツールです。発売以来、数え切れないほどのプログラマーに歓迎されています。彼らは皆、「ついに残業を必要としないコード アーティファクトが完成した」と言いました。

CSDN が最近開始した「2023 AI 開発者エコシステム調査アンケート」の中期に収集されたデータによると、回答者の 90% が、制作、テスト、エンターテインメントなどのさまざまなシナリオでコード生成ツールを使用したことがあると述べています。 .、そのうち 35% の人が毎日使用していると回答しています。

ただし、これらのコーディング ツールは作業効率を向上させますが、それが幸福をもたらすのか、それとも災難をもたらすのか、考えたことがあるでしょうか。生成されたコードは「すぐに使える」という点で本当に安全なのでしょうか?

最近、Copilot が生成したコードのセキュリティを研究するために、武漢大学、華中師範大学、ニュージーランドのマッセイ大学、ロイヤル メルボルン工科大学の 6 人の大学研究者が、Copilot が生成したコードのセキュリティの脆弱性に関する実証研究を実施しました。 「GitHub で生成されたコパイロットのセキュリティの弱点」というタイトルの学術論文が発表され、最近、「口を動かすだけでコーディングを完了できる」将来の AI プログラミング アーティファクトのセキュリティが明らかになりました。

用紙のアドレス:

サンプル: 6 つの主流プログラミング言語をカバーする実稼働環境の 435 コード セグメント

実験中、研究者らはGitHubのパブリックプロジェクトからGitHub Copilotによって生成された435個のコードスニペットを選択し、Python、Java、Java、C++、Go、C#などの複数の主流プログラミング言語をカバーしました。

同時に、複数の言語 (Java、Java、C++、C#、Python を含む) をサポートするオープンソースの静的分析ツールである CodeQL を使用して、セキュリティ スキャンとコード フラグメントの分析を実行し、共通脆弱性列挙 ( CWE) を使用して、セグメント内のコードのセキュリティ ホールを分類します。

さらに、研究者らは以下のような研究プロセスに基づいて、三次元から検討・検証すべき問題を提起した。

RQ1: GitHub プロジェクト内の Copilot で生成されたコードは安全ですか?

質問の理由: Copilot はセキュリティの脆弱性を含むコードの提案を生成する可能性があり、開発者はこれらの提案を受け入れる可能性があり、プログラムが脆弱なままになる可能性があります。 RQ1 への回答は、開発者が実稼働環境で Copilot を使用するときにセキュリティの脆弱性に遭遇する頻度を理解するのに役立ちます。

RQ2: Copilot によって生成されたコード スニペットにはどのようなセキュリティ脆弱性が存在しますか?

この質問を提起する理由: Copilot によって生成されたコードにはセキュリティの脆弱性が含まれている可能性があるため、開発者は Copilot によって生成されたコードを受け入れる前に厳密なセキュリティ レビューを実施する必要があります。 GitHub Copilot のドキュメントで明らかにされているように、「Copilot のユーザーはコードのセキュリティと品質を確保する責任があります。」 RQ2 への回答は、開発者が Copilot で生成されたコードの潜在的なセキュリティ脆弱性をより深く理解し、これらの脆弱性をより効果的に防止および修正できるようにするのに役立ちます。

RQ3: MITRE CWE トップ 25 に属するセキュリティ脆弱性はいくつありますか?

質問の理由: このリストには、最も危険なセキュリティ脆弱性 25 個が含まれています。 RQ3 への回答は、開発者が Copilot によって生成されたコードに広く認識されている種類のセキュリティ脆弱性が含まれているかどうか、およびこれらの最も一般的な脆弱性を処理する Copilot の能力を理解するのに役立ちます。

ステップ 1: GitHub 上で AI が生成した「実際の」コードを特定する

研究者の意見では、GitHub を研究上の疑問に答えるための主要なデータ ソースとして使用したい理由は、GitHub には何百万ものパブリック コード リポジトリが含まれており、多数のコード リソースにアクセスできるため、さまざまなコード リソースをカバーできるためです。プログラミング言語と研究タイプのプロジェクト。

ただし、Copilot によって生成されたコードを GitHub で直接取得することは簡単ではありません。多くのツールを利用したとしても、コードが AI によって書かれたのか人間のエンジニアによって書かれたのかを区別することが難しいためです。

このジレンマに直面した 6 人の研究者は、リポジトリの説明とコード内に提供されているコメント (「GitHub Copilot による」、「GitHub Copilot を使用」、「GitHub Copilot を使用」など) を検索して、多くのコード スニペットを特定することにしました。次の結果が得られました。

コードタグから取得したさまざまな言語での検索結果の数:

次に、フィルタリング段階に入ります。研究者らは論文の中で、主に次の 3 つのルールに従っていることを指摘しました。

  1. リポジトリ タグの検索結果について、研究者は、プロジェクトの説明または関連する Readme ファイルの記述に基づいて、どのプロジェクトが完全に Copilot によって生成されたかを判断しました。さらに、Python、Java、Java、C++、C#、Go など、Copilot でサポートされている主要言語のコード ファイルが保持されます。

2 code タグの下の検索結果については、Copilot によって生成されたコードを示すファイル コメントが保持されます。

  1. 本研究の対象は主に実際のプロジェクトで使用されるコードスニペットであるため、LeetCodeプラットフォーム上で単純なアルゴリズム問題を解くために使用されるコードファイルは対象外とします。

パイロット データの注釈が完了した後、論文の最初の著者は残りの検索結果を調べ、合計 465 個のコード スニペットを取得しました。重複した結果を削除した結果、435 個の異なるコード スニペットが完成しました。以下に詳細を示すように、そのうち 249 件はリポジトリ タグからのもの、186 件はコード タグからのものです。

ステップ 2: データ分析

テストプロセスでは、結果の範囲と精度を向上させるために、研究者らは 2 つの静的分析ツールを使用して各コードセグメントのセキュリティチェックを実行しました (つまり、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 タイプをカバーしています

分析後、研究者らは上記の 3 つの疑問に基づいて最終的な結論に達しました。

RQ1: GitHub プロジェクト内の Copilot で生成されたコードは安全ですか?

Copilot によって生成された 435 のコード スニペットのうち、35.8% にセキュリティの脆弱性が含まれており、使用されているプログラミング言語に関係なくセキュリティの問題が発生しました。

開発者が Copilot を最もよく使用する言語である Python と Java コードには、セキュリティ脆弱性の割合が若干高くなります。収集された 251 個の Python コード スニペットのうち、39.4% にセキュリティ リスクが存在します。 79 個の Java コード スニペットのうち、27.8% にセキュリティ リスクが存在します。すべてのプログラミング言語の中で、**C++ はコード セグメントにおけるセキュリティ脆弱性の割合が最も高く、46.1% に達しています。 **Go のセキュリティ リスク率も 45.0% と比較的高くなります。比較すると、C# と Java コードのセキュリティ問題ファイルの割合は低く、それぞれ 25% と 23.2% です。

RQ2: Copilot によって生成されたコード スニペットにはどのようなセキュリティ脆弱性が存在しますか?

RQ2 に答えるために、研究者らは RQ1 が実施したスキャンの結果を処理し、同じコード セグメントの場所で検出された重複するセキュリティ問題を排除しました。合計 600 件のセキュリティ脆弱性が 435 件のコード スニペットで特定されました。

検出されたセキュリティ脆弱性の種類は多岐にわたり、CWE-78 (オペレーティング システム コマンド インジェクション)、CWE-330 (安全でないランダム値の使用の脆弱性)、CWE-703 (異常な状態や不適切なコードのチェック) を含む 42 の異なる CWE に関連していました。処理)が最も頻繁に発生します。

RQ3: MITRE CWE トップ 25 に属するセキュリティ脆弱性はいくつありますか?

特定された 42 の CWE のうち、11 は現在、2022 CWE トップ 25 の脆弱性として認識されています。

最後に書きます

これに関して、一部のネチズンは、バグを記述する能力は GitHub Copilot よりも高いのではないかと冗談を言いました。

もちろん、この研究は、開発者に AI 支援コーディング ツールを日常業務で使用しないように説得することを目的としたものではなく、実際の開発で Copilot を使用してコードを生成すると開発効率が向上することを示し、全員が独自のセキュリティ評価を行うよう思い出させることを目的としています。 。

同時に、Copilot のコード提案を受け入れるときに適切なセキュリティ チェックを実行して、潜在的なリスクを効果的に回避し、損失を軽減します。

詳細については、次の論文を参照してください。

原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • コメント
  • 共有
コメント
0/400
コメントなし
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)