Evaluating and Preventing Security Smells in AI-Generated Ansible Code
本論文は、AIが生成するAnsibleコードには本質的にセキュリティ上の脆弱性が含まれていることを明らかにしているが、拡張されたCO-STARフレームワークを通じてプロンプトにセキュリティベンチマークを統合することで、再学習を行うことなく、上位のモデルがほぼ完璧なセキュリティ基準を達成し、コンプライアンスとコード品質を大幅に向上させられることを示している。
原論文は CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) でライセンスされています。 これは以下の論文のAI生成解説です。著者が執筆または承認したものではありません。技術的な正確性については原論文を参照してください。 免責事項の全文を読む
現代のデジタル世界において、ほぼすべてのオンラインサービスのバックボーンとなっているのは、「インフラストラクチャ」として知られる、広大で目に見えないコンピュータとソフトウェアの層です。数十年の間、このインフラを構築するには、エンジニアのチームがサーバー、データベース、セキュリティ設定を手動で構成する必要があり、それは遅く、エラーが発生しやすいプロセスでした。これを解決するために、業界は「Infrastructure as Code(コードとしてのインフラストラクチャ)」と呼ばれる手法を採用しました。これは、詳細なレシピや設計図のように、インフラ全体のセットアップをテキストファイルに書き出す手法です。これらのテキストファイルは、コンピュータに対してシステムの構築方法とセキュリティ確保の方法を正確に指示し、迅速かつ一貫した自動化されたデプロイを可能にします。しかし、材料が一つ欠けたレシピが料理を台無しにするように、これらのコードファイルにおけるたった一つのミスが、システムをハッカーに対して無防備な状態にしてしまうことがあります。もしコードに、暗号化されていないパスワードや過度に寛容なアクセス権限といった隠れた弱点が含まれていれば、それらの欠陥は、システムが起動した瞬間にライブシステムへと即座に転送されてしまいます。
最近、この分野に新しいツールが登場しました。人工知能(AI)コーディングアシスタントです。これらのプログラムは、自然言語による単純な要求を読み取り、システムを構築するために必要な複雑なコードを自動的に記述することができます。これは開発のスピードアップを約束する一方で、これまで答えが出されることのなかった極めて重要な問いを投げかけています。それは、「機械が書いたコードは、本当にシステムを安全に保てるのか?」という問いです。ニュージーランドのワイカト大学の研究者たちは、その答えを見つけるために調査を開始しました。彼らは単にバグを探していたのではなく、これらのAIツールが生成したコードが、データの保護のために政府や産業界が求める厳格な現実世界のセキュリティ基準を満たしているかどうかを調査していたのです。彼らの研究は、これらのAIツールができることと、それらが自律的に動いたときに実際に成し遂げることとの間の、驚くべき乖離を明らかにしました。そして、コードが一行もデプロイされる前に、この問題を修正するための明確な道筋を提示しています。
研究チームはまず、16種類の異なるAIモデルのデフォルトの挙動をテストすることから始めました。彼らは各モデルに対し、「Ansibleロール」として知られる特定の指示セットを記述するよう求め、Apache Tomcatと呼ばれるウェブサーバーと、MongoDBと呼ばれるデータベースシステムの2種類をセットアップさせました。彼らはモデルに対して、避けるべき事項に関する警告も、優れたコードの例も、特別なセキュリティ上の助言も一切与えませんでした。ただ、機械にその仕事をさせるよう求めただけでした。結果は即座に、かつ懸念すべきものでした。16のモデルすべてが、セキュリティ上の欠陥を含むコードを生成したのです。これらの欠陥には、誰でも読み取れるハードコードされたパスワード、機密ファイルに対する保護の欠如、そしてシステムのクラッシュや予測不能な挙動を引き起こす可能性のあるエラーハンドリングの欠如などが含まれていました。研究者がこのAI生成コードを、公開リポジトリにある人間の開発者が書いたコードと比較したところ、AIのコードは劣っていました。それは単に少し不完全であるだけでなく、根本的に安全性が低く、業界の標準である基本的な安全性要件を満たしていませんでした。
研究者たちは、なぜこのようなことが起きているのかを調査しました。彼らは、問題が必ずしもAIモデルにコードを書く能力が欠けていることにあるのではなく、安全性に関する複雑な指示に従う能力が欠けていることにあるのだと発見しました。研究の第2段階として、チームはアプローチを変更しました。単にコードを求めるのではなく、高度に構造化されたルールを提供したのです。彼らは、セキュリティのベストプラクティスと特定の政府の安全基準を明示的にリストアップした、拡張版のプロンプティング・フレームワークを使用しました。彼らはモデルに対し、どの権限を設定すべきか、パスワードをどのように安全に管理すべきか、そしてどのようなドキュメントを含めるべきかを、単なる提案ではなく「必須の制約」として扱い、正確に指示しました。単純な要求から詳細なルールベースの指示へのこの転換が、結果を劇的に変えました。
研究者がこの構造化されたアプローチを適用したところ、結果は大幅に改善されました。16のモデルのうち4つが、複雑な指示に従うことができ、第1ラウンドで見られたようなセキュリティ上の欠陥のないコードを生成することができました。最も優れたパフォーマンスを示したモデルは、厳格なセキュリティ・ベンチマークの95%から100%を満たすコードを生成しており、これはベースラインからの大幅な飛躍でした。実際、このトップクラスのAIモデルは、23%から43%の基準しか満たさなかった平均的な人間によるコードを上回りました。この研究は、これらの有能なモデルにとっての問題は知識の欠如ではなく、指示が曖昧な場合にその知識を適用できないことにあることを示しました。ルールが明確で制約が明示的であれば、AIは一度の試行で安全で高品質なコードを合成することができ、コードが既に書かれた後に時間をかけて修正する必要を排除できるのです。
また、この研究はモデル間の決定的な違いも浮き彫りにしました。成功した4つのモデルはすべて、内部構造が公開されていない「クローズドソース」のシステムでしたが、多くの「オープンソース」のモデルは複雑な指示に従うことに失敗しました。このことは、安全なコードを生成する能力が、単にメモリの大きさやパラメータ数ではなく、そのモデルがどのようにトレーニングされ、そのトレーニング中にどのような特定の能力を開発したかに大きく依存していることを示唆しています。研究者たちは、成功したモデルは多層的な指示を解析し、強制的なルールと推奨される慣行の違いを理解し、それらをコード全体に一貫して適用できることを発見しました。一方で、他のコーディングテストで高スコアを出していたモデルであっても、安全なシステムを構築するために必要な複数の制約を保持し続けることができず、失敗したのです。
この研究は、業界が現在行っているセキュリティの扱い方に異議を唱えるものです。伝統的に、セキュリティ専門家はコードが書かれるのを待ち、その後、間違いを見つけて修正するためにスキャンを行います。これは「検知(detection)」として知られるプロセスです。研究者たちは、AIが生成したコードに対してはこのアプローチは不十分であると主張しています。なぜなら、コードが作成された瞬間に欠陥が導入されるからです。代わりに、彼らは「防止(prevention)」の手法を提案しています。つまり、セキュリティ要件を生成プロセスそのものに組み込む方法です。AIへの指示の中に安全性のルールを直接埋め込むことで、組織はコードが最初から安全であることを保証できます。このアプローチは、AIモデルを再学習させたり、その基礎となるアーキテクチャを変更したりする必要はなく、単に人間がAIと対話する方法を変えるだけで済みます。研究は、AIコーディングアシスタントには大きな期待が寄せられているものの、明確で明示的なガイダンスなしには、安全なインフラを生成することを信頼することはできないと結論付けています。しかし、適切なプロンプトがあれば、それらは機能的なだけでなく、今日の多くの人間の開発者が作成するものよりも安全なコードを生み出すことができるのです。
自分の分野の論文に埋もれていませんか?
研究キーワードに一致する最新の論文のダイジェストを毎日受け取りましょう——技術要約付き、あなたの言語で。