<img src="https://github.com/bytedance/vArmor/raw/v0.10.3/docs/img/logo-dark.svg" alt="Logo" width="400">
vArmorは、LinuxのAppArmor LSM、BPF LSM、およびSeccomp技術を活用して、強制アクセス制御を実装するクラウドネイティブなコンテナサンドボックスシステムです。これにより、コンテナの隔離を強化し、カーネルの攻撃面を減らし、コンテナのエスケープや横移動攻撃の難易度とコストを増加させることができます。vArmorは、以下のシナリオでKubernetesクラスター内のコンテナにサンドボックス保護を提供するために使用できます。 * マルチテナント環境では、コストや技術的条件などの要因により、ハードウェア仮想化コンテナソリューションを使用できません。 * 重要なビジネスコンテナのセキュリティを強化し、攻撃者が特権をエスカレートしたり、エスケープしたり、横移動するのを困難にする必要がある場合。 * 高リスクの脆弱性が存在するが、パッチ適用が難しいまたは時間がかかるため、即座に修正できない場合に、vArmorを使用してリスクを軽減し、攻撃の難易度を増加させることができます(脆弱性の種類や攻撃ベクトルに依存します)。
vArmorの特徴: * クラウドネイティブ。vArmorはKubernetes Operator設計パターンに従い、ユーザーがCRD APIを操作して特定のワークロードを強化できるようにします。このアプローチにより、ビジネスニーズに密接に関連した視点から、コンテナ化されたマイクロサービスのサンドボックス化が可能になります。 * AppArmor、BPF、Seccompエンフォーサーを個別または組み合わせて使用し、コンテナのファイルアクセス、プロセス実行、ネットワーク外部接続、システムコールなどに強制アクセス制御を実施します。 * Allow by Defaultセキュリティモデルをサポートし、明示的に宣言された動作のみがブロックされるため、パフォーマンスへの影響を最小限に抑え、使いやすさを向上させます。 * 行動モデリングをサポートし、行動モデルに基づいて保護を提供します。これにより、明示的に宣言された動作のみが許可されます。 * すぐに使用可能。vArmorには、直接使用できる複数の組み込みルールが含まれています。
vArmorは、ByteDanceのエンドポイントセキュリティ部門のElkeid Teamによって作成されました。プロジェクトは現在も積極的に開発中です。
注意: 厳格な隔離要件を満たすためには、計算隔離のためにハードウェア仮想化コンテナ(例:Kata Containers)を優先的に使用し、CNIのNetworkPolicyによるネットワーク隔離と組み合わせることをお勧めします。
ポリシーオブジェクト(VarmorPolicy/VarmorClusterPolicy)のspec.policy.enforcerフィールドを使用してエンフォーサーを指定できます。さらに、異なるエンフォーサーを個別または組み合わせて使用することもできます。例:AppArmorBPF、AppArmorSeccomp、AppArmorBPFSeccompなど。
異なるエンフォーサーに必要な前提条件は以下の表に示されています。
| エンフォーサー | 要件 | 推奨 |
|---|---|---|
| AppArmor | 1. Linux Kernel 4.15以上 |
AKS with Ubuntu 22.04 LTS
VKE with veLinux 1.0
Debian 10以上
Ubuntu 18.04.0 LTS以上
veLinux 1.0など| |BPF |1. Linux Kernel 5.10以上 (x86_64)
containerd v1.6.0以上
BPF LSMが有効化されていること|EKS with Amazon Linux 2
GKE with Container-Optimized OS
VKE with veLinux 1.0 (with 5.10 kernel)
AKS with Ubuntu 22.04 LTS *
ACK with Alibaba Cloud Linux 3 *
OpenSUSE 15.4 *
Debian 11 *
Fedora 37
veLinux 1.0 with 5.10 kernelなど
vArmorポリシーは、AlwaysAllow、RuntimeDefault、EnhanceProtect、BehaviorModeling、DefenseInDepthの5つのモードで動作します。ポリシーがEnhanceProtectモードで動作している場合、組み込みルールとカスタムインターフェースを使用してコンテナを強化できます。
詳細については、ポリシーモードと組み込みルールを参照してください。
詳細な設定オプションと使用手順については、使用手順を参照してください。関連機能の使用方法とポリシーの作成方法を理解するために、例を参照できます。また、policy-advisorを使用してポリシーテンプレートを生成し、それに基づいて最終的なポリシーを作成することもできます。
helm pull oci://elkeid-ap-southeast-1.cr.volces.com/varmor/varmor --version 0.10.3
中国地域内では、ドメインelkeid-cn-beijing.cr.volces.comを使用できます。
helm install varmor varmor-0.10.3.tgz \
--namespace varmor --create-namespace \
--set image.registry="elkeid-ap-southeast-1.cr.volces.com"
# デモ用の名前空間を作成
kubectl create namespace demo
# VarmorPolicyオブジェクトを作成し、.spec.target.selectorに一致するDeploymentにAlwaysAllowモードのサンドボックスを有効にする
kubectl create -f test/examples/1-apparmor/vpol-apparmor-alwaysallow.yaml
# VarmorPolicy & ArmorProfileオブジェクトのステータスを表示
kubectl get VarmorPolicy -n demo
kubectl get ArmorProfile -n demo
# 対象のDeploymentオブジェクトを作成
kubectl create -f test/examples/1-apparmor/deploy.yaml
# 対象のDeploymentオブジェクトのPod名を取得
POD_NAME=$(kubectl get Pods -n demo -l app=demo-1 -o name)
# コンテナc1でコマンドを実行してシークレットトークンを読み取る
kubectl exec -n demo $POD_NAME -c c1 -- cat /run/secrets/kubernetes.io/serviceaccount/token
# VarmorPolicyオブジェクトを更新して、コンテナc1がシークレットトークンを読み取るのを禁止する
kubectl apply -f test/examples/1-apparmor/vpol-apparmor-enhance.yaml
# コンテナc1でコマンドを実行してシークレットトークンを読み取ることが禁止されていることを確認
kubectl exec -n demo $POD_NAME -c c1 -- cat /run/secrets/kubernetes.io/serviceaccount/token
# VarmorPolicyおよびDeploymentオブジェクトを削除
kubectl delete -f test/examples/1-apparmor/vpol-apparmor-alwaysallow.yaml
kubectl delete -f test/examples/1-apparmor/deploy.yaml
helm uninstall varmor -n varmor
このドキュメントを参照してください。
vArmorプロジェクトはApache 2.0ライセンスの下でライセンスされていますが、サードパーティコンポーネントは異なるライセンス条件に従います。コードファイルのコードヘッダー情報を参照してください。
vArmorを独自のプロジェクトに統合する場合、Apache 2.0ライセンスおよびvArmorに含まれるサードパーティコンポーネントに適用される他のライセンスに準拠する必要があります。
eBPFコードはvArmor-ebpfにあり、GPL-2.0ライセンスの下でライセンスされています。
vArmorは、eBPFプログラムを管理および操作するためにcilium/ebpfを使用します。
vArmorは、Nirmataによって開発されたkyvernoの一部のコードを参照しています。
以下は、vArmorを使用してDeploymentを強化し、CVE-2021-22555に対抗するデモンストレーションです。(エクスプロイトはcve-2021-22555から変更されています)


vArmorは404Starlinkに参加しています。
$ claude mcp add vArmor \
-- python -m otcore.mcp_server <graph>