← 목록으로AWS

EC2 IMDSv2 보안 강화 — SSRF 공격으로부터 IAM 자격증명 보호

EC2 Instance Metadata Service v2(IMDSv2)를 강제 적용하여 SSRF 공격을 통한 IAM 자격증명 탈취를 방어하는 보안 가이드. Capital One 해킹 사례와 공격 원리 분석 포함.

AWSSecurityEC2DevOps
2026-04-06

IMDS(Instance Metadata Service)란

EC2 인스턴스 내부에서 http://169.254.169.254/로 접근하면 인스턴스 자신의 메타데이터를 조회할 수 있는 서비스입니다.

조회 가능한 정보:

  • 인스턴스 ID, 리전, AZ
  • 보안 그룹, 네트워크 정보
  • IAM Role의 임시 자격증명 (Access Key, Secret Key, Session Token)
  • UserData (인스턴스 시작 스크립트)

IMDSv1 vs IMDSv2

IMDSv1IMDSv2
요청 방식단순 GET 요청PUT으로 토큰 발급 → 토큰으로 GET 요청 (2단계)
SSRF 공격취약방어됨 (토큰 발급 시 PUT 필요, 리다이렉트 차단)
도입 시기EC2 출시부터2019년 11월
# IMDSv1 (토큰 없이 바로 조회 - 위험)
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/[role-name]
 
# IMDSv2 (토큰 발급 후 조회 - 안전)
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" \
  -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
curl -H "X-aws-ec2-metadata-token: $TOKEN" \
  http://169.254.169.254/latest/meta-data/iam/security-credentials/[role-name]

SSRF 공격으로 인한 실제 피해 사례

Capital One 해킹 사건 (2019년)

  • 피해 규모: 1억 600만 명 개인정보 유출, 벌금 $8,000만 이상
  • 공격 방식: WAF의 SSRF 취약점 → EC2 메타데이터(IMDSv1)에서 IAM Role 자격증명 탈취 → S3 버킷 700개 접근
  • 이 사건 이후 AWS가 IMDSv2를 출시

참고: Krebs on Security, Wiz.io

SSRF → IAM 자격증명 탈취 → RCE 공격 시나리오

1. 웹 애플리케이션의 SSRF 취약점 발견
   → 서버가 사용자 입력 URL로 요청을 보내는 기능 악용

2. SSRF로 EC2 메타데이터 접근
   → http://169.254.169.254/latest/meta-data/iam/security-credentials/[role-name]
   → IAM Role의 AccessKeyId, SecretAccessKey, Token 획득

3. 탈취한 자격증명으로 AWS 리소스 접근
   → S3 버킷 데이터 다운로드, EC2 인스턴스 제어

4. (심화) UserData를 이용한 원격 코드 실행(RCE)
   → 인스턴스 중지 → UserData에 리버스 쉘 삽입 → 재시작 시 쉘 탈취

IMDSv2가 SSRF를 방어하는 원리

IMDSv2는 토큰 발급 시 PUT 요청이 필요한데, 일반적인 SSRF 취약점은 GET/POST 리다이렉트만 가능하고 PUT 요청을 보내기 어렵습니다. 또한 커스텀 헤더(X-aws-ec2-metadata-token-ttl-seconds)가 필수인데, SSRF로는 커스텀 헤더 추가가 어렵습니다.

SSRF 공격 단계IMDSv1IMDSv2
메타데이터 URL 접근GET으로 바로 가능토큰 없이 접근 불가
토큰 발급불필요PUT + 커스텀 헤더 필요 (SSRF로 어려움)
자격증명 탈취성공차단됨

현재 상태 확인 방법

CLI로 확인

aws ec2 describe-instances \
  --instance-ids i-[instance-id] \
  --query "Reservations[*].Instances[*].MetadataOptions.HttpTokens" \
  --output text
# "required" → 안전 / "optional" → 위험

콘솔에서 확인

EC2 콘솔 → 인스턴스 선택 → "세부 정보" 탭 → "인스턴스 메타데이터 옵션" 섹션에서 IMDSv2 값을 확인합니다.

  • "필수(Required)" → IMDSv2만 허용 (안전)
  • "선택 사항(Optional)" → IMDSv1도 허용 (위험)

IMDSv2 강제 적용 방법

aws ec2 modify-instance-metadata-options \
  --instance-id i-[instance-id] \
  --http-tokens required \
  --http-endpoint enabled

인스턴스 재부팅 불필요, 즉시 적용됩니다.


적용 전 확인사항

IMDSv2를 "필수"로 변경하면 IMDSv1 요청이 즉시 차단됩니다.

확인 항목확인 방법
AWS SDK 버전2019년 이후 버전이면 IMDSv2 자동 지원
CloudWatch Agentv1.247350.0 이상이면 지원
SSM Agentv2.3.672.0 이상이면 지원
직접 작성한 스크립트curl http://169.254.169.254/... 형태의 IMDSv1 호출 확인

CloudWatch 메트릭으로 IMDSv1 사용 여부 확인

EC2 인스턴스의 MetadataNoToken 메트릭 값을 확인하면 IMDSv1 요청 횟수를 알 수 있습니다.

  • 값이 0 → IMDSv1 사용 프로세스 없음 → 안전하게 IMDSv2 강제 가능
  • 값이 0보다 큼 → 해당 프로세스 업데이트 필요

적용 우선순위

우선순위대상이유
높음웹 애플리케이션 실행 인스턴스SSRF 취약점 노출 가능성 높음
높음IAM Role이 할당된 인스턴스자격증명 탈취 시 피해 큼
높음퍼블릭 서브넷 인스턴스외부 공격 표면 넓음
중간프라이빗 서브넷 인스턴스내부에서만 접근 가능하지만 보험 차원
낮음IAM Role 없는 인스턴스탈취할 자격증명 없음

정리

  • IMDSv1은 SSRF 공격으로 IAM 자격증명이 탈취될 수 있는 심각한 보안 취약점
  • Capital One 해킹 사건(1억 600만 명 유출)이 대표적 실제 피해 사례
  • IMDSv2는 PUT + 커스텀 헤더 기반 토큰 발급으로 SSRF를 원천 차단
  • MetadataNoToken 메트릭으로 사전 영향도 확인 후 안전하게 적용 가능
  • AWS Config ec2-imdsv2-check 규칙으로 미적용 인스턴스 지속 감시