
Kubesploit는 Golang으로 작성된 크로스 플랫폼 사후 이용 HTTP/2 명령 및 제어 서버 및 에이전트로, 컨테이너화된 환경에 초점을 맞추고 있습니다.
Kubesploit는 컨테이너화된 환경 전용으로 Golang으로 작성된 크로스 플랫폼 사후 침투 HTTP/2 명령 및 제어 서버 및 에이전트로, Russel Van Tuyl (@Ne0nd0g)의 Merlin 프로젝트를 기반으로 구축되었습니다.
도커와 쿠버네티스를 연구하는 동안, 오늘날 사용 가능한 대부분의 도구가 클러스터의 취약점에 대한 수동적 스캐닝에 초점을 맞추고 있으며, 더 복잡한 공격 벡터에 대한 커버리지가 부족하다는 것을 알게 되었습니다.
이러한 도구들은 문제를 볼 수는 있지만 악용하지는 못할 수 있습니다. 실제 공격을 시뮬레이션하여 네트워크 전반의 기업 회복력을 결정하는 데 사용될 익스플로잇을 실행하는 것이 중요합니다.
익스플로잇을 실행하면 조직의 사이버 사고 관리 능력을 연습하게 되는데, 이는 클러스터 문제를 스캔할 때는 발생하지 않습니다.
이는 실제 공격이 발생했을 때 조직이 어떻게 대응해야 하는지, 다른 탐지 시스템이 예상대로 작동하는지, 어떤 변경이 필요한지 배우는 데 도움이 됩니다.
저희는 이러한 요구 사항을 충족하는 공격 도구를 만들고자 했습니다.
하지만 이와 같은 도구를 만든 또 다른 이유가 있었습니다. 이미 쿠버네티스와 관련된 두 개의 오픈소스 도구(KubiScan 및 kubeletctl)를 보유하고 있었고, 더 많은 아이디어가 있었습니다. 각각에 대해 프로젝트를 만드는 대신 새로운 도구를 중앙 집중화하는 새 도구를 만드는 것이 더 나을 것이라고 생각했고, 이것이 Kubesploit이 탄생한 순간입니다.
크로스 플랫폼 시스템을 위한 무거운 작업을 제공하는 오픈소스를 찾았고, Russel Van Tuyl (@Ne0nd0g)가 작성한 Merlin이 우리에게 적합하다는 것을 알게 되었습니다.
우리의 주요 목표는 컨테이너화된 환경의 보안에 대한 인식을 높이고 다양한 네트워크에 구현된 완화 조치를 개선하는 데 기여하는 것입니다. 이 모든 것은 PT 팀과 레드 팀이 이러한 환경에서 활동하는 동안 적절한 도구를 제공하는 프레임워크를 통해 포착됩니다. 이러한 도구를 사용하면 이러한 환경의 강점을 평가하고 보호하기 위해 필요한 변경을 수행하는 데 도움이 됩니다.
C&C와 에이전트 인프라는 이미 Merlin에 의해 완성되었기 때문에, 서버에서 에이전트로 Golang 코드를 실행할 수 있도록 Go 인터프리터 ("Yaegi")를 통합했습니다.
이를 통해 모듈을 Golang으로 작성하고, 모듈에 더 많은 유연성을 제공하며, 새로운 모듈을 동적으로 로드할 수 있게 되었습니다.
이는 진행 중인 프로젝트이며, 향후 Docker 및 Kubernetes와 관련된 더 많은 모듈을 추가할 계획입니다.
현재 사용 가능한 모듈은 다음과 같습니다.
마운트를 이용한 컨테이너 탈출
docker.sock을 이용한 컨테이너 탈출
CVE-2019-5736 취약점을 이용한 컨테이너 탈출
쿠버네티스 클러스터 알려진 CVE 스캔
쿠버네티스 서비스에 초점을 맞춘 포트 스캔
컨테이너 내부에서 쿠버네티스 서비스 스캔
경량 kubeletctl - 다음 옵션 포함:
cGroup 탈출
커널 모듈 탈출
Var log 이스케이프
Deepce: Docker 열거 (모듈로 통합된 오픈소스 프로젝트)
취약점 테스트: kubesploit의 익스플로잇 중 컨테이너가 취약한지 확인
모듈에 대한 자세한 내용은 WiKi 페이지를 확인하세요
Kubesploit을 실험할 수 있도록 KillerCoda의 전용 쿠버네티스 환경을 만들었습니다.
이는 Kubesploit 사용 방법에 대한 완전한 자동화 지침 세트를 갖춘 전체 시뮬레이션입니다. 탐색해 보시기 바랍니다.
서버 실행:
./kubesploitServer
에이전트 실행:
./agent -url https://<server_ip>:443 &

이 프로젝트를 빌드하려면 루트 폴더에서 make 명령을 실행하세요.
참고: 현재 traefik/yaegi v0.14.3의 Golang 요구 사항에 따라 Golang 1.18 또는 Go 1.19 (최신 2개 주요 릴리스)를 사용해야 합니다.
Linux용 빠른 빌드를 실행하려면 다음을 실행하면 됩니다:
export PATH=$PATH:/usr/local/go/bin
go build -o agent cmd/merlinagent/main.go
go build -o server cmd/merlinserver/main.go
컨테이너를 사용하여 _서버_를 실행하려면 Kubesploit 서버가 0.0.0.0 인터페이스(그리고 127.0.0.1이 아님)에서 수신 대기하도록 해야 합니다.
config.yaml에서 인터페이스 필드를 업데이트할 수 있습니다.
참고: 호스트와 컨테이너 간에 포트를 바인딩해야 합니다 (기본 포트는
443이며 config.yaml에서도 구성 가능합니다).
Kubesploit 바이너리를 탐지하는 데 도움이 되는 YARA 규칙을 만들었습니다. 규칙은 kubesploit.yara 파일에 작성되어 있습니다.
에이전트에 로드된 모든 Go 모듈은 피해자 머신 내에 기록됩니다.
Kubesploit에서 사용되는 공격 벡터의 MITRE 맵을 만들었습니다.
우리가 만든 모든 모듈에 대해 설명과 방어 방법을 작성했습니다.
MITIGATION.md 파일에 요약되어 있습니다.
이 저장소에 대한 모든 종류의 기여를 환영합니다.
시작하는 방법과 개발 워크플로에 대한 설명은 기여 가이드를 참조하세요.
Kubesploit을 그 위에 구축할 수 있도록 해준 오픈소스 Merlin을 만든 Russel Van Tuyl (@Ne0nd0g)에게 감사드립니다.
또한 원격 에이전트에서 Golang 모듈을 쉽게 실행할 수 있도록 해준 Go 인터프리터 ("Yaegi")를 만든 Traefik Labs (@traefik)에도 감사드립니다.
Copyright (c) 2021 CyberArk Software Ltd. All rights reserved.
이 저장소는 GPL-3.0 라이선스에 따라 라이선스가 부여됩니다.
전체 라이선스 텍스트는 LICENSE를 참조하세요.
더 많은 의견, 제안 또는 질문이 있으시면 CyberArk Labs의 Eviatar Gerzi (@g3rzi)에게 연락하거나 이슈를 열어주세요. https://github.com/cyberark/에서 저희가 개발한 더 많은 프로젝트를 찾을 수 있습니다.