AWS

Amazon GuardDuty 위협 IP 목록 업데이트 자동화

Amazon GuardDuty는 AWS 계정, 워크로드, 인스턴스 등에서 잠재적인 위협 요소와 악의적 활동을 모니터링하며, 보안 위협에 대한 가시성을 제공하는 서비스입니다. Amazon GuardDuty에서는 주로 IP 기반으로 위협을 탐지합니다. 이때 모든 IP를 대상으로 탐지하기에는 오탐지 등 오버헤드가 너무 많이 발생하게 됩니다. Amazon GuardDuty에서는 이 범위를 특정할 수 있도록 Threat IP list(위협 IP 목록) 기능을 제공하고 있습니다.


FireHOL은 오픈소스 방화벽 프로그램으로, 방화벽을 쉽게 구성하기 위한 자동화 스크립트를 제공하고 있습니다. 이와 더불어 사이버범죄(온라인 공격, 남용, 맬웨어, 봇 공격 등)에 관련된 IP 피드를 제공하고 있습니다. 각 카테고리별로 굉장히 많은 IP list를 제공하고 있는데, 이번 포스팅에서는 가장 범용적으로 적용할 수 있고, 업데이트가 자주 일어나는 firehol_level1 이라는 IP list(https://iplists.firehol.org/?ipset=firehol_level1)를 사용합니다.

Amazon EventBridge에서 Schedule 타입의 Rule을 하나 생성합니다.

6일마다 업데이트 이벤트를 실행하기 위해, Rate를 6 Days로 설정합니다.

Event Rule의 실행 대상으로 위협 목록을 업데이트하는 AWS Lambda 함수를 지정하고, Rule 생성을 완료합니다. 이때 S3:PutObject 정책을 Lambda Execution Role에 연결해야 합니다. Lambda 코드는 다음과 같습니다. Line 18에 위협 IP 목록이 포함될 s3-bucket-name을 명시해야 합니다. Lambda에서 제공하는 임시 스토리지(/tmp)를 활용하여 txt 파일에 FireHOL의 blacklist ip를 추가하며, 해당 txt 파일을 Amazon S3 버킷에 업로드합니다.

AWS Lambda 함수 내에서 requests 모듈을 제공하고 있지 않아 모듈을 로컬에서 다운로드하고, zip 파일로 압축하여 layers를 생성하고 함수에 연결시켜주어야 합니다. pip install requests -t python 명령어로 requests 모듈을 다운로드할 수 있습니다.

[GuardDuty] > [Settings] > [Lists] 탭으로 접속하여, 위협 IP 목록을 생성합니다. S3의 object URL을 명시하면 되며, 생성 이후에 활성화를 위해 Active 라디오 버튼을 클릭하여 줍니다.​

다음은 GuardDuty 탐지에 대한 알림을 받는 방법입니다. GuardDuty의 탐지 결과를 Findings라고 부르며, EC2나 S3 등에 대한 비정상적인 접근과 활동(비트코인 채굴 등)을 탐지합니다. Findings의 심각도는 크게 Low, Medium, High의 3가지로 분류됩니다. 이러한 Findings가 GuardDuty에서 발생했을 때, 특정 심각도 이상의 Findings가 탐지된 경우 EventBridge에서 해당 이벤트를 캡처하여 이메일을 통해 알림을 받을 수 있도록 구현할 수 있습니다.

위협 IP 목록을 업데이트할 때에는 Schedule 타입의 Rule을 생성하였으나, 이번에는 특정 이벤트 발생 시 알림을 보내야 하기 때문에, Rule with an event pattern 타입으로 생성합니다.
특정 심각도 이상의 GuardDuty Findings이 탐지되었을 때의 Event pattern을 작성합니다. 심각도를 4(Medium)에서 9(High)까지 명시한 Event pattern은 다음과 같습니다.
심각도 기반 외에 특정 Findings 유형에 해당할 때를 트리거로 설정하고 싶다면, 아래와 같이 type을 지정함으로써 설정할 수 있습니다.
특정 Email을 대상으로 하는 SNS을 GuardDuty 대상으로 설정하고, EventBridge Rule 생성을 완료하면, Findings가 탐지되었을 때 아래와 같은 알림을 받을 수 있습니다.

위협 목록을 설정할 때 넓은 범위의 FireHOL IP list를 사용하는 경우, GuardDuty에서 오탐이 발생하며 알람 노이즈가 발생할 수 있습니다. 대표적인 경우로 내부 서비스 간 Call이 발생하는 경우를 꼽을 수 있습니다. GuardDuty는 이런 경우를 위해 Suppression Rule(억제 규칙) 기능을 제공하고 있습니다.

Finding Type, S3 Bucket, Account ID, Resource Type 등 다양한 필터를 걸 수 있으며, 억제 규칙을 저장하게 되면 해당 조건에 일치되는 Findings는 알람이 발생하지 않게 됩니다. 보안의 허점이 될 수 있는 부분이기 때문에, 오탐지라고 확신되는 경우에만 설정할 것을 권고드립니다.​

기계학습 기반으로 보안 이슈를 탐지하는 Amazon GuardDuty를 사용할 때, 위협 목록의 업데이트를 자동화함으로써 효과적으로 위협을 탐지하는 솔루션을 공유하였습니다. 보안 위협에 대한 탐지 외에도 위협에 대한 대응과 재발을 방지하기 위해 Amazon Detective를 함께 사용할 것을 권장드립니다.​

게시글을 평가해주세요
태그 :

필자: 최성우

전체 게시물수 : 2

전체 조회수 : 1727

게시물 공유하기