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では、パラメータグループでロール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インスタンス内の機密データへのアクセスやデータへの不正な変更。
最終更新