만약 aws eks get-token --name <cluster_name> 명령어로 토큰을 얻을 수 있다면 하지만 클러스터 정보를 가져올 권한이 없다면 (describeCluster), 자체 ~/.kube/config를 준비할 수 있습니다. 그러나 토큰을 가지고 있더라도 연결할 url 엔드포인트가 필요합니다 (만약 파드에서 JWT 토큰을 얻었다면 여기를 참조) 그리고 클러스터 이름이 필요합니다.
제 경우, CloudWatch 로그에서 정보를 찾지 못했지만 LaunchTemplates userData 및 EC2 인스턴스 userData에서 정보를 찾았습니다. 이 정보는 userData에서 쉽게 볼 수 있습니다. 예를 들어 다음 예제에서 (클러스터 이름은 cluster-name이었습니다):
EKS 클러스터의 생성자는 항상 그룹의 kubernetes 클러스터 부분인 system:masters (k8s admin)에 접근할 수 있습니다. 이 글을 작성하는 시점에서 클러스터를 생성한 사람을 찾는 직접적인 방법은 없습니다 (CloudTrail을 확인할 수 있습니다). 또한 그 권한을 제거할 방법도 없습니다.
AWS IAM 사용자 또는 역할에 대한 K8s 액세스 권한을 부여하는 방법은 aws-authconfigmap을 사용하는 것입니다.
따라서 aws-authconfig map에 쓰기 액세스 권한이 있는 사람은 전체 클러스터를 침해할 수 있습니다.
동일한 계정 또는 다른 계정의 IAM 역할 및 사용자에게 추가 권한을 부여하는 방법 및 이를 악용하는 방법에 대한 자세한 정보는 이 페이지를 확인하십시오.
공격자가 EKS에 대한 권한을 가진 AWS의 자격 증명을 획득한 경우, 공격자가 이전에 설명한대로 update-kubeconfig를 호출하지 않고 자체 kubeconfig를 구성하면 **get-token**은 AWS API와 상호 작용하지 않기 때문에 CloudTrail에 로그를 생성하지 않습니다(로컬에서 토큰을 생성하기만 합니다).
따라서 공격자가 EKS 클러스터와 통신할 때, cloudtrail는 사용자가 탈취되어 액세스하는 것과 관련된 어떤 로그도 기록하지 않을 것입니다.
EKS 클러스터에 로그가 활성화되어 있을 수 있음을 유의하십시오(그러나 기본적으로 비활성화됨).
EKS 랜섬?
기본적으로 클러스터를 생성한 사용자 또는 역할은 항상 클러스터에 대한 관리자 권한을 가지게 됩니다. 그리고 그것이 유일한 "안전한" 액세스 방법입니다.
따라서, 공격자가 fargate를 사용하여 클러스터를 침투하고 다른 모든 관리자를 제거하고 클러스터를 생성한 AWS 사용자/역할을 삭제하면, 공격자는 클러스터를 랜섬할 수 있었을 것입니다.
클러스터가 EC2 VMs를 사용하는 경우, 노드에서 관리자 권한을 얻고 클러스터를 복구할 수 있습니다.
실제로, 클러스터가 Fargate를 사용하는 경우 노드에서 토큰에 액세스하여 EC2 노드로 이동하거나 모든 것을 EC2로 이동하여 클러스터를 복구할 수 있습니다.