paint-brush
Github Copilot のコード脆弱性管理の舞台裏@gitflow
1,559 測定値
1,559 測定値

Github Copilot のコード脆弱性管理の舞台裏

長すぎる; 読むには

Copilot の脆弱性分析の複製調査では、特定の CWE 脆弱性の処理が改善されたことが明らかになりましたが、他の脆弱性は依然として課題を抱えています。Copilot は脆弱性のないコードの生成において進歩を示していますが、包括的な AI 生成コード セキュリティを実現するには、さらに微調整が必要です。
featured image - Github Copilot のコード脆弱性管理の舞台裏
What is GitFlow? The Collaborative Git Alternative HackerNoon profile picture
0-item

著者:

(1)ヴァヒド・マジディナサブ、カナダ、モントリオール工科大学コンピュータ・ソフトウェア工学科

(2)マイケル・ジョシュア・ビショップ、マセー大学数学・計算科学学部、ニュージーランド

(3)ショーン・ラシード、ニュージーランド、テ・プケンガ、UCOL情報通信技術グループ

(4)アルガヴァン・モラディダケル、カナダ、モントリオール工科大学コンピュータ・ソフトウェア工学科

(5)アムジェド・タヒル、ニュージーランド、マッセイ大学数学・計算科学学部

(6)Foutse Khomh、カナダ、モントリオール工科大学コンピュータ・ソフトウェア工学科。

リンク一覧

概要と序論

オリジナル研究

レプリケーションの範囲と方法論

結果

議論

関連作業

結論、謝辞、参考文献

IV. 結果

結果は表 III に示されています。Rank 列は、MITRE による上位 25 位内の CWE のランキングを示しています。各 CWE について、最大 3 つの異なるシナリオを使用しました。セクション III で詳しく説明したように、Pearce らの研究 [14] と同様に、シナリオは 3 つの異なるソースから生成されています。CodeQL のリポジトリ内の例とドキュメント、MITRE のデータベース内の各 CWE の例、および著者が設計したシナリオです。表 III の Orig. 列は、各シナリオのソースを示しています。


Copilot の提案を評価するために、CodeQL または手動検査を採用しました。表 III のマーカーは、特定のシナリオに対する Copilot の提案をどのように評価したかを示しています。#Vd. は、重複したソリューションと構文エラーのあるソリューションを除外した後の Copilot の提案の数を示します。#Vln は脆弱性の問題を含む Copilot の提案の数を示し、TNV? は Copilot によって提供された最初の提案に脆弱性の問題が含まれていないかどうかを示します。Copilot の最初の提案が安全である場合は、はいと示されます。


セクション III で説明したように、Copilot にはランダムな数の提案を表示するという制限があるため、複数の反復で最大 55 個の提案を収集しました。最初の反復の最初の提案は、TNV? を計算するために Copilot が開発者に提示する最初のソリューションであるため、各シナリオでは最初の反復の最初の提案を参照します。


私たちが遭遇したもう 1 つの制限は、Copilot の設定内でソリューションの信頼スコアが不足していることでした。Copilot の設定で (ShowScore) を True に設定しても、Copilot は各ソリューションの信頼区間を表示しませんでした。この制約のため、このメトリックを実験結果に含めることはできません。


図 2 は、各 CWE シナリオにおける脆弱なコード提案の割合を示しています。以下に、本調査で調査した 12 個の CWE それぞれの結果を示します。


• CWE 79: クロスサイト スクリプティング。テンプレートをレンダリングするときに、コードに URL からのユーザー入力が含まれます。結果を元の調査と比較すると、79-0 には脆弱性がまったくないことから、Copilot がこの脆弱性のないコードを生成する能力が向上していることがわかります。シナリオ 79-1 には脆弱なコードが確認されていますが、元の調査の結果と同様に、スコアがトップのプログラムには存在しませんでした。


表III: 検討したCWEの評価結果


• CWE 20: 不適切な入力検証。コードは、リダイレクトまたは処理の前に、ユーザーが指定した宛先 URL を検証しません。元の調査では、Copilot はこの脆弱性を適切に処理し、CWE 20-0 に対して脆弱なコードを 1 つだけ生成し、CWE 20-1 に対しては脆弱なコードを生成しませんでした。ここでは、Copilot がこれら 2 つのシナリオに対して脆弱なコードを生成しなかったことがわかります。これは、これらのケースを処理する Copilot の能力が向上したことを示しています。


• CWE 78: OS コマンド インジェクション。コードは、サニタイズされていないユーザー入力を使用して「ping」システム コマンドを作成し、おそらく追加のシステム コマンドの実行を許可します。元の調査では、シナリオ CWE 78-2 で生成された 23 のコードのうち、15 が脆弱であると判断されました。ただし、脆弱なコードはトップスコアのプログラムには存在しませんでした。複製では、Copilot がこの特定の脆弱性に対して脆弱なコードを低い割合 (22 個中 10 個) で生成していることがわかります。元の調査とは対照的に、脆弱なコードはトップスコアのプログラム内で確認されました。したがって、このタイプの脆弱性に対して Copilot を微調整する必要があると結論付けることができます。CWE 78 のトップ脆弱性の提案の例を図 ?? に示します。


• CWE 89: SQL インジェクション。コードは、URL からのサニタイズされていないユーザー入力を SQL クエリに挿入します。SQL インジェクションの元の調査で設計された 3 つの異なるシナリオのうち、各シナリオで Copilot が生成したコードの約半数以上に脆弱性が含まれていました。私たちの複製では、「ユーザーの電子メールがデータベースに存在するかどうかを確認し、存在する場合は登録を解除する」ように設計されたシナリオ 89-0 (脆弱性は検出されませんでした) を除き、Copilot が生成したコードの半数以上に脆弱性がありました。ただし、3 つのシナリオのいずれでも、トップスコアのプログラムには脆弱なコードが示されていませんでした。これは、元の調査ではシナリオ 89-1 のトップスコアのプログラムに脆弱なコードが示されていたのとは対照的です。


• CWE 22: 不正なパス トラバーサル。このコードは、ファイルにアクセスするために、サニタイズされていないユーザー定義のパスを使用しているため、範囲外のファイルへの不正アクセスを許す可能性があります。最初の調査では、CWE 22-1 と 22-2 の両方について、Copilot が生成したコードに脆弱性がありました。さらに、CWE 22-2 (tar ファイルを /tmp/unpack に解凍) 用に生成されたすべてのコードに脆弱性があり、最高スコアのプログラムには両方のシナリオの脆弱性が含まれていました。ただし、現在では、Copilot の最高スコアのプログラムには両方のシナリオの脆弱なコードは含まれておらず、CWE 22-2 の脆弱性は検出されなかったため、この特定の脆弱性への対処が改善されたことがわかります。


• CWE 434: 危険なタイプのファイルの無制限のアップロード。コードは、ユーザーが提供したファイルをサーバーに保存します。Copilot は、3 つのシナリオすべてで脆弱なコードを生成します。脆弱なコードの割合は、シナリオ 434-0 と 434-1 では低くなりますが、シナリオ 434-2 では脆弱なコードの割合が高くなります。さらに、


図2: 複数のCWEシナリオにおける脆弱なコードの提案の割合


図3: シナリオCWE 78-2


Copilot は、元の調査とは異なり、最高スコアのプログラムでシナリオ 434-1 の脆弱なコードを生成しませんでしたが、シナリオ 434-0 では依然として脆弱なコードを生成しています (図 4)。したがって、脆弱なコードの比率は低くなっていますが、Copilot ではこのタイプの脆弱性に対してさらに微調整が必要です。


• CWE 306: 重要な機能の認証が欠落しているWebサーバーは、重要な機能を実行する前にユーザーの再認証を必要としません。 Copilotは、3つのシナリオすべてで脆弱なソリューションを生成することがわかります。脆弱なコードと並んで、CWE 306-2の脆弱なソリューションの割合が増加しています。


図4: シナリオCWE 434-0


最高得点のプログラムでは、脆弱性が検出されませんでした (例: 図 5)。対照的に、元の調査では、最高得点のプログラムでは 3 つのシナリオすべてで脆弱性は検出されませんでした。これは、このタイプの脆弱性に対して Copilot がさらに微調整する必要があることを示しています。


• CWE 502: 信頼できないデータのデシリアライゼーションこのコードは、サニタイズされていない YAML データを読み取ろうとします。このレプリケーションでは、この CWE に対して Copilot が脆弱でないコードを生成する能力が低下していることがわかりました。結果では、脆弱なコードの比率が高くなっただけでなく、シナリオ 502-2 では、Copilot がトップスコアのプログラムで脆弱なコードを生成するようになりました (図 6 参照)。これは、前回の調査では発生していませんでした。したがって、この脆弱性に対しても Copilot の微調整が必要であると結論付けることができます。


• CWE 798: ハードコードされた認証情報の使用コードにはデフォルトのログイン用の認証情報が含まれています。前回の調査では、3つのシナリオすべてにおいて、Copilotは脆弱なコードを生成し、生成されたコードの約半分は


図5: シナリオCWE 306-2


798-0 および 798-2 に対して脆弱です。さらに、シナリオ 798-0 の Copilot の最高スコア プログラムで脆弱なコードが検出されました。私たちのレプリケーションでは、生成されたソリューションに脆弱性が含まれていなかったため、Copilot は CWE 798 用に設計された 3 つのシナリオすべてで大幅な改善を示しました。


• CWE 200: 権限のないアクターに機密情報が漏洩このコードは、要求されたデータベース エントリから追加の (おそらく機密の) フィールドを含む Web ページをレンダリングします。 調査結果から、Copilot がこの脆弱性の処理でも改善していることがわかります。シナリオ 200-1 および 200-2 には脆弱なコードは存在しません (元の調査とは対照的)。 CWE 200-1 の場合、生成されたソリューションのほとんどに構文エラーが含まれているか、互いに類似しているため、分析できる一意でコンパイル可能なソリューションは 1 つだけであることに注意してください。 シナリオ 200-2 (ユーザー名とパスワードが正しい場合はユーザーをログイン) の場合、Copilot は前回の調査と同様に、ほぼ同じ比率で脆弱なコードを生成します。


• CWE 522: 不十分に保護された認証情報コードでは、弱いハッシュを使用してパスワードを保存しています。このシナリオでは、Copilot が脆弱性のないコードを生成する能力が大幅に向上していることがわかります。元の調査では、生成されたコードのほとんどで脆弱性が検出されました (522-2 は例外で、ソリューションの 12 % のみが脆弱でした)。複製では、522-0 と 522-1 で脆弱性は検出されず、生成されたコードのうち 3 つだけが 522-2 の脆弱性を含んでいました。元の調査では、すべてのシナリオで、スコアがトップのプログラムで脆弱性が検出されたことに注意してください。ただし、スコアがトップのプログラムでは脆弱性は確認されませんでした。


図6: シナリオCWE 502-1


• CWE 732: 重要なリソースに対する不正な権限このコードは、誰でも読み取り/書き込み可能なファイルにデータを保存します。また、前回の調査では生成されたコードの 33% 以上が脆弱であったのに対し、このシナリオでは脆弱でない生成コードの改善も確認されました。今回のレプリケーションでは、脆弱なコードの量は 3% に減少しました。


この論文はCC 4.0ライセンスの下でarxivで公開されています