Kubernetes Hardening

Reading time: 13 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

Tools to analyse a cluster

**Steampipe - Kubernetes Compliance

Kubernetesクラスターに対していくつかのコンプライアンスチェックを行います。CIS、国家安全保障局(NSA)、およびサイバーセキュリティおよびインフラストラクチャセキュリティ局(CISA)のKubernetesハードニングに関するサイバーセキュリティ技術報告のサポートが含まれています。

bash
# Install Steampipe
brew install turbot/tap/powerpipe
brew install turbot/tap/steampipe
steampipe plugin install kubernetes

# Start the service
steampipe service start

# Install the module
mkdir dashboards
cd dashboards
powerpipe mod init
powerpipe mod install github.com/turbot/steampipe-mod-kubernetes-compliance

# Run the module
powerpipe server

Kubescape

Kubescape は、リスク分析、セキュリティコンプライアンス、RBACビジュアライザー、イメージ脆弱性スキャンを含む、マルチクラウドK8sのシングルペインオブグラスを提供するK8sオープンソースツールです。KubescapeはK8sクラスター、YAMLファイル、HELMチャートをスキャンし、NSA-CISAMITRE ATT&CK® などの複数のフレームワークに基づいて、誤設定、ソフトウェアの脆弱性、RBAC(ロールベースアクセス制御)違反をCI/CDパイプラインの初期段階で検出し、リスクスコアを即座に計算し、時間の経過に伴うリスクの傾向を表示します。

bash
curl -s https://raw.githubusercontent.com/kubescape/kubescape/master/install.sh | /bin/bash
kubescape scan --verbose

Popeye

Popeye は、ライブKubernetesクラスターをスキャンし、デプロイされたリソースと構成に関する潜在的な問題を報告するユーティリティです。ディスク上にあるものではなく、デプロイされているものに基づいてクラスターをサニタイズします。クラスターをスキャンすることで、誤った構成を検出し、ベストプラクティスが実施されていることを確認する手助けをし、将来の頭痛を防ぎます。Kubernetesクラスターを運用する際に直面する認知的_オーバーロードを軽減することを目指しています。さらに、クラスターがメトリックサーバーを使用している場合、リソースの過剰/不足割り当てを報告し、クラスターの容量が不足する場合には警告を試みます。

Kube-bench

ツールkube-benchは、CIS Kubernetes Benchmarkに文書化されたチェックを実行することで、Kubernetesが安全にデプロイされているかどうかを確認するツールです。
次のように選択できます:

  • コンテナ内からkube-benchを実行する(ホストとPID名前空間を共有)
  • ホストにkube-benchをインストールするコンテナを実行し、その後ホスト上でkube-benchを直接実行する
  • Releases pageから最新のバイナリをインストールする
  • ソースからコンパイルする。

Kubeaudit

[非推奨] ツールkubeauditは、さまざまなセキュリティ上の懸念に対してKubernetesクラスターを監査するコマンドラインツールおよびGoパッケージです。

Kubeauditは、クラスター内のコンテナ内で実行されているかどうかを検出できます。そうであれば、そのクラスター内のすべてのKubernetesリソースを監査しようとします:

kubeaudit all

このツールには、検出された問題を自動的に修正するための引数autofixもあります。

Kube-hunter

[非推奨] ツールkube-hunterは、Kubernetesクラスターのセキュリティの弱点を探します。このツールは、Kubernetes環境におけるセキュリティ問題への認識と可視性を高めるために開発されました。

bash
kube-hunter --remote some.node.com

Trivy

Trivy はセキュリティ問題を探すスキャナーを持ち、問題を見つけることができるターゲットがあります:

  • コンテナイメージ
  • ファイルシステム
  • Gitリポジトリ(リモート)
  • 仮想マシンイメージ
  • Kubernetes

Kubei

[メンテナンスされていないようです]

Kubei は脆弱性スキャンとCIS Dockerベンチマークツールで、ユーザーがKubernetesクラスターの正確で即時のリスク評価を得ることを可能にします。Kubeiは、アプリケーションポッドとシステムポッドのイメージを含む、Kubernetesクラスターで使用されているすべてのイメージをスキャンします。

KubiScan

KubiScan は、Kubernetesのロールベースアクセス制御(RBAC)認可モデルにおけるリスクのある権限をスキャンするためのツールです。

Managed Kubernetes Auditing Toolkit

Mkat は、他のツールと比較して高リスクチェックの他のタイプをテストするために構築されたツールです。主に3つの異なるモードがあります:

  • find-role-relationships: どのAWSロールがどのポッドで実行されているかを見つけます
  • find-secrets: Pods、ConfigMaps、SecretsなどのK8sリソース内のシークレットを特定しようとします。
  • test-imds-access: ポッドを実行し、メタデータv1およびv2にアクセスしようとします。警告:これはクラスター内でポッドを実行しますので、注意してください。これを行いたくないかもしれません!

IaCコードの監査

KICS

KICS は、以下のInfrastructure as Codeソリューションにおけるセキュリティ脆弱性、コンプライアンス問題、およびインフラストラクチャの誤設定を見つけます:Terraform、Kubernetes、Docker、AWS CloudFormation、Ansible、Helm、Microsoft ARM、およびOpenAPI 3.0仕様

Checkov

Checkov は、インフラストラクチャ・アズ・コードのための静的コード分析ツールです。

Terraform、Terraformプラン、CloudformationAWS SAMKubernetesDockerfileServerless または ARM Templates を使用してプロビジョニングされたクラウドインフラストラクチャをスキャンし、グラフベースのスキャンを使用してセキュリティとコンプライアンスの誤設定を検出します。

Kube-score

kube-score は、Kubernetesオブジェクト定義の静的コード分析を行うツールです。

インストール方法:

ディストリビューションコマンド / リンク
macOS、Linux、Windows用のプリビルドバイナリGitHubリリース
Dockerdocker pull zegl/kube-score (Docker Hub)
Homebrew (macOSおよびLinux)brew install kube-score
Krew (macOSおよびLinux)kubectl krew install score

ヒント

Kubernetes PodSecurityContextとSecurityContext

PodのセキュリティコンテキストPodSecurityContext)と実行されるコンテナのセキュリティコンテキスト(SecurityContext)を構成できます。詳細については、次をお読みください:

Kubernetes SecurityContext(s)

Kubernetes APIの強化

Kubernetes Api Serverへのアクセスを保護することは非常に重要です。十分な権限を持つ悪意のある行為者がそれを悪用し、環境に多くの方法で損害を与える可能性があります。
アクセス(APIサーバーにアクセスするためのオリジンをホワイトリストし、他の接続を拒否する)と認証最小限の権限の原則に従う)を確保することが重要です。そして、決して 匿名 リクエスト許可しないでください。

一般的なリクエストプロセス:
ユーザーまたはK8s ServiceAccount –> 認証 –> 認可 –> 受け入れ制御。

ヒント

  • ポートを閉じる。
  • 匿名アクセスを避ける。
  • NodeRestriction; 特定のノードからAPIへのアクセスを制限。
  • https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction
  • 基本的に、kubeletがnode-restriction.kubernetes.io/プレフィックスを持つラベルを追加/削除/更新するのを防ぎます。このラベルプレフィックスは、管理者がワークロードの分離目的でノードオブジェクトにラベルを付けるために予約されており、kubeletはそのプレフィックスを持つラベルを変更することは許可されません。
  • また、kubeletがこれらのラベルとラベルプレフィックスを追加/削除/更新することを許可します。
  • ラベルを使用して安全なワークロードの分離を確保します。
  • 特定のポッドがAPIアクセスを避ける。
  • ApiServerをインターネットに露出させない。
  • 認可されていないアクセスRBACを避ける。
  • ファイアウォールとIPホワイトリストを使用したApiServerポート。

SecurityContextの強化

デフォルトでは、他のユーザーが指定されていない場合、Podが起動するときにrootユーザーが使用されます。次のようなテンプレートを使用して、より安全なコンテキスト内でアプリケーションを実行できます:

yaml
apiVersion: v1
kind: Pod
metadata:
name: security-context-demo
spec:
securityContext:
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
volumes:
- name: sec-ctx-vol
emptyDir: {}
containers:
- name: sec-ctx-demo
image: busybox
command: [ "sh", "-c", "sleep 1h" ]
securityContext:
runAsNonRoot: true
volumeMounts:
- name: sec-ctx-vol
mountPath: /data/demo
securityContext:
allowPrivilegeEscalation: true

一般的なハードニング

Kubernetes 環境は、次のように必要に応じて頻繁に更新する必要があります。

  • 依存関係を最新の状態に保つ。
  • バグとセキュリティパッチ。

リリースサイクル: 3ヶ月ごとに新しいマイナーリリースがあります -- 1.20.3 = 1(メジャー).20(マイナー).3(パッチ)

Kubernetes クラスターを更新する最良の方法は (こちらから) こちら:

  • マスターノードコンポーネントを次の順序でアップグレードします。
  • etcd (すべてのインスタンス)。
  • kube-apiserver (すべてのコントロールプレーンホスト)。
  • kube-controller-manager。
  • kube-scheduler。
  • クラウドコントローラーマネージャー (使用している場合)。
  • kube-proxy、kubelet などのワーカーノードコンポーネントをアップグレードします。

Kubernetes の監視とセキュリティ:

  • Kyverno ポリシーエンジン
  • Cilium Tetragon - eBPF ベースのセキュリティ可視化とランタイム強制
  • ネットワークセキュリティポリシー
  • Falco - ランタイムセキュリティ監視と検出

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする