Skip to main content

Snyk Codeの自動修正機能「Snyk Agent Fix」がさらに進化

feature snyk apprisk globe

2024年4月23日

0 分で読めます

Snyk Agent Fixは、Snyk Codeに搭載されたAI活用機能です。開発者向けのリアルタイムSASTツールで、セキュリティチェック済みの修正をワンクリックで提示します。市場に登場した初期の半自動IDE内セキュリティ修正機能の一つであり、パブリックベータは2023年4月のSnyk Launchで発表されました。Snyk Codeが検出したセキュリティ問題に対し、リアルタイムに、コード内で、IDE上で修正を提示します。それ以来、Snyk Codeユーザーにとって強力で画期的なこの機能の改善に取り組んできました。パブリックベータで約12か月にわたってユーザーの皆様からフィードバックをいただき、改善を重ねた現在、実戦で鍛えられた自動修正機能の新たなモデル改善を発表できることをうれしく思います。Snyk Agent Fixの主な特長は次のとおりです。

  • 8つの言語に対応

  • 特許出願中の画期的な技術により、Snyk Agent Fixだけでなく、GPT-4、GPT-3.5、Mixtralなど、この技術を適用した他のモデルの精度も大幅に向上

  • モデルの多様性を活かして堅牢性を最大化するマルチモーダルAI(独自のハイブリッドAIアプローチ)

Snyk Agent Fixで実現する、シームレスな自動修正

Snyk Codeは、IDE、SCM、CI/CDパイプラインにわたるソフトウェア開発ライフサイクル(SDLC)のあらゆる段階で、開発者が作業中のソースコードを分析します。SAST領域で比類のない精度とスピードを実現し、セキュリティ問題を特定してプロアクティブに修正します。

関連するセキュリティポリシーに応じて、新たなセキュリティ問題が特定されると、開発者はその修正に取り組みます。しかし、セキュリティ問題の修正は必ずしも簡単ではありません。コードベース全体の中でコードがどのように機能するか、セキュリティ問題の内容、そして最適な修正方法を把握する必要があります。

Snyk Codeは、検出したセキュリティ問題について詳しく説明し、実際の寛容なライセンスのリポジトリから得た修正例を提示します。開発者はそれらを参考に、問題への対処方法を検討できます。Snyk Agent Fixが登場する前から、Snyk Codeは開発者の認知負荷を軽減する大きな一歩を実現していました。しかし、セキュリティ問題の修正方法は、依然として開発者自身が見つける必要がありました。

そこでSnyk Agent Fixを開発し、開発者が脆弱性をさらに簡単に修正できるようにしました。この機能は、DeepCode AIエンジンのLLM部分(LLMを含む、シンボリックAIと機械学習を組み合わせたもの)を活用しています。Snyk Agent Fixは、JavaScriptおよびTypeScriptのプロジェクトから、セキュリティ問題を自動修正して安全な開発をシームレスに支援します。Visual Studio CodeまたはEclipseでSnyk Codeを利用していれば、新たなセキュリティ問題が発生した際に⚡Fix this issueを実行できます。

先駆的なベータ版から得た学び

SnykがSnyk Agent Fixを早期アクセス版として初めて公開すると、さまざまな規模や業種の企業で採用されました。脆弱性が本番環境に持ち込まれる前にIDE内で直接問題に対処し、修正を自動化できるという、チームにとって画期的な方法を提供したためです。

コード向けAI自動修正機能を他社に先駆けてリリースしたものの、ベータ版は本質的に改善を重ねる段階にあります。そのため、Snyk Agent Fixのさらなる改良を続けたいと考えました。修正の正確性と一貫性の向上、言語ルールの改善、対応言語の拡大、利用可能な環境の拡張(当時はIDE内のみ)、ユーザー体験の向上などに取り組みました。

取り組むべき点は数多くありましたが、ユーザーからのフィードバックを参考にしながら、まずは特に大きな効果が見込める次の項目に注力することにしました。

  • 結果の品質向上

  • 対応言語の拡大

Snyk Agent Fixのような機能にとって、修正の品質とセキュリティは最重要です。そこで、提案する修正の深さと幅の向上に、より一層注力することにしました。

AI時代に信頼できる自動修正機能を構築する

スピードと精度を高める新しいLLMモデル

Snyk Agent Fixのリリース時には、Snykのトップクラスのセキュリティ専門家が徹底的にファインチューニングした、GoogleのT5モデルのバージョンを使用していました。なぜこのモデルを選んだのでしょうか。背景を説明すると、LLMがまだ黎明期にあったリリースの2年も前から、Snyk Agent Fixの開発に取り組んでおり、業界を先取りしていました。そのため、当時利用可能な選択肢の中で、T5がニーズに最も適していると判断しました。セキュリティ問題を修正する方法をモデルに学習させるため、セキュリティ問題が修正された、寛容なライセンスのオープンソースプロジェクトを使ってファインチューニングを行いました。

Snyk Agent Fixがセキュリティ修正を提案する前に、SnykのハイブリッドAIエンジンであるDeepCode AIは、厳格なルールと知識ベースを用いたシンボリックAIアルゴリズムによって、セキュリティ予測を反映したコード修正を再分析します。これにより、Snyk Agent Fixを含むすべてのLLMに起こり得る、ハルシネーションや不適切な修正の可能性を低減します。Snyk Agent Fixが提案するコードの検証は、より高度な別のLLMモデルへの移行後も継続しています(詳細は後述)。

Snyk Agent Fixの初期段階で得た知見をもとに、より正確なセキュリティ問題の修正を生成できるLLMモデルへ移行することにしました。ファインチューニング手法と組み合わせた際に最良の結果を生むモデルを見つけるため、利用可能な候補となる興味深いLLMをすべてテストしました。精度と速度を踏まえ、ベースモデルにStarCoderを選び、トレーニングデータセットを使ってファインチューニングしました。

結果は驚くほど改善しました。

棒グラフは、AST、Interprocedural、Local、SecurityFlow、SecurityLocalについて、pass@1、pass@3、pass@5の2023年6月と11月の結果を比較しています。

Snyk Agent Fixは、さまざまな種類のセキュリティ問題やコーディング上の問題を自動修正できます。上の画像にある各行のとおり、評価結果を要約するために、問題をAST、Interprocedural、Local、SecurityLocal,、SecurityFlow*の5つに分類しました。Snyk Agent Fixは、検出した問題ごとに5つの修正候補を生成します。上の画像の3つの列、pass@1、pass@3、pass@5は、それぞれ1件、3件、5件の修正候補のうち、正確な修正を1件含む出力の割合を示します。

Snyk Agent Fixの精度を担保するため、すべての予測を人手で作成したルールと知識ベース(シンボリックAIに組み込まれています)に照らして検証します。予測は、次の条件を満たすと検証を通過します。構文的に正しく解析可能なコードを生成し、別の問題を持ち込むことなく、該当するセキュリティ問題を修正することです。これはSnyk独自の強みです。シンボリックAIを基盤とする独自のコードアナライザーと知識ベースを使い(その重要性についてはこちらをお読みください)、Snyk Agent Fixを支えるLLMが生成した誤った修正やハルシネーションを、そうした不適切な修正がお客様に届く前に取り除きます。

これにより、LLMだけに修正を任せたり、問題の確認と修正の両方を任せたりする他のコードスキャン自動修正ソリューションよりも、Snyk Agent Fixの堅牢性と安全性が高まります。評価方法や問題の分類に関する詳しい情報は、SnykのCodeReduceテクノロジーについての研究論文をご覧ください(詳細は後述)。

GPT-4の精度も大幅に向上させる、画期的な特許出願中の技術

結果の品質を高めるため、Snyk Agent Fixを支えるLLMのプロンプトにユーザーデータ(関連するコード)を渡す方法も改善しました。Snyk独自のこの技術は「CodeReduce」と呼ばれ、現在、特許出願中です。CodeReduceはプログラム解析を活用し、LLMの注意機構を該当する修正に必要なコード部分だけに集中させます。報告された不具合と必要なコードコンテキストを含む、より短いコードスニペットにLLMの焦点を絞ることができます。

つまり、Snykは再びノイズを取り除き、重要な成果を効率よく得られるようにしています。CodeReduceは、Snyk Agent Fixが処理するコード量を大幅に削減します。その結果、テストしたすべてのモデル(GPT-3.5、GPT-4、Mixtralを含む)で修正生成の品質と基準が向上し、ハルシネーションの可能性も低減します。実際に、GPT-4の精度を最大20%向上させました(下の画像をご覧ください)。CodeReduceの仕組みについては近日中に詳しくご紹介しますので、ぜひご期待ください。

5つのコードコンテキストにおいて、pass@5とexact@5の指標でDeepCode AI Fix、CodeReduce、GPT-4を比較した棒グラフ。
ASTのpass@5とLocalのexact@5を除き、Snykはすべての指標で最大20%上回っています。

8つの言語に対応し、ルールとデータも全般的に改善

基盤モデルの変更や、より高品質な結果を得るためのSnyk Agent Fixの対象範囲の改善に加えて、修正結果の幅と深さも高めたいと考えました。そのため、ラベリングチームと連携して修正データベースの品質を向上させ、Snyk Agent Fixが生成した結果の正確性を検証し、モデルを継続的に改善できるようにしました。

こうした多角的な取り組みの結果、Snyk Codeの自動修正機能は、すでに数百に及んでいたルールを、JavaScript/TypeScript(この2つは1言語として扱います)だけでなく、さらに7つの言語でもサポートできるようになりました。すべてのルールの信頼性も向上しています。OWASP Top 10の脅威に対して、現在は次の言語に対応しています。

  • JavaScript/TypeScript

  • Java

  • Python

  • C/C++

  • C#(限定的なサポート)

  • Go(限定的なサポート)

  • APEX(限定的なサポート)

データの収集方法と処理方法にも改善を加えた結果、LLMの精度の信頼性は平均80%へと大きく向上しました。これにより、前述のとおり、シンボリックAIがLLMの提案する修正の安全性を検証しやすくなります。ユーザーにとってどのような意味があるのでしょうか。DeepCode AIのFixの提案により、従来より短い時間で、該当する脆弱性を常に解決できることが期待できます。

今後の予定

信頼性の高い自動修正機能の実現に向けて大きく前進しましたが、Snyk Agent FixのLLMの改善、最適化、反復的な改良を続けていく予定です。また、IDE内外のユーザー体験にも取り組みます。具体的には、次のような改善を予定しています。

さらに迅速で高精度な修正を実現するモデルの改善

LLMは今も急速に進化しており、新しいモデルや改良版が次々と登場しています。StarCoderの新しいバージョンであるStarCoder 2が利用可能になったため、テストを行う予定です。テストでさらなる改善が見込める場合は、StarCoder 2への切り替えを検討します。実際のLLMに加え、次の取り組みも進めています。

  • ニューラルモデルとサーバーを最適化して修正を高速化し、修正生成のレイテンシを平均約12秒から6秒未満に短縮

  • 主要言語(JavaScript/TypeScript、Java、Python、C/C++、C#)のルール適用範囲を拡大し、修正の品質を向上

修正を簡単に行える、よりスムーズなIDE体験

Snyk Agent Fixを使う開発者は、提案された修正をより簡単に確認し、さまざまな候補からニーズや状況に最適なものを選べるようになります。また、修正を適用する前に、同じフロー内でコードへの変更をプレビューできます。

Snyk Codeのセキュリティパネル。平文送信の脆弱性と、HTTPをHTTPSに置き換えるJavaScriptのAI生成修正を表示。

これらの機能はすべて、開発者がより速く、より簡単に、より安全にコーディングできるようにします。しかし、開発者を本当に支援するのは(Snyk Agent Fixの精度に加えて)、LLMがコードのコンテキストを理解できることです。コードを単なるテキストとしてしか理解しない他のセキュリティツールとは異なり、Snyk Agent Fixは開発者のコードを理解し、開発者と同じようにコードを修正します。つまり、コードがコンパイルされる可能性が最も高い編集を行い、セキュリティ上の問題に対処するうえで最も効果的かつ効率的な修正を1つ適用します。

VS CodeやEclipseを含む、現在サポートされているすべてのIDEのユーザーは、効率化された自動脆弱性修正を利用できます。JetBrains IDEのユーザーにも、今後利用範囲を拡大する予定です。

画期的な精度、高いセキュリティ、幅広い適用性を備えた、すぐに使える自動修正機能

この1年間、Snyk Agent Fixに関するユーザーからのフィードバックに対応するために尽力し、DeepCode AIによる自動修正の適用範囲と深さ、そして全体的な品質の向上を大きく進めてきました。IDEから直接、より幅広いコードに対応した、より正確で安全な自動修正を利用できるようになりました。

  • 8言語に対応。

  • 特許出願中のCodeReduceテクノロジーにより、Snyk Agent Fixだけでなく、GPT-4などの他のAIモデルでも自動修正の精度が向上します。

  • 複数のAIモデルを活用して、LLMやモデルの同質化に伴う本質的なリスクを低減します。また、静的解析エンジンと知識ベースのシンボリックAI解析でLLMの出力を検証し、モデルが生成した誤った修正や幻覚がエンドユーザーに届く前に除外します。

これほど長期間ベータ版で実地検証を重ねた自動修正機能だからこそ、理論だけでなく実際の使用においても優れたユーザー体験を実現します。これまでの成果を誇りに思う一方で、現状に満足するつもりはありません。Snyk Agent Fixの修正結果とユーザー体験の改善に、今後も投資を続けます。

既存のSnyk Codeをご利用のお客様は、Snyk Previewの設定で「Snyk Code Fix Suggestions」を有効にすると、IDEでSnyk Agent Fixをお試しいただけます(下の画像を参照)。詳しくは、ドキュメントをご覧ください。

Snyk Code Fix Suggestionsなどの実験的な機能を有効にする切り替えスイッチが表示された、Snyk Previewの設定ページ

Snyk Codeをまだお使いでなく、AIの速度で確実に自動修正を始めたいとお考えですか?こちらからSnykアカウントに登録して、よりプロアクティブで簡単、効率的なワークフローを今すぐ体験しましょう。

SnykでAIセキュリティを掌握

Snykが、セキュリティチームに包括的な可視性と制御を提供しながら、開発チームが生成AIで作成したコードをどのように保護するかをご紹介します。

*コード解析には、Snyk Agent FixがSnyk Codeを使用しています。2023年9月時点のバージョンでは、Snyk Codeは156種類のチェックを実装しています。それぞれに必要な解析の種類と、セキュリティ特性を確認するかどうかに基づき、以下の5つのカテゴリに分類しました。

AST: ASTチェックのほとんどは、抽象構文木上でのみ実行できます。これらのルールの多くは、言語のVueJSまたはReact拡張機能に関する特性を検証します。タグの欠落、変数名の重複など、通常はプログラムの制御フローやデータフローの解析を必要としないパターンをチェックします。

関数間: 関数間チェックも関数間解析に依存しますが、ローカルチェックとは異なり、検証対象の特性はプログラム内の別々の関数またはメソッドにまたがります。メソッドのシグネチャと実装または使用方法の不一致を検出するルールなどが含まれます。(新しいCodeReduceテクノロジーに関する公開研究では、関数間チェックをFilewideと呼んでいます。)

ローカル: ローカルチェックでは関数間解析を用いて、不正な値が受け付けられないメソッドに渡されること、リソースが解放されないこと、特定の式が効果を持たないこと、または予期しないセマンティクスの結果を常に生成することを検出します。

セキュリティローカル: ローカルチェックと同様に、セキュリティローカルチェックでは、セキュリティの観点から不適切なAPIの使用や、その他のセキュリティ設定の誤りを検証します。通常、オブジェクトに対するすべてのメソッド呼び出しを追跡するか、メソッドまたは関数の呼び出しに渡されるパラメーター値を追跡して検証します。

セキュリティフロー: セキュリティフローチェックは通常、選択した静的解析ツールがサポートする中で最も複雑なチェックです。このルールカテゴリには、データソースを起点とする関数間データフロー解析を含むすべての汚染解析ルールと、さまざまなデータサニタイズパターンの検出が含まれます。

続きを読む

Blog

フロンティアモデルは脆弱性を発見した。攻撃者だけがエクスプロイトチェーンを見つけた。

静的解析で欠陥は見つかりましたが、ライブ攻撃テストで侵害につながる連鎖を実証できたのは唯一でした。Evo COS、Claude Security、Claude Code Securityを比較します。

feature insights context
Blog

自律型攻撃はすでに始まっている。防御もそのスピードに追いつかなければならない。

自律型攻撃者によって、防御に使える時間は短くなっています。継続的な検出、修復、検証、予防で、セキュリティチームが攻撃に歩調を合わせる方法をご紹介します。

Blog

AIコーディングエージェントが不適切なアクセス制御を繰り返し実装する理由

AIコーディングエージェントは、コンパイルが通りレビューも通過する一方で、あるテナントのデータを別のテナントに公開してしまう認可ロジックを生成することがあります。不適切なアクセス制御が検出しにくい理由と、その防止策をご紹介します。