[AWS] GuardDuty 사용법 정리

HYEOB KIM·2022년 6월 17일
2

aws

목록 보기
43/62

GuardDuty

  • GuardDuty는 데이터 원본인 CloudTrail 관리 이벤트 로그, CloudTrail S3 데이터 이벤트 로그, DNS 로그, EKS 감사 로그 및 VPC 흐름 로그를 분석하고 처리해 보안 위협을 식별하는 보안 모니터링 서비스입니다.

  • 악성 IP 주소 및 도메인 목록 등 위협 인텔리전스 피드를 바탕으로 Machine Learning을 적용하여 예기치 않게 발생하는 잠재적 무단 활동과 악의적 활동을 찾아냅니다.

  • GuardDuty는 리전 단위입니다. 지원되는 모든 리전에서 GuardDuty를 활성화하는 것이 좋습니다.AWS리전. 이렇게 하면 현재 활발히 사용하고 있지 않은 리전에서도 비정상적인 활동이나 허가되지 않은 활동에 대한 정보를 모니터링 할 수 있습니다. 지원되는 모든 리전에서 GuardDuty를 활성화하지 않으면 글로벌 서비스와 관련된 활동을 감지해 내는 능력이 저하됩니다.

  • 예를 들어 CloudTrail 같은 경우 버지니아 북부 리전에서 IAM 이벤트 로그를 확인할 수 있는데, 서울 리전만 GuardDuty를 활성화한 경우 IAM 이벤트에 대해 제대로 모니터링할 수 없습니다.

개념 및 용어

감지기

모든 GuardDuty 결과는 GuardDuty 서비스를 나타내는 객체인 감지기와 연결되어 있습니다. 감지기는 리전마다 존재하며, 각 리전의 로그를 모니터링합니다.

한 리전에서 GuardDuty를 활성화하면 고유한 32자 영숫자로 구성된 감지기 ID를 가진 새 감지기가 해당 리전에서 생성됩니다.

감지기 ID 형식은 다음과 같습니다.

12abc34d567e8fa901bc2d34e56789f0

설정 창에서 콘솔의 현재 리전에 대한 감지기 ID를 찾거나 ListDetectors API를 사용하여 프로그래밍 방식으로 찾을 수 있습니다.

데이터 원본

CloudTrail 관리 이벤트 로그, CloudTrail S3 데이터 이벤트 로그, DNS 로그, EKS 감사 로그 및 VPC 흐름 로그를 의미합니다. 데이터 원본을 분석하고 처리해 예기치 않게 발생하는 잠재적 무단 활동과 악의적 활동을 찾아냅니다.

결과

GuardDuty를 통해 발견된 잠재적인 보안 문제입니다.

억제 규칙

광범위한 위협에 집중할 수 있도록 하기 위해 사용자 환경에서 오탐지로 판단된 결과를 숨기고 가치가 낮은 결과의 노이즈를 줄이는 데 사용됩니다.

억제 규칙을 이용해 몇 가지 속성을 고유하게 조합하여 결과 범위를 제한할 수 있습니다.

신뢰할 수 있는 IP 목록

신뢰할 수 있는 IP 목록은 AWS 환경과의 안전한 통신을 위해 믿을 수 있는 IP 주소로 이루어져 있습니다. GuardDuty는 신뢰할 수 있는 IP 목록에 포함된 IP 주소에 대한 결과를 작성하지 않습니다.

위협 목록

위협 목록은 알려진 악성 IP 주소로 이루어져 있습니다. GuardDuty는 위협 목록에 포함된 IP 주소에 대한 결과를 작성합니다.

결과를 통해 모니터링 하기

GuardDuty 콘솔로 접속해 결과 탭으로 들어가면 식별된 보안 문제가 나타납니다.

아래는 샘플 결과 작성으로 생성된 샘플 결과들입니다.

결과를 클릭하면 세부 결과가 나타납니다.

    1. 결과 유형이 나타납니다. 다양한 유형이 존재합니다.
      결과 유형에 대한 자세한 사항은 AWS 공식 문서 - GuardDuty 유형 찾기를 참고합니다.
    1. 결과에 대한 심각도를 나타냅니다. High, Medium, Low 중 하나로 나타납니다.
    1. 결과에 대한 요약을 나타냅니다. 이를 통해 해당 결과로 영향을 받은 리소스를 식별하고, 그 리소스에 대한 적절한 조치를 취할 수 있습니다.

결과에 대한 조치

  • GuardDuty는 보안 문제에 대해 식별만 하고 조치를 취하진 않습니다. 사용자가 결과에 대해 판단하고 적절한 조치를 취해야 합니다.
  1. 먼저 결과 유형을 파악하고 AWS 공식 문서 - GuardDuty 유형 찾기를 참고해 어떤 문제인지 파악합니다.
  2. 해당 결과로 영향을 받은 리소스를 파악하고 리소스에 맞게 AWS 공식 문서 - GuardDuty에서 발견한 보안 문제 해결을 참고해 적절한 조치를 취합니다.

비용

GuardDuty 비용 정보를 통해 비용을 계산해볼 수 있습니다.

할당량

GuardDuty 할당량 정보를 참고하시기 바랍니다.

모든 리전 활성화

## 특정 AWS 어카운트의 모든 리젼에 Amazon GuardDuty 를 활성화시키고 
## Finding 의 Frequency 를 15분 간격으로 설정해주는 코드입니다 :)

import boto3

# IAM Role 을 사용하는 경우 (사용하지 않는다면 아래 코드에서 boto3_role 을 boto3 로 수정후 사용하시면 됩니다.)
boto3_role = boto3.session.Session(profile_name='xxxxx', region_name='ap-northeast-2')

# 모든 리전의 이름을 리스트로 담아줍니다
ec2 = boto3_role.client('ec2')
regions = [ region['RegionName'] for region in ec2.describe_regions()['Regions'] ]
print('Enabling GuardDuty on each region...')

for region in regions:
    msg = "# Region : {} : ".format(region)

    try:
        # 실제로 GuardDuty 를 활성화하는 코드입니다. 단 한번의 메소드 호출로 활성화 됩니다!
        guardduty = boto3_role.client('guardduty', region_name=region)
        result = guardduty.create_detector(
            Enable=True,
            FindingPublishingFrequency='FIFTEEN_MINUTES'
        )
        msg += 'success (DetectorId: {})'.format(result['DetectorId'])
    except Exception as e:
        msg += 'failed (exception message : {})'.format(e)
    
    print(msg)

모든 리전 비활성화

import boto3

boto3_role = boto3.session.Session(profile_name='xxxxx', region_name='ap-northeast-2')

ec2 = boto3_role.client('ec2')
regions = [ region['RegionName'] for region in ec2.describe_regions()['Regions'] ]

for region in regions:
    guardduty = boto3_role.client('guardduty', region_name=region)
    response = guardduty.list_detectors()
    detectorId = response['DetectorIds'][0]

    result = guardduty.delete_detector(
        DetectorId=detectorId
    )

    print(result)
profile
Devops Engineer

0개의 댓글