AI生成コードのセキュリティ欠陥を調査中
研究が、大規模言語モデルによって生成されたコードの脆弱性を明らかにした。
― 1 分で読む
目次
大規模言語モデル(LLM)は、ソフトウェア開発やコーディングのアプローチを変えてきてる。開発者は今、コードを作成したり完成させるためにいろんなツールを頼りにしてる。こうしたAI駆動のツールが人気を集める中で、生成されるコードにセキュリティの欠陥が導入される可能性を理解することが重要になってきた。過去の研究で、LLMが不正確なコードを生成したり、脆弱性を含むことがあることが示されている。たとえば、AIツールを使っているソフトウェアエンジニアが自分のコードでより多くのミスをすることがわかっており、それがセキュリティの問題につながることがあるんだ。
研究者たちは、これらのモデルの出力をもっと注意深く分析し、生成されたコードの脆弱性を特定しようとしてる。そこで疑問が生まれる。「これらのモデルが実際のプロジェクトのためにセキュアなコードを作ることを信頼できるのか?」
この疑問に答えるために、FormAIというデータセットが作られた。このデータセットには、AIが生成したCプログラムが大量に含まれてる。この研究では、その作業を拡張して、新しいバージョンのデータセットFormAI-v2を紹介する。新しいデータセットには、さまざまな高度なLLMによって生成された、さらに多くのコンパイル可能なCプログラムが含まれてる。目的は、生成されたコードのセキュリティを分析し、これらのモデルがどのくらいの頻度で脆弱性を生成するかを理解することだ。
FormAI-v2 データセット
FormAI-v2データセットには、約265,000のコンパイル可能なCプログラムが含まれてる。これには、GPT-4やGoogleのGemini-pro、TIIのFalconのような強力なモデルが含まれてる。このデータセットの各プログラムは、ESBMCという形式的検証ツールを使って、脆弱性がないか徹底的にチェックされてる。
この厳格な検証プロセスは、報告された脆弱性の数が正確であることを確認するのに役立つ。この研究では、生成されたプログラムの少なくとも63.47%が脆弱性を含んでいることがわかった。モデル間のコーディングエラーの違いは微妙で、すべてのモデルが似たようなタイプの間違いを示している。
このデータセットは、これらのモデルがセキュアなコードを生成する効果をよりよく理解するための重要なステップとなる。モデルは、見た目には正しいコードを生成できるが、依然としてセキュリティリスクを引き起こす可能性がある。したがって、LLM生成コードを本番環境で使用する際には、注意深い検証とリスク評価が必要だ。
大規模言語モデルとソフトウェアセキュリティ
LLMは、コーディングタスクでますます使われていて、開発者がシンプルなプログラムを作成したり、さまざまな機能を処理するのを助けてる。でも、LLMはコードを生成する能力を見せている一方で、誤っているコードやセキュリティが不十分なコードを生成することもある。ソフトウェアエンジニアがプログラミングにAIツールを使用することに関連する潜在的なリスクに気づくにつれて、このトピックに関する研究が増えてきている。
ある研究では、LLMが文法的に正しいコードを生成するだけでなく、作業しているシステムに新たな脆弱性を導入する可能性もあることが示された。多くのモデルが公開データでトレーニングされているため、オンラインで見つかる脆弱なコーディングパターンを再現するリスクがある。
これに関して重要な疑問が生じる。「これらのモデルを実際のプログラミングタスクに利用するのはどれほど安全なのか?」
以前の研究
元のFormAIデータセットは、AI生成のCコードを調査するために作成され、見つかった脆弱性を分類した。以前の研究は主に単一のモデル(GPT-3.5)に焦点を当てていて、他の高度なモデルと比較していなかった。この新しい研究は、8つの異なるLLMを分析することでそのギャップを埋めようとしている。
さらに、元の研究では、以前の検証方法の限界により、一部の脆弱性を見逃していたかもしれない。より徹底的な無限検証アプローチを使用することで、コード内に存在する脆弱性をよりよく評価できる。
生成されたコードの複雑さも、元の研究では分析されていなかった。今では、各LLMによって生成されたコードの固有の複雑さを理解するのに役立つサイクロマティック複雑性という指標を計算している。
研究質問
この研究では、高度なLLMによって生成されたコードのセキュリティ特性を評価することを目的とした一連の研究質問を扱っている。これらの質問は、異なるモデルから生成されたコードを比較すること、どのモデルが最も脆弱なコードを生成するかを理解すること、生成されたプログラムの特性を分析することに焦点を当てている。
データセットの作成と方法論
FormAI-v2データセットは、AI生成のCプログラムとその脆弱性分類という2つの主要な部分から成り立っている。生成プロセスでは、さまざまなLLMを使用してプログラムのミックスを作成し、幅広いコレクションを確保している。
多様な出力を生成するために、ダイナミックプロンプティング手法を使用した。入力プロンプトを変えることで、複数のコーディングシナリオをカバーする豊富なプログラムのバリエーションを生成できた。生成された各プログラムはその後、エラーなく実行できることを確認するためにコンパイル可能性をチェックされた。
脆弱性分類のために、各コードサンプルを検証するためにESBMCを利用した。この強力なツールは、脆弱性を検出するだけでなく、偽陽性を最小限に抑え、データセットが正確な結果を反映することを保証する。
結果
プログラムを生成して検証した結果、コードのかなりの部分に脆弱性が含まれていることがわかった。検証プロセスでは、バッファオーバーフローからポインタの取り扱いの誤りまで、多様な問題が明らかになった。
結果は、特定のタイプの脆弱性がさまざまなモデルで一般的であることを示した。たとえば、scanf
関数を使用しているプログラムではバッファオーバーフローが頻繁に特定され、ユーザー入力の処理における一般的な落とし穴が浮き彫りになった。
サイクロマティック複雑性
サイクロマティック複雑性は、コードの構造に基づいてその複雑さを測る方法だ。この指標は、特定のコードがテスト、保守、またはトラブルシューティングするのがどれほど難しいかを示すことができる。スコアが高いほど、通常はコードがより複雑で、エラーに関する課題が多いことを示す。
私たちの分析では、各モデルの生成されたコードについてサイクロマティック複雑性を計算した。GPT-4のようなモデルは、より長いプログラムを生成しながら、サイクロマティック複雑性は低いことがわかった。これは、より複雑なプログラムを作成できる一方で、構造化され管理しやすい方法でもあることを示している。
脆弱性分類
生成された各プログラムは、ESBMCによって特定された脆弱性に基づいて分類された。この分類は、異なるモデル間での一般的な脆弱性のタイプを理解するのに役立つ。最も頻繁に検出された問題には、以下が含まれていた:
- デリファレンス失敗:ポインタチェックが欠けていることが多い。
- バッファオーバーフロー:入力サイズの取り扱いが不適切なために発生することが多い。
- 算術オーバーフロー:値の限界を超える操作に関連していることが多い。
これらの発見は、特にポインタやバッファ管理において堅牢なコーディングプラクティスの重要性を強調してる。
モデルの比較
生成されたセキュアなコードにおける異なるLLMのパフォーマンスを比較した。各モデルの生成されたコードは同じ検証プロセスにかけられた。結果は、すべてのモデルが脆弱性を生成したことを示したが、その頻度やタイプは異なった。
いくつかのモデルは若干良いパフォーマンスを示したが、完全にセキュアとは言えなかった。これは、重要なアプリケーションでAI生成コードを使用する際に、効果的な検証方法が必要であることを強調している。
結論
FormAI-v2データセットは、プログラミングにおける大規模言語モデルの能力と限界について貴重な洞察を提供している。LLMは文法的に正しい、時には創造的な解決策を生成できるが、ソフトウェアセキュリティに関連するかなりのリスクも伴う。
研究結果は、LLM生成のコードを実践で使用する際には、慎重に評価しないと重大な脆弱性に繋がる可能性があることを明らかにした。AIツールがコーディングプラクティスの重要な要素となる中で、これらのセキュリティの影響についての研究を続け、安全な使用を保証するためのフレームワークを開発することが重要だ。
今後の方向性
今後の研究は、FormAIデータセットを拡張し、より高度なモデルを含めたり、サンプルサイズを増やしてより良い比較ができるようにすることに焦点を当てるべきだ。また、異なるプログラミングタスクやスタイルが脆弱性パターンにどのように影響するかを探ることも、有益な洞察を提供するだろう。
成功した検証結果の背後にある理由を理解することで、AI生成プログラムにおけるより良いコーディングプラクティスにつながる可能性もある。最終的な目標は、リスクを最小限に抑えながら、コーディングにおけるAIの利点を活用することだ。AIのソフトウェア開発への依存が高まる中で、脆弱性を検出するツールの継続的な開発が重要になるだろう。
タイトル: Do Neutral Prompts Produce Insecure Code? FormAI-v2 Dataset: Labelling Vulnerabilities in Code Generated by Large Language Models
概要: This study provides a comparative analysis of state-of-the-art large language models (LLMs), analyzing how likely they generate vulnerabilities when writing simple C programs using a neutral zero-shot prompt. We address a significant gap in the literature concerning the security properties of code produced by these models without specific directives. N. Tihanyi et al. introduced the FormAI dataset at PROMISE '23, containing 112,000 GPT-3.5-generated C programs, with over 51.24% identified as vulnerable. We expand that work by introducing the FormAI-v2 dataset comprising 265,000 compilable C programs generated using various LLMs, including robust models such as Google's GEMINI-pro, OpenAI's GPT-4, and TII's 180 billion-parameter Falcon, to Meta's specialized 13 billion-parameter CodeLLama2 and various other compact models. Each program in the dataset is labelled based on the vulnerabilities detected in its source code through formal verification using the Efficient SMT-based Context-Bounded Model Checker (ESBMC). This technique eliminates false positives by delivering a counterexample and ensures the exclusion of false negatives by completing the verification process. Our study reveals that at least 63.47% of the generated programs are vulnerable. The differences between the models are minor, as they all display similar coding errors with slight variations. Our research highlights that while LLMs offer promising capabilities for code generation, deploying their output in a production environment requires risk assessment and validation.
著者: Norbert Tihanyi, Tamas Bisztray, Mohamed Amine Ferrag, Ridhi Jain, Lucas C. Cordeiro
最終更新: 2024-04-28 00:00:00
言語: English
ソースURL: https://arxiv.org/abs/2404.18353
ソースPDF: https://arxiv.org/pdf/2404.18353
ライセンス: https://creativecommons.org/licenses/by-nc-sa/4.0/
変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。
オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。
参照リンク
- https://github.com/FormAI-Dataset
- https://github.com/features/copilot/
- https://aws.amazon.com/codewhisperer/
- https://gcc.gnu.org
- https://www.springer.com/gp/editorial-policies
- https://www.nature.com/nature-research/editorial-policies
- https://www.nature.com/srep/journal-policies/editorial-policies
- https://www.biomedcentral.com/getpublished/editorial-policies