SASがAI生成コードを保護する方法
Gerald Crescione
2024年4月15日
0 分で読めます生成AIを活用したコーディングアシスタントが、技術の世界を大きく変えています。このイノベーションは開発者の働き方に革命をもたらし、生産性と開発スピードをかつてないほど高めました。一方、そのスピードの向上により、セキュリティチームには新たな課題が生まれています。コーディングアシスタントのモデルは、ウェブ上にある高品質なコードと低品質なコードの両方を使ってトレーニングされています。生成されるコードは機能するものの、外部に起因する品質やセキュリティの問題をプロジェクトに持ち込む可能性があります。またAIは、組織に大きな損害を与えかねない新たな攻撃ベクトルも生み出します。これに対応するため、セキュリティチームはこの強力なツールを安全かつ責任を持って利用できるよう、課題に取り組む必要があります。
こうした新たな状況を受け、チームはソフトウェア開発のどこでAIを活用すべきか、ツールの出力にばらつきが生じるのを抑えるにはどのような対策が必要か、新たなリスクから身を守りながらAIによるイノベーションを続けるにはどうすればよいか、模索しています。
Snykは最近、Clinton Hergetが司会を務め、Brett SmithとChris Knackstedtが登壇するライブウェビナーを開催し、これらのテーマを取り上げました。登壇者は、2024年に組織が直面するAIコードのリスクと、新たな脅威からアプリケーションを守るために講じている対策について解説しました。
AI生成コードのリスク
SmithとKnackstedtは、生成AIがソフトウェア開発に革命をもたらし、世界中の開発者にとってペアプログラマーの役割を果たしていることに疑いの余地はないと述べています。ゼロからコードを書く際に出発点を示してくれるため、開発プロセスが大幅に効率化されます。近い将来、生成AIの力を活用することで、開発者はワークフローを加速し、全体的な効率を高められると期待されています。
Knackstedtも、AIツールが個別の課題に合わせて微調整された解決策を提示してくれることから、そのプラスの影響に期待を寄せています。「生成AIがわずか1年で遂げた進歩には、本当に感銘を受けています。特に、こうしたツールの新しい活用方法について、人々が考えていることには驚かされます」と語りました。
AIは適切に使えば開発スピードを高められますが、誤った使い方をすれば深刻なセキュリティ問題を引き起こすおそれがあります。AIツールによって、セキュリティチームがほかの技術の進歩に追いつくことは、これまで以上に難しくなっています。多くのチームは、前回のデジタルトランスフォーメーションへの対応に追われ、DevOps、クラウド、CI/CDをはじめとする多くの技術やプロセスへの理解を深めている最中です。こうした継続的なデジタルトランスフォーメーションは、生成AIの普及によってさらに加速しています。そのため、セキュリティチームが適応することは、かつてないほど重要です。
すでに進行中のデジタルトランスフォーメーションを加速させるだけでなく、AI生成コードは組織にセキュリティ上の脅威をもたらす可能性があります。その主な理由は2つあります。
AI生成コードは、本質的に安全で高品質とは限らない
生成AIツールは、インターネット上の高品質と低品質の両方のデータを使ってトレーニングされています。経験豊富な開発者が書いた優れたコード、初心者によるエラーの多いコード、さらにはStack Overflowなどのフォーラムに投稿された、意図的に機能しないコードの例まで含まれます。生成AIは多種多様なコードを取り込んでいるため、出力の品質は、ジュニア開発者に期待される程度です。
登壇者は、今日の生成AIツールは、標準では脆弱性を検出できないと認識することの重要性についても話し合いました。Hergetは、それを裏付けるSnykの調査に言及しました。私たちのチームは、複数のメソッドを持つJavaクラスを作成し、そのうちの1つを「SQL injection」と名付けました。次に、複数のAIコーディングアシスタントに、コードにSQLインジェクションの脆弱性があるか尋ねたところ、すべて「はい」と回答しました。そこで、コードの機能は何も変えずにクラス名だけを変更すると、同じアシスタントが「いいえ」と答えました。この実験から、AIはコード内の特定の言葉が持つ記号的な意味を、まだ理解していないことがわかりました。
外部の脅威がAIモデルを悪用する可能性
AIは既存の問題を加速させるだけでなく、新たな攻撃ベクトルのリスクももたらします。脅威アクターは、コードインジェクション、データポイズニング、プロンプトインジェクション、乗っ取りなどによって生成AIを悪用できます。こうした攻撃により、モデルに悪意ある動作(意図的に安全でないコードを書くなど)をさせたり、攻撃者が機密性の高いトレーニングデータを盗み出したりするおそれがあります。
AIツールが、コード内に存在しない参照先、コードライブラリ、関数を生成する「ハルシネーション」も、セキュリティ上の問題です。攻撃者は、ライブラリのスクワッティングなどの手法でAIのハルシネーションを悪用できます。たとえば、AIが実在しないコードライブラリを幻覚した場合、攻撃者はその存在しないライブラリの実体を、悪意あるコードを含めて作成できます。すると、そのライブラリを参照するAI生成コードによって、悪意あるコードがアプリケーションに取り込まれてしまいます。
AI生成コードを安全に活用する方法
生成AIにはセキュリティリスクがあるものの、今日の多くの開発者にとって欠かせない存在であり、すぐになくなることはありません。開発チームがアイデアに詰まったときに助けとなり、ジュニアコーディングアシスタントとしても役立つ、かけがえのない支援を提供します。こうした支援によって、開発者はこれまで以上の速さでコードを書けるようになります。
しかし、この前例のないスピードは、今日のセキュリティチームに直接影響を及ぼします。より多くのコードを、より短い時間で保護しなければなりません。そのためセキュリティチームは、技術革新の妨げにならずにAI生成コードをより安全に保護できる戦略を活用する必要があります。今日のスピード感あるAI支援型の開発サイクルに対応するため、チームが実践できるヒントをいくつかご紹介します。
開発者教育を優先する
まず、開発チームは、それぞれのAIツールにできることとできないことを理解する必要があります。Smithはこう述べています。「これは、あらゆる問題を解決する特効薬ではありません。シニア開発者のプログラムでもありません。170行ものコードを出力できるジュニアアソシエイトのようなものです。開発者には、以前より優れたコードや安全なコードを書けるようになったわけではないと理解してもらう必要があります。非常に賢いオートコンプリートを使えるようになっただけなのです。」
さらに、AIツールにコード関連のプロンプトを入力する際、知的財産とプライバシーを守る方法を開発者に教育する必要があります。生成AIはプロンプトをトレーニングデータとして利用するため、そのデータを使ってほかのユーザーのプロンプトに応答することで、機密資産が危険にさらされる可能性があることを、開発チームは認識しなければなりません。
行動分析は、こうした教育施策の成果を測定するうえで重要な役割を果たします。Knackstedtはこう述べています。「コードそのものだけでなく、コードを開発する人や、コードの構築に使われるソリューションを利用する人についても、より行動分析を重視したプロセスと原則を取り入れる必要があります。そうすることで、設計上意図されたAIの使い方と、実際の利用状況を包括的に把握できるようになります。」
実績あるセキュリティ対策を徹底する
DevSecOpsの観点では、開発ライフサイクルにセキュリティテストを組み込むことが以前から重要視されてきました。しかし、AIによってコードが注入されるスピードが大幅に上がった今、組織がコードパイプラインにセキュリティテストを組み込むことは、かつてないほど重要です。
Smithは、AI支援型開発によって前例のないスピードで増加するコードの問題に対応するため、チームで静的コードスキャンを活用していると話しました。「生成AIの普及に伴い、脆弱なコードが、これまで経験したことのないスピードでパイプラインに入り込もうとしています。コードをプッシュするたびにSnykでスキャンし、合格しなければマージできないようにしています。自動チェックポイントにSnyk Code (SAST)を組み込むことが、生成AIの危険な側面に対抗する方法です。機械が生成したコードと人間が書いたコードを見分けるのが難しいなら、すべてをテストしましょう。より頻繁にテストし、現代のDevSecOpsのスピードに対応できるツールセットを使うことで、誰の足も引っ張らずに済みます。」
多角的なテストを導入する
チームは、AI生成コードを適切な自動化ツールの組み合わせと人による確認でクロスチェックする方法も検討すべきです。Knackstedtはこう述べています。「生成AIによるコーディングを使う際は、一定のガードレールを設け、慎重に検討する必要があります。基本的には、必ず人間がプロセスに関与し、生成AIソリューションの出力を無条件に受け入れず、コードを十分に確認することが大切です。」
Smithは、SASがSnyk SASTによる自動コードチェックと、人が関与する2つのチェックポイントを使って、こうした綿密なレビューを実施していると説明しました。「GitHubでルールを設定し、マージ前に2人によるコードレビューを必須にしています。そのうち1人はコードオーナーでなければなりません。私としては、マージ前に人の目で確認し、自動チェックに合格することが必須です。」
一貫性を重視する
Smithによると、AIプロセスを安全に保つには、Infrastructure as Codeからソースコード、ドキュメントに至るまで、開発のあらゆる領域で一貫したセキュリティを実現する必要があります。「すべてを同じように扱うようにしています。すべてを同じくらい重要なものと見なせば、セキュリティ対策にも同じ水準の注意を払えます。」
Knackstedtも一貫性の重要性を強調し、「コードのビルドに使用するツールを標準化し、それらのツールを組織内で安全に保護することが重要です。どのデータを使ってモデルを微調整しているのか、または組織内の追加コンテキストを使ってモデルを拡張しているのかを理解することが大切です」と説明しました。
AI生成コードとともに前進する
開発チームが生成AIを活用していくなかで、新たなセキュリティトレンドがいくつか見られるでしょう。まず、SDLC全体で問題に対応するため、セキュリティツールに組み込まれるAIコンポーネントが増えると考えられます。Knackstedtはこれを、「火には火をもって対抗すること。AIや生成AIを保護対策に組み込む機会を見つけることで、同じペースで効果的に状況を把握し、同じ種類のロジックを活用できる」と説明しました。
また、コードを書くために生成AIを使うのは開発チームだけではありません。サードパーティのサプライヤーも、この技術を試している可能性があります。Smithはこう述べています。「オンラインベンダーを導入し、SDLCでSaaSをより多く使うようになると、彼らがAIを責任ある形で利用しているか、どうすれば確認できるのでしょうか。」SaaSベンダーの利用に伴うAIの脆弱性が懸念される今、ソフトウェアサプライチェーンセキュリティのベストプラクティスは、かつてないほど重要です。
もう1つ、AI生成コードの保護を成功させるには、クラウドセキュリティでユーザーとプロバイダーが行っているような、責任共有モデルが重要になります。Knackstedtはこう述べています。「組織全体で人工知能が広く使われるようになると、リスク管理の取り組みをより緊密に連携させる必要があります。人工知能を責任ある形で導入、管理、監視し、その可視性を維持するための、包括的なアプローチが求められます。」
Clinton Herget、Brett Smith、Chris Knackstedtによるこの対談では、生成AIが今日のコード開発に与える影響と、この新しい技術を安全に活用する方法の一端を紹介しました。AI生成コードのセキュリティについてさらに詳しく知りたい方は、2023年版レポート「現代の開発におけるAIコード、セキュリティ、信頼」をご覧ください。
AIが生成したコードのセキュリティ対策を始めましょう
無料のSnykアカウントを作成して、AIが生成したコードのセキュリティ対策を数分で始めましょう。または、専門家によるデモを予約して、Snykが開発者セキュリティのニーズにどう応えられるかをご確認ください。
