본문 바로가기

Education/[AWS] Cloud Hacking

[AWS] Chapter7. 클라우드 취약점 진단 심화

1. 클라우드 인증 정보


01. 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 분실 시 복구 불가, 제거 후 재발급


02. 인증 정보 획득 경로
다음 진단 항목 및 경로를 통해 인증정보 획득 가능
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)
- 사용자의 일반적인 실수(하드코딩된 중요정보 노출, 인터넷 상 문의글 작성 시 노출)


2. 진단도구 소개


01. 진단 도구
클라우드 진단을 위해 필요한 도구 소개
  - 웹, 네트워크 진단도구
  -> 스캐너 : AppScan, Nmap, Netcat ...
  -> 프록시 : Burp Suite, Fiddler, Paros ...
  -> 네트워크 : Wireshark, Telnet, SSH ...
  -> 스크립트 언어 : Python, Shell Script ...

AWS CLI(명령줄 인터페이스)
- AWS에서 공식 제공하는 AWS 서비스를 관리하는 통합 도구
- 명령줄에서 ㅈ어하고 스크립트를 통해 자동화
- AWS 관리 페이지에서 제공하는 것과 동일한 기능 명령 실행

기존  웹 취약성 진단 도구 + AWS 특화 진단 도구

 

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

 

03. AWS CLI 사용방법


04. 실습



3. IAM 권한 상승


01 개요
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(그룹)에 의해 간접 선언된 정책



02. 취약성 발생 원리 1

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


03. 취약성 발생 원리 2
IAM 정책 버전 관리
- AWS에서 관리형 정책을 변경할 때, 변경된 정책은 기존 정책을 덮어쓰지 않음
- 변경 시, 정책의 새 버전을 생성

- 공격자는 관리형 정책의 버전을 변경하여 권한 상승
- 정책의 기본 버전(Default version)을 설정할 수 있는 권한
  -> iam:SetDefaultPolicyVersion
  -> iam:CreatePolicyVersion
  -> iam:*

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

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


05. 보안대책
대응 방안
- 과도 부여된 정책 버전 삭제
- 정책의 기본 버전을 설정할 수 있는 권한 제거




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


01 개요
부적절한 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 키 전달


02. 시나리오
부적절한 API 호출 권한 설정 취약성
- 권한부여자의 IAM 권한 설정 미흡 + AWS SDK를 통한 내부 API 호출 가능
   -> 민감 정보 유출 취약성 발생 가능
   -> 자원 정책 설정 미흡으로 AWS 계정을 가진 사용자의 권한으로 API 호출 가능

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


04. 보안대책
API 호출 시 권한 검증
- API Gateway - Resources - Method - Settings
   -> Authorization : AWS IAM 또는 인증자 설정
   -> API Key Requred : true

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