Ssoon

AWS EKS - Security - Amazon GuardDuty for EKS 본문

AWS EKS Workshop Study 2기

AWS EKS - Security - Amazon GuardDuty for EKS

구구달스 2024. 4. 12. 10:57
CloudNet@ 팀의 AWS EKS Workshop Study 2기 - 6주차
# EKS Workshop 참고

 

  • Amazon GuardDuty는 위협 탐지 기능을 제공하여 AWS 계정, 워크드 및 Amazon S3(Amazon Simple Storage Service)에 저장된 데이터를 지속적으로 모니터링하고 보호할 수 있도록 지원합니다.
  • GuardDuty는 계정에서 생성된 지속적인 메타데이터 스트림과 AWS CloudTrail 이벤트, Amazon 가상 사설 클라우드(VPC) 흐름 로그 및 도메인 이름 시스템(DNS) 로그에서 발견된 네트워크 활동을 분석합니다.
  • 또한 GuardDuty는 알려진 악성 IP 주소, 이상 징후 탐지, 머신 러닝(ML)과 같은 통합 위협 인텔리전스를 사용하여 위협을 보다 정확하게 식별합니다.
  • GuardDuty는 리소스와 완전히 독립적으로 운영되므로 워크로드에 성능이나 가용성에 영향을 미칠 위험이 없습니다.
  • Amazon GuardDuty는 기존 이벤트 관리 및 워크플로우 시스템과 쉽게 통합할 수 있는 상세하고 실행 가능한 경고를 제공합니다.
  • 초기 비용이 들지 않으며 분석된 이벤트에 대해서만 비용을 지불하면 되고, 배포할 추가 소프트웨어나 위협 인텔리전스 피드 구독이 필요하지 않습니다.

  • GuardDuty는 EKS에 대해 두 가지 범주의 보호 기능을 제공합니다:
    • EKS 감사 로그 모니터링
      • Kubernetes 감사 로그 활동을 사용하여 EKS 클러스터에서 잠재적으로 의심스러운 활동을 탐지하는 데 도움을 줍니다.
    • EKS 런타임 모니터링
      • AWS 환경 내의 Amazon Elastic Kubernetes Service(Amazon EKS) 노드 및 컨테이너에 대한 런타임 위협 탐지 범위를 제공합니다.

 실습준비

  • Workshop 실습 환경 준비

EKS에서 GuardDuty 보호 활성화

  • 이 실습에서는 Amazon GuardDuty EKS 보호를 활성화합니다. 이렇게 하면 EKS 감사 로그 모니터링과 EKS 런타임 모니터링에 대한 위협 탐지 범위를 제공하여 클러스터를 보호하는 데 도움이 됩니다.
  • EKS 감사 로그 모니터링은 Kubernetes 감사 로그를 사용하여 사용자, Kubernetes API를 사용하는 애플리케이션, 잠재적으로 의심스러운 활동을 검색하는 컨트롤 플레인에서 시간순으로 활동을 캡처합니다.
  • EKS 런타임 모니터링은 운영 체제 수준 이벤트를 사용하여 Amazon EKS 노드와 컨테이너에서 잠재적인 위협을 탐지하는 데 도움을 줍니다.
  • AWS CLI를 통해 Amazon GuardDuty 활성화하기

  • 감사 로그 및 런타임 모니터링 모두에 대해 EKS 보호가 사용 설정되어 있는지 확인합니다.

  • EKS 클러스터 런타임 범위 탭을 확인합니다.

  • EKS 클러스터에서 aws-guardduty-agent 파드 배포의 유효성을 검사할 수도 있습니다.


EKS Log Monitoring

  • EKS 감사 로그 모니터링이 활성화되면 클러스터에서 Kubernetes 감사 로그를 즉시 모니터링하기 시작하고 이를 분석하여 잠재적으로 악의적이고 의심스러운 활동을 탐지합니다. 
  • 이 기능은 독립적이고 중복된 흐름 로그 스트림을 통해 Amazon EKS 컨트롤 플레인 로깅 기능에서 직접 Kubernetes 감사 로그 이벤트를 소비합니다.
  • 이 실습에서는 Amazon EKS 클러스터에서 아래에 나열된 몇 가지 Kubernetes 감사 모니터링 결과를 생성합니다.
    • Execution:Kubernetes/ExecInKubeSystemPod
    • Discovery:Kubernetes/SuccessfulAnonymousAccess
    • Policy:Kubernetes/AnonymousAccessGranted
    • Impact:Kubernetes/SuccessfulAnonymousAccess
    • Policy:Kubernetes/AdminAccessToDefaultServiceAccount
    • Policy:Kubernetes/ExposedDashboard
    • PrivilegeEscalation:Kubernetes/PrivilegedContainer
    • Persistence:Kubernetes/ContainerWithSensitiveMount

💠 큐브 시스템 네임스페이스에서 안전하지 않은 실행

  • 먼저 셸 환경에 대한 액세스를 제공하는 kube-시스템 네임스페이스에서 파드를 실행해 보겠습니다.

  • Execution:Kubernetes/ExecInKubeSystemPod 찾기를 생성합니다:

  • 몇 분 안에 GuardDuty 결과 콘솔에 Execution:Kubernetes/ExecInKubeSystemPod를 찾을 수 있습니다.

  • 검색 결과를 클릭하면 화면 오른쪽에 검색 결과와 그에 대한 간략한 설명이 포함된 탭이 열립니다.

  • 또한 Amazon Detective를 사용하여 발견한 내용을 조사할 수 있는 옵션도 제공합니다.

  • KUBERNETES_API_CALL과 관련된 것을 확인할 수 있습니다.

  • 검색 결과를 생성하는 데 사용한 공격자 파드를 정리합니다:


💠 기본 서비스 계정에 대한 관리자 액세스 권한

  • 서비스 어카운트에 클러스터 관리 권한을 부여합니다.
  • 이 서비스 어카운트에 연결된 파드가 의도치 않게 관리 권한으로 실행되어 이러한 파드에 대한 실행 권한이 있는 사용자가 에스컬레이션하여 클러스터에 제한 없이 액세스할 수 있으므로 이는 모범 사례가 아닙니다.
  • 이를 시뮬레이션하려면 클러스터 관리자 클러스터 역할을 기본 네임스페이스의 기본 서비스 계정으로 바인딩해야 합니다.

  • 몇 분 내에 GuardDuty 결과 콘솔에 Policy:Kubernetes/AdminAccessToDefaultServiceAccount를 찾을 수 있습니다.

  • 공격자 역할 바인딩을 삭제합니다.

 


💠 노출된 Kubernetes 대시보드

  • 이번 실습은 로드 밸런서 서비스에 의해 EKS 클러스터 대시보드가 인터넷에 노출되었음을 알려줍니다. 대시보드가 노출되면 클러스터의 관리 인터페이스가 인터넷에서 공개적으로 액세스할 수 있게 되며, 악의적인 공격자가 인증 및 접근 제어의 허점을 악용할 수 있습니다.

  • 이를 시뮬레이션하려면 Kubernetes 대시보드 구성 요소를 설치해야 합니다. 릴리즈 노트에 따라 EKS 클러스터 v1.29와 호환되는 최신 버전인 대시보드 v2.7.0을 사용합니다. 그런 다음 서비스 유형이 LoadBalancer인 대시보드를 인터넷에 노출하면 AWS 계정에 네트워크 로드 밴서(NLB)가 생성됩니다.

  • 다음 명령을 실행하여 Kubernetes 대시보드 구성 요소를 설치합니다. 그러면 kubernetes-dashboard라는 네임스페이스가 새로 생성되고 모든 리소스가 여기에 배포됩니다.

  • 새로 생성된 kubernetes 대시보드 Service를 LoadBalancer 유형으로 패치합니다.

  • 몇 분 후, NLB가 생성되고 kubernetes 대시보드 서비스에서 공개적으로 액세스할 수 있는 주소가 표시됩니다.

  • GuardDuty 결과 콘솔로 돌아가면 Policy:Kubernetes/ExposedDashboard를 찾을 수 있습니다.

  • Kubernetes 대시보드 구성 요소를 제거합니다


💠 민감한 마운트가 있는 권한 있는 컨테이너

  • 이 실습에서는 EKS 클러스터의 기본 네임스페이스에서 루트 수준의 액세스 권한이 있는 보안 컨텍스트가 있는 컨테이너를 생성합니다. 이 권한이 있는 컨테이너에는 호스트의 민감한 디렉터리가 있으며, 컨테이너 내에서 볼륨으로 마운트되고 액세스할 수 있습니다.

  • 컨테이너가 특권 권한으로 시작되었음을 나타내는 PrivilegeEscalation:Kubernetes/PrivilegedContainer와 컨테이너 내부에 마운트된 민감한 외부 호스트 경로를 나타내는 지속성:Kubernetes/ContainerWithSensitiveMount라는 두 가지 결과를 생성하게 됩니다.

  • 시뮬레이션하기 위해 이미 설정된 몇 가지 특정 매개변수, SecurityContext: privileged: true 및 볼륨과 볼륨 마운트 옵션이 포함된 사전 구성 매니페스트와 /etc 호스트 디렉터리를 /host-etc 파드 볼륨 마운트에 매핑하는 볼륨 및 볼륨 마운트 옵션을 사용합니다.

 

  • 매니페스트를 적용합니다:

  • 몇 분 안에 GuardDuty 결과 콘솔에서 두 개의 PrivilegeEscalation:Kubernetes/PrivilegedContainer  와 Persistence:Kubernetes/ContainerWithSensitiveMount  를 찾을 수 있습니다.

 

  • 파드를 정리합니다.


EKS Runtime Monitoring

  • EKS 런타임 모니터링은 Amazon EKS 노드 및 컨테이너에 대한 런타임 위협 탐지 범위를 제공합니다. 이 서비스는 파일 액세스, 프로세스 실행, 권한 에스컬레이션, 잠재적으로 손상될 수 있는 특정 컨테이너를 식별하는 네트워크 연결 등 개별 EKS 워크로드에 대한 런타임 가시성을 추가하는 GuardDuty 보안 에이전트(EKS 애드온)를 사용합니다.

  • EKS 런타임 모니터링을 사용 설정하면 GuardDuty가 EKS 클러스터 내에서 런타임 이벤트 모니터링을 시작할 수 있습니다. EKS 클러스터에 GuardDuty를 통해 자동으로 또는 수동으로 배포된 보안 에이전트가 없는 경우, GuardDuty는 EKS 클러스터의 런타임 이벤트를 수신할 수 없으므로, 에이전트를 EKS 클러스터 내의 EKS 노드에 배포해야 합니다. GuardDuty를 선택하여 보안 에이전트를 자동으로 관리하거나 보안 에이전트 배포 및 업데이트를 수동으로 관리할 수 있습니다.

  • 이 실습에서는 Amazon EKS 클러스터에서 아래에 나열된 몇 가지 EKS 런타임 결과를 생성합니다.
    • Execution:Runtime/NewBinaryExecuted
    • CryptoCurrency:Runtime/BitcoinTool.B!DNS
    • Execution:Runtime/NewLibraryLoaded
    • DefenseEvasion:Runtime/FilelessExecution

💠 암호화 통화 런타임

  • 이 실습은 컨테이너가 파드 내부에서 크립토 마이닝을 시도했음을 나타냅니다.

  • 시뮬레이션하기 위해 기본 네임스페이스에서 ubuntu 이미지 파드를 실행하고 거기에서 몇 가지 명령을 실행하여 암호화폐 마이닝 프로세스를 다운로드하는 것을 시뮬레이션합니다.

  • 아래 명령어를 실행하여 파드를 시작합니다:

  • kubectl exec를 사용하여 파드 내에서 일련의 명령어를 실행합니다. 먼저 curl 유틸리티를 설치합니다.

  • 다음으로 암호화폐 채굴 프로세스를 다운로드하되 출력은 /dev/null에 덤프해 보겠습니다

  • GuardDuty 결과 콘솔에서 세 가지 다른 결과를 트리거합니다.

  • 첫 번째는 APT 도구를 통해 설치되는 curl 패키지와 관련된 Execution:Runtime/NewBinaryExecuted입니다.

  • 이 발견의 세부 사항을 자세히 살펴보면 GuardDuty 런타임 모니터링과 관련이 있으므로 런타임, 컨텍스트 및 프로세스에 관한 구체적인 정보를 보여줍니다.

  • 두 번째와 세 번째는 CryptoCurrency:Runtime/BitcoinTool.B!DNS 결과와 관련이 있습니다. 발견 세부 정보에는 이번에는 DNS_REQUEST 작업과 위협 인텔리전스 증거가 표시되는 등 다른 정보가 표시된다는 점에 다시 한 번 주목하세요.

  • GuardDuty를 비활성화 합니다.

Comments