Kubernetes Hardening

Support HackTricks

クラスターを分析するためのツール

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

kubescape scan --verbose

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

  • コンテナ内から kube-bench を実行する(ホストと PID 名前空間を共有)

  • ホストに kube-bench をインストールするコンテナを実行し、その後ホスト上で直接 kube-bench を実行する

  • Releases page から最新のバイナリをインストールする

  • ソースからコンパイルする。

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

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

kubeaudit all

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

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

kube-hunter --remote some.node.com

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

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

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

  • find-role-relationships: どの AWS ロールがどのポッドで実行されているかを見つけます

  • find-secrets: Pods、ConfigMaps、Secrets などの K8s リソース内の秘密を特定しようとします。

  • test-imds-access: ポッドを実行し、メタデータ v1 および v2 にアクセスしようとします。警告:これはクラスター内でポッドを実行しますので、注意してください。これを行いたくないかもしれません!

IaC コードの監査

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

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

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

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

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

インストール方法:

ヒント

Kubernetes PodSecurityContext と SecurityContext

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

Kubernetes API ハードニング

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

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

ヒント

  • ポートを閉じる。

  • 匿名アクセスを避ける。

  • NodeRestriction; 特定のノードから API へのアクセスを制限する。

  • 基本的に、kubelet が node-restriction.kubernetes.io/ プレフィックスを持つラベルを追加/削除/更新するのを防ぎます。このラベルプレフィックスは、管理者がワークロードの分離目的でノードオブジェクトにラベルを付けるために予約されており、kubelet はそのプレフィックスを持つラベルを変更することは許可されません。

  • また、kubelet がこれらのラベルおよびラベルプレフィックスを追加/削除/更新することを許可します。

  • ラベルを使用して安全なワークロードの分離を確保します。

  • 特定のポッドが API アクセスを避けるようにします。

  • ApiServer をインターネットにさらさないようにします。

  • 認可されていないアクセス RBAC を避けます。

  • ファイアウォールと IP ホワイトリストを使用した ApiServer ポート。

SecurityContext ハードニング

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

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 などのワーカーノードコンポーネントをアップグレードします。

HackTricksをサポートする

Last updated