# AutoFix概要

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

AutoFix は以下のユースケースで利用できます

* [オープンソース依存関係](https://help.aikido.dev/docs/docs-ja/autofix-and-remediation/scope/autofix-for-open-source-dependencies) （以下を含む [Aikido Libraries](https://help.aikido.dev/docs/docs-ja/autofix-and-remediation/aikido-libraries-overview) ドロップイン代替品）
* [SAST と IaC の問題](https://help.aikido.dev/docs/docs-ja/autofix-and-remediation/scope/ai-autofix-for-sast-and-iac-issues)
* [コンテナ](https://help.aikido.dev/docs/docs-ja/autofix-and-remediation/scope/ai-autofix-for-containers) （以下を含む [Aikido Images](https://help.aikido.dev/docs/docs-ja/autofix-and-remediation/aikido-images/autofix-for-containers-using-aikido-images) CVE ゼロのベースイメージ）
* [コード品質](https://help.aikido.dev/docs/docs-ja/code-quality/code-quality-overview)
* ペンテスト課題
* AI Code Audit の問題

***

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

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

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

***

### AutoFix がカバーする範囲

#### オープンソース依存関係

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

既定では、AutoFix は脆弱性を修正するために必要な最小バージョンを提案します。大規模アップグレードよりも、マイナーおよびパッチの更新を優先します。メジャーアップグレードが提案されるのは、より低いバージョンでは問題を修正できないためです。

内部では、AutoFix は依存関係ツリーを分析して、変更を適用する最適な箇所を見つけます。多くの場合、直接依存関係をアップグレードすることで、複数の脆弱な推移的依存関係を一度に更新します。

**Aikido Libraries**

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

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

#### SAST と IaC の問題

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

AutoFix はこれらのパッチにエージェント的アプローチを採用しています。関連するコードの文脈を集め、修正計画を立て、そのうえで読みやすくレビューしやすいよう設計された最小限の修正を適用します。すべての SAST AutoFix について、Aikido は信頼度（高・中・低）を付与し、ベンチマークから見て生成された変更が脆弱性を修正しつつ正しい動作を維持する確からしさを示します。

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

#### コード品質

AutoFixで修正できます [コード品質](https://help.aikido.dev/docs/docs-ja/code-quality/code-quality-overview) 検出結果。デフォルトのチェックと [カスタムルール](https://help.aikido.dev/docs/docs-ja/code-quality/add-custom-code-rules)。カスタムルールの場合は、ルールを作成または編集する際に AutoFix プロンプトを追加し、非準拠の例に対して検証してください。Aikido はプルリクエストのコメントで修正案を提案し、リポジトリのスキャン結果からプルリクエストを作成できます。

オンにする [プルリクエストの自動作成](https://help.aikido.dev/docs/docs-ja/autofix-and-remediation/automation-and-merging/automatic-creation-of-pull-requests) デフォルトのチェックで重大および高深刻度の指摘について、毎日プルリクエストを開くため。

#### コンテナとベースイメージ

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

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

関連するすべてのタグをスキャンし、それぞれの脆弱性プロファイルを評価するのは容易ではないため、container AutoFix は提案を算出するためによりコストの高い分析を実行しますが、修正と残存リスクの両方を把握できる結果を返します。Aikido でスキャンされている限り、公開ベースイメージとプライベートレジストリの両方に対応します。

**Aikido Images**

より新しいベースイメージへの移行が大きな影響を伴う場合、AutoFix は **Aikido Images**：メンテナンス中およびサポート終了済みのベースイメージの両方に対して、重大（CRITICAL）および高（HIGH）深刻度の脆弱性を修正した、CVE ゼロのベースイメージのレジストリです。Aikido は新しい CVE が見つかるたびに、これらのイメージを継続的に再ビルドします。AutoFix は利用可能であればそれらを提案し、Dockerfile のベースイメージを、上でホストされている Aikido Images バリアントへ切り替えることで適用します `docker.aikido.io`.

#### ペンテストの検出結果

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

***

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

#### SAST、IaC、コンテナの AutoFix

SAST、IaC、またはコンテナの問題に対する修正を生成する際、Aikido は必要最小限のコード断片のみを、暗号化された経路で AWS Bedrock 上の AI モデルに送信します。Aikido も AWS Bedrock も、このコードをモデルの学習やファインチューニングに使用しません。

#### 依存関係の AutoFix

サプライチェーンの側面では、AutoFix はいくつかの構造的な強化作業を支援します：

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

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