Cloud/AWS

계정 내 위협 탐지 서비스, GuardDuty

Omoknooni 2024. 1. 31. 16:37

GuardDuty

AWS 계정 전반의 위협 탐지 서비스(Threat Detection Service)

AWS 계정과 워크로드를 보호하기 위해 악의적인 활동들과 비인가적인 행위들을 지속적으로 모니터링한다.

GuardDuty는 위협 인텔리전스 피드를 통해 악성IP / 도메인을 판별하고, 이를 바탕으로 머신러닝을 적용시켜 위협 탐지를 수행한다. 

 

GuardDuty가 모니터링하는 항목으로는 다음과 같다.

  • VPC flow log
  • CloudTrail 이벤트 로그
  • CloudTrail 관리 이벤트
  • DNS 로그

GuardDuty는 기본으로 활성화되지 않고 별도로 활성화를 시켜줘야 모니터링과 탐지를 시작한다.

GuardDuty 서비스를 나타내는 객체로 감지기라는 개념이 존재한다. 이 감지기는 리전 단위의 객체로, 이 탐지기는 GuardDuty 서비스를 활성화하면 해당 리전에 생성된다. 따라서 주로 사용하는 리전에 각각 GuardDuty 서비스를 활성화시켜 감지기를 생성시켜 주어야한다.

 

또한 GuardDuty는 30일간 무료로 사용할 수 있다.

 

 

Finding

GuardDuty가 위협으로 탐지한 이벤트를 Finding(결과)라고 한다. 모든 Finding은 감지기와 연결되어있다.

GuardDuty 웹 콘솔의 결과 탭에서 탐지된 Finding들의 목록과 세부사항들을 확인할 수 있다.

 

 

각 Finding들은 고유한 ID 값인 결과 ID를 가진다. 이 결과 ID는 Finding Type과 탐지한 파라미터 값을 바탕으로 구분하고, 이 값들이 동일하면 동일한 결과 ID로 처리한다.

Finding의 내용은 JSON으로 확인할 수 있다.

 

Finding에서 확인할 수 있는 세부정보들은 대표적으로 아래와 같다.

내용 설명
탐지 시각 Finding이 발생된 시각
리소스 Finding이 생성되는데에 연관있는 AWS 리소스
(해당 리소스가 의심되는 활동의 대상이였다를 나타냄)
Finding type(유형) Finding 생성을 트리거한 활동의 유형
심각도 Finding별로 할당된 심각도로 High, Medium, Low로 구성
갯수 감지기가 해당 Finding type을 찾아낸 누적 갯수

 

 

Finding의 요소로는 크게 Resource와 Action으로 나눠볼 수 있다.

Resource

Finding 생성에 대상이 된 AWS 리소스, Resource 요소는 리소스 역할리소스 유형을 세부정보로 갖는다.

탐지되는 리소스 유형에는 EC2 인스턴스, S3 버킷, IAM 엑세스키, EKS/ECS 클러스터, 컨테이너, RDS 인스턴스, Lambda가 있다.

이 리소스 유형에 따라 세부정보 format이 달라지므로 상세한 내용은 아래 Docs를 참고한다.

 

결과 세부 정보 - 아마존 GuardDuty

동작 기록 섹션은 연결된 데이터베이스에 대해 이전에 관찰된 사용자 이름, ASN Orgs, 애플리케이션 이름 및 데이터베이스 이름에 관한 추가 컨텍스트를 제공합니다. 각 고유 값에는 로그인 성공

docs.aws.amazon.com

 

그리고 리소스 역할은 해당 리소스가 의심되는 행동의 대상인지 수행자인지를 나타내는 지표로 Actor와 Target 값을 가질 수 있다.

 

 

Action

의심되는 행동이 어떤 작업을 수행했는지를 나타내는 지표로 작업 유형이라고 하며, 유형별로 세부정보가 달라진다.

작업 유형은 아래 5가지로 나뉜다.

  • NETWORK_CONNECTION : 인스턴스와 외부 인터넷 간의 네트워크 트래픽
  • PORT_PROBE : 포트 스캔 트래픽
  • DNS_REQUEST : 도메인 이름 질의 트래픽
  • AWS_API_CALL : AWS API 호출 트래픽
  • RDS_LOGIN_ATTEMPT : RDS 로그인 시도 트래픽

 

결과 내보내기

웹 콘솔에서 Finding 탭을 확인해보면 알 수 있듯이 모든 Finding을 웹 콘솔에서 바로 확인할 수는 없다.

웹 콘솔에서는 결과ID 단위로 결과를 볼 수 있는데, 위에서 서술했듯이 결과ID는 동일한 패턴의 행동에 대해서는 같은 값을 가지게 된다.  

즉, 동일한 결과ID (Finding Type과 파라미터)에 대해 Finding이 발생하면 웹 콘솔에서는 가장 최근 것의 내용만 확인할 수 밖에 없다.

 

모든 Finding을 보관하기 위해 결과 내보내기 기능을 이용할 수 있다.

내보내는 대상으로는 기본적으로 Cloudwatch Events가 있고, 선택적으로 S3 버킷을 설정해 보관하도록 할 수 있다.

 

빈도는 GuardDuty에서 발생한 Finding을 Eventbridge와 버킷으로 내보내는 주기로, 기본값은 6시간으로 설정되어있다.

GuardDuty Finding을 모니터링하는 아키텍쳐 등을 구성할 때에는 이 값을 최소값인 15분으로 설정해주는 것이 바람직하다. 

Eventbridge와 저장용 버킷으로 내보내는 빈도를 각각 설정할 수 없기에 Guardduty가 탐지한 내역을 최대한 빠르게 전달하려면 최솟값으로 설정해주어야하기 때문이다.

 

버킷 연결을 해주는 경우, 저장할 버킷을 지정하고 해당 버킷에 GuardDuty가 접근할 수 있도록 버킷 정책을 수정해주어야한다.

(새로 만드는 경우면 생성시에 정책 연결됨)

 

그리고 버킷에 Finding을 저장할 때, Finding을 암호화하는 과정이 포함되어있어 KMS 키를 지정해주어야한다. 물론, GuarddDuty가 KMS 키를 사용할 수 있도록 키 정책도 설정해주어야한다. 

### GuardDuty가 KMS 키에 엑세스하는 정책

{    
    "Sid": "AllowGuardDutyKey",
    "Effect": "Allow",
    "Principal": {
        "Service": "guardduty.amazonaws.com"
    },
    "Action": "kms:GenerateDataKey",
    "Resource": "arn:aws:kms:Region1:444455556666:key/KMSKeyId",
    "Condition": {
        "StringEquals": {
            "aws:SourceAccount": "123456789012",
            "aws:SourceArn": "arn:aws:guardduty:Region2:123456789012:detector/SourceDetectorID"	
        }
    }
}

 

 

결과 내보내기 - 아마존 GuardDuty

수동으로 활성화된 리전에서 GuardDuty를 사용하는 경우 “Service”의 값을 리전의 리전별 엔드포인트로 바꿉니다. 예를 들어 중동(바레인) (me-south-1) 리전에서 GuardDuty를 사용하는 경우 "Service": "guar

docs.aws.amazon.com

 

이렇게 내보내기를 설정하면 탐지된 Finding들이 버킷에 JSON으로 저장되어있는 것을 볼 수 있다.