In this article
AIによる脆弱性検出の強化
AIを最優先する企業として、Snykはエンジニアリングプロセスのあらゆる側面に人工知能を取り入れることに力を注いでいます。この取り組みを原動力に、AIを活用してセキュリティ製品を強化する革新的な方法を常に模索しています。最近、最先端技術を活用して脆弱性検出を強化するという取り組みを体現する2つのプロジェクトの初期版をリリースしました。これらのプロジェクトは、手作業を最小限に抑え、精度を大幅に高めるとともに、セキュリティの専門家がより重要度の高い戦略的な業務に集中できるよう設計されています。
課題:手動分析と情報過多
サイバーセキュリティの分野では、脆弱性に先手を打つことが何より重要です。Snykは、潜在的な脅威についてタイムリーで正確な情報を提供する基盤となる、豊富なセキュリティデータを誇りとしています。創業以来、専任のセキュリティ専門家チームが、脆弱性データを常に最新の状態に保つため、休むことなく取り組んできました。ゼロデイ攻撃を含む新たな脆弱性を追跡するため、さまざまなツールや自動化を活用し、ユーザーにいち早く情報をお届けできるようにしています。
しかし、この重要な作業は決して簡単ではありません。アナリストは一日のかなりの時間、ときには数時間を費やして、膨大な情報を精査しています。GitHubリポジトリへのコメント、フォーラムでの議論、セキュリティアドバイザリなど、さまざまな情報を調べ、新たに発見された脆弱性の兆候がないかを確認します。これは、干し草の山から針を探すようなものです。情報量は膨大で、そのうちの大半、95%以上は誤検知に終わります。
シナリオ例
あるアナリストが、GitHubのコメントで「このコードは入力検証に問題があるようです」という記述を見つけたとします。一見、潜在的な脆弱性を示しているように見えるかもしれません。しかし、やり取りやコード変更を詳しく手作業で調査すると、その「問題」はセキュリティ上の欠陥ではなく、単なるコーディングスタイルの好みだったと判明することがあります。この時間のかかる作業が毎日何百回も繰り返され、多大な労力の浪費やアナリストの燃え尽きにつながるおそれがあります。
こうした手作業による反復業務は、貴重な時間を奪うだけでなく、人為的ミスのリスクも生みます。膨大なデータの中で重要な情報を見落とすと、脆弱性の特定が遅れ、セキュリティ侵害につながる可能性があります。
AIによる潜在的な脆弱性の分類:Snykのソリューション
この課題に着目した機械学習チームは、大規模言語モデル(LLM)の進歩を活用して、分析の大部分を支援できると考えました。目指したのは、こうした情報を分析し、実際に潜在的な脆弱性を示すものを正確に判別するAIモデルの開発です。
このプロジェクトの初期段階では、シンプルなワンショットプロンプティング手法を用いたソリューションを作成しました。これが分類システムの中核となりました。主な構成要素は次のとおりです。
ワンショットプロンプティングの改善:プロンプトと入力するコンテキストが十分であることを確かめるため、実験を何度も繰り返しました。生のイベントデータ(この場合はコメント)をそのまま使うだけでも、比較的良好な結果が得られました。これにより、追加の時間やリソースをかけたファインチューニングを省くことができました。
再現率の重視:実際の脆弱性を見逃さないよう、高い再現率を確保することを最優先しました。初期実験では再現率95%を達成しましたが、確信が持てない場合に「可能性あり」と回答できるようプロンプトを変更したところ、適度な適合率を維持しながら、再現率をほぼ100%まで高めることができました。
成果
再現率を驚異的な100%に保ちながら、毎月発見される数多くの脆弱性を一つも見逃すことなく、リードにつながらないと高い確度で判断されたイベントを毎週数十件除外できました。
その結果、アナリストが対応するイベントを10%削減できました。お客様はこれまでと同じセキュリティ保証を損なうことなく引き続き利用でき、さらにアナリストによる質の高い発見が増える可能性もあります。
修正コミットの分類:リリース分析の課題解決
2つ目のプロジェクトでは、新しいパッケージリリースに既知の脆弱性を修正する変更が含まれているかを分析するプロセスの強化を目指しました。これまでは、アナリストが新しいリリースごとにコミットを確認する必要があり、手作業で時間がかかるうえ、ミスも起きやすい作業でした。
リリース分析の課題
ソフトウェアパッケージは更新やリリースを繰り返します。リリースごとに多数のコミットが含まれ、それぞれがコードの変更を表します。特定の脆弱性に対処するコミットを特定するには、コードと脆弱性の性質を深く理解する必要があります。リリースのたびにこうしたコミットを手作業で確認するのは、非常に困難な作業でした。
たとえば、Reactライブラリの新バージョン1.9.1がリリースされ、前のバージョン1.9.0以降に492件ものコミットが含まれていたとします。このリリースで既知の脆弱性が修正されたかを判断するには、アナリストがリリース内のすべてのコミットを確認し、既知の脆弱性に関する情報と照らし合わせ、変更によって実際に対処されたかを評価しなければなりません。もちろん、これをすべて手作業で行うのは不可能です。そのため、時間を区切って調査し、重大度の高い問題や、リリースノートで削除されたと明記された問題に重点を置くことになります。それでも、各バージョンに多くのコミットが含まれるReactのようなパッケージでは、数時間かかることがあります。
AIを活用した修正コミットの分類:Snykのアプローチ
この課題に対処するため、コミットが特定の脆弱性を修正したかどうかについて、AIが生成した推奨情報をリリースアラートに追加することを目指しました。これには、次の複数段階のプロセスが含まれます。
関連コミットの取得:まず、特定のパッケージバージョンに関連するすべてのコミットを取得します。
AIによる修正の特定:次に、大規模言語モデルを使って、それらのコミットのいずれかが特定の脆弱性を修正したかどうかを判定します。
リリースアラートの拡充:AIが修正を特定した場合、その情報をリリースアラートに追加し、アナリストがすぐに把握できるようにします。
成果
最大の成果は、これまで見逃されていた脆弱性の修正を発見できたことです。ソリューションの開発と精度の評価を通じて、500件を超える修正を見つけ、現在、セキュリティデータベースへの追加を進めています。
さらに、この変更によって月に約30件の発見を自動化できていることから、その多くは、導入しなければ見逃されていた追加の発見だったと考えられます。
全体的な効果
これら2つの機能強化はすでに稼働しており、Snykユーザーは発見までの時間短縮と、さらに充実したセキュリティポートフォリオのメリットを実感しています。業界をリードするスピードで、最高水準のセキュリティを提供できるようになりました。
最後に、分析プロセスの重要な部分を効率化し、AIによるインサイトを提供することで、セキュリティ対策の効率と精度を高めています。脆弱性管理プロセスへのAIの導入は、単なる技術の進歩ではありません。これはセキュリティへの取り組み方を根本から変えるものであり、新たな脅威に先手を打ち、ユーザーをより効果的に守ることを可能にします。