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
권한 설정 미흡
- 사용자 권한에 S3 ReadOnlyAccess 권한 설정
- 그룹 권한에 S3 FullAccess 권한 설정
- 상위 권한인 S3 FullAccess로 계정 권한 동작
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을 통해 해당 버킷만 접근 권한 지정
- 권한 설정 시, 호출자(리소스) 기반 정책, 역할 기반 정책에서의 권한 충돌 주의
-> 최소 권한 액세스 구현
-> 로깅 구현
[AWS] Network - ELB(Elastic Load Balancing)