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 목록은 AWS 환경과의 안전한 통신을 위해 믿을 수 있는 IP 주소로 이루어져 있습니다. GuardDuty는 신뢰할 수 있는 IP 목록
에 포함된 IP 주소에 대한 결과를 작성하지 않습니다.
위협 목록은 알려진 악성 IP 주소로 이루어져 있습니다. GuardDuty는 위협 목록
에 포함된 IP 주소에 대한 결과를 작성합니다.
GuardDuty 콘솔로 접속해 결과
탭으로 들어가면 식별된 보안 문제가 나타납니다.
아래는 샘플 결과 작성
으로 생성된 샘플 결과들입니다.
결과를 클릭하면 세부 결과가 나타납니다.
결과 유형
이 나타납니다. 다양한 유형이 존재합니다.결과 유형
에 대한 자세한 사항은 AWS 공식 문서 - GuardDuty 유형 찾기를 참고합니다.결과
에 대한 심각도
를 나타냅니다. High
, Medium
, Low
중 하나로 나타납니다.결과
에 대한 요약을 나타냅니다. 이를 통해 해당 결과로 영향을 받은 리소스를 식별하고, 그 리소스에 대한 적절한 조치를 취할 수 있습니다.GuardDuty
는 보안 문제에 대해 식별만 하고 조치를 취하진 않습니다. 사용자가 결과에 대해 판단하고 적절한 조치를 취해야 합니다.결과 유형
을 파악하고 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)