diff --git a/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/README.md b/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/README.md index 1e7bb4914..e0ee595c2 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 보안 강화를 위한 Cybersecurity 기술 보고서를 지원합니다. ```bash # Install Steampipe brew install turbot/tap/powerpipe @@ -27,130 +27,177 @@ 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 단일 관리 창(single pane of glass)을 제공하는 K8s 오픈소스 도구입니다. Kubescape는 K8s 클러스터, YAML 파일, HELM 차트 등을 스캔하여 여러 프레임워크 (such as the [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 클러스터를 운영할 때 직면하는 인지적 \_over_load를 줄이는 것을 목표로 합니다. 또한 클러스터가 메트릭 서버를 사용하는 경우, 잠재적인 리소스 과다/부족 할당을 보고하고 클러스터의 용량이 부족해질 경우 경고하려고 시도합니다. +[**Popeye**](https://github.com/derailed/popeye)는 라이브 Kubernetes 클러스터를 스캔하고 **배포된 리소스 및 구성에서 발생할 수 있는 잠재적 문제를 보고**하는 유틸리티입니다. 디스크에 있는 내용이 아니라 실제로 배포된 것에 기반해 클러스터를 정리(sanitize)합니다. 클러스터를 스캔하여 잘못된 구성(misconfigurations)을 감지하고 모범 사례가 적용되도록 도와 향후 골칫거리를 예방합니다. 이는 실제 환경에서 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가 안전하게 배포되었는지 확인하는 도구입니다.\ -다음 중에서 선택할 수 있습니다: +The tool [**kube-bench**](https://github.com/aquasecurity/kube-bench) is a tool that checks whether Kubernetes is deployed securely by running the checks documented in the [**CIS Kubernetes Benchmark**](https://www.cisecurity.org/benchmark/kubernetes/).\ +You can choose to: -- 컨테이너 내부에서 kube-bench 실행 (호스트와 PID 네임스페이스 공유) -- 호스트에 kube-bench를 설치하는 컨테이너를 실행한 후, 호스트에서 직접 kube-bench 실행 -- [Releases page](https://github.com/aquasecurity/kube-bench/releases)에서 최신 바이너리 설치 -- 소스에서 컴파일 +- run kube-bench from inside a container (sharing PID namespace with the host) +- run a container that installs kube-bench on the host, and then run kube-bench directly on the host +- install the latest binaries from the [Releases page](https://github.com/aquasecurity/kube-bench/releases), +- compile it from source. ### [**Kubeaudit**](https://github.com/Shopify/kubeaudit) -**[DEPRECATED]** 도구 [**kubeaudit**](https://github.com/Shopify/kubeaudit)는 다양한 보안 문제에 대해 **Kubernetes 클러스터를 감사하는** 명령줄 도구이자 Go 패키지입니다. +**[DEPRECATED]** 도구 [**kubeaudit**](https://github.com/Shopify/kubeaudit)는 다양한 보안 문제에 대해 Kubernetes 클러스터를 감사(audit)하는 커맨드라인 도구이자 Go 패키지입니다. -Kubeaudit는 클러스터 내의 컨테이너에서 실행되고 있는지 감지할 수 있습니다. 그렇다면 해당 클러스터의 모든 Kubernetes 리소스를 감사하려고 시도합니다: +Kubeaudit은 자신이 클러스터 내의 container에서 실행 중인지 감지할 수 있습니다. 그렇다면 해당 클러스터의 모든 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) 은 보안 문제를 찾는 스캐너를 제공하며, 다음 대상에서 이러한 문제를 탐지할 수 있습니다: - 컨테이너 이미지 -- 파일 시스템 -- Git 리포지토리 (원격) +- 파일시스템 +- Git 리포지토리(원격) - 가상 머신 이미지 - Kubernetes ### [**Kubei**](https://github.com/Erezf-p/kubei) -**[유지 관리되지 않는 것처럼 보임]** +**[유지관리되지 않는 것으로 보임]** -[**Kubei**](https://github.com/Erezf-p/kubei)는 사용자가 Kubernetes 클러스터의 정확하고 즉각적인 위험 평가를 받을 수 있도록 하는 취약점 스캐닝 및 CIS Docker 벤치마크 도구입니다. Kubei는 애플리케이션 포드와 시스템 포드의 이미지를 포함하여 Kubernetes 클러스터에서 사용되는 모든 이미지를 스캔합니다. +[**Kubei**](https://github.com/Erezf-p/kubei) 는 취약점 스캐닝 및 CIS Docker benchmark 도구로, 사용자가 Kubernetes 클러스터의 정확하고 즉각적인 위험 평가를 받을 수 있게 해줍니다. Kubei는 애플리케이션 파드 및 시스템 파드의 이미지를 포함하여 Kubernetes 클러스터에서 사용되는 모든 이미지를 스캔합니다. ### [**KubiScan**](https://github.com/cyberark/KubiScan) -[**KubiScan**](https://github.com/cyberark/KubiScan)은 Kubernetes의 역할 기반 접근 제어(RBAC) 권한 모델에서 위험한 권한을 스캔하기 위한 도구입니다. +[**KubiScan**](https://github.com/cyberark/KubiScan) 은 Kubernetes의 역할 기반 접근 제어(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, and Secrets와 같은 K8s 리소스에서 비밀을 식별하려 시도합니다. +- **`test-imds-access`**: 파드를 실행해 metadata v1 및 v2에 접근을 시도합니다. WARNING: 클러스터에서 파드를 실행하므로, 원치 않을 수 있으니 매우 주의하세요! -- **`find-role-relationships`**: 어떤 AWS 역할이 어떤 포드에서 실행되고 있는지 찾습니다. -- **`find-secrets`**: Pods, ConfigMaps 및 Secrets와 같은 K8s 리소스에서 비밀을 식별하려고 시도합니다. -- **`test-imds-access`**: 포드를 실행하고 메타데이터 v1 및 v2에 접근하려고 시도합니다. 경고: 클러스터에서 포드를 실행하므로 매우 조심해야 합니다. 이 작업을 원하지 않을 수 있습니다! ## **IaC 코드 감사** ### [**KICS**](https://github.com/Checkmarx/kics) -[**KICS**](https://github.com/Checkmarx/kics)는 다음 **코드로서의 인프라 솔루션**에서 **보안 취약점**, 준수 문제 및 인프라 구성 오류를 찾습니다: 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, 및 OpenAPI 3.0 사양 ### [**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 템플릿](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) | +| 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` | +| Homebrew (macOS 및 Linux) | `brew install kube-score` | +| [Krew](https://krew.sigs.k8s.io/) (macOS 및 Linux) | `kubectl krew install score` | +## YAML 파일 및 Helm Charts 분석 도구 + +### [**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 -**Pod의 보안 컨텍스트**(_PodSecurityContext_)와 실행될 **컨테이너**의 보안 컨텍스트(_SecurityContext_)를 구성할 수 있습니다. 자세한 내용은 다음을 읽어보세요: +Pod의 **보안 컨텍스트**( _PodSecurityContext_ )와 실행될 **컨테이너**들의 **보안 컨텍스트**( _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에 대한 **접근**(**whitelist** 출처로 API Server 접근을 허용하고 다른 모든 연결은 차단)과 [**authentication**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/)을 모두 보호하는 것이 중요합니다(원칙인 **least** **privilege**를 따르십시오). 그리고 절대 **anonymous** **requests**를 **허용하지 마십시오**. -**일반 요청 프로세스:**\ -사용자 또는 K8s ServiceAccount –> 인증 –> 권한 부여 –> 수용 제어. +일반적인 요청 처리 과정:\ +User 또는 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/ 접두사가 있는 레이블을 추가/제거/업데이트하는 것을 방지합니다. 이 레이블 접두사는 관리자가 작업 부하 격리를 위해 Node 객체에 레이블을 지정하는 데 예약되어 있으며, kubelet은 해당 접두사가 있는 레이블을 수정할 수 없습니다. -- 또한, kubelet이 이러한 레이블 및 레이블 접두사를 추가/제거/업데이트할 수 있도록 허용합니다. -- 레이블을 사용하여 안전한 작업 부하 격리를 보장합니다. -- 특정 포드가 API 접근을 피하도록 합니다. -- ApiServer가 인터넷에 노출되는 것을 피합니다. -- 무단 접근 RBAC를 피합니다. -- 방화벽 및 IP 화이트리스트가 있는 ApiServer 포트. +- 기본적으로 kubelets가 node-restriction.kubernetes.io/ 접두사가 붙은 레이블을 추가/제거/수정하는 것을 방지합니다. 이 레이블 접두사는 관리자가 Node 객체에 워크로드 격리를 위해 라벨링하는 용도로 예약되어 있으며, kubelets는 해당 접두사를 가진 레이블을 수정할 수 없습니다. +- 또한 kubelets가 이러한 레이블과 레이블 접두사를 추가/제거/수정할 수 있도록 허용합니다. +- 레이블을 통해 워크로드의 안전한 격리를 보장하세요. +- 특정 Pods가 API에 접근하지 못하게 하세요. +- ApiServer가 인터넷에 노출되지 않도록 하세요. +- 무단 접근을 방지하도록 RBAC을 적용하세요. +- ApiServer 포트에 대해 방화벽 및 IP 화이트리스트 적용. -### SecurityContext 강화 +### SecurityContext 하드닝 -기본적으로 다른 사용자가 지정되지 않으면 Pod가 시작될 때 root 사용자가 사용됩니다. 다음과 유사한 템플릿을 사용하여 더 안전한 컨텍스트 내에서 애플리케이션을 실행할 수 있습니다: +기본적으로 Pod가 시작될 때 다른 사용자가 지정되지 않으면 root 사용자가 사용됩니다. 다음과 유사한 템플릿을 사용하여 애플리케이션을 더 안전한 컨텍스트에서 실행할 수 있습니다: ```yaml apiVersion: v1 kind: Pod @@ -181,27 +228,27 @@ 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개월마다 새로운 minor 릴리스가 배포됩니다 -- 1.20.3 = 1(Major).20(Minor).3(patch) -**Kubernetes 클러스터를 업데이트하는 가장 좋은 방법은 (다음에서** [**여기**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):** +**Kubernetes Cluster를 업데이트하는 가장 좋은 방법은 (출처:** [**here**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):** -- 다음 순서에 따라 마스터 노드 구성 요소를 업그레이드합니다: +- 다음 순서에 따라 마스터 노드 구성요소를 업그레이드하세요: - etcd (모든 인스턴스). -- kube-apiserver (모든 제어 플레인 호스트). +- kube-apiserver (모든 컨트롤 플레인 호스트). - kube-controller-manager. - kube-scheduler. -- 클라우드 컨트롤러 매니저, 사용하는 경우. -- kube-proxy, kubelet과 같은 워커 노드 구성 요소를 업그레이드합니다. +- cloud controller manager (사용 중인 경우). +- kube-proxy, kubelet 등 Worker Node 구성요소를 업그레이드하세요. ## Kubernetes 모니터링 및 보안: -- Kyverno 정책 엔진 -- Cilium Tetragon - eBPF 기반 보안 가시성 및 런타임 집행 +- Kyverno Policy Engine +- Cilium Tetragon - eBPF 기반의 보안 관찰성 및 런타임 강제 적용 - 네트워크 보안 정책 - Falco - 런타임 보안 모니터링 및 탐지