# AWS - Перерахунок реляційної бази даних (RDS)
{{#include ../../../banners/hacktricks-training.md}}
## Основна інформація
**Служба реляційних баз даних (RDS)**, що пропонується AWS, призначена для спрощення розгортання, експлуатації та масштабування **реляційної бази даних у хмарі**. Ця служба пропонує переваги економії витрат і масштабованості, автоматизуючи трудомісткі завдання, такі як постачання апаратного забезпечення, налаштування бази даних, патчинг і резервне копіювання.
AWS RDS підтримує різні широко використовувані реляційні бази даних, включаючи MySQL, PostgreSQL, MariaDB, Oracle Database, Microsoft SQL Server та Amazon Aurora, з сумісністю як для MySQL, так і для PostgreSQL.
Ключові особливості RDS включають:
- **Управління екземплярами бази даних** спрощено.
- Створення **реплік для читання** для покращення продуктивності читання.
- Налаштування **мульти-зональних (AZ) розгортань** для забезпечення високої доступності та механізмів відмови.
- **Інтеграція** з іншими службами AWS, такими як:
- AWS Identity and Access Management (**IAM**) для надійного контролю доступу.
- AWS **CloudWatch** для всебічного моніторингу та метрик.
- AWS Key Management Service (**KMS**) для забезпечення шифрування в спокої.
## Облікові дані
При створенні кластера БД майстерний **ім'я користувача** може бути налаштований (**`admin`** за замовчуванням). Щоб згенерувати пароль цього користувача, ви можете:
- **Вказати** **пароль** самостійно
- Сказати RDS **автоматично згенерувати** його
- Сказати RDS керувати ним у **AWS Secret Manager**, зашифрованому за допомогою ключа KMS
### Аутентифікація
Існує 3 типи варіантів аутентифікації, але використання **майстерного пароля завжди дозволено**:
### Публічний доступ та VPC
За замовчуванням **публічний доступ не надається** базам даних, однак він **може бути наданий**. Тому за замовчуванням лише машини з тієї ж VPC зможуть отримати доступ до неї, якщо вибрана **група безпеки** (зберігається в EC2 SG) дозволяє це.
Замість того, щоб відкривати екземпляр БД, можна створити **RDS Proxy**, який **покращує** **масштабованість** та **доступність** кластера БД.
Більше того, **порт бази даних також може бути змінений**.
### Шифрування
**Шифрування увімкнено за замовчуванням** за допомогою керованого ключа AWS (може бути обрано CMK замість цього).
Увімкнувши своє шифрування, ви увімкнули **шифрування в спокої для вашого сховища, знімків, реплік для читання та ваших резервних копій**. Ключі для управління цим шифруванням можуть бути видані за допомогою **KMS**.\
Не можливо додати цей рівень шифрування після створення вашої бази даних. **Це потрібно зробити під час її створення**.
Однак існує **обхідний шлях, що дозволяє зашифрувати незашифровану базу даних наступним чином**. Ви можете створити знімок вашої незашифрованої бази даних, створити зашифровану копію цього знімка, використати цей зашифрований знімок для створення нової бази даних, і, нарешті, ваша база даних буде зашифрована.
#### Прозоре шифрування даних (TDE)
Поряд з можливостями шифрування, властивими RDS на рівні програми, RDS також підтримує **додаткові механізми шифрування на платформі** для захисту даних у спокої. Це включає **Прозоре шифрування даних (TDE)** для Oracle та SQL Server. Однак важливо зазначити, що хоча TDE підвищує безпеку, шифруючи дані в спокої, це також може **вплинути на продуктивність бази даних**. Цей вплив на продуктивність особливо помітний при використанні разом з криптографічними функціями MySQL або криптографічними функціями Microsoft Transact-SQL.
Щоб використовувати TDE, необхідні певні попередні кроки:
1. **Асоціація групи параметрів**:
- База даних повинна бути асоційована з групою параметрів. Групи параметрів служать контейнерами для налаштувань і функцій, полегшуючи управління базою даних, включаючи покращення безпеки.
- Однак важливо зазначити, що групи параметрів доступні лише для певних движків бази даних і версій.
2. **Включення TDE в групу параметрів**:
- Після асоціації з групою параметрів опція Oracle Transparent Data Encryption повинна бути включена в цю групу.
- Важливо усвідомлювати, що після додавання опції TDE до групи параметрів вона стає постійною частиною і не може бути видалена.
3. **Режими шифрування TDE**:
- TDE пропонує два різні режими шифрування:
- **Шифрування таблиць TDE**: Цей режим шифрує цілі таблиці, забезпечуючи ширший обсяг захисту даних.
- **Шифрування стовпців TDE**: Цей режим зосереджується на шифруванні конкретних, окремих елементів у базі даних, що дозволяє більш детально контролювати, які дані шифруються.
Розуміння цих попередніх вимог і оперативних тонкощів TDE є важливим для ефективного впровадження та управління шифруванням у RDS, забезпечуючи як безпеку даних, так і відповідність необхідним стандартам.
### Перерахунок
```bash
# Clusters info
## Get Endpoints, username, port, iam auth enabled, attached roles, SG
aws rds describe-db-clusters
aws rds describe-db-cluster-endpoints #Cluster URLs
aws rds describe-db-cluster-backtracks --db-cluster-identifier
## Cluster snapshots
aws rds describe-db-cluster-snapshots
# Get DB instances info
aws rds describe-db-instances #username, url, port, vpc, SG, is public?
aws rds describe-db-security-groups
## Find automated backups
aws rds describe-db-instance-automated-backups
## Find snapshots
aws rds describe-db-snapshots
aws rds describe-db-snapshots --include-public --snapshot-type public
## Restore snapshot as new instance
aws rds restore-db-instance-from-db-snapshot --db-instance-identifier --db-snapshot-identifier --availability-zone us-west-2a
# Any public snapshot in the account
aws rds describe-db-snapshots --snapshot-type public
# Proxies
aws rds describe-db-proxy-endpoints
aws rds describe-db-proxy-target-groups
aws rds describe-db-proxy-targets
## reset credentials of MasterUsername
aws rds modify-db-instance --db-instance-identifier --master-user-password --apply-immediately
```
### Неавтентифікований доступ
{{#ref}}
../aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md
{{#endref}}
### Підвищення привілеїв
{{#ref}}
../aws-privilege-escalation/aws-rds-privesc.md
{{#endref}}
### Після експлуатації
{{#ref}}
../aws-post-exploitation/aws-rds-post-exploitation.md
{{#endref}}
### Постійність
{{#ref}}
../aws-persistence/aws-rds-persistence.md
{{#endref}}
### SQL-ін'єкція
Існують способи доступу до даних DynamoDB з використанням **SQL-синтаксису**, отже, типові **SQL-ін'єкції також можливі**.
{{#ref}}
https://book.hacktricks.xyz/pentesting-web/sql-injection
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}