MCPcopy Index your code
hub / github.com/bytedance/vArmor

github.com/bytedance/vArmor @v0.10.3

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.10.3 ↗ · + Follow
1,672 symbols 4,676 edges 194 files 837 documented · 50%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README
    <img src="https://github.com/bytedance/vArmor/raw/v0.10.3/docs/img/logo-dark.svg" alt="Logo" width="400">

BHArsenalUSA2024 Go Report Card License License Latest release

English | 简体中文 | 日本語

紹介

vArmorは、LinuxのAppArmor LSMBPF 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以上
  1. AppArmor LSMが有効化されていること|GKE with Container-Optimized OS

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)

  1. containerd v1.6.0以上

  2. 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など

  • BPF LSMの手動有効化が必要です| |Seccomp |1. Kubernetes v1.19以上|すべてのLinuxディストリビューション|

ポリシーモードと組み込みルール

vArmorポリシーは、AlwaysAllow、RuntimeDefault、EnhanceProtect、BehaviorModeling、DefenseInDepthの5つのモードで動作します。ポリシーがEnhanceProtectモードで動作している場合、組み込みルールとカスタムインターフェースを使用してコンテナを強化できます。

詳細については、ポリシーモードと組み込みルールを参照してください。

クイックスタート

詳細な設定オプションと使用手順については、使用手順を参照してください。関連機能の使用方法とポリシーの作成方法を理解するために、を参照できます。また、policy-advisorを使用してポリシーテンプレートを生成し、それに基づいて最終的なポリシーを作成することもできます。

ステップ1. チャートの取得

helm pull oci://elkeid-ap-southeast-1.cr.volces.com/varmor/varmor --version 0.10.3

ステップ2. インストール

中国地域内では、ドメイン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"

ステップ3. この例を試してみてください

# デモ用の名前空間を作成
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

ステップ4. アンインストール

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から変更されています)

image

404Starlink

vArmorは404Starlinkに参加しています。

Extension points exported contracts — how you extend this code

ArmorProfileModelNamespaceLister (Interface)
ArmorProfileModelNamespaceLister helps list and get ArmorProfileModels. All objects returned here must be treated as rea [12 …
pkg/client/listers/varmor/v1beta1/armorprofilemodel.go
Interface (Interface)
(no doc)
internal/leaderelection/leaderelection.go
VarmorPolicyNamespaceLister (Interface)
VarmorPolicyNamespaceLister helps list and get VarmorPolicies. All objects returned here must be treated as read-only. [12 …
pkg/client/listers/varmor/v1beta1/varmorpolicy.go
ArmorProfileNamespaceLister (Interface)
ArmorProfileNamespaceLister helps list and get ArmorProfiles. All objects returned here must be treated as read-only. [12 …
pkg/client/listers/varmor/v1beta1/armorprofile.go
VarmorClusterPolicyLister (Interface)
VarmorClusterPolicyLister helps list VarmorClusterPolicies. All objects returned here must be treated as read-only. [12 …
pkg/client/listers/varmor/v1beta1/varmorclusterpolicy.go
ArmorProfileModelInterface (Interface)
ArmorProfileModelInterface has methods to work with ArmorProfileModel resources. [8 implementers]
pkg/client/clientset/versioned/typed/varmor/v1beta1/armorprofilemodel.go

Core symbols most depended-on inside this repo

TranslateEgressRules
called by 87
internal/networkproxy/profile/translator.go
Get
called by 55
pkg/client/listers/varmor/v1beta1/varmorpolicy.go
setBpfCapabilityRule
called by 47
internal/profile/bpf/rule.go
newBpfPathRule
called by 42
internal/profile/bpf/rule.go
Run
called by 37
internal/leaderelection/leaderelection.go
List
called by 28
pkg/client/listers/varmor/v1beta1/varmorpolicy.go
GenerateCA
called by 28
internal/networkproxy/mitm/ca.go
ArmorProfiles
called by 27
pkg/client/listers/varmor/v1beta1/armorprofile.go

Shape

Function 728
Method 649
Struct 238
Interface 38
TypeAlias 13
FuncType 3
Route 2
Class 1

Languages

Go97%
TypeScript1%
Python1%
C1%

Modules by API surface

apis/varmor/v1beta1/zz_generated.deepcopy.go152 symbols
internal/networkproxy/profile/translator_test.go84 symbols
internal/networkproxy/profile/translator.go50 symbols
internal/policy/validate_test.go43 symbols
internal/auditor/als_test.go25 symbols
internal/networkproxy/profile/renderer.go24 symbols
pkg/client/clientset/versioned/typed/varmor/v1beta1/varmorpolicy.go23 symbols
pkg/client/clientset/versioned/typed/varmor/v1beta1/varmorclusterpolicy.go23 symbols
pkg/client/clientset/versioned/typed/varmor/v1beta1/armorprofilemodel.go23 symbols
pkg/client/clientset/versioned/typed/varmor/v1beta1/armorprofile.go23 symbols
website/src/pages/policy-advisor.js22 symbols
pkg/client/informers/externalversions/factory.go20 symbols

For agents

$ claude mcp add vArmor \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact