실행: 컨테이너 이스케이프

이 문서에서는 Security Command Center의 위협 발견 항목 유형에 대해 설명합니다. 위협 발견 항목은 위협 감지기가 클라우드 리소스에서 잠재적인 위협을 감지할 때 생성됩니다. 사용 가능한 위협 발견 항목의 전체 목록은 위협 발견 항목 색인을 참고하세요.

개요

컨테이너 이스케이프 활동과 관련된 것으로 알려진 의심스러운 바이너리 도구가 실행되었습니다. 이는 컨테이너 내부의 프로세스가 격리 환경을 벗어나 호스트 시스템이나 다른 컨테이너와 상호작용하려는 컨테이너 이스케이프 시도를 의미할 수 있습니다. 이러한 탐지는 컨테이너의 경계를 넘어 액세스하려는 공격 시도일 가능성을 시사하므로, 심각도가 높은 보안 위험으로 간주됩니다. 컨테이너 이스케이프는 컨테이너 런타임의 취약점, 잘못된 구성, 또는 권한이 과도하게 부여된 컨테이너의 악용으로 인해 발생할 수 있습니다.

대응 방법

이 발견 항목에 대응하려면 다음을 수행하세요.

1단계: 발견 항목 세부정보 검토하기

  1. 발견 항목 검토의 지시에 따라 Execution: Container Escape 발견 항목을 엽니다. 발견 항목의 세부정보 패널의 요약 탭이 열립니다.

  2. 요약 탭에서 다음 섹션의 정보를 검토합니다.

    • 특히 다음 필드를 포함하는 감지된 항목:
      • 프로그램 바이너리: 실행된 바이너리의 절대 경로
      • 인수: 바이너리 실행 중에 전달되는 인수입니다.
    • 특히 다음 필드를 포함하는 영향을 받는 리소스:
      • 리소스 전체 이름: 프로젝트 번호, 위치, 클러스터 이름을 포함한 클러스터의 전체 리소스 이름
  3. 발견 항목의 세부정보 보기에서 JSON 탭을 클릭합니다.

  4. JSON에서 다음 필드를 확인합니다.

    • resource:
      • project_display_name: 클러스터가 포함된 프로젝트 이름
    • finding:
      • processes:
      • binary:
        • path: 실행된 바이너리의 전체 경로입니다.
      • args: 바이너리를 실행하는 동안 제공된 인수입니다.
    • sourceProperties:
      • Pod_Namespace: 포드의 Kubernetes 네임스페이스 이름
      • Pod_Name: GKE 포드의 이름
      • Container_Name: 영향을 받는 컨테이너의 이름
      • Container_Image_Uri: 배포 중인 컨테이너 이미지의 이름
      • VM_Instance_Name: 포드가 실행된 GKE 노드의 이름
  5. 이 컨테이너에서 비슷한 시점에 발생한 다른 발견 항목을 식별합니다. 관련 발견 항목은 권장사항을 따르지 않은 것이 아니라 악의적인 활동이었음을 의미할 수 있습니다.

2단계: 클러스터 및 노드 검토하기

  1. Google Cloud 콘솔에서 Kubernetes 클러스터 페이지로 이동합니다.

    Kubernetes 클러스터로 이동

  2. 필요한 경우 Google Cloud 콘솔 툴바에서 resource.project_display_name에 나열된 프로젝트를 선택합니다.

  3. 발견 항목 세부정보의 요약 탭에서 리소스 전체 이름 행에 나열된 클러스터를 선택합니다. 클러스터 및 해당 소유자의 모든 메타데이터를 확인합니다.

  4. 노드 탭을 클릭합니다. VM_Instance_Name에 나열된 노드를 선택합니다.

  5. 세부정보 탭을 클릭하고 container.googleapis.com/instance_id 주석을 확인합니다.

3단계: 포드 검토하기

  1. Google Cloud 콘솔에서 Kubernetes 워크로드 페이지로 이동합니다.

    Kubernetes 워크로드로 이동

  2. 필요한 경우 Google Cloud 콘솔 툴바에서 resource.project_display_name에 나열된 프로젝트를 선택합니다.

  3. 필요한 경우 발견 항목 세부정보의 요약 탭에서 리소스 전체 이름 행에 나열된 클러스터와 Pod_Namespace에 나열된 포드 네임스페이스로 필터링합니다.

  4. Pod_Name에 나열된 포드를 선택합니다. 포드 및 해당 소유자의 모든 메타데이터를 확인합니다.

4단계: 로그 확인하기

  1. Google Cloud 콘솔에서 로그 탐색기로 이동합니다.

    로그 탐색기로 이동

  2. 필요한 경우 Google Cloud 콘솔 툴바에서 resource.project_display_name에 나열된 프로젝트를 선택합니다.

  3. 기간 선택을 원하는 기간으로 설정합니다.

  4. 로드되는 페이지에서 다음을 수행합니다.

    1. 다음 필터를 사용하여 Pod_Name의 포드 로그를 찾습니다.
      • resource.type="k8s_container"
      • resource.labels.project_id="RESOURCE.PROJECT_DISPLAY_NAME"
      • resource.labels.location="LOCATION"
      • resource.labels.cluster_name="CLUSTER_NAME"
      • resource.labels.namespace_name="POD_NAMESPACE"
      • resource.labels.pod_name="POD_NAME"
    2. 다음 필터를 사용하여 클러스터 감사 로그를 찾습니다.
      • logName="projects/RESOURCE.PROJECT_DISPLAY_NAME/logs/cloudaudit.googleapis.com%2Factivity"
      • resource.type="k8s_cluster"
      • resource.labels.project_id="RESOURCE.PROJECT_DISPLAY_NAME"
      • resource.labels.location="LOCATION"
      • resource.labels.cluster_name="CLUSTER_NAME"
      • POD_NAME
    3. 다음 필터를 사용하여 GKE 노드 콘솔 로그를 찾습니다.
      • resource.type="gce_instance"
      • resource.labels.instance_id="INSTANCE_ID"

5단계: 실행 중인 컨테이너 조사하기

컨테이너가 계속 실행 중이면 컨테이너 환경을 직접 조사할 수 있습니다.

  1. Google Cloud 콘솔로 이동합니다.

    Google Cloud 콘솔 열기

  2. 필요한 경우 Google Cloud 콘솔 툴바에서 resource.project_display_name에 나열된 프로젝트를 선택합니다.

  3. Cloud Shell 활성화 를 클릭합니다.

  4. 다음 명령어를 실행하여 클러스터의 GKE 사용자 인증 정보를 가져옵니다.

    영역 클러스터의 경우:

    gcloud container clusters get-credentials CLUSTER_NAME \
          --zone LOCATION \
          --project PROJECT_NAME
    

    리전 클러스터의 경우:

    gcloud container clusters get-credentials CLUSTER_NAME \
          --region LOCATION \
          --project PROJECT_NAME
    

다음을 바꿉니다.

  • CLUSTER_NAME: resource.labels.cluster_name에 나열된 클러스터
  • LOCATION: resource.labels.location에 나열된 위치
  • PROJECT_NAME: resource.project_display_name에 나열된 프로젝트 이름
  1. 실행된 바이너리를 검색합니다.

    kubectl cp \
          POD_NAMESPACE/POD_NAME:PROCESS_BINARY_FULLPATH \
          -c CONTAINER_NAME \
          LOCAL_FILE
    

    local_file을 추가된 바이너리를 저장할 로컬 파일 경로로 바꿉니다.

  2. 다음 명령어를 실행하여 컨테이너 환경에 연결합니다.

    kubectl exec \
          --namespace=POD_NAMESPACE \
          -ti POD_NAME \
          -c CONTAINER_NAME \
          -- /bin/sh
    

    이 명령어를 실행하려면 컨테이너의 셸이 /bin/sh에 설치되어 있어야 합니다.

6단계: 공격 및 대응 방법 조사하기

  1. 이 발견 항목 유형(호스트로 이스케이프)의 MITRE ATT&CK 프레임워크 항목을 검토합니다.
  2. 대응 계획을 개발하려면 조사 결과를 MITRE 연구와 결합합니다.

7단계: 대응 구현하기

다음의 응답 계획이 이 발견 항목에 적합할 수 있지만 작업에도 영향을 줄 수 있습니다. 조사에서 수집한 정보를 신중하게 평가하여 발견 항목을 해결할 최선의 방법을 결정해야 합니다.

  • 침해된 컨테이너가 있는 프로젝트 소유자에게 문의하세요.
  • 침해된 컨테이너를 중지 또는 삭제하고 새 컨테이너로 바꿉니다.

다음 단계