전용 계정에서 GuardDuty 결과 테스트 - Amazon GuardDuty

전용 계정에서 GuardDuty 결과 테스트

이 문서를 사용하여 AWS 계정에 배포될 테스트 리소스에 대해 GuardDuty 결과를 생성하는 테스터 스크립트를 실행합니다. 특정 GuardDuty 검색 유형과 검색 세부 정보가 계정의 실제 리소스를 찾는 방법을 이해하고 학습하려는 경우 이 단계를 수행할 수 있습니다. 이 경험은 샘플 결과 생성과 다릅니다. GuardDuty 결과 테스트 경험에 대한 자세한 내용은 고려 사항을 참조하세요.

고려 사항

계속 진행하기 전에 다음 사항을 고려하세요:

  • GuardDuty는 전용 비프로덕션 AWS 계정에 테스터를 배포할 것을 권장합니다. 이 접근 방식을 사용하면 테스터가 생성한 GuardDuty 결과를 올바르게 식별할 수 있습니다. 또한 GuardDuty 테스터는 다른 계정에서 허용되는 것 이상의 IAM 권한이 필요할 수 있는 다양한 리소스를 배포합니다. 전용 계정을 사용하면 명확한 계정 경계로 권한 범위를 적절히 설정할 수 있습니다.

  • 테스터 스크립트는 다양한 AWS 리소스 조합으로 100개 이상의 GuardDuty 조사 결과를 생성합니다. 현재 이 GuardDuty 결과 유형에는 모든 가 포함되지 않습니다. 이 테스터 스크립트로 생성할 수 있는 결과 유형 목록은 테스터 스크립트가 생성할 수 있는 GuardDuty 결과을 참조하세요.

  • GuardDuty 테스터가 예상대로 작동하려면 테스터 리소스가 배포된 계정에서 GuardDuty를 사용 설정해야 합니다. 테스터는 실행할 테스트에 따라 적절한 GuardDuty 보호 계획이 활성화되어 있는지 여부를 평가합니다. 활성화되지 않은 보호 계획의 경우 GuardDuty가 결과를 생성하는 테스트를 수행할 수 있을 만큼 필요한 보호 계획을 활성화할 수 있는 권한을 요청합니다. 나중에 테스트가 완료되면 GuardDuty가 보호 계획을 비활성화합니다.

    GuardDuty를 처음 활성화

    특정 리전에서 처음으로 전용 계정에서 GuardDuty를 활성화하면 계정이 자동으로 30일 무료 체험에 등록됩니다.

    GuardDuty는 선택적 보호 계획을 제공합니다. GuardDuty를 활성화하면 특정 보호 플랜도 활성화되며 GuardDuty 30일 무료 체험판에 포함되어 있습니다. 자세한 내용은 GuardDuty 30일 무료 평가판 사용 단원을 참조하십시오.

    테스터 스크립트를 실행하기 전에 계정에서 GuardDuty가 이미 활성화되었습니다.

    GuardDuty가 이미 사용 설정되어 있는 경우, 테스터 스크립트는 매개변수를 기반으로 특정 보호 계획의 구성 상태와 결과를 생성하는 데 필요한 기타 계정 수준 설정을 확인합니다.

    이 테스터 스크립트를 실행하면 리전의 전용 계정에서 특정 보호 요금제가 처음으로 활성화될 수 있습니다. 그러면 해당 보호 요금제에 대한 30일 무료 체험이 시작됩니다. 각 보호 계획과 관련된 무료 평가판에 대한 자세한 내용은 GuardDuty 30일 무료 평가판 사용을 참조하세요.

테스터 스크립트가 생성할 수 있는 GuardDuty 결과

현재 테스터 스크립트는 Amazon EC2, Amazon EKS, Amazon S3, IAM 및 EKS 감사 로그와 관련된 다음과 같은 찾기 유형을 생성합니다:

1단계 - 사전 조건

테스트 환경을 준비하려면 다음 항목이 필요합니다.

  • Git - 사용하는 운영 체제를 기반으로 git 명령줄 도구를 설치합니다. 이는 amazon-guardduty-tester 리포지토리를 복제하는 데 필요합니다.

  • AWS Command Line Interface - 명령줄 셸에서 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다. 자세한 내용은 AWS Command Line Interface 사용 설명서AWS CLI 시작하기를 참조하세요.

  • AWS Systems Manager - AWS CLI를 사용하여 관리형 노드로 Session Manager 세션을 시작하려면 로컬 시스템에 Session Manager 플러그인을 설치해야 합니다. 자세한 내용은 AWS Systems Manager 사용 설명서에서 AWS CLI용 세션 관리자 플러그인 설치를 참조하세요.

  • 노드 패키지 관리자(NPM) - NPM을 설치하여 모든 종속성을 설치합니다.

  • Docker - 도커가 설치되어 있어야 합니다. 설치 지침은 도커 웹 사이트를 참조하세요.

    Docker가 설치되었는지 확인하려면 다음 명령을 실행하여 다음 출력과 유사한 출력이 나오는지 확인합니다:

    $ docker --version Docker version 19.03.1
  • AWS Marketplace에서 Kali Linux 이미지를 구독합니다.

2단계 - AWS 리소스 배포

이 섹션에서는 주요 개념 목록과 전용 계정에 특정 AWS 리소스를 배포하는 단계를 제공합니다.

개념

다음 목록은 리소스를 배포하는 데 도움이 되는 명령과 관련된 주요 개념을 제공합니다:

  • AWS Cloud Development Kit (AWS CDK) - SDK는 코드에서 클라우드 인프라를 정의하고 AWS CloudFormation을 통해 프로비저닝하기 위한 오픈 소스 소프트웨어 개발 프레임워크입니다. CDK는 컨스트럭트라고 하는 재사용 가능한 클라우드 구성 요소를 정의하기 위해 몇 가지 프로그래밍 언어를 지원합니다. 이를 스택과 앱으로 함께 구성할 수 있습니다. 그런 다음 AWS CloudFormation에 CDK 애플리케이션을 배포하여 리소스를 프로비저닝하거나 업데이트할 수 있습니다. 자세한 내용은 AWS Cloud Development Kit (AWS CDK) 개발자 안내서AWS CDK란 무엇입니까?를 참조하세요.

  • 부트스트래핑 - AWS CDK에서 사용할 AWS 환경을 준비하는 프로세스입니다. CDK 스택을 AWS 환경에 배포하기 전에 먼저 환경을 부트스트랩해야 합니다. AWS CDK에서 사용하는 환경에서 특정 AWS 리소스를 프로비저닝하는 이 프로세스는 다음 섹션 - AWS 리소스를 배포하는 단계에서 수행할 단계의 일부입니다.

    부트스트래핑의 작동 방식에 대한 자세한 내용은 AWS Cloud Development Kit (AWS CDK) 개발자 안내서부트스트래핑을 참조하세요.

AWS 리소스를 배포하는 단계

다음 단계를 수행하여 리소스 배포를 시작합니다.

  1. 전용 계정 리전 변수가 bin/cdk-gd-tester.ts 파일에 수동으로 설정되지 않는 한 AWS CLI 기본 계정 및 리전을 설정합니다. 자세한 내용을 알아보려면 AWS Cloud Development Kit (AWS CDK) 개발자 안내서환경을 참조하세요.

  2. 다음 명령을 실행하여 리소스를 배포합니다.

    git clone https://github.com/awslabs/amazon-guardduty-tester && cd amazon-guardduty-tester npm install cdk bootstrap cdk deploy

    마지막 명령(cdk deploy)은 사용자를 대신하여 AWS CloudFormation 스택을 생성합니다. 이 스택의 이름은 GuardDutyTesterStack입니다.

    이 스크립트의 일부로 GuardDuty는 계정에서 GuardDuty 결과를 생성하기 위해 새로운 리소스를 생성합니다. 또한 Amazon EC2 인스턴스에 다음 태그 키:값 페어를 추가합니다.

    CreatedBy:GuardDuty Test Script

    Amazon EC2 인스턴스에는 EKS 노드 및 ECS 클러스터를 호스팅하는 EC2 인스턴스도 포함됩니다.

    인스턴스 타입

    GuardDuty는 Amazon EKS 노드 그룹을 제외한 모든 리소스에 대해 t3.micro를 생성합니다. EKS에는 최소 2개의 코어가 필요하므로 EKS 노드에는 t3.medium 인스턴스 유형이 있습니다. 인스턴스 유형에 대한 자세한 내용은 Amazon EC2 인스턴스 유형 가이드에서 사용 가능한 크기를 참조하세요.

3단계 - 테스터 스크립트 실행

이 프로세스는 먼저 테스트 드라이버로 세션을 시작한 다음 스크립트를 실행하여 특정 리소스 조합으로 GuardDuty 결과를 생성하는 2단계 프로세스입니다.

  1. 리소스를 배포한 후 현재 터미널 세션의 변수에 리전 코드를 저장합니다. 다음 명령을 사용하고 us-east-1을 리소스를 배포한 리전 코드로 바꿉니다.

    $ REGION=us-east-1
  2. 테스터 스크립트는 AWS Systems Manager (SSM)을 통해서만 사용할 수 있습니다. 테스터 호스트 인스턴스에서 대화형 쉘을 시작하려면 호스트 InstanceId 쿼리합니다.

  3. 다음 명령을 사용하여 테스터 스크립트에 대한 세션을 시작합니다.

    aws ssm start-session --region $REGION --document-name AWS-StartInteractiveCommand --parameters command="cd /home/ssm-user/py_tester && bash -l" --target $(aws ec2 describe-instances --region $REGION --filters "Name=tag:Name,Values=Driver-GuardDutyTester" --query "Reservations[].Instances[?State.Name=='running'].InstanceId" --output text)

테스터 스크립트는 파이썬 기반 프로그램으로, 입력에 따라 결과를 생성하기 위해 동적으로 배시 스크립트를 빌드합니다. 하나 이상의 AWS 리소스 유형, GuardDuty 보호 계획, Threat Purposes (전술), 기본 데이터 소스 또는 테스터 스크립트가 생성할 수 있는 GuardDuty 결과를 기반으로 결과를 생성할 수 있는 유연성이 있습니다.

다음 명령 예제를 참조하여 하나 이상의 명령을 실행하여 탐색하려는 결과를 생성하세요:

python3 guardduty_tester.py python3 guardduty_tester.py --all python3 guardduty_tester.py --s3 python3 guardduty_tester.py --tactics discovery python3 guardduty_tester.py --ec2 --eks --tactics backdoor policy execution python3 guardduty_tester.py --eks --runtime only python3 guardduty_tester.py --ec2 --runtime only --tactics impact python3 guardduty_tester.py --log-source dns vpc-flowlogs python3 guardduty_tester.py --finding 'CryptoCurrency:EC2/BitcoinTool.B!DNS'

계정에서 생성된 결과를 보려면 선호하는 방법을 선택하세요.

python3 guardduty_tester.py --help

계정에서 생성된 결과를 보려면 선호하는 방법을 선택하세요.

GuardDuty console
  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/guardduty/에서 GuardDuty 콘솔을 엽니다.

  2. 탐색 창에서 결과를 선택합니다.

  3. 결과 표에서 세부 정보를 보려는 결과를 선택합니다. 그러면 결과 세부 정보 패널이 열립니다. 자세한 내용은 Amazon GuardDuty 결과 이해 및 생성하기을 참조하세요.

  4. 이러한 검색 결과를 필터링하려면 리소스 태그 키와 값을 사용하세요. 예를 들어 Amazon EC2 인스턴스에 대해 생성된 결과를 필터링하려면 인스턴스 태그 키인스턴스 태그 키에 대해 CreatedBy:GuardDuty Test Script 태그 키:값 페어를 사용합니다.

API
AWS CLI
  • 다음 AWS CLI 명령을 실행하여 생성된 결과를 보고 us-east-112abc34d567e8fa901bc2d34EXAMPLE을 적절한 값으로 바꿉니다.

    aws guardduty list-findings --region us-east-1 --detector-id 12abc34d567e8fa901bc2d34EXAMPLE

    계정 및 현재 리전에 대한 detectorId를 찾으려면 https://console.aws.amazon.com/guardduty/ 콘솔의 설정 페이지를 참조하거나 ListDetectors API를 실행합니다.

    결과를 필터링하는 데 사용할 수 있는 파라미터에 대한 자세한 내용은 AWS CLI 명령 참조list-findings를 참조하세요.

4단계 - AWS 테스트 리소스 정리

3단계 - 테스터 스크립트 실행 중에 수행한 계정 수준 설정 및 기타 구성 상태 업데이트는 테스터 스크립트가 종료되면 원래 상태로 돌아갑니다.

테스터 스크립트를 실행한 후 AWS 테스트 리소스를 정리하도록 선택할 수 있습니다. 다음 방법 중 하나를 사용하여 이 작업을 수행할 수 있습니다.

일반적인 문제 해결

GuardDuty에서 일반적인 문제를 파악하고 문제 해결 단계를 권장합니다:

  • Cloud assembly schema version mismatch – AWS CDK CLI를 필수 클라우드 어셈블리 버전과 호환되는 버전 또는 사용 가능한 최신 버전으로 업데이트합니다. 자세한 내용은 AWS CDK CLI 호환성을 참조하세요.

  • Docker permission denied - 전용 계정이 명령을 실행할 수 있도록 전용 계정 사용자를 도커-사용자에 추가합니다. 단계에 대한 자세한 내용은 Docker 액세스 거부를 참조하세요.

  • Your requested instance type is not supported in your requested Availability Zone - 일부 가용 영역은 특정 인스턴스 유형을 지원하지 않습니다. 선호하는 인스턴스 유형을 지원하는 가용 영역을 식별하고 AWS 리소스 배포를 다시 시도하려면 다음 단계를 수행합니다.

    1. 선호하는 방법을 선택하여 인스턴스 유형을 지원하는 가용성 영역을 결정합니다:

      Console
      기본 인스턴스 유형을 지원하는 가용 영역을 식별하려면
      1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

      2. 페이지 오른쪽 상단의 AWS 리전 선택기를 사용하여 인스턴스를 시작하려는 리전을 선택합니다.

      3. 탐색 창의 인스턴스에서 인스턴스 유형를 선택합니다.

      4. 인스턴스 유형 테이블에서 선호하는 인스턴스 유형을 선택합니다.

      5. 네트워킹에서 가용 영역 아래에 나열된 리전을 확인합니다.

        이 정보를 바탕으로 리소스를 배포할 수 있는 새 리전을 선택해야 할 수도 있습니다.

      AWS CLI

      다음 명령을 실행하여 사용 가능 영역 목록을 확인합니다. 선호하는 인스턴스 유형과 리전(us-east-1)을 지정해야 합니다.

      aws ec2 describe-instance-type-offerings --location-type availability-zone --filters Name=instance-type,Values=Preferred instance type --region us-east-1 --output table

      이 명령에 대한 자세한 내용은 AWS CLI 명령 참조설명 인스턴스 유형 오퍼링을 참조하세요.

      이 명령을 실행할 때 오류가 발생하면 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요. 자세한 내용은 AWS Command Line Interface 사용 설명서의 문제 해결을 참조하세요.

    2. AWS 리소스 배포를 다시 시도하고 원하는 인스턴스 유형을 지원하는 가용성 영역을 지정하세요.

      AWS 리소스 배포를 다시 시도하려면
      1. bin/cdk-gd-tester.ts 파일에서 기본 리전을 설정합니다.

      2. 가용성 영역을 지정하려면 amazon-guardduty-tester/lib/common/network/vpc.ts 파일을 엽니다.

      3. 이 파일에서 인스턴스 유형의 가용 영역을 지정해야 하는 availabilityZones: ['us-east-1a', 'us-east-1c'],maxAzs: 2,로 바꿉니다.

      4. AWS 리소스를 배포하는 단계 아래의 나머지 단계를 계속 진행합니다.