# AWS - Relational Database (RDS) Enum {{#include ../../../banners/hacktricks-training.md}} ## Informazioni di Base Il **Relational Database Service (RDS)** offerto da AWS è progettato per semplificare il deployment, l'operazione e la scalabilità di un **database relazionale nel cloud**. Questo servizio offre i vantaggi di efficienza dei costi e scalabilità, automatizzando compiti laboriosi come la fornitura di hardware, la configurazione del database, le patch e i backup. AWS RDS supporta vari motori di database relazionali ampiamente utilizzati, tra cui MySQL, PostgreSQL, MariaDB, Oracle Database, Microsoft SQL Server e Amazon Aurora, con compatibilità sia per MySQL che per PostgreSQL. Le caratteristiche principali di RDS includono: - **Gestione delle istanze di database** semplificata. - Creazione di **repliche di lettura** per migliorare le prestazioni di lettura. - Configurazione di **distribuzioni multi-Availability Zone (AZ)** per garantire alta disponibilità e meccanismi di failover. - **Integrazione** con altri servizi AWS, come: - AWS Identity and Access Management (**IAM**) per un robusto controllo degli accessi. - AWS **CloudWatch** per un monitoraggio e metriche complete. - AWS Key Management Service (**KMS**) per garantire la crittografia a riposo. ## Credenziali Quando si crea il cluster DB, il **nome utente** master può essere configurato (**`admin`** per impostazione predefinita). Per generare la password di questo utente puoi: - **Indicare** una **password** tu stesso - Dire a RDS di **generarla automaticamente** - Dire a RDS di gestirla in **AWS Secret Manager** crittografata con una chiave KMS
### Autenticazione Ci sono 3 tipi di opzioni di autenticazione, ma l'uso della **password master è sempre consentito**:
### Accesso Pubblico & VPC Per impostazione predefinita **non viene concesso accesso pubblico** ai database, tuttavia **può essere concesso**. Pertanto, per impostazione predefinita solo le macchine della stessa VPC potranno accedervi se il **gruppo di sicurezza** selezionato (memorizzato in EC2 SG) lo consente. Invece di esporre un'istanza DB, è possibile creare un **RDS Proxy** che **migliora** la **scalabilità** e **disponibilità** del cluster DB. Inoltre, il **port del database può essere modificato** anche. ### Crittografia **La crittografia è abilitata per impostazione predefinita** utilizzando una chiave gestita da AWS (può essere scelta una CMK invece). Abilitando la tua crittografia, stai abilitando **la crittografia a riposo per il tuo storage, snapshot, repliche di lettura e i tuoi backup**. Le chiavi per gestire questa crittografia possono essere emesse utilizzando **KMS**.\ Non è possibile aggiungere questo livello di crittografia dopo che il tuo database è stato creato. **Deve essere fatto durante la sua creazione**. Tuttavia, c'è un **workaround che ti consente di crittografare un database non crittografato come segue**. Puoi creare uno snapshot del tuo database non crittografato, creare una copia crittografata di quello snapshot, utilizzare quello snapshot crittografato per creare un nuovo database e poi, infine, il tuo database sarà crittografato. #### Crittografia dei Dati Trasparente (TDE) Oltre alle capacità di crittografia intrinseche a RDS a livello di applicazione, RDS supporta anche **meccanismi di crittografia a livello di piattaforma aggiuntivi** per proteggere i dati a riposo. Questo include **Crittografia dei Dati Trasparente (TDE)** per Oracle e SQL Server. Tuttavia, è fondamentale notare che mentre TDE migliora la sicurezza crittografando i dati a riposo, potrebbe anche **influenzare le prestazioni del database**. Questo impatto sulle prestazioni è particolarmente evidente quando utilizzato in combinazione con funzioni crittografiche MySQL o funzioni crittografiche Microsoft Transact-SQL. Per utilizzare TDE, sono necessari alcuni passaggi preliminari: 1. **Associazione del Gruppo di Opzioni**: - Il database deve essere associato a un gruppo di opzioni. I gruppi di opzioni fungono da contenitori per impostazioni e funzionalità, facilitando la gestione del database, inclusi i miglioramenti della sicurezza. - Tuttavia, è importante notare che i gruppi di opzioni sono disponibili solo per specifici motori di database e versioni. 2. **Inclusione di TDE nel Gruppo di Opzioni**: - Una volta associato a un gruppo di opzioni, l'opzione Oracle Transparent Data Encryption deve essere inclusa in quel gruppo. - È essenziale riconoscere che una volta aggiunta l'opzione TDE a un gruppo di opzioni, diventa una caratteristica permanente e non può essere rimossa. 3. **Modalità di Crittografia TDE**: - TDE offre due distinte modalità di crittografia: - **Crittografia TDE Tablespace**: Questa modalità crittografa intere tabelle, fornendo un ambito più ampio di protezione dei dati. - **Crittografia TDE Column**: Questa modalità si concentra sulla crittografia di elementi specifici e individuali all'interno del database, consentendo un controllo più granulare su quali dati vengono crittografati. Comprendere questi prerequisiti e le complessità operative di TDE è cruciale per implementare e gestire efficacemente la crittografia all'interno di RDS, garantendo sia la sicurezza dei dati che la conformità agli standard necessari. ### Enumerazione ```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 ``` ### Accesso non autenticato {{#ref}} ../aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md {{#endref}} ### Privesc {{#ref}} ../aws-privilege-escalation/aws-rds-privesc.md {{#endref}} ### Post Exploitation {{#ref}} ../aws-post-exploitation/aws-rds-post-exploitation.md {{#endref}} ### Persistenza {{#ref}} ../aws-persistence/aws-rds-persistence.md {{#endref}} ### SQL Injection Ci sono modi per accedere ai dati di DynamoDB con **sintassi SQL**, quindi, tipiche **SQL injection sono anche possibili**. {{#ref}} https://book.hacktricks.wiki/en/pentesting-web/sql-injection/index.html {{#endref}} {{#include ../../../banners/hacktricks-training.md}}