AI アプリケーションは、多くの場合 GPU ノード上で実行され、機微なデータを処理します。独自のモデルファイル形式(例: pickle)や複雑なソフトウェアサプライチェーンにより、データ窃取、計算能力の悪用、および任意コード実行の標的となります。AI アプリケーション向けの多層防御システムを構築するには、ビルド段階で信頼されたソースを確保し、デプロイメント時に最小権限の原則を適用し、実行時にアプリケーションを継続的にモニターすることが重要です。
セキュリティリスクと攻撃パス
セキュリティリスクの概要
従来のアプリケーションと比較して、AI アプリケーションには特有のセキュリティ課題があります。主なリスクは次のとおりです。
コア資産 (データとモデル) へのリスク
データ侵害とデータポイズニング:AI アプリケーションには、機密性の高いトレーニングデータへのアクセス権が付与されることがよくあります。コンテナや Pod が侵害されると、攻撃者はマウントされたボリュームや環境変数から認証情報を直接読み取り、機密データの侵害につながる可能性があります。また、攻撃者はトレーニングデータセットを改ざんしてデータを汚染 (ポイズニング) することで、モデルの完全性とビジネスの信頼性を損なう可能性があります。
モデルファイルの実行リスク:
pickleなどのシリアル化フォーマットは、デシリアル化中に任意の Python コードを実行できます。AI アプリケーションが、信頼できないソースからモデルファイルを読み込んだり、未検証または改ざんされたファイルを読み込んだりすると、任意コード実行 (RCE) がトリガーされる可能性があります。これにより、攻撃者はコンテナーを完全に制御できるようになります。
コンピューティングリソース悪用のリスク
AI アプリケーションは、NVIDIA A100 や H100 などのパフォーマンス専有型 GPU ノードにデプロイされることがよくあります。その高い計算密度と長いアイドル期間は、マイニングの魅力的な標的となります。悪意のあるプログラムは、GPU アクセラレーションを利用してハッシュ操作を行う可能性があります。これにより、リソースの悪用と高コストが発生します。AI トレーニング自体が高い GPU 使用率を持つため、標準的なビジネスメトリックを使用してこの異常な動作を検出することは困難です。
インフラストラクチャとサプライチェーンのリスク
Kubernetes と、データパイプラインやモデルレジストリなどの機械学習ツールチェーンの組み合わせは、攻撃対象領域を拡大させます。さらに、AI アプリケーションは Docker Hub のパブリックイメージ、Hugging Face の事前学習済みモデル、またはサードパーティのライブラリに依存しています。これらの依存関係には、未パッチの脆弱性や悪意のあるコードが含まれている可能性があり、ソフトウェアサプライチェーン攻撃の典型的な侵入経路となります。
典型的な攻撃パス
一般的な攻撃手法を理解することは、的を絞った防御システムを構築するのに役立ちます。以下は、AI クラスターにおける一般的な攻撃パスです。
API 操作攻撃:攻撃者は、公開されている推論 API を呼び出してプロンプトインジェクション攻撃を仕掛ける可能性があります。これにより、モデルを騙してトレーニングデータのスニペットやシステムプロンプトを漏洩させることができます。また、攻撃者は特大の画像や長いテキストなど、不正な形式のリクエストを送信して GPU メモリとメモリリソースを枯渇させることもあります。これにより、サービス拒否 (DoS) 攻撃が発生し、ビジネスの可用性に影響を与えます。
コンテナイメージのサプライチェーン攻撃:攻撃者は、PyTorch や TensorFlow などの人気のあるフレームワークになりすまして、悪意のあるイメージをパブリックイメージリポジトリに公開する可能性があります。また、バックドアが仕込まれた事前学習済みモデルを Hugging Face などのモデルプラットフォームにアップロードすることもあります。開発者がこれらの資産をプルしてデプロイすると、コンテナの起動時に悪意のあるコードが自動的に実行されます。これにより、攻撃者のための永続的な足場が確立されます。
Kubernetes の誤った構成: 攻撃者は、安全でないコンテナーの構成を悪用してコンテナーのエスケープを実現します。たとえば、root ユーザーとしてコンテナーを実行したり、containerd ソケット(/run/containerd/containerd.sock など)をマウントしたり、特権モード(
privileged: true)を有効にしたりすると、攻撃者はコンテナーから脱出し、ホストへの root アクセス権を取得し、クラスター内のすべてのノードを制御できます。クラスター内での内部移動:Pod が侵害された後、攻撃者は
/var/run/secrets/kubernetes.io/serviceaccount/tokenにあるデフォルトでマウントされた ServiceAccount トークンを読み取ることができます。このトークンが高い権限 (例:cluster-admin) を持っている場合、攻撃者は Kubernetes API を呼び出して、シークレット、ConfigMap、Pod を列挙し、内部サービスにアクセスし、クラスターネットワークトポロジーを探索し、最終的にクラスターの完全な乗っ取りにつながる可能性があります。
セキュリティ強化のベストプラクティス
前述のリスクおよび攻撃経路に対処するため、防御の重層化(Defense in Depth)の原則に従ってください。AI アプリケーションのビルド、デプロイメント、実行時のライフサイクル全体にわたり、以下のセキュリティ対策を段階的に実施します。
フェーズ 1:ソフトウェアサプライチェーンの強化
悪意のあるコードが本番環境に流入することを防ぐため、イメージおよびモデルファイルのセキュリティをソース段階で制御します。
包括的なイメージスキャン
CI/CD パイプラインに ACR の コンテナイメージのセキュリティスキャン を統合します。この機能は Trivy スキャンエンジンおよび Security Center スキャンエンジンをサポートしており、システム脆弱性、アプリケーション脆弱性、ベースラインチェック、悪意あるサンプルの検出をカバーします。ブロッキングポリシーを設定して、公開されるイメージがベースラインのセキュリティ要件を満たすことを保証します。
モデルフォーマットの標準化と署名検証
モデルファイルによる任意コード実行のリスクを排除するため、モデル配信フォーマットを標準化し、信頼できる配布メカニズムを確立します。
安全なモデルフォーマット:本番環境では、
pickleフォーマットの使用を避けてください。代わりに、コード実行機能を持たないsafetensorsやONNXなどのフォーマットを使用します。これにより、デシリアライゼーション攻撃に対する攻撃対象領域が縮小されます。アーティファクトの署名検証:配信されるアーティファクトをデジタル署名し、デプロイメント時に署名検証を強制することで、エンドツーエンドの整合性を確保します。
コンテナイメージについては、ACR の コンテナイメージ署名 を使用して、ビルドから実行時までのイメージ整合性を検証します。
OCI 仕様に準拠した一般 AI アーティファクト(例:モデルファイルなど)については、Notation および Ratify を用いた OCI アーティファクトの署名・検証 を実施します。このプロセスでは、署名されていない、または不正に署名されたアーティファクトが自動的にブロックされるため、中間者攻撃(Man-in-the-Middle)による改ざんを効果的に防止できます。
最小限のベースイメージの使用
distroless ベースイメージ を使用します。これらのイメージには、アプリケーションの実行に必要な依存関係のみが含まれており、シェルやパッケージマネージャなどの不要なコンポーネントが削除されています。これにより攻撃対象領域が縮小され、攻撃者がコンテナ内でコマンドを実行したり、横方向に移動したりする能力が制限されます。
フェーズ 2:Kubernetes 実行環境の強化
最小権限の原則および強力な隔離メカニズムを活用し、コンテナが侵害された後に攻撃者が実行可能な操作を制限します。これにより、コンテナエスケープおよびクラスター内での横方向移動の経路を遮断できます。
Pod の Security Context (
securityContext) の構成ACK では、
restrictedポリシーなどの Kubernetes 組み込み Pod Security Standards を強制適用できます。Pod 定義内のsecurityContextを構成することで、高リスクの機能を体系的に無効化し、コンテナエスケープを困難にします。構成項目
推奨構成
説明
実行ユーザー
runAsUser: 1001runAsNonRoot: trueコンテナが root として実行されることを防止し、エスケープのリスクを低減します。
ファイルシステム
readOnlyRootFilesystem: trueルートファイルシステムを読み取り専用に設定し、攻撃者による悪意あるファイルの配置や設定変更を防止します。
カーネル機能
capabilities.drop: ["ALL"]不要な Linux 機能をすべて削除します。特権攻撃対象領域を縮小するため、必要に応じて
addを用いて明示的に機能を付与してください。ロールベースのアクセス制御(RBAC)の実装
ID 認証:Kubernetes RBAC を Alibaba Cloud RAM および STS と組み合わせます。これにより、一時的かつ詳細なクラウドリソースアクセス権限を Pod にバインドできます。資格情報の漏洩によるクラウドリソースの制御喪失リスクを低減するため、長期有効な AccessKey の使用は避けてください。
ServiceAccount の制限:各 AI アプリケーションごとに専用の ServiceAccount を作成し、
automountServiceAccountToken: falseを設定します。Kubernetes API を呼び出す場合は、volumeMountsを用いてトークンを明示的にマウントし、その範囲を特定の名前空間に限定します。これにより、資格情報の露出範囲が縮小されます。ポリシー管理:Gatekeeper アドミッションコントローラをデプロイし、OPA ポリシーライブラリ と組み合わせます。これにより、特権付きコンテナ、HostPath マウント、書き込み可能なルートファイルシステムなど、非準拠の構成がリソース作成時にリアルタイムで検知・ブロックされ、自動的かつ厳密に一貫したセキュリティポリシーを実現できます。
サンドボックス化コンテナおよびネットワーク隔離の有効化
サンドボックス隔離:信頼されていないサードパーティ製モデルや高リスクコードを実行するタスクには、サンドボックス化コンテナ を使用します。このソリューションは、軽量仮想マシンを用いて独立したカーネルおよびハードウェアレベルの隔離を提供します。これによりコンテナエスケープ経路が遮断され、高い隔離性が求められるシナリオに適しています。
ネットワークポリシー:
NetworkPolicyを構成し、default-denyポリシーを適用した上で、アプリケーションに必要な Pod 間通信のみを明示的に許可します。これにより、攻撃者がクラスター内で横方向に移動する能力が制限されます。サービスメッシュ: Service Mesh (ASM) を有効化し、そのサイドカープロキシを用いてサービス間の mTLS 暗号化通信および認証を実装します。これにより、プライベートネットワーク上での横方向のプロービングが遮断されます。
フェーズ 3:モニタリングおよび監査の実装
セキュリティイベントを検知・追跡可能にするため、エンドツーエンドのモニタリングおよび監査メカニズムを確立します。
実行時動作のモニタリング
ACK は Security Center と統合されており、リアルタイムの コンテナ保護 を提供します。これは、コンテナ内の異常な動作(以下を含む)を自動検出し、アラートを生成します。
悪意あるプロセスの起動:リバースシェル、ウェブシェル、マイニングプログラム、ランサムウェアなど、悪意あるプロセスまたは高リスクコマンドの実行を検出します。
疑わしいネットワーク接続:マイナー向けプールのポートや、業務に関係のないパブリック IP アドレスへのコンテナ接続を検出します。
資格情報の窃取:
/var/run/secrets/フォルダ内の ServiceAccount トークンなど、機密の資格情報ファイルへの予期しない読み取りアクセスを検出します。
エンドツーエンドのログ監査
ACK は API Server 監査 をサポートしており、すべての API 操作記録を Simple Log Service (SLS) へ送信します。これらのログを集約・分析することで、すべての API リクエストをトレースできます。以下の高リスク操作に特に注意してください。
SecretsおよびConfigMapsに対する読み取りリクエスト。コンテナ内へ進入するための
kubectl execコマンド。異常な RBAC 権限変更。