BLOG

[Security] 프라이빗 유인 리소스를 사용하여 AWS 계정에서 의심스러운 활동을 감지하는 방법
작성일: 2022-08-26

고객은 Amazon Web Services(AWS)에 대한 보안 태세를 강화하면서 의심스러운 행동을 감지하고 대응 팀이나 워크플로에 조치를 취하도록 알리는 여러 가지 방법을 채택하고 있습니다. 한 가지 예는 Amazon GuardDuty 를 사용하여 AWS 계정 및 워크로드에서 악의적인 활동을 모니터링하고 가시성과 개선을 위한 자세한 보안 결과를 제공하는 것입니다. 또 다른 방법은 의심스러운 행동을 감지하는 효과적인 방법으로 허니팟이라고도 하는 미끼를 배포하는 것입니다.

 

오늘 포스팅에서는 AWS 계정에서 프라이빗 미끼 AWS 리소스를 생성하고 액세스할 때 알림을 생성하도록 구성하는 방법을 알아보겠습니다. 이러한 유인 리소스는 합법적이며 유용하거나 민감한 데이터를 포함하지 않고 일반적으로 사용자 및 시스템이 정상적인 비즈니스 과정에서 액세스하지 않아도 된다는 장점이 있습니다. 액세스하려는 모든 시도는 조사해야 하는 의심스러운 활동의 명백한 신호입니다. AWS CloudTrail과 같은 데이터 원본, Amazon Detective와 같은 서비스, 자체 보안 사고 및 이벤트 모니터링(SIEM) 시스템을 사용하여 활동을 추가로 조사할 수 있습니다. 오늘 포스팅은 숙련된 AWS 사용자 및 보안 전문가분들께 추천드립니다.

의심스러운 활동 감지

 

권한이 없는 사용자가 여러분의 계정에 대한 자격 증명을 얻었다고 상상해 보겠습니다. 이는 악의적이거나 부주의한 내부자일 수 있으며 유효한 자격 증명을 부적절하게 사용할 것입니다. 권한이 없는 사용자는 이러한 자격 증명을 사용하여 AWS API를 호출하여 계정의 리소스를 나열할 수 있습니다. 다음 단계로 Amazon Simple Storage Service(Amazon S3) 버킷의 객체, AWS Secrets Manager의 비밀 또는 Amazon DynamoDB의 항목과 같이 민감한 데이터를 저장하는데 일반적으로 사용되는 리소스에 액세스하려고 할 수 있습니다. 뿐만 아니라 다른 IAM(Identity and Access Management)을 가정하여 권한을 높이려고 할 수도 있습니다. 계정의 역할. 보안 전문가로서 여러분의 임무는 이러한 의심스러운 행동을 감지하고 이에 대한 조치를 취하는 것입니다. 한 가지 접근 방식은 계정에서 IAM 사용자 및 역할의 활동 기준선을 학습하고 학습된 기준선과의 모든 편차에 플래그를 지정하는 것입니다. 이는 GuardDuty가 Discovery:IAMUser/AnomalousBehavior와 같은 결과를 생성할 때 취하는 접근 방식입니다.

 

오늘은  합법적인 것처럼 보이지만 유용하거나 민감한 데이터가 없고 공개적으로 노출되지 않는 비공개 유인 리소스를 계정에 생성하는 또다른 접근 방식에 관하여 중점적으로 알아볼 예정입니다. 이러한 미끼는 AWS 자격 증명 노출 또는 계정 손상을 나타낼 수 있는 의심스러운 활동에 대해 경고하도록 설계되었습니다. 속임수 환경, 공개 및 비공개 허니팟 생성과 같은 다른 기술과 함께 미끼를 사용하여 계정 및 애플리케이션에서 의심스러운 활동을 더 잘 감지할 수 있습니다.

 

Fidelity-Isolation-Cost 트릴레마

 

Lamboozling Attackers: A New Generation of Deception이라는 ACM Queue 기사에서 Kelly Shortridge와 Ryan Petrich는 FIC(Fidelity-Isolation-Cost) 트릴레마를 소개한 바 있습니다. 이 트릴레마는 기만 시스템 설계의 가장 중요한 차원인 충실도, 격리 및 비용에 대한 것인데요,  FIC 트릴레마에 대한 정의를 사용하여 우리는 미끼 AWS 리소스가 속임수 시스템 설계에 매우 적합할 수 있음을 알 수 있습니다.

  • 충실도 – 미끼는 실제 AWS 리소스이므로 다른 합법적 리소스처럼 작동하며 충실도가 높습니다. 예를 들어, 미끼 S3 버킷은 다른 S3 버킷과 똑같이 작동하지만 여기에 포함된 객체 데이터가 더미이고 유용하지 않다는 점만 제외하고는 예외입니다. 그러나 권한이 없는 사용자는 개체 데이터를 다운로드하고 보안 팀에 자동 경고를 생성한 후에만 이 사실을 발견합니다.
  • 격리 – 미끼 AWS 리소스를 동일한 계정의 다른 리소스에서 간단히 격리할 수 있습니다. 예를 들어 S3 버킷은 본질적으로 동일한 계정의 다른 S3 버킷과 격리되어 있습니다. 미끼 S3 버킷을 읽을 수 있는 승인되지 않은 사용자는 그렇게 함으로써 계정의 다른 리소스에 액세스하거나 해당 리소스의 가용성에 영향을 줄 수 없습니다. 권한이 없는 사용자가 얻은 자격 증명에는 다른 서비스에 대한 작업에 대한 권한이 있을 수 있지만 미끼 S3 버킷의 존재는 어떤 식으로든 이러한 권한에 추가되지 않습니다.
  • 비용 – 비용이 들지 않거나 배포 비용이 저렴하고 자동화를 통해 배포되며 추가 운영 또는 유지 관리 노력이 필요하지 않은 AWS 리소스를 선택하여 사기 비용을 낮게 유지할 수 있습니다. 예를 들어 크기가 몇 MB인 여러 파일이 포함된 S3 버킷의 저장 비용은 월별 US 센트의 일부입니다. 버킷은 정상적인 비즈니스 과정에서 절대 액세스할 수 없도록 설계되었기 때문에 API 요청 비용은 0이어야 합니다. 유사한 0 또는 저비용 리소스를 선택하면 의심스러운 활동을 감지하는 것이 특히 중요한 프로덕션 계정을 포함하여 여러 계정에서 이러한 유인 리소스를 비용 효율적이고 실현 가능하게 만들 수 있습니다.

프라이빗 유인 AWS 리소스의 예

 

다음 표는 충실도가 높고 격리도가 높으며 비용이 저렴하고 민감한 데이터나 애플리케이션이 있는 계정에 배포하기에 적합한 프라이빗 유인 AWS 리소스의 예를 보여줍니다. 이 표에는 각 리소스에 대한 액세스에 대한 소스와 이름을 제공하는 CloudTrail 이벤트 필드도 나열되어 있습니다. 이러한 CloudTrail 이벤트를 사용 하여 경고 및 알림을 생성하는 해당 Amazon EventBridge 규칙을 생성할 수 있습니다.

 

 

참고: CloudTrail Management API 이벤트가 EventBridge로 전송되면 Get*, List* 및 Describe*와 같은 읽기 전용 이벤트는 필터링되어 처리되지 않습니다. 액세스 중인 비밀 및 Systems Manager 파라미터에 대한 결과를 얻으려면 GetSecretValue 및 GetParameter API 호출에 대해 경고해야 합니다. 이것들은 EventBridge에서 처리되지 않으므로 대신 AWS Key Management Service(AWS KMS) 를 사용하여 암호 및 보안 문자열 파라미터를 암호화 하고 해당 AWS KMS Decrypt API 호출에서 일치시킨다는 사실을 사용할 수 있습니다. 이는 권한이 없는 사용자가 GetSecretValue 및 GetParameter 에 대한 성공적인 호출을 일치시키고 경고할 수 있음을 의미합니다.

 

일치하는 EventBridge 규칙의 알림은 Security Hub에서 사용자 지정 결과를 생성 하는 AWS Lambda 함수로 보낼 수 있습니다 . 그런 다음 이러한 결과는 SIEM 시스템 또는 보안 오케스트레이션, 자동화 및 대응 시스템의 자동화된 응답 워크플로와 같은 환경에서 구성했을 수 있는 다운스트림 시스템으로 보낼 수 있습니다. 그림 1은 이 워크플로를 보여줍니다.

 

그림 1: 유인 리소스에 대한 액세스는 자동으로 사용자 지정 Security Hub 결과를 생성합니다.

비공개 유인 리소스 배포

 

솔루션을 배포하는 데 사용할 수 있는 AWS CloudFormation 템플릿을 제공했습니다. 템플릿은 계정에 다음과 같은 비공개 미끼 AWS 리소스를 생성합니다.

 

  • DynamoDB 테이블
  • IAM 역할
  • 미끼 S3 객체가 있는 S3 버킷
  • 시스템 관리자 SecureString 매개변수
  • Secrets Manager 비밀

 

또한, CloudFormation 템플릿은 계정에 다음 리소스를 배포하여 미끼에 대한 액세스를 감지하고 사용자 지정 결과를 Security Hub로 보냅니다.

 

  • 미끼 S3 버킷 및 DynamoDB 테이블의 데이터 이벤트만 포함하는 CloudTrail 데이터 이벤트 추적
  • 특정 CloudTrail API 이벤트와 일치하는 6개의 EventBridge 규칙
  • 해당 IAM 역할이 있는 두 개의 Lambda 함수:
    • WriteData Lambda 함수는 미끼 S3 객체와 Systems Manager SecureString 파라미터를 생성하는 데 사용되는 CloudFormation 사용자 지정 리소스입니다 .
    • Data Lambda 함수는 EventBridge 규칙의 대상이며 유인 리소스에 액세스할 때 사용자 지정 결과를 Security Hub로 보냅니다 .

전제 조건

 

솔루션 배포를 위한 전제 조건은 다음과 같습니다.

 

  • 사용자 지정 결과를 받으려면 프라이빗 미끼가 배포될 AWS 리전에서 Security Hub를 활성화해야 합니다.
  • 프라이빗 미끼를 배포하는 리전의 AWS 계정에 대한 관리 이벤트를 기록하려면 CloudTrail 추적을 생성해야 합니다. 이 추적은 계정에서 로컬로 생성되거나 조직 추적이 될 수 있습니다 . 이벤트 읽기 및 쓰기를 모두 활성화했는지, 추적에서 모든 AWS KMS 이벤트를 활성화했는지 확인합니다(기본 구성).

솔루션 배포

 

사전 요구 사항을 설정한 후 CloudFormation 템플릿을 시작하여 비공개 유인물을 배포할 수 있습니다.

 

템플릿 시작하기

 

  1. 다음 Launch Stack 버튼을 선택하여 계정에서 CloudFormation 스택을 시작합니다.
    스택 시작

    참고: 스택은 버지니아 북부(us-east-1) 리전에서 시작됩니다. 이 솔루션을 다른 AWS 리전에 배포하려면 솔루션의 CloudFormation 템플릿을 다운로드하고 수정한 다음 선택한 리전에 배포합니다. 의심스러운 활동을 감지하는 범위를 최대한 활용하려면 주요 프로덕션 계정 및 지역에 솔루션을 배포하는 것이 좋습니다.

     

  2. 스택 세부 정보 지정 페이지 에서 스택 이름을 입력하고 다음을 선택 합니다 .CloudFormation 템플릿은 생성되는 리소스 이름의 일부로 스택 이름을 사용합니다. 조직의 기존 명명 규칙을 스택 이름에 사용하고 미끼 리소스를 참조하지 않는 것이 좋습니다. 권한이 없는 사용자에게 액세스하려는 리소스의 실제 목적을 알릴 수 있기 때문입니다.

 

 

그림 2: 스택 세부 정보 지정

 

  1. 필요한 태그 또는 기타 조직별 스택 옵션을 구성하거나 기본 설정을 수락한 후 다음을 선택 합니다 .
  2. CloudFormation 설정을 검토하고 AWS CloudFormation이 사용자 지정 이름으로 IAM 리소스를 생성할 수 있음을 확인하는 상자를 선택한 다음 스택 생성 을 선택합니다 .
  3. 스택 배포가 완료되면 CloudFormation 스택 출력에 생성된 유인 리소스의 Amazon 리소스 이름(ARN)이 표시됩니다.

그림 3: CloudFormation 스택 출력

 

예상 비용

 

이 솔루션은 관련 비용이 없는 서비스(예: IAM 역할 또는 Systems Manager Parameter Store에 저장된 매개변수)를 사용하고 유료 서비스(예: S3 및 DynamoDB)를 최소화합니다.

오늘 포스팅에서 설명된 대로 솔루션을 배포하면 단일 계정 배포에 대해 월 1달러 미만의 비용이 발생합니다 .

 

 

경고 테스트

 

정상적인 상황에서 유인물을 구성한 후에는 이러한 리소스에 대한 액세스 시도가 없으며 결과가 계정의 Security Hub로 전송되지 않습니다. 구성이 예상대로 작동하는지 테스트하기 위해 개인 유인 리소스가 배포된 계정에 프로그래밍 방식으로 액세스할 수 있는 장치에서 다음 명령을 실행할 수 있습니다. 각 명령을 실행하려면 괄호로 묶인 부분의 텍스트를 자신의 정보로 바꾸십시오. 성공적으로 배포된 후 CloudFormation 스택의 출력 섹션에서 각 리소스에 대한 세부 정보를 찾을 수 있습니다.

 

S3 객체 액세스

  • AWS s3 cp s3:// <버킷 이름/개체 이름> /tmp
  • aws s3 cp s3:// <버킷_이름/ 개체_이름> s3:// <모든_기존_버킷>

IAM 역할 가정

  • aws sts 가정 역할 –role-arn <role_name> –role-세션 이름 BlogTestRole

Secrets Manager 액세스

  • aws secretsmanager get-secret-value –secret-id <secret_name>

매개변수 저장소 액세스

  • aws ssm get-parameters –이름 <ssm_parameter> – 복호화 포함DynamoDB 테이블 스캔
  • aws dynamodb 스캔 – 테이블 이름 <테이블 이름>

이러한 테스트 생성 결과의 예는 그림 4에 나와 있습니다.

 

그림 4: Security Hub 결과

 

고려 사항

 

미끼 AWS 리소스를 배포할 때 다음 사항을 고려하십시오.

 

  • 유인 AWS 리소스를 기본 보안 제어의 개선 사항으로 고려해야 합니다. 기본 통제에는 다음 조치가 포함되어야 합니다.
    • 강력한 자격 증명 관리 및 권한 관리 를 구현하여 AWS 자격 증명의 손상을 방지하고 자격 증명의 권한을 제한할 수 있습니다 .
    • 탐지 제어를 구현하여 미끼 자원에 의해 생성된 경보를 식별하고 조사합니다 .
    • 액세스하는 미끼 AWS 리소스와 같은 보안 사고의 잠재적 영향에 대응하고 이를 완화하기 위해 사고 대응 메커니즘을 구현 합니다.
  • 모니터링 서비스 및 도구가 리소스에 저장된 데이터가 아니라 리소스 구성을 쿼리하도록 구성되었는지 확인해야 합니다. 그렇지 않으면 리소스에 액세스할 때마다 Security Hub에서 사용자 지정 결과가 생성되기 때문에 많은 양의 오탐지가 발생할 수 있습니다. 예를 들어 Security Hub 보안 표준 검사와 같은 서비스나 계정에 있는 모든 버킷의 속성을 설명하여 S3 버킷을 모니터링하는 클라우드 CSPM(보안 상태 관리) 도구를 생각해 보십시오. 이러한 도구는 미끼 S3 버킷을 찾고 GetBucketPolicy 및 GetBucketLogging 과 같은 호출을 통해 구성을 조사합니다 . 그러나 이러한 도구가 GetObject 와 같은 호출을 통해 버킷의 데이터를 읽으려고 하지 않는 한, 이 게시물에 설명된 대로 구성된 EventBridge 규칙은 결과를 생성하지 않습니다.
  • 이전 요점의 특정 예로서 잘못된 경고를 피하기 위해 미끼 S3 버킷 에서 Amazon Macie의 민감한 데이터 검색 작업을 실행하지 않도록 하십시오. S3 버킷의 메타데이터를 모니터링 하도록 Amazon Macie 를 구성할 수 있습니다 . 이러한 작업은 알림을 생성하지 않기 때문입니다.
  • 이 솔루션은 Secrets Manager 암호 및 Systems Manager 매개변수에 대한 성공적인 액세스에 대해서만 Security Hub에서 사용자 지정 결과를 생성합니다. 그러나 S3 객체 및 DynamoDB 항목에 대한 액세스 성공 및 실패, 그리고 IAM 역할 가정 모두 Security Hub에서 사용자 지정 결과를 생성합니다.

결론

 

오늘 포스팅에서는  프라이빗 미끼 AWS 리소스를 사용하여 계정 내에서 의심스러운 활동을 감지할 때의 이점과 이러한 미끼가 기존 보안 솔루션을 보완하는 방법에 대해 논의했습니다. AWS 환경 전반에 대한 중앙 집중식 가시성을 위해 프라이빗 미끼를 생성하고, 알림을 설정하고, 이러한 알림을 사용자 지정 결과로 Security Hub에 수집(및 테스트)하는 방법을 배웠습니다. 솔루션 배포에는 개인용 미끼로 공통 리소스 세트가 포함되었습니다. 그러나 필요한 코드와 템플릿은 GitHub 리포지토리에서 찾을 수 있으며 이를 확장하고 사용자 지정하여 계정에 포함하려는 다른 리소스를 추가할 수 있습니다.

 

계정 내에서 예기치 않은 동작을 감지하는 또 다른 방법으로 CloudTrail을 사용하는 방법에 대해서도 알아보려면 CloudTrail을 사용하여 개별 워크로드의 예기치 않은 동작 식별 블로그 게시물을 참조하십시오.

 

메가존클라우드 TechBlog는 AWS BLOG 영문 게재 글이나 관련 기사 중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아 정기적으로 게재하고 있습니다. 추가로 번역 및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS 페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.