본문 바로가기

AWS/Security

[번역]GuardDuty 와 Route 53 Resolver DNS firewall을 이용해 자동으로 의심스러운 DNS 쿼리(악성 도메인) 차단하는 방법

반응형

이번 포스팅은 https://aws.amazon.com/ko/blogs/security/automatically-block-suspicious-dns-activity-with-amazon-guardduty-and-route-53-resolver-dns-firewall/ 을 번역 및 해석해서 작성한 글입니다. 

 

이번 포스팅에서는 AWS GuardDuty에서 탐지된 의심스러운 DNS 쿼리를 Route 53 Resolver DNS Firewall 에서 자동으로 차단하는 방법에 대해 알아보고자 합니다. 

 

 


우선 의심스러운 DNS 쿼리란 무언인지 알아보고자 합니다. 예를 들어 AWS 콘솔에 접속하고자 https://aws.amazon.com/ 를 브라우저 주소창에 입력하게 됩니다. 이제 aws.amazon.com의 IP주소를 DNS에 질의해 알아내 접속할 것입니다. 이것은 정상적인 DNS 쿼리입니다.  예를 들어 사용자가 인터넷에서 문서 파일을 다운로드하였습니다. 하지만 이 문서 파일 안에는 악성코드가 숨겨져 있어 악성코드에 감염된 봇이 되어 버립니다. 봇이 되어 해커들의 C&C 서버의 통제를 받게 되어 내부 주요 정보를 C&C 서버로 보내 버릴 것입니다.

 

여기서 한 가지 의문이 생깁니다. 내부 네트워크는 방화벽등 최신의 보안 장비로 인해 외부의 C&C 서버와는 통신이 불가능한데 어떻게 내부정보가 유출될 수 있을까라고 생각할 수 있습니다. 이때 악성 DNS 쿼리를 이용해 외부로 정보를 유출시킬 수 있게 됩니다. 

 

 

 

우선 C&C 감염된 경우 일어날 수 있는 정보 유출에 대해 알아보겠습니다. 

 

  • 주요 정보(개인정보, 금융정보, 사내 주요 기밀 ) 등에 대한 수집
  • 원격에서 내부 네트워크 환경 파악
  • 내부 네트워크 확인을 통한 파괴 공작
  • Ddos 등을 위한 Botnet 형성
  • Proxy 역할을 할 Bot

감염된 봇 PC는 C&C 서버의 통제를 받으며 위와 같은 행위를 하게 됩니다. 방화벽으로 외부와 단절된 것으로 보이지만 DNS 쿼리를 위해 53 UDP port 가 outbound로 열려있게 됩니다. 이를 이용해 봇과 C&C 서버 간 통신이 가능케 되는 것입니다. 

 

 


 

그럼 감염된 봇이 어떻게 외부의 C&C 서버로부터 명령을 받고 위 정보를 전달하는지에 대해 보겠습니다. 

 

위 과정은 일반적인 DNS query를 보여주고 있습니다. DNS는 Root 도메인에서 Top-Level, Second-Level 순으로 조회하도록 되어 있으며 전 세계에 분포되어 있습니다. 누구든지 DNS 서버에 본인이 소유한 도메인을 등록할 수 있습니다. 악성 도메인의 소유자는 임의의 악성 도메인(malware.com)을 DNS에 등록합니다. DNS에는 여러 가지 종류의 레코드(A, AAAA, CNAME, SRV, TXT 등)가 존재하는데 TXT 레코드에 봇으로 보낼 명령어를 포함시킴으로써 명령을 전달하고 유출된 정보를 주고받을 수 있습니다.

 

DNS 쿼리를 통한 봇과 C&C 서버와 통신과정을 보겠습니다.

  1. pdf 파일 등을 다운로드한 PC는 감염되어 CFGGXX.malware.com을 주기적으로 조회하게끔 설정되었습니다. 
  2. DNS Query 과정을 통해 단계별로 조회를 이어 나갑니다.  "." -> ". com" -> "malware.com" 순으로 DNS 조회를 이어 나갑니다. 
  3. 실제로 CFGGXX.malware.com은 존재하지 않는 도메인이며 malware.com 이 DNS query를 받아 새로운 별칭(cname)으로 MACFESS.malware.com을 알려줍니다. 
  4. 이때 MACFESS.malware.com에서 "MACFESS" 부분에 봇이 실행시킬 명령어를 포함시키게 됩니다. 또는 TXT 레코드를 조회해 명령어를 전달받게 됩니다. 
  5. Bot PC는 명령을 수행 후 그 결과를 다시 DNS로 전송해 줍니다. 
  6. DNS 통신을 위해 사용되는 53 UDP port를 이용해 지속적으로 봇과 C&C 서버와 통신하게 됩니다. 

 


감염된 봇이 DNS 쿼리를 통해 C&C 서버와 통신을 주고받는 과정에 대해 알아봤습니다. 단순하게 생각하면 *. malware.com의 DNS 쿼리를 차단하면 되는 것이 아닌가라는 해답이 떠오릅니다. 네 맞습니다. AWS Route 53 Resolver DNS 방화벽에서 malware.com를 차단하면 간단히 해결 가능합니다. 이 포스팅에서 GuardDuty에서 탐지된 악성 도메인 쿼리 작업을 탐지하고 자동으로 차단하는 아키텍처에 대해 알아보겠습니다. 

 

 

아키텍처는 위와 같은 형태입니다. 

 

  1. GuardDuty에서 악성 DNS 쿼리 행위를 발견하고 finding을 생성합니다. 
  2. JSON 형태의 finding의 내용을 토대로 악성 DNS 주소를 조회하고 차단 및 deny 리스트에 추가하기 위해 Step Functions을 실행합니다. 
  3. 기존의 리스트에 해당 악성 도메인이 추가되어 있지 않다면 새로 추가한 후 Route 53 Resolver DNS Firewall에서 해당 도메인을 차단하게 됩니다. 

 

 

조금 더 자세히 살펴보겠습니다. 

 

  • Backdoor:EC2/C&CActivity.B!DNS
  • Impact:EC2/MaliciousDomainRequest.Reputation
  • Trojan:EC2/DNSDataExfiltration

GuardDuty에서 탐지하는 악성 도메인 쿼리 관련 finding은 주로 위 3개의 형태를 가지고 있습니다. 이 finding 들은 멀티 리전, 계정, OU를 통합하는 Security hub로 보내지며 해당 finding의 생성은 AWS EventBridge로 인해 AWS Step Functions이 실행되게 됩니다. Step Function의 상태 머신에 따라 정해진 룰에 의해 악성 도메인이 차단되고 관리자에게 알림이 가게 됩니다. 

 

  1. GuardDuty에서 위와 같은 finding 탐지
  2. 복수 리전, 계정, OU의 finding을 통합 관리하는 Security hub로 전송
  3. 해당 finding이 생성되었을 때 EventBridge에 정의된 룰에 따라 Step Functions을 실행
  4. AWS Step Functions이 실행되고 상태 머신에 따라 정해진 절차를 거침
  5. Step Functions의 상태 머신에 의해 악성 도메인을 DB에 저장
  6. DNS Firewall에서 해당 도메인 차단
  7. 실패/성공을 관리자에게 알림 전송
  8. 실패/성공을 관리자에게 알림 전송

과정 4의 Step Functions 이 어떻게 동작하는지에 대해 조금 더 살펴보겠습니다. 

 

 

우선 getDomainFromDynamo와 IsDomainDynamo 단계에 대해 보겠습니다. 이 두 개는 Dynamo DB에 악성 도메인이 저장되어있는지의 여부를 따지는 구간입니다. 만약 악성 도메인이 DB에 저장되어 있지 않다면 새로 추가하게 됩니다. 

 

2번째 단계는 getDomainFromDomainList, isDomainInDomainList, addDomainToDnsFirewallDomainList입니다. 이 구간에서는 DNS Firewall의 차단 리스트에 저장되었는지 여부를 따지게 됩니다. 악성 도메인이 DNS Firewall 차단 리스트에 저장되어 있지 않다면 새로 추가하게 됩니다. 

 

마지막 단계는 updateDynamoDB와 nitifySuccess, notifyFailure입니다. 새로 발견된 악성 도메인을 DB에 업데이트하며 이를 관리자에게 통보함이 성공했는지 실패했는지 여부를 따지게 됩니다. 

 

 

ChekeDomainDynamoLambdaFunction

GuardDuty에서 탐지한 악성 도메인이 DB에 저장되어 있는지 판단

 

CheckAndUpdateDnsFirewallDomainListLambdaFunction

악성 도메인이 DNS firewall 차단 리스트에 저장되어있는지 여부를 판단 없으면 추가

 

UpdateDynamowithDomaininfoLambdaFunction

Dynamo DB에 새로 탐지된 악성 도메인 추가 

 

 

만약 ec2 인스턴스가 감염되어 악성 도메인 쿼리(malware.com)를 시도했습니다. malware.com 이 새롭게 탐지된 악성 도메인으로 아직 DB, DNS firewall 차단 리스트에 저장되어 있지 않습니다. Step Functions 은 저장여부를 판단해 DB와 DNS firewall 차단 리스트에 malware.com을 추가한 후 관리자에게 통보하게 됩니다.

 

 

이 데모을 직접 구현하거나 좀 더 자세히 알아보고자 한다면 https://aws.amazon.com/ko/blogs/security/automatically-block-suspicious-dns-activity-with-amazon-guardduty-and-route-53-resolver-dns-firewall/ 을 방문해 Cloudformation 코드를 통해 구현 가능 합니다. 

 


결론

 

해당 포스팅에서 DNS Firewall 에서 악성 도메인을 자동으로 차단하는 법에 대해서 알아봤습니다. DNS Firewall은 AWS network Firewall 과 다르게 IP를 베이스로 차단리스트를 추가하지 않습니다. AWS에서는 DNS firewall 과 network firewall을 통해 53 port outbound 를 관리하는 것을 권장하고 있습니다. 즉 53 port outbound 가 모두 허용으로 열려있을 경우 보안 취약점이 될 수 있다는 점을 명심하며 GuardDuty, SecurityHub를 통해 지속적으로 악성도메인 쿼리를 탐지하고 차단해야 합니다. 

 

해당 포스팅은 아래를 참조했습니다. 

 

https://aws.amazon.com/ko/blogs/security/automatically-block-suspicious-dns-activity-with-amazon-guardduty-and-route-53-resolver-dns-firewall/

 

Automatically block suspicious DNS activity with Amazon GuardDuty and Route 53 Resolver DNS Firewall | Amazon Web Services

In this blog post, we’ll show you how to use Amazon Route 53 Resolver DNS Firewall to automatically respond to suspicious DNS queries that are detected by Amazon GuardDuty within your Amazon Web Services (AWS) environment. The Security Pillar of the AWS

aws.amazon.com

 

https://m.blog.naver.com/skinfosec2000/221124974960

반응형