3 minute read


Overview

Overall Progress

  1. 일간 강의 결과를 정리하던 중, AWS user 계정의 Access Key와 Secret Access Key를 그대로 기록하여 git public repository에 업로드(21:25).

    1. 업로드 후 5분뒤 Git Guardian에서 이를 감지하고 경고 메일 발신(21:30),
    2. 10분뒤 AWS에서 액세스키 감지 경고 메일 발신 및 고객지원 상담(Support Case) 생성됨(21:34),
    3. AWS 계정 잠금 및 격리 처리(21:52)
  2. 위의 절차가 진행되는 와중, Asia 및 EU Region 전체에 c5.xlarge 인스턴스가 생성되고 US.East Region에 인스턴스 생성 중 계정이 격리되고 모든 인스턴스 정지

  3. 사건 인지 후 해당 Access Keys를 제거하고, 보안 서비스를 설정등 재발 방지 절차 설정

  4. AWS Support Center의 Charges review 이후, 피해 금액 환불됨 (약 2주 소요)


Lesson Learned

  1. 계정 보안은 철저히
    • 개인 계정이라서 다행
    • 만약 실제 서비스 가동중인 계정이 노출되어서 의도치않은 추가 금액이 부과되거나,
    • 계정 잠금되어 서비스가 중단되었다면? 생각도 하기 싫다.
  2. Issue가 생기면 관련 Authority에게 질의해보기.
    • Keys가 탈취된것도 아니고, 본인실수로 노출된 점은 인정. 하지만 문의하는데 돈드는것도 아니잖아..?
    • ‘미안 우리가 해줄수 있는건 아무것도 없어~ 다음엔 조심해~’ 같은 응답을 받을줄 알았음
    • 재발방지 조치를 충실히 따른 뒤, Bills were waived

Question

  1. 어떻게 그렇게 빨리 파악하고 사용한걸까?
    • 별도의 트래픽이 있는것도 아니고, 검색엔진 노출 설정도 안되어있고, 생성된지 1주일도 안된 git 계정과 repository인데 어떻게 그렇게 빨리 털렸을까?
    • 무언가의 Data Crawling 프로그램을 가동 중이고 거기에 탐지된걸까?
  2. 만약 Crawling 프로그램에 걸린거면 무슨 의도로 가동 중인걸까?
    • 프로그램을 생성하고 가동 및 유지한다면 그에 맞는 별도의 수고와 리소스(프로그램을 가동할 device, 네트워크 연결등?)가 필요하겠지?
    • 물론 내가 걸리긴 했지만, 유지하는 시간 대비 잡히는게 그렇지 많지는 않을텐데
    • 그냥 재미로? 아니면 악의를가지고? 악의를 가지고 악성프로그램을 24/7 가동중이라고? 오 세상에..
  3. 생성된 Instance의 가동 목적은 뭐였을까?
    • 계정 잠금조치를 풀고 들어오자마자 내가 생성하지 않은 인스턴스들이 각 Region에 잔뜩 생성되어있어서 정신없이 지우기에 바빴음.
    • 별도의 Log 저장을 설정해둔것도 아니라서 무슨 설정이 되어있는지 현재시점에선 확인불가
    • 진짜 그냥 악의를 가지고 켜놓기만해서 비용발생시키기? 아니면 코인채굴?

사건 발생 (220329)

inbox

30분간 받은 경고메일들

  1. (21:25) AWS user 계정의 Access Key와 Secret Access Key 내용을 git public repository에 업로드

    gitrepo

  2. (21:30) GitGuardian 경고 메일 수신

    gg

  3. (21:34) AWS 경고 메일 수신 및 Support Case 생성

    awsWarn awsSC

  4. (21:52) AWS 계정 잠금 처리

    awslock

  5. 결제 청구서에 인스턴스 사용 비용으로 약 7$의 비용이 청구됨.

    awsbill


사건 대응 (220330)

기본적으로 계정이 잠금되면 별도의 격리정책(Quarantine Policy)이 설정된다.
격리 상태에선 비밀번호 재설정, 로그인, 간단한 설정 변경등으로만 사용이 제한된다.
이러한 격리 상태를 해제하려면 안내받은 E-Mail 내용을 수행하고, 생성된 고객지원 상담(Support Case)에 격리해제 요청을 해야한다.

awsadvice

후속메일로 수신한 AWS측의 대응 권고에 따름

  1. Root 계정 비밀번호 재설정 후 로그인
    • 계정이 잠금되어있어서 기존 비밀번호로 접속 불가, 비밀번호 재설정후 접속 가능
  2. Step1. 노출된 Access Key 교체 및 삭제
    • User 및 Root User의 Key는 AWS Management Console에서 설정 가능
    • Key 교체 및 삭제; 애플리케이션이 노출된 키를 사용하는 경우
      • 두번째 키를 생성하고 애플리케이션이 새로운 키를 사용하도록 설정
      • 노출된 키를 비활성화(disable, 삭제아님)
      • 새로운 키를 사용해서 원활히 기능이 가동하는걸 확인 후, 노출된 키 삭제
  3. Step2. CloudTrail Log를 분석하여 허가되지않은 활동(unsanctioned activity) 확인
    • 승인되지 않은 IAM users, access keys, login profiles, policies, roles 또는 temporary security credentials 생성 및 활동을 확인
    • 노출된 계정에 대한 임시 자격증명이(temporary credentials) 생성되었을 수 있음. 해당 자격을 철회해야함
    • 승인되지 않은 활동들 정정
  4. Step3. CloudTrail Log를 분석하여 승인되지않은 AWS사용 검토(EC2인스턴스,Lambde 기능, EC2 Spot Instance bid, 등)
    • CloudTrail 뿐만 아니라 Bills(결제) 페이지에서도 해당 사용 여부를 확인 할 수 있음
    • 접속한 Region 뿐만 아니라 다른 접근가능한 모든 Region에서의 활동을 모두 확인해봐야함.
  5. 위의 Step1, 2, 3를 모두 해결하고 Support case에 Quarantine 해제 요청

후속 조치 (220402)

위의 절차로 계정의 격리상태는 해제되겠지만, 소액이나마 비용이 청구된 게 아쉬웠음.
내 잘못인건 맞지만 ‘평소 사용패턴과 다른 활동이 감지되어 계정이 격리됨’을 꼬투리 잡아서 문의해보기로 함.

awsbill

7$(약 9,000원)의 금액이 청구됨

  1. 격리 해제를 신청하며 청구 내역에 이의를 제기함

    • ‘아니 내잘못인건 인정하긴 하는데, 니들도 평소 사용 패턴과 다른 이상패턴을 감지했다매! 내가 쓰지도 않은 서비스인데 내가 돈내야하는게 맞아?’

    awsreply

  2. 청구 내역 조정 전에, 재발방지 절차를 수행해야한다고 함.

    awsreply

  3. Step1. 비용 및 사용 감시 서비스 중 최소 2개이상 설정하기

    1. Bills management console 에서 Billing Alerts 설정하기
    2. Cloudwatch 설정하기
    3. Cloudtrail 설정하기
    4. WAF(Web Application Firewall, 웹 어플리케이션 방화벽) 설정하기
    5. Trusted Advisor 설정하기
      • Free tier 수준에서 (일정사용량 내에서)추가 비용없이 실행가능한것은 1,2,3,5
        • 추천하는것은 1. Billing Alerts / 2. Cloudwatch
        • Cloudtrail은 서비스는 무료 / log가 S3에 꾸준히 저장되서 S3 Free tier 한도 확인 필요
        • WAF는 일부만 Free tier 대상
        • T.A.는 일부만 Free tier 대상
      • https://aws.amazon.com/ko/ 하단의 freetier 서비스 검색으로 비용확인해볼것
  4. Step2. 보안 모범 사례중 최소 1개 이상 설정하기

    1. MFA(Multi-Factor Authentication,다중요소 인증) 설정하기
    2. Security Hub 설정하기
    3. Guard Duty 설정하기
      • Free tire 수준에서 (기간 제한없이)추가비용 없이 실행 가능한 것은 1.
        • Security Hub와 Guard Duty는 최초시작후 30일만 무료라서 패스
      • https://aws.amazon.com/ko/ 하단의 freetier 서비스 검색으로 비용확인해볼것
  5. Step3. AWS Customer Agreement and shared responsibility model 문서 읽기.
    • 읽었다고 하면됨.
    • I confirmed that I have read the AWS Customer Agreement and shared responsibility model documents.
  6. 해당 내용을 정리하여 Support case에 Reply

awsreply


최종 결과 (220414)

  1. 필요조치를 모두 수행한 뒤, 면제조치받음

    awsrefund

  2. Billing Console상의 Invoice에서도 확인가능

    invoce

Categories:

Updated:

Leave a comment