# AWS - Relasionele Databasis (RDS) Enumerasie

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

## Basiese Inligting

Die **Relational Database Service (RDS)** wat deur AWS aangebied word, is ontwerp om die ontplooiing, werking en skaal van 'n **relasionele databasis in die wolk** te vereenvoudig. Hierdie diens bied die voordele van koste-effektiwiteit en skaalbaarheid terwyl dit arbeidsintensiewe take soos hardware-provisioning, databasiskonfigurasie, patching en rugsteun outomatiseer.

AWS RDS ondersteun verskeie wydgebruikte relasionele databasis-engines, insluitend MySQL, PostgreSQL, MariaDB, Oracle Database, Microsoft SQL Server, en Amazon Aurora, met versoenbaarheid vir beide MySQL en PostgreSQL.

Belangrike kenmerke van RDS sluit in:

- **Bestuur van databasisinstansies** word vereenvoudig.
- Skepping van **read replicas** om die leesprestasie te verbeter.
- Konfigurasie van **multi-Availability Zone (AZ) deployments** om hoë beskikbaarheid en failover-meganismes te verseker.
- **Integrasie** met ander AWS-dienste, soos:
- AWS Identity and Access Management (**IAM**) vir robuuste toegangsbeheer.
- AWS **CloudWatch** vir omvattende monitering en metrics.
- AWS Key Management Service (**KMS**) om enkripsie at rest te verseker.

## Kredensiale

Wanneer die DB-cluster geskep word, kan die meester **username** gekonfigureer word (standaard **`admin`**). Om die wagwoord van hierdie gebruiker te genereer kan jy:

- **'n wagwoord** self aandui
- RDS sê om dit **outomaties te genereer**
- RDS laat dit bestuur in **AWS Secret Manager** versleut met 'n KMS-sleutel

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

### Outentisering

Daar is 3 soorte outentiseringsopsies, maar die gebruik van die **meesterwagwoord is altyd toegelaat**:

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

### Publieke Toegang & VPC

Per verstek word **geen publieke toegang gegee** aan die databasisse nie, maar dit **kan gegee word**. Daarom sal per verstek slegs masjiene uit dieselfde VPC dit kan bereik indien die gekose **security group** (wat in EC2 SG gestoor word) dit toelaat.

In plaas daarvan om 'n DB-instansie bloot te stel, is dit moontlik om 'n **RDS Proxy** te skep wat die **skaalbaarheid** en **beskikbaarheid** van die DB-cluster **verbeter**.

Verder kan die **databasispoort ook gemodifiseer word**.

### Enkripsie

**Enkripsie is standaard geaktiveer** deur gebruik te maak van 'n AWS-beheerde sleutel ('n CMK kan in plaas daarvan gekies word).

Deur enkripsie te aktiveer, skakel jy **enkripsie at rest vir jou stoorplek, snapshots, read replicas en jou rugsteun** in. Sleutels om hierdie enkripsie te bestuur kan uitgereik word deur **KMS** te gebruik.\
Dit is nie moontlik om hierdie vlak van enkripsie by te voeg nadat jou databasis geskep is nie. **Dit moet tydens die skepproses gedoen word**.

Daar is egter 'n **workaround wat jou toelaat om 'n nie-versleutelde databasis te versleutel soos volg**. Jy kan 'n snapshot van jou nie-versleutelde databasis skep, 'n versleutelde kopie van daardie snapshot maak, daardie versleutelde snapshot gebruik om 'n nuwe databasis te skep, en uiteindelik sal jou databasis dan versleuteld wees.

#### Transparent Data Encryption (TDE)

Benewens die enkripsiefunksies wat inherent aan RDS op toepassingsvlak is, ondersteun RDS ook **addisionele platformvlak enkripsiemeganismes** om data at rest te beskerm. Dit sluit in **Transparent Data Encryption (TDE)** vir Oracle en SQL Server. Dit is egter belangrik om te let dat hoewel TDE die sekuriteit verbeter deur data at rest te enkripteer, dit ook die **databasisprestasie kan beïnvloed**. Hierdie prestasie-impak is veral merkbaar wanneer dit saam met MySQL-kriptografiese funksies of Microsoft Transact-SQL kriptografiese funksies gebruik word.

Om TDE te gebruik, is sekere voorlopige stappe vereis:

1. **Option Group Association**:
- Die databasis moet geassosieer wees met 'n option group. Option groups dien as houers vir instellings en funksies, wat databasisbestuur, insluitend sekuriteitsverbeterings, vergemaklik.
- Dit is egter belangrik om te besef dat option groups slegs beskikbaar is vir spesifieke databasis-engines en weergawes.
2. **Inclusion of TDE in Option Group**:
- Sodra dit geassosieer is met 'n option group, moet die Oracle Transparent Data Encryption-opsie by daardie groep gevoeg word.
- Dit is noodsaaklik om te erken dat sodra die TDE-opsie by 'n option group gevoeg is, dit 'n permanente onderdeel word en nie verwyder kan word nie.
3. **TDE Encryption Modes**:
- TDE bied twee onderskeibare enkripsiemodusse:
- **TDE Tablespace Encryption**: Hierdie modus enkripteer hele tablespaces en bied 'n breër omvang van databeskerming.
- **TDE Column Encryption**: Hierdie modus fokus op die enkripsie van spesifieke, individuele elemente binne die databasis, wat meer gefyn beheer oor watter data enkripteer word, moontlik maak.

Om hierdie vereistes en die operasionele ingewikkeldhede van TDE te verstaan, is noodsaaklik vir effektiewe implementering en bestuur van enkripsie binne RDS, wat beide databeskerming en nakoming van nodige standaarde verseker.

### Enumerasie
```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
aws rds describe-db-cluster-snapshots --include-public --snapshot-type public

## Restore cluster snapshot as new instance
aws rds restore-db-instance-from-db-snapshot --db-cluster-identifier <ID> --snapshot-identifier <ID>

# 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
```
### Nie-geauthentiseerde Toegang

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

### Privesc

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

### Post Exploitation

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

### Persistence

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

### SQL Injection

Daar is maniere om toegang tot DynamoDB data te kry met **SQL syntax**, daarom is tipiese **SQL injections are also possible**.

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

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