diff --git a/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/README.md b/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/README.md index 4fd2f189f..472d872e7 100644 --- a/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/README.md +++ b/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/README.md @@ -1,12 +1,12 @@ -# Kubernetes Hardening +# Kubernetes ハードニング {{#include ../../../banners/hacktricks-training.md}} -## Tools to analyse a cluster +## クラスター解析ツール -### [**Steampipe - Kubernetes Compliance](https://github.com/turbot/steampipe-mod-kubernetes-compliance) +### [Steampipe - Kubernetes Compliance](https://github.com/turbot/steampipe-mod-kubernetes-compliance) -Kubernetesクラスターに対して**いくつかのコンプライアンスチェックを行います**。CIS、国家安全保障局(NSA)、およびサイバーセキュリティおよびインフラストラクチャセキュリティ局(CISA)のKubernetesハードニングに関するサイバーセキュリティ技術報告のサポートが含まれています。 +これは **Kubernetes クラスターに対する複数のコンプライアンスチェック** を実行します。CIS、National Security Agency (NSA)、および Cybersecurity and Infrastructure Security Agency (CISA) の Kubernetes ハードニングに関するサイバーセキュリティ技術レポートをサポートしています。 ```bash # Install Steampipe brew install turbot/tap/powerpipe @@ -27,44 +27,44 @@ powerpipe server ``` ### [**Kubescape**](https://github.com/armosec/kubescape) -[**Kubescape**](https://github.com/armosec/kubescape) は、リスク分析、セキュリティコンプライアンス、RBACビジュアライザー、イメージ脆弱性スキャンを含む、マルチクラウドK8sのシングルペインオブグラスを提供するK8sオープンソースツールです。KubescapeはK8sクラスター、YAMLファイル、HELMチャートをスキャンし、[NSA-CISA](https://www.armosec.io/blog/kubernetes-hardening-guidance-summary-by-armo) や [MITRE ATT\&CK®](https://www.microsoft.com/security/blog/2021/03/23/secure-containerized-environments-with-updated-threat-matrix-for-kubernetes/) などの複数のフレームワークに基づいて、誤設定、ソフトウェアの脆弱性、RBAC(ロールベースアクセス制御)違反をCI/CDパイプラインの初期段階で検出し、リスクスコアを即座に計算し、時間の経過に伴うリスクの傾向を表示します。 +[**Kubescape**](https://github.com/armosec/kubescape) は、リスク分析、セキュリティコンプライアンス、RBAC ビジュアライザ、イメージ脆弱性スキャンなどを含むマルチクラウド対応の K8s 向けオープンソースツールで、K8s の single pane of glass(一元管理画面)を提供します。 Kubescape は K8s クラスター、YAML ファイル、HELM チャートをスキャンし、複数のフレームワーク(例えば [NSA-CISA](https://www.armosec.io/blog/kubernetes-hardening-guidance-summary-by-armo) 、[MITRE ATT\&CK®](https://www.microsoft.com/security/blog/2021/03/23/secure-containerized-environments-with-updated-threat-matrix-for-kubernetes/))に基づくミスコンフィギュレーション、ソフトウェア脆弱性、および CI/CD パイプラインの早期段階での RBAC (role-based-access-control) 違反を検出し、リスクスコアを即座に算出して時間経過によるリスク傾向を表示します。 ```bash curl -s https://raw.githubusercontent.com/kubescape/kubescape/master/install.sh | /bin/bash kubescape scan --verbose ``` ### [**Popeye**](https://github.com/derailed/popeye) -[**Popeye**](https://github.com/derailed/popeye) は、ライブKubernetesクラスターをスキャンし、**デプロイされたリソースと構成に関する潜在的な問題を報告する**ユーティリティです。ディスク上にあるものではなく、デプロイされているものに基づいてクラスターをサニタイズします。クラスターをスキャンすることで、誤った構成を検出し、ベストプラクティスが実施されていることを確認する手助けをし、将来の頭痛を防ぎます。Kubernetesクラスターを運用する際に直面する認知的\_オーバーロードを軽減することを目指しています。さらに、クラスターがメトリックサーバーを使用している場合、リソースの過剰/不足割り当てを報告し、クラスターの容量が不足する場合には警告を試みます。 +[**Popeye**](https://github.com/derailed/popeye) はライブの Kubernetes クラスタをスキャンし、 **デプロイされたリソースと設定に関する潜在的な問題を報告** するユーティリティです。これはディスク上にあるものではなく、デプロイされている内容に基づいてクラスタをサニタイズします。クラスタをスキャンすることで設定ミスを検出し、ベストプラクティスが適用されていることを確認する手助けをし、将来的な問題を防ぎます。これは、実際に Kubernetes クラスタを運用する際に直面する認知的\_over_load を軽減することを目的としています。さらに、クラスタが metric-server を使用している場合、リソースの過剰/不足割り当ての可能性を報告し、クラスタの容量が不足しそうな場合には警告を試みます。 ### [**Kube-bench**](https://github.com/aquasecurity/kube-bench) -ツール[**kube-bench**](https://github.com/aquasecurity/kube-bench)は、[**CIS Kubernetes Benchmark**](https://www.cisecurity.org/benchmark/kubernetes/)に文書化されたチェックを実行することで、Kubernetesが安全にデプロイされているかどうかを確認するツールです。\ -次のように選択できます: +ツール [**kube-bench**](https://github.com/aquasecurity/kube-bench) は、[**CIS Kubernetes Benchmark**](https://www.cisecurity.org/benchmark/kubernetes/) に記載されたチェックを実行することで、Kubernetes が安全にデプロイされているかを検証するツールです。\ +You can choose to: -- コンテナ内からkube-benchを実行する(ホストとPID名前空間を共有) -- ホストにkube-benchをインストールするコンテナを実行し、その後ホスト上でkube-benchを直接実行する -- [Releases page](https://github.com/aquasecurity/kube-bench/releases)から最新のバイナリをインストールする +- コンテナ内から kube-bench を実行する(ホストと PID namespace を共有) +- ホストに kube-bench をインストールするコンテナを実行し、その後ホスト上で直接 kube-bench を実行する +- 最新のバイナリを [Releases page](https://github.com/aquasecurity/kube-bench/releases) からインストールする、 - ソースからコンパイルする。 ### [**Kubeaudit**](https://github.com/Shopify/kubeaudit) -**[非推奨]** ツール[**kubeaudit**](https://github.com/Shopify/kubeaudit)は、さまざまなセキュリティ上の懸念に対して**Kubernetesクラスターを監査する**コマンドラインツールおよびGoパッケージです。 +**[DEPRECATED]** ツール [**kubeaudit**](https://github.com/Shopify/kubeaudit) は、さまざまなセキュリティ上の懸念に対して **Kubernetes クラスタを監査する** コマンドラインツールおよび Go パッケージです。 -Kubeauditは、クラスター内のコンテナ内で実行されているかどうかを検出できます。そうであれば、そのクラスター内のすべてのKubernetesリソースを監査しようとします: +Kubeaudit は、クラスタ内のコンテナ内で実行されているかどうかを検出できます。もしそうであれば、そのクラスタ内のすべての Kubernetes リソースを監査しようとします: ``` kubeaudit all ``` -このツールには、検出された問題を**自動的に修正する**ための引数`autofix`もあります。 +このツールには `autofix` 引数もあり、検出された問題を**自動的に修正します。** ### [**Kube-hunter**](https://github.com/aquasecurity/kube-hunter) -**[非推奨]** ツール[**kube-hunter**](https://github.com/aquasecurity/kube-hunter)は、Kubernetesクラスターのセキュリティの弱点を探します。このツールは、Kubernetes環境におけるセキュリティ問題への認識と可視性を高めるために開発されました。 +**[非推奨]** ツール [**kube-hunter**](https://github.com/aquasecurity/kube-hunter) は Kubernetes クラスターのセキュリティ上の弱点を探索します。 このツールは Kubernetes 環境におけるセキュリティ問題への認識と可視性を高めるために開発されました。 ```bash kube-hunter --remote some.node.com ``` ### [Trivy](https://github.com/aquasecurity/trivy) -[Trivy](https://github.com/aquasecurity/trivy) はセキュリティ問題を探すスキャナーを持ち、問題を見つけることができるターゲットがあります: +[Trivy](https://github.com/aquasecurity/trivy) はセキュリティ問題を検出するスキャナを備えており、以下のターゲットでそれらの問題を検出できます: - コンテナイメージ - ファイルシステム @@ -75,82 +75,127 @@ kube-hunter --remote some.node.com ### [**Kubei**](https://github.com/Erezf-p/kubei) -**[メンテナンスされていないようです]** +**メンテナンスされていないように見える** -[**Kubei**](https://github.com/Erezf-p/kubei) は脆弱性スキャンとCIS Dockerベンチマークツールで、ユーザーがKubernetesクラスターの正確で即時のリスク評価を得ることを可能にします。Kubeiは、アプリケーションポッドとシステムポッドのイメージを含む、Kubernetesクラスターで使用されているすべてのイメージをスキャンします。 +[**Kubei**](https://github.com/Erezf-p/kubei) は脆弱性スキャンおよびCIS Dockerベンチマークツールで、ユーザーがKubernetesクラスターの正確かつ即時のリスク評価を得られるようにします。KubeiはアプリケーションPodおよびシステムPodのイメージを含め、Kubernetesクラスター内で使用されているすべてのイメージをスキャンします。 ### [**KubiScan**](https://github.com/cyberark/KubiScan) -[**KubiScan**](https://github.com/cyberark/KubiScan) は、Kubernetesのロールベースアクセス制御(RBAC)認可モデルにおけるリスクのある権限をスキャンするためのツールです。 +[**KubiScan**](https://github.com/cyberark/KubiScan) はKubernetesのRole-based access control (RBAC) 認可モデルにおける危険な権限をスキャンするためのツールです。 ### [Managed Kubernetes Auditing Toolkit](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) -[**Mkat**](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) は、他のツールと比較して高リスクチェックの他のタイプをテストするために構築されたツールです。主に3つの異なるモードがあります: +[**Mkat**](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) は他のツールと比較して別種の高リスクチェックをテストするために作られたツールです。主に3つのモードがあります: -- **`find-role-relationships`**: どのAWSロールがどのポッドで実行されているかを見つけます -- **`find-secrets`**: Pods、ConfigMaps、SecretsなどのK8sリソース内のシークレットを特定しようとします。 -- **`test-imds-access`**: ポッドを実行し、メタデータv1およびv2にアクセスしようとします。警告:これはクラスター内でポッドを実行しますので、注意してください。これを行いたくないかもしれません! +- **`find-role-relationships`**: どのAWSロールがどのPodで動作しているかを見つけます +- **`find-secrets`**: Pods、ConfigMaps、SecretsなどのK8sリソース内のシークレットを特定しようとします +- **`test-imds-access`**: Podを実行してmetadata v1およびv2にアクセスしようとします。警告: これによりクラスター内でPodが実行されます。実行したくない可能性があるため、十分注意してください! ## **IaCコードの監査** ### [**KICS**](https://github.com/Checkmarx/kics) -[**KICS**](https://github.com/Checkmarx/kics) は、以下の**Infrastructure as Codeソリューション**における**セキュリティ脆弱性**、コンプライアンス問題、およびインフラストラクチャの誤設定を見つけます:Terraform、Kubernetes、Docker、AWS CloudFormation、Ansible、Helm、Microsoft ARM、およびOpenAPI 3.0仕様 +[**KICS**](https://github.com/Checkmarx/kics) は以下のInfrastructure as Codeソリューションにおけるセキュリティ脆弱性、コンプライアンスの問題、およびインフラ設定ミスを検出します: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM, and OpenAPI 3.0 specifications ### [**Checkov**](https://github.com/bridgecrewio/checkov) -[**Checkov**](https://github.com/bridgecrewio/checkov) は、インフラストラクチャ・アズ・コードのための静的コード分析ツールです。 +[**Checkov**](https://github.com/bridgecrewio/checkov) はinfrastructure-as-code向けの静的コード解析ツールです。 -[Terraform](https://terraform.io)、Terraformプラン、[Cloudformation](https://aws.amazon.com/cloudformation/)、[AWS SAM](https://aws.amazon.com/serverless/sam/)、[Kubernetes](https://kubernetes.io)、[Dockerfile](https://www.docker.com)、[Serverless](https://www.serverless.com) または [ARM Templates](https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) を使用してプロビジョニングされたクラウドインフラストラクチャをスキャンし、グラフベースのスキャンを使用してセキュリティとコンプライアンスの誤設定を検出します。 +[Terraform](https://terraform.io)、Terraform plan、[Cloudformation](https://aws.amazon.com/cloudformation/)、[AWS SAM](https://aws.amazon.com/serverless/sam/)、[Kubernetes](https://kubernetes.io)、[Dockerfile](https://www.docker.com)、[Serverless](https://www.serverless.com) または [ARM Templates](https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) を使ってプロビジョニングされたクラウドインフラをスキャンし、グラフベースのスキャンでセキュリティおよびコンプライアンスの設定ミスを検出します。 ### [**Kube-score**](https://github.com/zegl/kube-score) -[**kube-score**](https://github.com/zegl/kube-score) は、Kubernetesオブジェクト定義の静的コード分析を行うツールです。 +[**kube-score**](https://github.com/zegl/kube-score) はKubernetesオブジェクト定義の静的コード解析を行うツールです。 -インストール方法: +インストール方法: -| ディストリビューション | コマンド / リンク | -| --------------------------------------------------- | --------------------------------------------------------------------------------------- | -| macOS、Linux、Windows用のプリビルドバイナリ | [GitHubリリース](https://github.com/zegl/kube-score/releases) | -| Docker | `docker pull zegl/kube-score` ([Docker Hub)](https://hub.docker.com/r/zegl/kube-score/) | -| Homebrew (macOSおよびLinux) | `brew install kube-score` | -| [Krew](https://krew.sigs.k8s.io/) (macOSおよびLinux) | `kubectl krew install score` | +| 配布 / ディストリビューション | コマンド / リンク | +| ----------------------------------------------------- | ----------------------------------------------------------------------------------------- | +| macOS、Linux、Windows用の事前ビルドバイナリ | [GitHub releases](https://github.com/zegl/kube-score/releases) | +| Docker | `docker pull zegl/kube-score` ([Docker Hub)](https://hub.docker.com/r/zegl/kube-score/) | +| Homebrew(macOSおよびLinux) | `brew install kube-score` | +| [Krew](https://krew.sigs.k8s.io/)(macOSおよびLinux) | `kubectl krew install score` | +## YAMLファイルとHelmチャートを解析するツール + +### [**Kube-linter**](https://github.com/stackrox/kube-linter) +```bash +# Install Kube-linter +brew install kube-linter + +# Run Kube-linter +## lint ./path/to/yaml/or/chart +``` +### [Checkov](https://github.com/bridgecrewio/checkov) +```bash +# Install Checkov +pip install checkov + +# Run Checkov +checkov -d ./path/to/yaml/or/chart +``` +### [kube‑score](https://github.com/zegl/kube-score) +```bash +# Install kube-score +brew install kube-score + +# Run kube-score +kube-score score ./path/to/yaml +# or +helm template chart /path/to/chart | kube-score score - +# or if the chart needs some values +helm template chart /path/to/chart \ +--set 'config.urls[0]=https://dummy.backend.internal' \ +| kube-score score - +``` +### [Kubesec](https://github.com/controlplaneio/kubesec) +```bash +# Install Kubesec +## Download from https://github.com/controlplaneio/kubesec/releases + +# Run Kubesec in a yaml +kubesec scan ./path/to/yaml +# or +helm template chart /path/to/chart | kubesec scan - +# or if the chart needs some values +helm template chart /path/to/chart \ +--set 'config.urls[0]=https://dummy.backend.internal' \ +| kubesec scan - +``` ## ヒント -### Kubernetes PodSecurityContextとSecurityContext +### Kubernetes PodSecurityContext と SecurityContext -**Podのセキュリティコンテキスト**(_PodSecurityContext_)と実行される**コンテナ**のセキュリティコンテキスト(_SecurityContext_)を構成できます。詳細については、次をお読みください: +Pod の **セキュリティコンテキスト** は _PodSecurityContext_ で、実行される **コンテナ** の **SecurityContext** は _SecurityContext_ で設定できます。詳しくは以下を参照してください: {{#ref}} kubernetes-securitycontext-s.md {{#endref}} -### Kubernetes APIの強化 +### Kubernetes API ハードニング -Kubernetes Api Serverへのアクセスを**保護すること**は非常に重要です。十分な権限を持つ悪意のある行為者がそれを悪用し、環境に多くの方法で損害を与える可能性があります。\ -**アクセス**(APIサーバーにアクセスするためのオリジンを**ホワイトリスト**し、他の接続を拒否する)と[**認証**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/)(**最小限の権限**の原則に従う)を確保することが重要です。そして、**決して** **匿名** **リクエスト**を**許可しない**でください。 +Kubernetes Api Server へのアクセスを保護することは非常に重要です。悪意あるアクターが十分な権限を持っていると、Api Server を悪用して環境に多大な被害を与える可能性があります。API への **アクセス**(API Server にアクセスできるオリジンを **whitelist** 化し、その他の接続を拒否する)と、[**authentication**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/)(**最小特権** の原則に従う)の両方を確実に保護してください。そして、決して **never** **allow** **anonymous** **requests** を許可してはいけません。 -**一般的なリクエストプロセス:**\ -ユーザーまたはK8s ServiceAccount –> 認証 –> 認可 –> 受け入れ制御。 +一般的なリクエストの処理:\ +User or K8s ServiceAccount –> Authentication –> Authorization –> Admission Control. -**ヒント**: +**ヒント**: - ポートを閉じる。 - 匿名アクセスを避ける。 -- NodeRestriction; 特定のノードからAPIへのアクセスを制限。 +- NodeRestriction; 特定のノードからの API アクセスを禁止する。 - [https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction](https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction) -- 基本的に、kubeletがnode-restriction.kubernetes.io/プレフィックスを持つラベルを追加/削除/更新するのを防ぎます。このラベルプレフィックスは、管理者がワークロードの分離目的でノードオブジェクトにラベルを付けるために予約されており、kubeletはそのプレフィックスを持つラベルを変更することは許可されません。 -- また、kubeletがこれらのラベルとラベルプレフィックスを追加/削除/更新することを許可します。 -- ラベルを使用して安全なワークロードの分離を確保します。 -- 特定のポッドがAPIアクセスを避ける。 -- ApiServerをインターネットに露出させない。 -- 認可されていないアクセスRBACを避ける。 -- ファイアウォールとIPホワイトリストを使用したApiServerポート。 +- 基本的に kubelets が node-restriction.kubernetes.io/ プレフィックスを持つラベルを追加/削除/更新することを防ぎます。このラベルプレフィックスは管理者がワークロード分離のために Node オブジェクトにラベル付けするために予約されており、kubelets はそのプレフィックスを持つラベルを変更できません。 +- また、kubelets がこれらのラベルおよびラベルプレフィックスを追加/削除/更新できるようにします。 +- ラベルでワークロードのセキュアな分離を確保する。 +- 特定の Pod からの API アクセスを制限する。 +- ApiServer のインターネット公開を避ける。 +- 不正アクセスを避けるために RBAC を適切に設定する。 +- ApiServer のポートはファイアウォールと IP ホワイトリスティングで保護する。 -### SecurityContextの強化 +### SecurityContext ハードニング -デフォルトでは、他のユーザーが指定されていない場合、Podが起動するときにrootユーザーが使用されます。次のようなテンプレートを使用して、より安全なコンテキスト内でアプリケーションを実行できます: +デフォルトでは Pod を起動する際に他のユーザが指定されていない場合、root ユーザが使用されます。次のようなテンプレートを使って、より安全なコンテキストでアプリケーションを実行できます: ```yaml apiVersion: v1 kind: Pod @@ -181,28 +226,28 @@ allowPrivilegeEscalation: true ### 一般的なハードニング -Kubernetes 環境は、次のように必要に応じて頻繁に更新する必要があります。 +必要に応じて頻繁に Kubernetes 環境を更新して、次を満たすようにしてください: -- 依存関係を最新の状態に保つ。 -- バグとセキュリティパッチ。 +- 依存関係を最新に保つ。 +- バグおよびセキュリティパッチの適用。 -[**リリースサイクル**](https://kubernetes.io/docs/setup/release/version-skew-policy/): 3ヶ月ごとに新しいマイナーリリースがあります -- 1.20.3 = 1(メジャー).20(マイナー).3(パッチ) +[**Release cycles**](https://kubernetes.io/docs/setup/release/version-skew-policy/): 3か月ごとに新しいマイナーリリースがあります -- 1.20.3 = 1(Major).20(Minor).3(patch) -**Kubernetes クラスターを更新する最良の方法は (こちらから)** [**こちら**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**:** +**Kubernetes クラスターを更新する最良の方法は([**here**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/) より):** -- マスターノードコンポーネントを次の順序でアップグレードします。 -- etcd (すべてのインスタンス)。 -- kube-apiserver (すべてのコントロールプレーンホスト)。 -- kube-controller-manager。 -- kube-scheduler。 -- クラウドコントローラーマネージャー (使用している場合)。 -- kube-proxy、kubelet などのワーカーノードコンポーネントをアップグレードします。 +- Master Node コンポーネントを次の順序でアップグレードしてください: +- etcd (all instances). +- kube-apiserver (all control plane hosts). +- kube-controller-manager. +- kube-scheduler. +- cloud controller manager, if you use one. +- Worker Node のコンポーネント(kube-proxy、kubeletなど)をアップグレードします。 ## Kubernetes の監視とセキュリティ: -- Kyverno ポリシーエンジン -- Cilium Tetragon - eBPF ベースのセキュリティ可視化とランタイム強制 -- ネットワークセキュリティポリシー -- Falco - ランタイムセキュリティ監視と検出 +- Kyverno Policy Engine +- Cilium Tetragon - eBPF-based Security Observability and Runtime Enforcement +- Network Security Policies +- Falco - Runtime security monitoring & detection {{#include ../../../banners/hacktricks-training.md}}