# AWS - Relational Database (RDS) Enum

{{#include ../../../banners/hacktricks-training.md}}

## Osnovne informacije

**Relational Database Service (RDS)** koji nudi AWS je dizajniran da pojednostavi implementaciju, rad i skaliranje **relacione baze podataka u oblaku**. Ova usluga nudi prednosti troškovne efikasnosti i skalabilnosti dok automatizuje radno intenzivne zadatke kao što su obezbeđivanje hardvera, konfiguracija baze podataka, zakrpe i rezervne kopije.

AWS RDS podržava različite široko korišćene motore relacijskih baza podataka uključujući MySQL, PostgreSQL, MariaDB, Oracle Database, Microsoft SQL Server i Amazon Aurora, sa kompatibilnošću za MySQL i PostgreSQL.

Ključne karakteristike RDS uključuju:

- **Upravljanje instancama baza podataka** je pojednostavljeno.
- Kreiranje **read replicas** za poboljšanje performansi čitanja.
- Konfiguracija **multi-Availability Zone (AZ) implementacija** za obezbeđivanje visoke dostupnosti i mehanizama prebacivanja.
- **Integracija** sa drugim AWS uslugama, kao što su:
- AWS Identity and Access Management (**IAM**) za robusnu kontrolu pristupa.
- AWS **CloudWatch** za sveobuhvatno praćenje i metrike.
- AWS Key Management Service (**KMS**) za obezbeđivanje enkripcije u mirovanju.

## Akreditivi

Kada se kreira DB klaster, glavno **korisničko ime** može biti konfigurisano (**`admin`** po defaultu). Da biste generisali lozinku za ovog korisnika možete:

- **Naznačiti** **lozinku** sami
- Reći RDS da je **automatski generiše**
- Reći RDS da je upravlja u **AWS Secret Manager** enkriptovano KMS ključem

<figure><img src="../../../images/image (144).png" alt=""><figcaption></figcaption></figure>

### Autentifikacija

Postoje 3 tipa opcija za autentifikaciju, ali korišćenje **glavne lozinke je uvek dozvoljeno**:

<figure><img src="../../../images/image (227).png" alt=""><figcaption></figcaption></figure>

### Javni pristup i VPC

Po defaultu **nema javnog pristupa** bazama podataka, međutim, **može biti odobren**. Stoga, po defaultu samo mašine iz iste VPC će moći da mu pristupe ako odabrana **grupa sigurnosti** (smeštena u EC2 SG) to dozvoljava.

Umesto izlaganja DB instance, moguće je kreirati **RDS Proxy** koji **poboljšava** **skalabilnost** i **dostupnost** DB klastera.

Pored toga, **port baze podataka se takođe može modifikovati**.

### Enkripcija

**Enkripcija je omogućena po defaultu** koristeći AWS upravljani ključ (može se izabrati i CMK).

Omogućavanjem vaše enkripcije, omogućavate **enkripciju u mirovanju za vašu skladištenje, snimke, read replicas i vaše rezervne kopije**. Ključevi za upravljanje ovom enkripcijom mogu biti izdati korišćenjem **KMS**.\
Nije moguće dodati ovaj nivo enkripcije nakon što je vaša baza podataka kreirana. **To mora biti učinjeno tokom njene kreacije**.

Međutim, postoji **rešenje koje vam omogućava da enkriptujete neenkriptovanu bazu podataka na sledeći način**. Možete kreirati snimak vaše neenkriptovane baze podataka, kreirati enkriptovanu kopiju tog snimka, koristiti tu enkriptovanu snimku za kreiranje nove baze podataka, i na kraju, vaša baza podataka bi tada bila enkriptovana.

#### Transparent Data Encryption (TDE)

Pored mogućnosti enkripcije inherentnih RDS na nivou aplikacije, RDS takođe podržava **dodatne mehanizme enkripcije na platformi** za zaštitu podataka u mirovanju. Ovo uključuje **Transparent Data Encryption (TDE)** za Oracle i SQL Server. Međutim, važno je napomenuti da, iako TDE poboljšava sigurnost enkripcijom podataka u mirovanju, može takođe **uticati na performanse baze podataka**. Ovaj uticaj na performanse je posebno primetan kada se koristi u kombinaciji sa MySQL kriptografskim funkcijama ili Microsoft Transact-SQL kriptografskim funkcijama.

Da biste koristili TDE, potrebni su određeni preliminarni koraci:

1. **Asocijacija sa grupom opcija**:
- Baza podataka mora biti povezana sa grupom opcija. Grupe opcija služe kao kontejneri za podešavanja i funkcije, olakšavajući upravljanje bazom podataka, uključujući poboljšanja sigurnosti.
- Međutim, važno je napomenuti da su grupe opcija dostupne samo za određene motore baza podataka i verzije.
2. **Uključivanje TDE u grupu opcija**:
- Kada je povezana sa grupom opcija, opcija Oracle Transparent Data Encryption treba biti uključena u tu grupu.
- Važno je prepoznati da, kada se TDE opcija doda grupi opcija, postaje trajna i ne može se ukloniti.
3. **TDE režimi enkripcije**:
- TDE nudi dva različita režima enkripcije:
- **TDE Tablespace Encryption**: Ovaj režim enkriptuje cele tabele, pružajući širi opseg zaštite podataka.
- **TDE Column Encryption**: Ovaj režim se fokusira na enkripciju specifičnih, pojedinačnih elemenata unutar baze podataka, omogućavajući veću kontrolu nad tim koji su podaci enkriptovani.

Razumevanje ovih preduslova i operativnih složenosti TDE je ključno za efikasno implementiranje i upravljanje enkripcijom unutar RDS, obezbeđujući i sigurnost podataka i usklađenost sa potrebnim standardima.

### Enumeracija
```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-name>

## 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 <ID> --db-snapshot-identifier <ID> --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 <ID> --master-user-password <NewPassword> --apply-immediately
```
### Neautentifikovani Pristup

{{#ref}}
../aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md
{{#endref}}

### Privesc

{{#ref}}
../aws-privilege-escalation/aws-rds-privesc.md
{{#endref}}

### Post Eksploatacija

{{#ref}}
../aws-post-exploitation/aws-rds-post-exploitation.md
{{#endref}}

### Persistencija

{{#ref}}
../aws-persistence/aws-rds-persistence.md
{{#endref}}

### SQL Injekcija

Postoje načini za pristup podacima iz DynamoDB koristeći **SQL sintaksu**, stoga su tipične **SQL injekcije takođe moguće**.

{{#ref}}
https://book.hacktricks.wiki/en/pentesting-web/sql-injection/index.html
{{#endref}}

{{#include ../../../banners/hacktricks-training.md}}
