Skip to main content

Snyk Code の自動修正機能、DeepCode AI Fix がさらに改良されました

feature-snyk-apprisk-globe

2024年4月23日

0 分で読めます

DeepCode AI Fix は、セキュリティチェック済みの修正をワンクリックで提供する AI を活用した機能であり、開発者向けのリアルタイム SAST ツールである Snyk Code 内にあります。市場初の半自動の IDE 内セキュリティ修正機能の 1 つである DeepCode AI Fix の公開ベータ版は、2023 年 4 月の Snyk Launch の一環として発表されたもので、Snyk Code によって検出されたセキュリティ上の問題に対する修正を、リアルタイムでインライン、かつ IDE 内で提供します。発表以来、当社はこの強力で革新的な機能を改善する取り組みを、Snyk Code ユーザーのために続けています。そして本日、公開ベータ版のユーザーから約 12 か月にわたってフィードバックを集め、それに基づいて改善を重ねることで、有効性が実証された自動修正機能の新しいモデルの改良版を発表することとなりました。DeepCode AI Fix は次の機能を提供します。

  • 7 つの言語をサポートします。

  • 画期的な特許出願中のテクノロジーにより、Snyk の DeepCode AI Fix だけでなく、GPT-4、GPT-3.5、Mixtral など、テストを実施したその他のモデルでも精度を大幅に向上させます。

  • マルチモーダル AI (広く知られる Snyk のハイブリッド AI アプローチ) が、モデルの多様性を通じて堅牢性を最大限に高めます。

DeepCode AI Fix でシームレスな自動修正のニーズに対応

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

該当するセキュリティポリシーに応じて、新しいセキュリティ上の問題が特定されると、開発者はそれを修正しようとします。ただし、セキュリティ上の問題の解決は必ずしも簡単ではありません。コードベースの描画領域という枠組みの中でコードがどのように動作するか、セキュリティ上の問題は何か、問題を修正する最適な方法は何かについてのコンテキストが必要です。

Snyk Code は、開発者が問題に取り組む際にインスピレーションを得られるよう、検出されたセキュリティ上の問題の詳細な説明に加え、パーミッシブライセンスが与えられた実際のリポジトリからの修正のサンプルを開発者に提供します。DeepCode AI Fix が登場する前に、Snyk Code は開発者の認知負荷を軽減する上で大きな進歩をもたらしましたが、開発者は、セキュリティ上の問題を自分で解決する方法を依然として必要としていました。

そうした理由から、Snyk は DeepCode AI マシンの LLM 部分 (LLM を含むシンボリック AI と機械学習の組み合わせで構成される) を活用した DeepCode AI Fix によって、開発者がさらに簡単に脆弱性を修正できるようにすることを目指しました。DeepCode AI Fix によって開発者は、JavaScript や TypeScript をはじめとしたプロジェクトでセキュリティ上の問題を自動的に修正できるようになり、安全でシームレスなビルドを行えるようになりました。Visual Studio Code または Eclipse で Snyk Code を使用している開発者なら誰でも、新しいセキュリティ上の問題が発生したときに、⚡この問題を修正することができました。

先駆的な初期のベータリリースからの学び

DeepCode AI Fix は、脆弱性が本番環境に入り込む前に、IDE で直接問題に対処して修復を自動化するという、セキュリティ上の問題に対する独自の修復方法をチームに提供するものであるため、Snyk によって早期アクセスで初めて導入されると、さまざまな規模や業種の無数の企業によって採用されました。 

Snyk は AI を活用したコード自動修正機能を他社に先駆けてリリースしましたが、ベータ機能はすべてその性質上、改善段階にあるため、DeepCode AI Fix の改良を続けたいと考えました。具体的には、修正の「精度」の一貫性の向上、言語ルールの改善、言語範囲の改善、アクセシビリティの拡張 (当時は IDE 内でのみ利用可能)、ユーザーエクスペリエンスの向上などです。

カバーすべき領域がかなり広いため、ユーザーからのフィードバックに基づいて、影響度の特に大きい以下の項目から取り組み始めることにしました。

  • 結果の質の向上

  • 対応言語の追加

DeepCode AI Fix のような機能では、修正の質と安全性が最も重要であるため、修正案の深度と幅をさらに強化することに決めました。

AI の世界で信頼できる自動修正機能をビルド

速度と精度を高める新しい LLM モデル

リリースされた DeepCode AI Fix では、Google の T5 モデルに Snyk のセキュリティエキスパートが大幅に調整を加えたバージョンが使用されました。なぜこのモデルで始めたのでしょうか。Snyk は当時、LLM がまだ初期段階にあった頃の業界の先駆け的存在として、リ​​リース前の DeepCode AI Fix にすでに丸 2 年取り組んでいました。その時点で利用できる実行可能なオプションの中から、T5 が Snyk のニーズに最も適していると感じました。そこで Snyk は、セキュリティ上の問題を修正する模範的な方法を教えるために、すでに問題を修正済みのモデルのファインチューニングを、パーミッシブライセンスが与えられたオープンソースプロジェクトで行いました。DeepCode AI Fix がセキュリティ修正を提案する前に、Snyk のハイブリッド AI エンジンである DeepCode AI は、厳格なルールと知識ベースのシンボリック AI アルゴリズムを使用して、セキュリティ予測を組み込んだコード修正を再分析し、DeepCode AI Fix をはじめあらゆる LLM が影響を受けやすいハルシネーションや不具合のある修正の可能性を低減しました。DeepCode AI Fix のコード案をチェックするこの慣行は、より高度な別の LLM モデルを DeepCode AI Fix に使用するよう移行した後も継続されます (以下を参照)。

Snyk は、DeepCode AI Fix の初期段階で学んだことに基づいて、より精度の高い修正をセキュリティ問題に対して生成できるよう LLM モデルに移行することにしました。ファインチューニング手法と組み合わせたときに最良の結果を生み出す LLM を特定するため、実行可能で有望なありとあらゆる LLM をテストしました。そして、その精度と速度に基づいて、StarCoder をベースモデルとして選択し、トレーニングデータセットに基づいてファインチューニングを行いました。

結果の改善は驚くべきものでした。

blog-deepcode-ai-fix-graph-2023

DeepCode AI Fix では、さまざまな種類のセキュリティ問題やコーディングの問題を自動的に修正できます。上の画像の各行に、これらの問題を ASTInterproceduralLocalSecurityLocal、および SecurityFlow* の 5 つのカテゴリに分類し、評価結果をまとめました。DeepCode AI Fix は、発生した問題ごとに 5 つの異なる修正候補を生成します。上の画像の、pass@1pass@3pass@5 の 3 列はそれぞれ、1 個、3 個、5 個の修正候補の中に 1 つの正確な修正を含んでいる出力の割合を示しています。DeepCode AI Fix の精度を保護するため、すべての予測は、人間が作成したルールとナレッジベース (シンボリック AI に組み込まれている) と照合してチェックされます。予測が構文的に正しい解析可能なコードを生成しており、新たな問題を導入することなく該当するセキュリティの問題を修正している場合、その予測はチェックに合格します。これは、Snyk に固有の差別化要因です。Snyk は、シンボリック AI を活用した独自のコードアナライザーとナレッジベースを使用して (これが重要な理由はこちらをご確認ください)、DeepCode AI Fix の背後の LLM によって生成される可能性のある不正確な修正やハルシネーションを除外することで、そのような不具合のある修正がお客様の手に渡るのを未然に防ぎます。これにより、問題の修正 (さらには問題のチェックと修正の両方) に LLM のみを使用する他のコードスキャン自動修正ソリューションよりも、DeepCode AI Fix が堅牢で安全であることが保証されます。Snyk の評価と問題カテゴリの詳細については、Snyk の CodeReduce テクノロジーに関する調査レポートを参照してください (下記を参照)。

GPT-4 の精度も大幅に向上させる画期的な特許出願中のテクノロジー

Snyk は、ユーザーのデータ (つまり、関連するコード) が処理されて、DeepCode AI Fix の背後にある LLM のプロンプトに取り込まれる方法を改善することで、結果の質の向上にも取り組みました。「CodeReduce」と呼ばれる Snyk のこの独自テクノロジーは、現在特許出願中です。CodeReduce はプログラム分析を利用して、該当する修正の実行に必要なコード部分のみに LLM の注意機構を集中させ、報告された不具合と必要なコードコンテキストを含んだむ短いコードスニペットに LLM がフォーカスできるようにします。言い換えれば、Snyk はここでもノイズを除去し、最も効果のある効率的な結果を得るために効率化しています。このように、CodeReduce は、DeepCode AI Fix が処理するコードの量を大幅に削減します。これにより、テスト対象のすべてのモデル (GPT-3.5、GPT-4、Mixtral など) の修正生成の質と基準が向上し、ハルシネーションが発生する可能性が低減します。実際、GPT-4 の精度は最大 20% も向上しました (下の画像を参照)。CodeReduce の仕組みについては近日中に詳しくお話しする予定です。ご期待ください。

blog-deepcode-ai-fix-graph
AST の pass@5 と Local の exact@5 を除き、Snyk のパフォーマンスはすべてのメトリクスで最大 20% 優れています。

7 言語のサポートと、ルールおよびデータにおける全般的な改善

基盤となるベースモデルを変更し、結果の質を向上させるために DeepCode AI Fix の焦点を改善すること以外にも、修正結果の幅と深度の向上にも取り組みました。これについては、ラベル付けチームと協力して修正データベースの質を強化し、DeepCode AI Fix によって生成される結果が正確かどうかを検証して、モデルの継続的な改善に役立てました。

以前は、すでに何百ものルールがあったにもかかわらず、JavaScript/TypeScript (これらを 1 つの言語として数える) しかサポートしていませんでしたが、Snyk Code の自動修正機能を改善するための多次元アプローチの結果、対応言語 6 つを追加し、さらに多くのルールにも対応し、すべてのルールの信頼性が向上しました。現在では、以下に示す OWASP トップ 10 の脅威をサポートしています。

  • JavaScript/TypeScript

  • Java

  • Python

  • C/C++

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

  • Go (限定的サポート)

  • APEX (限定的サポート)

ほかにもデータの収集方法と処理方法が改善された結果、修正の信頼性が平均 80% の精度まで飛躍的に向上しました。 

次のステップ

Snyk は、信頼性の高い自動修正機能のビルドにおいて大きな進歩を遂げてきましたが、今後も DeepCode AI Fix LLM の改善、最適化、反復を続けていきます。また、IDE のユーザーエクスペリエンスなどにも取り組んでいきます。これは何を意味するでしょうか。

モデルの改善による修正のさらなる迅速化と質の向上

LLM は今なお急速に進化しており、新しいモデルや改良されたモデルが常にリリースされています。Snyk は、利用可能になった StarCoder 2 (StarCoder の新しいバージョン) をテストする予定です。テスト中にさらなる改善が可能であることが判明した場合は、StarCoder 2 に切り替える可能性があります。Snyk では、実際の LLM とは別に、以下を行うことにも投資しています。

  • ニューラルモデルとサーバーを最適化することで、より迅速な修正をユーザーに提供し、修正生成のレイテンシーを平均約 12 秒から 6 秒未満に短縮します。

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

効率化された IDE エクスペリエンスによって修正を容易に

DeepCode AI Fix を使用する開発者は、修正案をより簡単に確認し、さまざまな修正案からニーズのコンテキストに最も適したものを選択して、コードに対して行われる可能性のある変更をプレビューするといった操作を、修正案の適用前に、すべて同じフロー内で行えるようになりました。

blog-deepcode-ai-fix-index-js

これらの機能は、開発者がより迅速で簡単、かつ安全にコードを作成するのに役立ちますが、(DeepCode AI Fix の精度は別として) 開発者を真に支援するのは、LLM によるコードコンテキストの理解です。コードを単にプレーンテキストとして理解する他のセキュリティツールとは異なり、DeepCode AI Fix は開発者のコ​​ードを理解するため、コードがコンパイルされる可能性が最も高い編集を行い、セキュリティの問題に対する最も効果的かつ効率的なコード修正を 1 つ適用することで、開発者と同じようにコードを修正できます。 

効率化された自動脆弱性修正機能は、VS Code や Eclipse をはじめ、現在サポートされているすべての IDE のユーザーが利用できます。また今後は、Jetbrains IDE ユーザーにもアクセスを拡張する予定です。

優れた精度、強力なセキュリティ、幅広い適用性を備えた、すぐに使える自動修正エクスペリエンス

この 1 年で、Snyk は DeepCode AI Fix に関するユーザーからのフィードバックへの対処に熱心に取り組み、結果の幅と深度、および DeepCode AI の自動修正の全体的な質の向上において大きな進歩を遂げてきました。ユーザーは、より幅広い適用性、より正確な自動修正結果、より安全な修正をすべて IDE 内から直接享受できるようになりました。

  • 7 言語をサポート (JavaScript と Typescript は 1 つの言語として数えます)。

  • CodeReduce テクノロジー (特許出願中) は、DeepCode AI Fix だけでなく、GPT-4 などの他の AI モデルの自動修正の精度も向上させます。

  • 複数の AI モデルによって、LLM とモデルの均一性に固有のリスクを確実に軽減し、静的分析エンジンとナレッジベースのシンボリック AI 分析によって LLM の出力をチェックすることで、モデルによって生成された不具合のある修正やハルシネーションがエンドユーザーの手に渡る前に除外されます。

Snyk の自動修正機能のように、ベータ版で長い間有効性をテストされてきた機能は、理論上だけでなく実際の環境でも優れたユーザーエクスペリエンスを提供します。私たちはこれまでの成果を誇りに思っていますが、その栄誉に満足するつもりはなく、DeepCode AI Fix の結果とユーザーエクスペリエンスの向上に今後も投資を続けていきます。 

既存の Snyk Code ユーザーは、Snyk Preview の設定で Snyk Code Fix Suggestions をオンにすることで、IDE で DeepCode AI Fix を試すことができます (下の画像を参照)。詳しくはドキュメントをご確認ください。

blog-deepcode-ai-fix-snyk-preview

Snyk Code をお持ちでなくても、信頼性の高い自動修正を AI のスピードで開始することが可能です。こちらで Snyk アカウントに登録し、よりプロアクティブで簡単、かつ効率化されたワークフローを今すぐご体験ください。