본문 바로가기

서버 리뷰

클라우드 자격증명 탈취 사고 실무 대응 가이드

728x90

1. 개요

최근 IT 개발자 및 시스템 운영자 단말 감염을 통해 클라우드 자격증명 Credential 을 탈취하고, 이를 악용해 클라우드 환경에 무단 접근한 뒤 민감정보를 유출하는 사고가 증가하고 있다.

핵심 위험은 개발자 PC 한 대의 감염이 전사 클라우드 인프라 침해로 직결된다는 점이다. 특히 Access Key 에 관리자급 권한이 부여된 경우 S3 버킷, 백업 데이터, DB 스냅샷 등 핵심 자산이 단시간에 노출된다.

2. 공격 시나리오 상세 분석

2.1 초기 침투 경로

  • 악성 개발 도구 위장: 유틸리티, 크랙 툴, 불법 라이선스 우회 도구에 인포스틸러 포함
  • 공급망 오염: npm, PyPI, Go 모듈 등에 타이포스쿼팅 패키지 유포
  • IDE 확장 악성코드: VS Code, JetBrains 마켓플레이스 비공식 확장
  • 피싱 메일: 채용 제안서, 견적서로 위장한 첨부파일 실행

2.2 자격증명 수집 위치

수집 대상 실제 경로 예시 위험도
AWS CLI 설정 ~/.aws/credentials, ~/.aws/config
환경 변수 파일 .env, .env.production, application-prod.yml
소스코드 하드코딩 const accessKey = "AKIA..." 최상
CI/CD 로그 GitHub Actions, Jenkins 콘솔 출력
브라우저 저장소 Chrome 비밀번호 관리자, 쿠키
메신저 히스토리 Slack, Discord에 붙여넣은 키

2.3 권한 남용 단계

  1. 정찰: ListBuckets, DescribeInstances, ListUsers 등 정보 수집 API 호출
  2. 권한 상승: CreateUser, AttachUserPolicy, PutRolePolicy 시도
  3. 지속성 확보: 백도어 IAM 사용자 생성, Access Key 추가 발급
  4. 데이터 유출: S3 GetObject, RDS 스냅샷 Export, EBS 스냅샷 공유
  5. 흔적 제거: StopLogging, DeleteTrail, CloudWatch Logs 삭제

초기 정찰 행위는 정상 운영 로그와 유사해 탐지가 지연되는 경향이 있다.

3. 침해 의심 시 대응 절차

3.1 즉시 조치 0∼1시간

  • 키 비활성화 우선: IAM 콘솔에서 해당 Access Key 상태를 Inactive 로 변경. 삭제하지 말고 비활성화로 흔적 유지
  • 세션 강제 만료: 역할 기반 접근이었다면 신뢰 정책에 aws:TokenIssueTime 조건 추가 또는 역할 삭제
  • 격리된 단말에서 재발급: 감염 의심 PC가 아닌 관리용 점프 서버에서 신규 키 발급
  • 네트워크 차단: 의심 단말은 즉시 사내망 분리, 원격 접속 차단

3.2 권한 점검 1∼24시간

  • 최소 권한 원칙 적용
    • Access Advisor로 90일 미사용 권한 제거
    • AdministratorAccess 정책 분리 및 관리자 그룹 축소
    • S3 접근은 버킷 정책 + Prefix 단위로 제한
    • CI/CD는 sts:AssumeRole 만 허용
  • 퍼블릭 노출 점검: S3 Block Public Access 전사 적용 여부 확인
  • MFA 강제: IAM Password Policy에 MFA 필수 설정, 루트 계정 하드웨어 MFA 적용

3.3 로그 분석 24∼72시간

CloudTrail 조회 예시

Bash

aws cloudtrail lookup-events \  --lookup-attributes AttributeKey=AccessKeyId,AttributeValue=AKIAxxxxxxxxxxxx \  --start-time 2026-05-01T00:00:00Z \  --end-time 2026-06-05T23:59:59Z \  --max-results 50

비정상 행위 지표

  • 평소 미접속 리전에서의 API 호출
  • 짧은 시간 대량 List*, Describe* 호출
  • UserAgent가 aws-cli/, Boto3 가 아닌 비정상 문자열
  • PutBucketAcl, PutObjectAcl 로 퍼블릭 전환 시도
  • GuardDuty, CloudTrail 비활성화 시도

분석 워크플로

  1. 해당 키의 최초 사용 시점과 IP 확인
  2. IP의 ASN, 국가, VPN 여부 확인
  3. 호출된 서비스 목록과 데이터 접근량 집계
  4. 정상 운영자 행위와 시간대 비교

3.4 증적 보존

  • CloudTrail 로그를 보존 전용 계정의 S3로 복제 후 Object Lock 설정
  • 관련 EC2, EBS 스냅샷 생성 및 삭제 방지 태그 부착
  • 감염 단말 메모리 덤프, 디스크 이미지 확보
  • 체인 오브 커스터디 기록 유지

3.5 신고 및 공유

  • KISA 보호나라 118 또는 홈페이지 침해사고 신고
  • 신고 시 포함 정보: 탐지 시점, 의심 키 ID, 영향 자산 목록, 조치 현황, 로그 보관 위치
  • 내부 유관 부서: 법무, 개인정보보호 책임자, PR 팀에 즉시 공유

4. 예방 수칙 실무 적용

4.1 자격증명 관리 체계

  • 장기 Access Key 지양: 원칙적으로 폐기, IAM Role + STS 임시 자격증명 사용
  • 키 유효기간 단축: 90일 이하, 자동 로테이션 파이프라인 구축
  • 하드코딩 금지: git-secrets, gitleaks, truffleHog 로 pre-commit 훅 적용
  • 비밀 관리 서비스 활용: AWS Secrets Manager, Parameter Store, HashiCorp Vault
  • 정기 폐기: 미사용 키 분기별 일괄 삭제, 키 인벤토리 대시보드 운영

4.2 개발 환경 보안

  • 단말 EDR 확대: 개발자, 운영자 PC에 EDR 필수 설치 및 탐지 정책 강화
  • 소프트웨어 허용 목록: 공식 패키지 레지스트리만 허용, 사내 프록시로 검증
  • 유틸리티 설치 통제: 출처 불명 도구 설치 금지, 보안 공지 주기적 공유
  • 코드 리뷰 체크리스트: 비밀정보 포함 여부, 권한 범위, 로그 노출 여부 확인

4.3 클라우드 보안 통제

통제 영역 적용 방안
인증 IAM 사용자 MFA 강제, 루트 계정 접근 차단, SSO 연동
권한 Permission Boundary 설정, SCP로 고위험 API 차단
네트워크 VPC Endpoint 사용, S3 접근은 PrivateLink 경유
탐지 GuardDuty, Security Hub, CloudWatch Anomaly Detection 활성화
로깅 CloudTrail 다중 리전, 조직 트레일, 로그 무결성 검증 활성화
데이터 보호 S3 기본 암호화, KMS CMK 사용, 백업 버킷은 별도 계정 격리

4.4 모니터링 및 대응 체계

  • 이상 징후 알림 룰
    • 루트 계정 사용
    • IAM 정책 변경, 사용자 생성
    • S3 퍼블릭 전환
    • 비정상 국가 IP 접근
    • 대량 데이터 다운로드
  • 월간 모의훈련: 키 유출 시나리오 기반 대응 훈련
  • 위협 인텔리전스: KISA 보안공지, 클라우드 벤더 보안 권고 정기 모니터링

5. 보안 담당자 체크리스트

일일 점검

  • GuardDuty High 심각도 이벤트 확인
  • 전일 생성된 IAM 사용자 및 Access Key 확인
  • S3 퍼블릭 버킷 변경 알림 확인

주간 점검

  • 90일 이상 미사용 Access Key 목록 추출
  • 관리자 권한 보유자 변동 사항 검토
  • CloudTrail 비활성화 시도 로그 확인

월간 점검

  • 전사 키 로테이션 이행률 점검
  • 개발 레포지토리 비밀 스캔 결과 리뷰
  • 개발자 단말 EDR 탐지 현황 공유

분기 점검

  • IAM 정책 전반 Least Privilege 재평가
  • 모의 침투 훈련 및 대응 절차 개선
  • 백업 데이터 접근 권한 재검토

6. 참고 명령어 모음

키 비활성화

Bash

aws iam update-access-key --user-name <user> --access-key-id AKIA... --status Inactive

역할 세션 무효화

Bash

aws iam update-assume-role-policy --role-name <role> --policy-document file://deny.json

S3 퍼블릭 차단

Bash

aws s3control put-public-access-block --account-id <id> \  --public-access-block-configuration BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true

비밀 스캔

Bash

gitleaks detect --source . --report-format sarif --report-path gitleaks.sarif

7. 결론

클라우드 자격증명 탈취 사고는 개발자 PC 감염에서 시작해 전사 데이터 유출로 끝난다. 핵심은 키를 더 잘 숨기는 것이 아니라 키가 없어도 운영되는 구조로 전환하는 것이다.

보안 담당자는 기술적 통제와 함께 개발 문화 개선을 병행해야 한다. 장기 키 폐기, 역할 기반 접근, 단말 보안 강화, 그리고 빠른 탐지와 증적 보존이 실무에서 가장 효과적인 방어선이다.

사고가 터진 후 대응하는 비용은 예방 비용의 수십 배다. 지금 키 인벤토리부터 점검하자.

반응형