AWS - RDS Privesc
RDS - 관계형 데이터베이스 서비스
RDS에 대한 자세한 정보는 다음을 확인하세요:
pageAWS - Relational Database (RDS) Enumrds:ModifyDBInstance
rds:ModifyDBInstance
해당 권한을 가진 공격자는 마스터 사용자의 비밀번호를 수정하고 데이터베이스 내부 로그인을 변경할 수 있습니다:
데이터베이스에 연락할 수 있는 능력이 있어야 합니다 (일반적으로 내부 네트워크에서만 접근 가능합니다).
잠재적인 영향: 데이터베이스 내부에서 민감한 정보를 찾을 수 있습니다.
rds-db:connect
문서에 따르면 이 권한을 가진 사용자는 DB 인스턴스에 연결할 수 있습니다.
RDS 역할 IAM 권한 남용
Postgresql (Aurora)
**SELECT datname FROM pg_database;
**를 실행하여 **rdsadmin
**이라는 데이터베이스를 찾으면 AWS postgresql 데이터베이스에 접속한 것을 알 수 있습니다.
먼저이 데이터베이스가 다른 AWS 서비스에 액세스하는 데 사용되었는지 확인할 수 있습니다. 설치된 확장 기능을 확인하여 이를 확인할 수 있습니다:
만약 **aws_s3
**와 같은 것을 발견하면 이 데이터베이스가 어떤 종류의 S3 액세스를 가지고 있는지 가정할 수 있습니다 (다른 확장자로는 aws_ml
및 aws_lambda
등이 있음).
또한, **aws rds describe-db-clusters
**를 실행할 수 있는 권한이 있다면 AssociatedRoles
필드에서 연결된 IAM 역할이 있는지 확인할 수 있습니다. 만약 있다면, 이 데이터베이스가 다른 AWS 서비스에 액세스할 수 있도록 준비되었다고 가정할 수 있습니다. 역할의 이름 (또는 역할의 권한을 얻을 수 있다면)을 기반으로 데이터베이스가 어떤 추가 액세스를 가지고 있는지 추측할 수 있습니다.
이제 버킷 내의 파일을 읽으려면 전체 경로를 알아야 합니다. 다음과 같이 읽을 수 있습니다:
만약 원시 AWS 자격 증명을 가지고 있다면 다음을 사용하여 S3 데이터에 액세스할 수도 있습니다:
Postgresql은 S3에 액세스하기 위해 어떤 매개변수 그룹 변수도 변경할 필요가 없습니다.
Mysql (Aurora)
Mysql 내에서 쿼리 **SELECT User, Host FROM mysql.user;
**를 실행하고 **rdsadmin
**이라는 사용자가 있다면 AWS RDS mysql db에 있는 것으로 가정할 수 있습니다.
Mysql 내에서 **show variables;
**를 실행하고 aws_default_s3_role
, aurora_load_from_s3_role
, **aurora_select_into_s3_role
**과 같은 변수에 값이 있다면 데이터베이스가 S3 데이터에 액세스할 수 있도록 준비되어 있는 것으로 가정할 수 있습니다.
또한, **aws rds describe-db-clusters
**를 실행할 권한이 있다면 클러스터에 연결된 역할이 있는지 확인할 수 있습니다(일반적으로 AWS 서비스에 액세스할 수 있는 것을 의미합니다).
이제 버킷 내의 파일을 읽으려면 전체 경로를 알아야 합니다. 다음과 같이 읽을 수 있습니다:
rds:AddRoleToDBCluster
, iam:PassRole
rds:AddRoleToDBCluster
, iam:PassRole
rds:AddRoleToDBCluster
및 iam:PassRole
권한을 가진 공격자는 지정된 역할을 기존 RDS 인스턴스에 추가할 수 있습니다. 이로 인해 공격자가 민감한 데이터에 액세스하거나 인스턴스 내의 데이터를 수정할 수 있습니다.
잠재적 영향: RDS 인스턴스의 민감한 데이터에 액세스하거나 데이터를 무단으로 수정할 수 있습니다. 일부 DB는 추가 구성이 필요할 수 있습니다. 예를 들어 Mysql은 aprameter 그룹에서 역할 ARN을 지정해야 합니다.
rds:CreateDBInstance
rds:CreateDBInstance
이 권한만 있으면 공격자는 이미 존재하고 IAM 역할이 연결된 클러스터 내에 새 인스턴스를 생성할 수 있습니다. 그는 마스터 사용자 암호를 변경할 수는 없지만 새 데이터베이스 인스턴스를 인터넷에 노출시킬 수도 있습니다:
rds:CreateDBInstance
, iam:PassRole
rds:CreateDBInstance
, iam:PassRole
할 일: 테스트
rds:CreateDBInstance
및 iam:PassRole
권한을 가진 공격자는 지정된 역할이 첨부된 새로운 RDS 인스턴스를 생성할 수 있습니다. 공격자는 그런 다음 민감한 데이터에 액세스하거나 인스턴스 내의 데이터를 수정할 수 있습니다.
첨부해야 하는 역할/인스턴스 프로필의 일부 요구 사항(여기에서):
프로필은 귀하의 계정에 존재해야 합니다.
프로필은 Amazon EC2가 가정할 수 있는 IAM 역할을 가져야 합니다.
인스턴스 프로필 이름과 관련된 IAM 역할 이름은
AWSRDSCustom
접두사로 시작해야 합니다.
잠재적인 영향: RDS 인스턴스 내의 민감한 데이터에 액세스하거나 데이터를 무단으로 수정할 수 있음.
rds:AddRoleToDBInstance
, iam:PassRole
rds:AddRoleToDBInstance
, iam:PassRole
rds:AddRoleToDBInstance
및 iam:PassRole
권한을 가진 공격자는 특정 역할을 기존 RDS 인스턴스에 추가할 수 있습니다. 이로 인해 공격자가 인스턴스 내의 민감한 데이터에 액세스하거나 데이터를 수정할 수 있을 수 있습니다.
이 작업을 수행하려면 DB 인스턴스가 클러스터 외부에 있어야 함
잠재적인 영향: RDS 인스턴스의 민감한 데이터에 대한 액세스 또는 데이터에 대한 미인가 수정.
最終更新