mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-unauthenticated-e
This commit is contained in:
+41
-36
@@ -1,28 +1,28 @@
|
|||||||
# AWS - Relational Database (RDS) Enum
|
# AWS - Database relazionale (RDS) Enumerazione
|
||||||
|
|
||||||
{{#include ../../../banners/hacktricks-training.md}}
|
{{#include ../../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
## Informazioni di Base
|
## 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.
|
Il **Relational Database Service (RDS)** offerto da AWS è progettato per semplificare il deployment, l'operatività e lo scaling di un **database relazionale nel cloud**. Questo servizio offre vantaggi in termini di costi e scalabilità automatizzando attività laboriose come il provisioning dell'hardware, la configurazione del database, il patching 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.
|
AWS RDS supporta diversi motori di database relazionali molto diffusi inclusi MySQL, PostgreSQL, MariaDB, Oracle Database, Microsoft SQL Server e Amazon Aurora, con compatibilità per entrambe le versioni MySQL e PostgreSQL.
|
||||||
|
|
||||||
Le caratteristiche principali di RDS includono:
|
Le caratteristiche principali di RDS includono:
|
||||||
|
|
||||||
- **Gestione delle istanze di database** semplificata.
|
- **La gestione delle istanze di database** è semplificata.
|
||||||
- Creazione di **repliche di lettura** per migliorare le prestazioni di lettura.
|
- Creazione di **read replicas** per migliorare le prestazioni di lettura.
|
||||||
- Configurazione di **distribuzioni multi-Availability Zone (AZ)** per garantire alta disponibilità e meccanismi di failover.
|
- Configurazione di deployment **multi-Availability Zone (AZ)** per garantire alta disponibilità e meccanismi di failover.
|
||||||
- **Integrazione** con altri servizi AWS, come:
|
- **Integrazione** con altri servizi AWS, come:
|
||||||
- AWS Identity and Access Management (**IAM**) per un robusto controllo degli accessi.
|
- AWS Identity and Access Management (**IAM**) per un solido controllo degli accessi.
|
||||||
- AWS **CloudWatch** per un monitoraggio e metriche complete.
|
- AWS **CloudWatch** per monitoraggio e metriche complete.
|
||||||
- AWS Key Management Service (**KMS**) per garantire la crittografia a riposo.
|
- AWS Key Management Service (**KMS**) per garantire la crittografia a riposo.
|
||||||
|
|
||||||
## Credenziali
|
## 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:
|
Quando si crea il DB cluster lo **username** master può essere configurato (**`admin`** di default). Per generare la password di questo utente puoi:
|
||||||
|
|
||||||
- **Indicare** una **password** tu stesso
|
- **Indicare** una **password** manualmente
|
||||||
- Dire a RDS di **generarla automaticamente**
|
- Dire a RDS di **generarla automaticamente**
|
||||||
- Dire a RDS di gestirla in **AWS Secret Manager** crittografata con una chiave KMS
|
- Dire a RDS di gestirla in **AWS Secret Manager** crittografata con una chiave KMS
|
||||||
|
|
||||||
@@ -30,45 +30,45 @@ Quando si crea il cluster DB, il **nome utente** master può essere configurato
|
|||||||
|
|
||||||
### Autenticazione
|
### Autenticazione
|
||||||
|
|
||||||
Ci sono 3 tipi di opzioni di autenticazione, ma l'uso della **password master è sempre consentito**:
|
Ci sono 3 tipi di opzioni di autenticazione, ma l'uso della **password principale è sempre consentito**:
|
||||||
|
|
||||||
<figure><img src="../../../images/image (227).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../images/image (227).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
### Accesso Pubblico & VPC
|
### 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.
|
Per default **non viene concesso alcun accesso pubblico** ai database, tuttavia **potrebbe essere concesso**. Pertanto, di default solo le macchine nella stessa VPC saranno in grado di accedervi se il **security group** selezionato (sono memorizzati in EC2 SG) lo permette.
|
||||||
|
|
||||||
Invece di esporre un'istanza DB, è possibile creare un **RDS Proxy** che **migliora** la **scalabilità** e **disponibilità** del cluster DB.
|
Invece di esporre un'istanza DB, è possibile creare una **RDS Proxy** che **migliora** la **scalabilità** e la **disponibilità** del DB cluster.
|
||||||
|
|
||||||
Inoltre, il **port del database può essere modificato** anche.
|
Inoltre, è possibile **modificare anche la porta del database**.
|
||||||
|
|
||||||
### Crittografia
|
### Crittografia
|
||||||
|
|
||||||
**La crittografia è abilitata per impostazione predefinita** utilizzando una chiave gestita da AWS (può essere scelta una CMK invece).
|
**La crittografia è abilitata di default** utilizzando una chiave gestita da AWS (si può scegliere anche una CMK).
|
||||||
|
|
||||||
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**.\
|
Abilitando la crittografia, si abilita la **crittografia a riposo per lo storage, gli snapshot, le read replicas e i backup**. Le chiavi per gestire questa crittografia possono essere emesse usando **KMS**.\
|
||||||
Non è possibile aggiungere questo livello di crittografia dopo che il tuo database è stato creato. **Deve essere fatto durante la sua creazione**.
|
Non è possibile aggiungere questo livello di crittografia dopo che il database è stato creato. **Deve essere fatto durante la 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.
|
Tuttavia, esiste una **soluzione alternativa che permette di crittografare un database non crittografato come segue**. È possibile creare uno snapshot del database non crittografato, creare una copia crittografata di quello snapshot, usare quello snapshot crittografato per creare un nuovo database e, infine, il database sarà crittografato.
|
||||||
|
|
||||||
#### Crittografia dei Dati Trasparente (TDE)
|
#### Transparent Data Encryption (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.
|
Oltre alle capacità di crittografia intrinseche a RDS a livello applicativo, RDS supporta anche **meccanismi di crittografia a livello di piattaforma aggiuntivi** per proteggere i dati a riposo. Questo include **Transparent Data Encryption (TDE)** per Oracle e SQL Server. Tuttavia, è importante notare che mentre TDE migliora la sicurezza cifrando i dati a riposo, può anche **influire sulle prestazioni del database**. Questo impatto sulle prestazioni è particolarmente evidente quando usato insieme alle funzioni crittografiche di MySQL o alle funzioni crittografiche Transact-SQL di Microsoft.
|
||||||
|
|
||||||
Per utilizzare TDE, sono necessari alcuni passaggi preliminari:
|
Per utilizzare TDE, sono richiesti alcuni passaggi preliminari:
|
||||||
|
|
||||||
1. **Associazione del Gruppo di Opzioni**:
|
1. **Associazione a un Option Group**:
|
||||||
- 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.
|
- Il database deve essere associato a un option group. Gli option group servono come contenitori per impostazioni e funzionalità, facilitando la gestione del database, comprese le migliorie di sicurezza.
|
||||||
- Tuttavia, è importante notare che i gruppi di opzioni sono disponibili solo per specifici motori di database e versioni.
|
- Tuttavia, è importante notare che gli option group sono disponibili solo per specifici motori di database e versioni.
|
||||||
2. **Inclusione di TDE nel Gruppo di Opzioni**:
|
2. **Inclusione di TDE nell'Option Group**:
|
||||||
- Una volta associato a un gruppo di opzioni, l'opzione Oracle Transparent Data Encryption deve essere inclusa in quel gruppo.
|
- Una volta associato a un option group, 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.
|
- È essenziale riconoscere che una volta aggiunta l'opzione TDE a un option group, diventa permanente e non può essere rimossa.
|
||||||
3. **Modalità di Crittografia TDE**:
|
3. **Modalità di crittografia TDE**:
|
||||||
- TDE offre due distinte modalità di crittografia:
|
- TDE offre due diverse modalità di crittografia:
|
||||||
- **Crittografia TDE Tablespace**: Questa modalità crittografa intere tabelle, fornendo un ambito più ampio di protezione dei dati.
|
- **TDE Tablespace Encryption**: questa modalità cripta interi tablespace, offrendo una protezione dati più ampia.
|
||||||
- **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.
|
- **TDE Column Encryption**: questa modalità si concentra sulla crittografia di elementi specifici e individuali all'interno del database, permettendo un controllo più granulare su quali dati vengono criptati.
|
||||||
|
|
||||||
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.
|
Comprendere questi prerequisiti e le complessità operative di TDE è fondamentale per implementare e gestire efficacemente la crittografia all'interno di RDS, assicurando sia la sicurezza dei dati sia la conformità agli standard necessari.
|
||||||
|
|
||||||
### Enumerazione
|
### Enumerazione
|
||||||
```bash
|
```bash
|
||||||
@@ -80,6 +80,10 @@ aws rds describe-db-cluster-backtracks --db-cluster-identifier <cluster-name>
|
|||||||
|
|
||||||
## Cluster snapshots
|
## Cluster snapshots
|
||||||
aws rds describe-db-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
|
# Get DB instances info
|
||||||
aws rds describe-db-instances #username, url, port, vpc, SG, is public?
|
aws rds describe-db-instances #username, url, port, vpc, SG, is public?
|
||||||
@@ -91,6 +95,7 @@ aws rds describe-db-instance-automated-backups
|
|||||||
## Find snapshots
|
## Find snapshots
|
||||||
aws rds describe-db-snapshots
|
aws rds describe-db-snapshots
|
||||||
aws rds describe-db-snapshots --include-public --snapshot-type public
|
aws rds describe-db-snapshots --include-public --snapshot-type public
|
||||||
|
|
||||||
## Restore snapshot as new instance
|
## 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
|
aws rds restore-db-instance-from-db-snapshot --db-instance-identifier <ID> --db-snapshot-identifier <ID> --availability-zone us-west-2a
|
||||||
|
|
||||||
@@ -123,7 +128,7 @@ aws rds modify-db-instance --db-instance-identifier <ID> --master-user-password
|
|||||||
../aws-post-exploitation/aws-rds-post-exploitation/README.md
|
../aws-post-exploitation/aws-rds-post-exploitation/README.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
### Persistenza
|
### Persistence
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
../aws-persistence/aws-rds-persistence/README.md
|
../aws-persistence/aws-rds-persistence/README.md
|
||||||
@@ -131,7 +136,7 @@ aws rds modify-db-instance --db-instance-identifier <ID> --master-user-password
|
|||||||
|
|
||||||
### SQL Injection
|
### SQL Injection
|
||||||
|
|
||||||
Ci sono modi per accedere ai dati di DynamoDB con **sintassi SQL**, quindi, tipiche **SQL injection sono anche possibili**.
|
Esistono modi per accedere ai dati di DynamoDB con **SQL syntax**, pertanto le tipiche **SQL injections sono anche possibili**.
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
https://book.hacktricks.wiki/en/pentesting-web/sql-injection/index.html
|
https://book.hacktricks.wiki/en/pentesting-web/sql-injection/index.html
|
||||||
|
|||||||
+17
-4
@@ -1,4 +1,4 @@
|
|||||||
# AWS - RDS Enumerazione non autenticata
|
# AWS - RDS Unauthenticated Enum
|
||||||
|
|
||||||
{{#include ../../../../banners/hacktricks-training.md}}
|
{{#include ../../../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
@@ -12,11 +12,11 @@ Per maggiori informazioni consulta:
|
|||||||
|
|
||||||
## Porta pubblica
|
## Porta pubblica
|
||||||
|
|
||||||
È possibile concedere accesso pubblico al **database da Internet**. L'attaccante avrà comunque bisogno di **conoscere lo username and password,** di IAM access, o di un **exploit** per entrare nel database.
|
È possibile concedere accesso pubblico al **database da internet**. L'attaccante avrà comunque bisogno di **conoscere lo username e la password,** IAM access, o un **exploit** per entrare nel database.
|
||||||
|
|
||||||
## RDS Snapshots pubblici
|
## Public RDS Snapshots
|
||||||
|
|
||||||
AWS permette di dare **accesso a chiunque per scaricare RDS snapshots**. Puoi elencare questi RDS snapshots pubblici molto facilmente dal tuo account:
|
AWS permette di concedere **l'accesso a chiunque per scaricare RDS snapshots**. Puoi elencare questi public RDS snapshots molto facilmente dal tuo account:
|
||||||
```bash
|
```bash
|
||||||
# Public RDS snapshots
|
# Public RDS snapshots
|
||||||
aws rds describe-db-snapshots --include-public
|
aws rds describe-db-snapshots --include-public
|
||||||
@@ -32,6 +32,19 @@ aws rds describe-db-snapshots --snapshot-type public [--region us-west-2]
|
|||||||
## Even if in the console appear as there are public snapshot it might be public
|
## Even if in the console appear as there are public snapshot it might be public
|
||||||
## snapshots from other accounts used by the current account
|
## snapshots from other accounts used by the current account
|
||||||
```
|
```
|
||||||
|
## Snapshot di cluster RDS pubblici
|
||||||
|
|
||||||
|
Allo stesso modo, puoi cercare snapshot di cluster RDS
|
||||||
|
```bash
|
||||||
|
# Public RDS cluster snapshots
|
||||||
|
aws rds describe-db-cluster-snapshots --include-public
|
||||||
|
|
||||||
|
## Search by account ID
|
||||||
|
aws rds describe-db-cluster-snapshots --include-public --query 'DBClusterSnapshots[?contains(DBClusterSnapshotIdentifier, `284546856933:`) == `true`]'
|
||||||
|
|
||||||
|
# From the own account you can check if there is any public cluster snapshot with:
|
||||||
|
aws rds describe-db-cluster-snapshots --snapshot-type public [--region us-west-2]
|
||||||
|
```
|
||||||
### Modello URL pubblico
|
### Modello URL pubblico
|
||||||
```
|
```
|
||||||
mysql://{user_provided}.{random_id}.{region}.rds.amazonaws.com:3306
|
mysql://{user_provided}.{random_id}.{region}.rds.amazonaws.com:3306
|
||||||
|
|||||||
Reference in New Issue
Block a user