
Kubernetes 클러스터의 보안 취약점을 찾아보세요
kube-hunter는 더 이상 활발히 개발되지 않습니다. Kubernetes 클러스터의 알려진 취약점을 스캔하는 데 관심이 있다면 Trivy를 권장합니다. 특히 Trivy의 Kubernetes 잘못된 구성 스캔 및 KBOM 취약점 스캔을 참조하세요. 자세한 내용은 Trivy 문서에서 확인하세요.
kube-hunter는 Kubernetes 클러스터의 보안 취약점을 찾습니다. 이 도구는 Kubernetes 환경의 보안 문제에 대한 인식과 가시성을 높이기 위해 개발되었습니다. 소유하지 않은 Kubernetes 클러스터에서는 kube-hunter를 실행해서는 안 됩니다!
kube-hunter 실행: kube-hunter는 컨테이너(aquasec/kube-hunter)로 제공되며, kube-hunter.aquasec.com에서 온라인으로 등록하여 결과를 온라인으로 보고 공유할 수 있는 토큰을 받을 수 있는 웹사이트도 제공합니다. 아래 설명된 대로 Python 코드를 직접 실행할 수도 있습니다.
취약점 탐색: kube-hunter 지식 베이스는 발견 가능한 취약점 및 문제에 대한 문서를 포함합니다. kube-hunter가 문제를 보고하면 VID(취약점 ID)를 표시하므로 https://aquasecurity.github.io/kube-hunter/ 의 KB에서 조회할 수 있습니다.
kube-hunter의 Kubernetes ATT&CK Matrix 통합에 관심이 있다면 계속 읽기
kube-hunter는 이제 Kubernetes ATT&CK Matrix의 새로운 형식을 지원합니다. kube-hunter의 취약점은 클러스터 내부(또는 외부)의 공격자를 모방하도록 설계된 창의적인 기술 모음인 반면, Mitre의 ATT&CK은 이를 수행하기 위한 보다 일반적인 표준화된 기술 범주를 정의합니다.
kube-hunter 취약점을 공격자의 작은 단계로 생각할 수 있으며, 이는 그가 목표로 하는 보다 일반적인 기술의 궤적을 따릅니다. 대부분의 kube-hunter 헌터와 취약점은 이러한 기술에 밀접하게 속할 수 있으므로 Matrix 표준을 따르기로 결정했습니다.
Mitre 기술에 매핑할 수 없는 일부 kube-hunter 취약점은 General 키워드가 접두사로 붙습니다.

kube-hunter를 실행하는 세 가지 방법이 있으며, 각각은 클러스터의 약점을 감지하는 다른 접근 방식을 제공합니다.
모든 머신(노트북 포함)에서 kube-hunter를 실행하고 원격 스캔을 선택한 다음 Kubernetes 클러스터의 IP 주소 또는 도메인 이름을 제공합니다. 이렇게 하면 Kubernetes 설정에 대한 공격자의 시각을 얻을 수 있습니다.
클러스터 내의 머신에서 kube-hunter를 직접 실행하고 모든 로컬 네트워크 인터페이스를 프로브하는 옵션을 선택할 수 있습니다.
또한 클러스터 내의 Pod에서 kube-hunter를 실행할 수 있습니다. 이는 예를 들어 애플리케이션 Pod가 (소프트웨어 취약점을 통해) 손상된 경우 클러스터가 얼마나 노출될 수 있는지를 나타냅니다. (--pod 플래그)
먼저 **전제 조건**을 확인하세요.
기본적으로 kube-hunter는 대화형 세션을 열며, 다음 스캔 옵션 중 하나를 선택할 수 있습니다. 명령줄에서 스캔 옵션을 수동으로 지정할 수도 있습니다. 옵션은 다음과 같습니다.
원격 머신을 헌팅하려면 옵션 1을 선택하거나 --remote 옵션을 사용하세요. 예:
kube-hunter --remote some.node.com
인터페이스 스캔을 지정하려면 --interface 옵션을 사용할 수 있습니다 (이렇게 하면 머신의 모든 네트워크 인터페이스를 스캔합니다). 예:
kube-hunter --interface
특정 CIDR을 스캔하려면 --cidr 옵션을 사용하세요. 예:
kube-hunter --cidr 192.168.0.0/24
--k8s-auto-discover-nodes 플래그를 설정하여 Kubernetes에 클러스터의 모든 노드를 쿼리한 다음 모두 스캔합니다. 기본적으로 클러스터 내 구성을 사용하여 Kubernetes API에 연결합니다. 명시적인 kubeconfig 파일을 사용하려면 --kubeconfig /location/of/kubeconfig/file을 설정하세요.
또한 이는 --pod 모드를 사용할 때 항상 수행됩니다.
초기 단계의 공격자를 모방하기 위해 kube-hunter는 헌팅에 인증이 필요하지 않습니다.
가장(Impersonate) - 헌팅 중에 사용할 특정 서비스 계정 토큰을 --service-account-token 플래그로 서비스 계정 시크릿의 JWT Bearer 토큰을 수동으로 전달하여 kube-hunter에 제공할 수 있습니다.
예:
$ kube-hunter --active --service-account-token eyJhbGciOiJSUzI1Ni...
--pod 플래그로 실행할 때 kube-hunter는 헌팅 중 발견한 서비스에 인증하기 위해 Pod 내부에 마운트된 서비스 계정 토큰을 사용합니다.
--service-account-token 플래그는 Pod로 실행할 때 우선순위를 가집니다.능동적 헌팅은 kube-hunter가 찾은 취약점을 악용하여 추가 취약점을 탐색하는 옵션입니다. 일반 헌팅과 능동적 헌팅의 주요 차이점은 일반 헌팅은 클러스터의 상태를 절대 변경하지 않는 반면, 능동적 헌팅은 클러스터에 상태 변경 작업을 수행할 수 있으며 위험할 수 있습니다.
기본적으로 kube-hunter는 능동적 헌팅을 수행하지 않습니다. 클러스터를 능동적으로 헌팅하려면 --active 플래그를 사용하세요. 예:
kube-hunter --remote some.domain.com --active
--list 옵션으로 테스트 목록을 볼 수 있습니다. 예:
kube-hunter --list
능동적 헌팅 테스트와 수동적 테스트를 모두 보려면:
kube-hunter --list --active
노드 네트워크 매핑만 보려면 --mapping 옵션으로 실행하세요. 예:
kube-hunter --cidr 192.168.0.0/24 --mapping
이렇게 하면 kube-hunter가 찾은 모든 Kubernetes 노드가 출력됩니다.
로깅을 제어하려면 --log 옵션을 사용하여 로그 수준을 지정할 수 있습니다. 예:
kube-hunter --active --log WARNING
사용 가능한 로그 수준:
기본적으로 보고서는 stdout으로 전송되지만 --dispatch 옵션을 사용하여 다른 방법을 지정할 수 있습니다. 예:
kube-hunter --report json --dispatch http
사용 가능한 전송 방법:
Azure 또는 AWS 환경에서 Pod로 실행할 때 kube-hunter는 인스턴스 메타데이터 서비스에서 서브넷을 가져옵니다. 당연히 이로 인해 검색 과정이 더 오래 걸립니다.
서브넷 스캔을 /24 CIDR로 제한하려면 --quick 옵션을 사용하세요.
사용자 정의 헌팅을 사용하면 고급 사용자가 헌팅 시작 시 등록되는 헌터를 제어할 수 있습니다. 무엇을 하고 있는지 알고 있다면 필요에 따라 kube-hunter의 헌팅 및 검색 프로세스를 조정하는 데 도움이 될 수 있습니다.
예:
kube-hunter --custom <HunterName1> <HunterName2>
사용자 정의 헌팅을 활성화하면 주어진 허용 목록의 헌터를 제외한 모든 헌터가 헌팅 프로세스에서 제거됩니다.
--custom 플래그는 헌터 클래스 이름 목록을 읽습니다. kube-hunter의 모든 클래스 이름을 보려면 --raw-hunter-names 플래그를 --list 플래그와 함께 사용할 수 있습니다.
예:
kube-hunter --active --list --raw-hunter-names
참고: kube-hunter의 아키텍처 설계상 다음 "핵심 헌터/클래스"는 (사용자 정의 헌팅을 사용할 때도) 항상 등록됩니다.
kube-hunter를 배포하는 세 가지 방법이 있습니다.
머신에서 직접 kube-hunter를 실행할 수 있습니다.
다음이 설치되어 있어야 합니다.
설치:
pip install kube-hunter
실행:
kube-hunter
저장소 복제:
git clone https://github.com/aquasecurity/kube-hunter.git
모듈 종속성 설치. (가상 환경 내에서 수행하는 것이 좋습니다.)
cd ./kube-hunter
pip install -r requirements.txt
실행:
python3 kube_hunter
pyinstaller/py2exe를 사용하려면 먼저 install_imports.py 스크립트를 실행해야 합니다.
Aqua Security는 aquasec/kube-hunter:aqua에서 kube-hunter의 컨테이너화된 버전을 유지 관리합니다. 이 컨테이너에는 이 소스 코드와 함께 kube-hunter.aquasec.com에서 볼 수 있는 보고서에 결과를 업로드하기 위한 추가 (클로즈드 소스) 보고 플러그인이 포함되어 있습니다. aquasec/kube-hunter 컨테이너를 실행하고 보고서 데이터를 업로드하는 것은 추가 이용약관이 적용됩니다.
이 저장소의 Dockerfile을 사용하면 보고 플러그인 없이 컨테이너화된 버전을 빌드할 수 있습니다.
호스트 네트워크로 kube-hunter 컨테이너를 실행하면 호스트의 모든 인터페이스를 프로브할 수 있습니다.
docker run -it --rm --network host aquasec/kube-hunter
Docker for Mac/Windows 참고: Docker for Mac 또는 Windows의 "호스트"는 Docker가 컨테이너를 실행하는 VM입니다. 따라서 --network host를 지정하면 kube-hunter가 해당 VM의 네트워크 인터페이스에 액세스할 수 있으며, 사용자 머신의 인터페이스에는 액세스할 수 없습니다.
기본적으로 kube-hunter는 대화형 모드로 실행됩니다. 위에서 설명한 매개변수로 스캔 옵션을 지정할 수도 있습니다. 예:
docker run --rm aquasec/kube-hunter --cidr 192.168.0.0/24
이 옵션을 사용하면 악성 컨테이너를 실행하면 클러스터에서 무엇을 할 수 있고 발견할 수 있는지 확인할 수 있습니다. 이는 공격자가 소프트웨어 취약점을 통해 Pod를 손상시킬 수 있는 경우 수행할 수 있는 작업에 대한 관점을 제공합니다. 이는 훨씬 더 많은 취약점을 드러낼 수 있습니다.
예제 job.yaml 파일은 기본 Kubernetes Pod 액세스 설정을 사용하여 Pod에서 kube-hunter를 실행하는 Job을 정의합니다. (예를 들어, 루트가 아닌 사용자로 실행하거나 다른 네임스페이스에서 실행하는 등 이 정의를 수정할 수 있습니다.)
kubectl create -f ./job.yaml로 Job 실행kubectl describe job kube-hunter로 Pod 이름 찾기kubectl logs <pod name>으로 테스트 결과 보기기여 가이드라인을 읽으려면 여기를 클릭하세요
이 저장소는 Apache License 2.0에 따라 제공됩니다.