コンテンツにスキップ

AutoFix について

多くのセキュリティプログラムが脆弱性の修正よりも発見を重視して最適化されている一方で、AutoFixはAikidoプラットフォームにおいて修復をコアワークフローとして扱います。AutoFixは、オープンソースの依存関係、アプリケーションコード、Infrastructure as Code、コンテナ、さらにはペンテストの検出結果に対して、具体的でレビュー可能なパッチを生成し、エンジニアがすでに使用している同じチャネル(PR、CIゲーティング、IDE)を通じて提供します。

AutoFixは以下のユースケースで利用可能です。


AutoFixがワークフローにどのように組み込まれるか

Section titled “AutoFixがワークフローにどのように組み込まれるか”

AutoFixは、すでに作業している場所に現れるように設計されています。

  • IDE統合。 AikidoのIDEプラグインは、SAST、IaC、依存関係の問題をエディタ内に直接表示します。問題が検出されると、AutoFixは作業コピーに適用できるインラインdiffを提供し、脆弱性が共有ブランチに到達することを防ぎます。
  • CIおよびPRゲーティング。 PRおよびリリースゲーティングが有効な場合、Aikidoはパイプラインのブランチとプルリクエストをスキャンし、新しいSASTおよびIaCの問題を検出します。新しい問題が導入された場合、AutoFixはワンクリックで適用できる修復案を提示します。
  • 手動および自動PR作成。 AutoFixのPRは、Aikido UIから手動で作成することも、選択したリポジトリと問題タイプに対して毎日自動生成されるように設定することもできます。Aikidoでは、既存のコントリビューションガイドラインやタスク追跡のプラクティスに合わせて、AutoFixのPRメタデータを微調整できます。

オープンソース依存関係については、AutoFixはパッケージのアップグレードやその他の互換性のある変更を通じて脆弱性を除去する変更を提案します。多くの場合、1回のAutoFix実行で、脆弱性を1つずつ対処するのではなく、脆弱性のクラス全体を除去できます。

デフォルトでは、AutoFixは脆弱性を修復するために必要な最小バージョンを提案し、メジャーアップグレードよりもマイナーおよびパッチバンプを優先します。メジャーアップグレードが提案される場合は、それより低いバージョンでは問題を修正できないためです。

内部的には、AutoFixは依存関係ツリーを分析し、変更を適用する最適なポイントを見つけます。これはしばしば、直接の依存関係をアップグレードすることで、複数の脆弱な推移的依存関係を1ステップで更新することを意味します。

Aikido Libraries

アップストリームの修正に破壊的なメジャーバージョン変更が必要な場合や、メンテナーがまだ修正を提供していない場合、脆弱な依存関係の修復は困難になることがあります。Aikidoはこれに対してAikido Librariesで対応します。これは、同じパッケージ名とベースバージョンを維持しながらセキュリティパッチをバックポートする、脆弱なオープンソースパッケージのドロップイン代替です。

Aikido Librariesのバリアントは、CVEを除去しながら元のバージョンと100%互換性を保つように設計されており、長期的な解決策としても、完全なメジャーアップグレードが可能になるまでの一時的なつなぎとしても使用できます。AutoFixは、利用可能な場合、依存関係のAutoFix概要にAikido Librariesのアップグレードを直接表示します。Aikido LibrariesのバリアントはJavaScript、Java、Python、PHP、.NETで利用可能です。

アプリケーションコードについては、AutoFixは幅広い言語(JavaScript、Java、.NET、PHP、Python、Ruby、Go、Elixir、Rust、C、Kotlin、Scala、Swift)にわたってルール固有のパッチを生成します。各SAST AutoFixは特定のルールと修復パターンに紐付いています。そのルールの指示は、変更を最小限に抑え、動作を維持し、直接的な症状だけでなく根本原因に対処するように調整されています。

AutoFixはこれらのパッチにエージェント的アプローチを使用します。関連するコードコンテキストを収集し、修復計画を策定した上で、読みやすくレビューしやすいように設計された最小限の修正を適用します。すべてのSAST AutoFixに対して、Aikidoは生成された変更が脆弱性を修正し、かつ正しい動作を維持していることをベンチマークがどれだけ強く示唆しているかを反映した信頼度レベル(High、Medium、Low)を割り当てます。

Infrastructure as Code(IaC)のAutoFixは同じパターンに従いますが、アプリケーションロジックではなく設定を対象とします。AWS、GCP、Azure、Kubernetesにわたって、公開されているリソース、脆弱なTLS終端、暗号化の欠如といった安全でないインフラ定義を対象とします。

コンテナAutoFixは、イメージスキャンとDockerfileの情報を組み合わせて、具体的なベースイメージの更新とOSレベルの修復を提案します。

主なワークフローはベースイメージのアップグレードに焦点を当てています。コンテナのベースイメージに脆弱性が見つかった場合、Aikidoはパッチ、マイナー、メジャーの複数の更新オプションを提案します。各オプションについて、AutoFixはどの脆弱性が修復されるか、また新たな脆弱性が導入されるかどうかを表示します。自動選択されたタグが特定のスタックに理想的でない場合、ユーザーは設定の手間を最小限に抑えたまま、評価対象に追加のタグを加えることができます。

関連するすべてのタグをスキャンし、その脆弱性プロファイルを評価することは単純ではないため、コンテナAutoFixはより計算コストの高い分析を実行して提案を算出しますが、修復と残存リスクの両方を捉えた結果を返します。プライベートイメージがAikidoによってスキャンされている限り、パブリックベースイメージとプライベートレジストリの両方をサポートします。

Aikido Images

新しいベースイメージへの移行が破壊的な影響をもたらす場合、AutoFixはAikido Imagesを統合します。これは、保守中およびサポート終了(EOL)のベースイメージの両方にわたってCRITICALおよびHIGH深刻度の脆弱性をパッチしたゼロCVEベースイメージのレジストリです。Aikidoは新しいCVEが発生するたびにこれらのイメージを継続的に再ビルドします。AutoFixは利用可能な場合にこれらを提案し、Dockerfile内のベースイメージをdocker.aikido.ioでホストされているAikido Imagesのバリアントに切り替えることで適用します。

AutoFixはAikidoのAIペンテストにも組み込まれています。ペンテストが問題を特定すると、Aikidoはコード、コンテナ、クラウド設定にわたる詳細な根本原因分析を生成します。AutoFixはその分析を利用して、観察された症状だけでなく根本的な欠陥に対処するコード修正を合成できます。


セキュリティとプライバシーに関する考慮事項

Section titled “セキュリティとプライバシーに関する考慮事項”

SAST、IaC、またはコンテナの問題に対する修正を生成する際、Aikidoは必要最小限のコードスニペットのみを、暗号化されたチャネル経由でAWS Bedrock上でホストされているAIモデルに送信します。AikidoもAWS Bedrockも、このコードをモデルのトレーニングやファインチューニングに使用することはありません。

サプライチェーン側では、AutoFixはいくつかの構造的な堅牢化タスクを支援します。

  • GitHub Actionsを特定のコミットに固定する
  • ベースイメージをダイジェストに固定する
  • 不足しているセキュリティライブラリのインストール

AutoFixは最終的に、大量の「機械的な」セキュリティ作業(依存関係のアップグレード、小規模なコード修正、ベースイメージの更新)を処理することで、人的な労力をアーキテクチャや曖昧なトレードオフに集中させることを目的としています。そのデフォルト設定は、リスクを低減しつつ、変更を安全で理解しやすいものに保つように設計されています。