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을 통해 해당 버킷만 접근 권한 지정
- 권한 설정 시, 호출자(리소스) 기반 정책, 역할 기반 정책에서의 권한 충돌 주의
- 최소 권한 액세스 구현
- 로깅 구현
'AWS Cloud > Cloud Hacking' 카테고리의 다른 글
AWS Cloud Hacking - Chapter 6. 인증 및 API 진단 (0) | 2024.05.28 |
---|---|
AWS Cloud Hacking - Chapter 5. S3 및 불필요 리소스 진단 (0) | 2024.05.28 |
AWS Cloud Hacking - Chapter 4. 서버 & 서버리스 진단 Part 2 (0) | 2024.05.28 |
AWS Cloud Hacking - Chapter 4. 서버 & 서버리스 진단 Part 1 (0) | 2024.05.28 |
AWS Cloud Hacking - Chapter 3. 클라우드 웹 호스팅 아키텍처 (0) | 2024.05.27 |