AWS - RDS Privesc
RDS - リレーショナルデータベースサービス
RDSに関する詳細情報は以下を確認してください:
AWS - 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のように、パラメータグループでロールARNを指定する必要があるなど、追加の設定が必要であることに注意してください。
rds:CreateDBInstance
rds:CreateDBInstance
この権限だけで、攻撃者は既存のクラスター内に新しいインスタンスを作成でき、IAMロールが付与されている場合があります。マスターユーザーパスワードを変更することはできませんが、新しいデータベースインスタンスをインターネットに公開できる可能性があります。
rds:CreateDBInstance
, iam:PassRole
rds:CreateDBInstance
, iam:PassRole
TODO: テスト
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インスタンス内の機密データへのアクセスまたはデータの不正な変更。
Last updated