A. 클라우드 인증 정보

1. AWS 자격증명

IAM

  • AWS 리소스에 대한 액세스를 제어할 수 있는 서비스
  • 인증 및 권한 부여된 대상을 제어


액세스 키(Access Key)

  • IAM 사용자, Root 사용자에 대한 자격 증명
  • CLI 또는 API에 대한 요청 및 서명
  • 액세스 키 ID(AWS_ACCESS_KEY)와 보안 액세스 키(AWS_SECRET_KEY)로 구성


IAM 임시 보안 자격 증명(SESSION TOKEN)

  • STS(Security Token Service)
  • 리소스에 대한 액세스를 제어할 수 있는 임시 보안 자격 증명
  • 지정 기간 후에 만료됨


IAM - Access Key

  • Access key는 사용자 별 최대 2개
  • 발급 시에만 Secret 키 쌍 제공
  • 사용하지 않는 key는 비활성화, 삭제
  • Key 분실 시 복구 불가, 제거 후 재발급


2. 인증 정보 획득 경로

다음 진단 항목 및 경로를 통해 인증정보 획득 가능

 

AWS 특화 진단 항목

  • Lambda(SSRF)
  • Lambda(운영체제 명령 실행)
  • Lambda(XXE)
  • S3: 불필요한 Public 설정


AWS 인증정보 노출 경로

  • 화면 노출(스크린 샷)
  • 코드 형상관리(GitHub, CodeCommit)
  • AWS 에러 메시지(access denied 포함)
  • 공용 EBS 스냅샷(EC2 -> Snapshots -> Public Snapshots)
  • 공용 AMI(EC2 -> AMIs -> Public Images)
  • RDS 공용 스냅샷(RDS -> Snapshots -> All Public Snapshots)
  • 사용자의 일반적인 실수(하드코딩된 중요정보 노출, 인터넷 상 문의글 작성 시 노출)


B. 진단도구 소개

1. 진단 도구

클라우드 진단을 위해 필요한 도구 소개

  • 웹, 네트워크 진단도구
    • 스캐너 : AppScan, Nmap, Netcat ...
    • 프록시 : Burp Suite, Fiddler, Paros ...
    • 네트워크 : Wireshark, Telnet, SSH ...
    • 스크립트 언어 : Python, Shell Script ...


AWS CLI(명령줄 인터페이스)

  • AWS에서 공식 제공하는 AWS 서비스를 관리하는 통합 도구
  • 명령줄에서 제어하고 스크립트를 통해 자동화
  • AWS 관리 페이지에서 제공하는 것과 동일한 기능 명령 실행
기존  웹 취약성 진단 도구 + AWS 특화 진단 도구

 

2. AWS CLI 설치

CLI version 1 vs 2

  • version 1.x : 초기 AWS 호환성을 위해 유지된 CLI 도구
  • version 2.x : 현재 버전, 하위 버전에 대해 일부 호환성 제공(권장)
  • 복수설치 시 선행 등록된 환경변수 버전으로 동작

 

3. AWS CLI 사용방법


4. 실습



C. IAM 권한 상승

1. 개요

IAM

  • 선행조건 : AWS 인증정보 필요, IAM 권한 필요
  • AWS 인증정보를 이용하여 AWS 계정 ID와 IAM username 획득 가능
    • aws sts get-caller-identity --profile [alias]

  • IAM user가 가지고 있는 권한 조회
    • aws iam list-user-policies --user-name [IAM username] --profile [alisas]


IAM: list-attached-*

  • list-user-policies
    • user(사용자)에 직접 선언된 정책
  • list-attached-role-policies
    • role(역할)에 의해 간접 선언된 정책
  • list-attached-group-policies
    • group(그룹)에 의해 간접 선언된 정책



2. 취약성 발생 원리

 

권한 설정 미흡

  • 사용자 권한에 S3ReadOnlyAccess 권한 설정
  • 그룹 권한에 S3FullAccess 권한 설정
  • 상위 권한인 S3FullAccess로 계정 권한 동작

IAM 정책 버전 관리

  • AWS에서 관리형 정책을 변경할 때, 변경된 정책은 기존 정책을 덮어쓰지 않음
  • 변경 시, 정책의 새 버전을 생성

 

공격자는 관리형 정책의 버전을 변경하여 권한 상승

  • 정책의 기본 버전(Default version)을 설정할 수 있는 권한
    • iam:SetDefaultPolicyVersion
    • iam:CreatePolicyVersion
    • iam:*

 

IAM 정책 버전 관리

  • 최초 권한 생성 시 단일 권한으로 동작
  • 둘 이상일 경우 기본 권한 선택 필요
  • 버전은 최대 5개까지 유지


기본 정책 버전 변경

  • 해당하는 버전의 권한으로 변경
  • (예시) v4. S3 관련 일부 권한 허용
  • (예시) v3. AWS 전체 권한 허용
  • (예시) v3. 으로 변경하여 권한 상승


5. 보안대책

대응 방안

  • 과도 부여된 정책 버전 삭제
  • 정책의 기본 버전을 설정할 수 있는 권한 제거




D. 부적절한 API 호출 권한 설정

1. 개요

부적절한 API 호출 권한 설정

 

  • 다양한 API 호출 경로 존재
    • Lambda, EC2, AWS 서비스, 클라우드 외부 등
  • 사용자 검증 및 액세스 제어, 모니터링, 버전관리 지원
  • 각 서비스는 IAM 권한이 할당되어 있으며 권한 설정 미흡으로 인한 취약성 발생
  • 민감 정보가 응답 값으로 반환될 수 있는 API가 존재

API Gateway 접근 제어

  • 권한 부여자(Authorization)
    • Lambda 함수를 사용하여 API 메서드에 대한 액세스를 제어
    • Oauth 또는 SAML과 같은 토큰 인증자 사용 가능
    • 호출자의 자격 증명을 확인하는 사용자 지정 인증 체계 구현
  • API 키 검증(API Key Required)
    • API 요청 시마다 API Key 검증
    • 요청 헤더에 X-API-Key 값으로 API 키 전달

 

2. 시나리오

부적절한 API 호출 권한 설정 취약성

  • 권한부여자의 IAM 권한 설정 미흡 + AWS SDK를 통한 내부 API 호출 가능
    • 민감 정보 유출 취약성 발생 가능
    • 자원 정책 설정 미흡으로 AWS 계정을 가진 사용자의 권한으로 API 호출 가능

- 아키텍처 구성에 따라 취약성 발생 시나리오 다양
   -> S3 파일 업로드 Lambda 함수에서 파일 목록 노출 취약성 발생
   -> EC2 포함된 인증 정보 이용하여 백업 볼륨 생성 및 공격자의 인스턴스에 로드
   -> AWS CodeCommit에 포함된 인증 정보 이용하여 DB 접속 정보 및 데이터 유출


3. 보안대책

API 호출 시 권한 검증

  • API Gateway - Resources - Method - Settings
    • Authorization : AWS IAM 또는 인증자 설정
    • API Key Requred : true

 

IAM 권한 설정

  • IAM 권한 설정
    • 접근 가능한 기능과 리소스 정의
    • 서비스에 할당된 IAM 역할 관리 정책 관리
      • ex) S3 업로드 작업을 하는 Lambda함수의 경우 ARN을 통해 해당 버킷만 접근 권한 지정
  • 권한 설정 시, 호출자(리소스) 기반 정책, 역할 기반 정책에서의 권한 충돌 주의
    • 최소 권한 액세스 구현
    • 로깅 구현