mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 14:47:17 -07:00
Translated ['', 'src/pentesting-cloud/workspace-security/gws-google-plat
This commit is contained in:
+16
-16
@@ -4,44 +4,44 @@
|
||||
|
||||
## Informazioni di base
|
||||
|
||||
Nelle architetture Exchange Hybrid legacy, la distribuzione Exchange on-prem poteva autenticarsi come la stessa identità applicativa Entra utilizzata da Exchange Online. Se un attaccante comprometteva il server Exchange, estraeva la chiave privata del certificato hybrid e eseguiva un OAuth client-credentials flow, poteva ottenere token first-party con il contesto di privilegi di Exchange Online.
|
||||
Nelle architetture legacy di Exchange Hybrid, la deployment on-prem di Exchange poteva autenticarsi come la stessa identità dell'applicazione Entra usata da Exchange Online. Se un attaccante comprometteva il server Exchange, estraeva la chiave privata del certificato hybrid e eseguiva un OAuth client-credentials flow, poteva ottenere token first-party con il contesto di privilegi di Exchange Online.
|
||||
|
||||
Il rischio pratico non si limitava all'accesso alle caselle. Poiché Exchange Online aveva ampie relazioni di trust back-end, questa identità poteva interagire con altri servizi Microsoft 365 e, nei comportamenti più vecchi, poteva essere sfruttata per un compromesso più profondo del tenant.
|
||||
Il rischio pratico non si limitava all'accesso alle cassette postali. Poiché Exchange Online aveva ampie relazioni di trust back-end, questa identità poteva interagire con altri servizi Microsoft 365 e, nei comportamenti più vecchi, poteva essere sfruttata per un compromesso più profondo del tenant.
|
||||
|
||||
## Percorsi d'attacco e flusso tecnico
|
||||
|
||||
### Modificare la configurazione di federazione tramite Exchange
|
||||
### Modificare la configurazione di federation tramite Exchange
|
||||
|
||||
Storicamente i token di Exchange avevano permessi per scrivere le impostazioni di dominio/federazione. Dal punto di vista dell'attaccante, questo permetteva la manipolazione diretta dei dati di trust del dominio federato, incluse le liste di certificati per la firma dei token e i flag di configurazione che controllavano l'accettazione delle MFA-claim dall'infrastruttura di federazione on-prem.
|
||||
Storicamente, i token di Exchange avevano permessi per scrivere le impostazioni di dominio/federation. Dal punto di vista di un attaccante, questo permetteva la manipolazione diretta dei dati di trust dei domini federati, incluse le liste dei certificati per la firma dei token e i flag di configurazione che controllavano l'accettazione delle MFA-claim dall'infrastruttura di federation on-prem.
|
||||
|
||||
Ciò significa che un server Exchange Hybrid compromesso poteva essere usato per avviare o rafforzare un'impersonazione in stile ADFS modificando la config di federazione dalla parte cloud, anche quando l'attaccante era partito solo da una compromissione di Exchange on-prem.
|
||||
Ciò significa che un server Exchange Hybrid compromesso poteva essere usato per orchestrare o rafforzare un'impersonazione in stile ADFS modificando la config di federation dalla parte cloud, anche quando l'attaccante era partito solo da una compromissione di Exchange on-prem.
|
||||
|
||||
### ACS Actor Tokens e impersonazione servizio-a-servizio
|
||||
### ACS Actor Tokens and Service-to-Service Impersonation
|
||||
|
||||
Il percorso di autenticazione hybrid di Exchange usava Access Control Service (ACS) actor tokens con `trustedfordelegation=true`. Questi actor token venivano poi incorporati in un secondo service token non firmato che trasportava l'identità dell'utente target in una sezione controllata dall'attaccante. Poiché il token esterno non era firmato e l'actor token delegava ampiamente, il chiamante poteva sostituire gli utenti target senza ri-autenticarsi.
|
||||
Il percorso di auth hybrid di Exchange usava Access Control Service (ACS) actor tokens con `trustedfordelegation=true`. Quei actor token venivano poi incorporati in un secondo service token non firmato che portava l'identità dell'utente target in una sezione controllata dall'attaccante. Poiché il token esterno non era firmato e l'actor token delegava ampiamente, il chiamante poteva scambiare utenti target senza ri-autenticarsi.
|
||||
|
||||
In pratica, una volta ottenuto l'actor token, l'attaccante disponeva di una primitiva di impersonazione a lunga durata (tipicamente circa 24 ore) difficile da revocare a metà vita. Ciò abilitava l'impersonazione di utenti attraverso le API di Exchange Online e SharePoint/OneDrive, includendo esfiltrazione di dati ad alto valore.
|
||||
In pratica, una volta ottenuto l'actor token, l'attaccante disponeva di una primitiva di impersonazione a lunga durata (tipicamente circa 24 ore) difficile da revocare a metà vita. Questo consentiva l'impersonazione di utenti attraverso le API di Exchange Online e SharePoint/OneDrive, inclusa l'esfiltrazione di dati ad alto valore.
|
||||
|
||||
Storicamente, lo stesso pattern funzionava anche contro `graph.windows.net` costruendo un token di impersonazione con il valore `netId` della vittima. Questo forniva azioni amministrative dirette su Entra come utenti arbitrari e permetteva workflow di takeover completo del tenant (per esempio, la creazione di un nuovo account Global Administrator).
|
||||
Storicamente, lo stesso schema funzionava anche contro `graph.windows.net` costruendo un token di impersonazione con il `netId` della vittima. Ciò permetteva azioni amministrative dirette in Entra come utenti arbitrari e abilitava workflow di takeover dell'intero tenant (per esempio, la creazione di un nuovo account Global Administrator).
|
||||
|
||||
## Cosa non funziona più
|
||||
|
||||
Il percorso di impersonazione `graph.windows.net` via Exchange Hybrid actor tokens è stato corretto. La vecchia catena "Exchange to arbitrary Entra admin over Graph" dovrebbe essere considerata rimossa per questa specifica via di token.
|
||||
Il percorso di impersonazione `graph.windows.net` via Exchange Hybrid actor tokens è stato corretto. La vecchia catena "Exchange to arbitrary Entra admin over Graph" dovrebbe essere considerata rimossa per questa specifica route di token.
|
||||
|
||||
Questa è la correzione più importante da evidenziare nella documentazione dell'attacco: mantenere il rischio di impersonazione Exchange/SharePoint separato dall'escalation di impersonazione Graph ora patchata.
|
||||
Questa è la correzione più importante da documentare per l'attacco: mantenere separato il rischio di impersonazione Exchange/SharePoint dall'escalation di impersonazione su Graph ora patchata.
|
||||
|
||||
## Cosa può ancora essere rilevante in pratica
|
||||
## Ciò che può ancora avere importanza nella pratica
|
||||
|
||||
Se un'organizzazione esegue ancora una configurazione hybrid vecchia o incompleta con trust condiviso e materiale di certificato esposto, l'impatto dell'impersonazione Exchange/SharePoint può rimanere severo. L'angolo di abuso della configurazione di federazione può anche rimanere rilevante a seconda della configurazione del tenant e dello stato di migrazione.
|
||||
Se un'organizzazione esegue ancora una configurazione hybrid vecchia o incompleta con trust condiviso e materiale dei certificati esposto, l'impatto dell'impersonazione Exchange/SharePoint può rimanere grave. L'angolo di abuso della configurazione di federation può anche restare rilevante a seconda della configurazione del tenant e dello stato della migrazione.
|
||||
|
||||
La mitigazione a lungo termine di Microsoft è separare le identità on-prem e Exchange Online in modo che il percorso di trust del shared-service-principal non esista più. Gli ambienti che hanno completato quella migrazione riducono materialmente questa superficie d'attacco.
|
||||
La mitigazione a lungo termine di Microsoft è separare le identità on-prem e di Exchange Online in modo che il percorso di trust del shared-service-principal non esista più. Gli ambienti che hanno completato quella migrazione riducono materialmente questa superficie d'attacco.
|
||||
|
||||
## Note di rilevamento
|
||||
|
||||
Quando questa tecnica viene abusata, gli eventi di audit possono mostrare mismatch di identità in cui lo user principal name corrisponde a un utente impersonato mentre il contesto di display/sorgente indica attività di Exchange Online. Quel pattern di identità mista è un segnale di hunting di alto valore, sebbene i difensori debbano basare una baseline dei workflow legittimi degli Exchange-admin per ridurre i falsi positivi.
|
||||
Quando questa tecnica viene abusata, gli eventi di audit possono mostrare mismatch di identità in cui lo user principal name corrisponde a un utente impersonato mentre il contesto display/source punta ad attività di Exchange Online. Quel pattern di identità mista è un segnale di hunting ad alto valore, sebbene i defender dovrebbero definire una baseline dei workflow legittimi degli Exchange-admin per ridurre i falsi positivi.
|
||||
|
||||
## Riferimenti
|
||||
|
||||
- https://www.youtube.com/watch?v=rzfAutv6sB8
|
||||
- [https://www.youtube.com/watch?v=rzfAutv6sB8](https://www.youtube.com/watch?v=rzfAutv6sB8)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Generic Phishing Methodology
|
||||
## Metodologia Generica di Phishing
|
||||
|
||||
{{#ref}}
|
||||
https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html
|
||||
@@ -10,51 +10,51 @@ https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-met
|
||||
|
||||
## Google Groups Phishing
|
||||
|
||||
A quanto pare, per impostazione predefinita, nei workspace i membri [**possono creare gruppi**](https://groups.google.com/all-groups) **e invitare persone a farne parte**. Puoi quindi modificare l'email che verrà inviata all'utente **aggiungendo alcuni link.** L'**email verrà inviata da un indirizzo google**, quindi sembrerà **legittima** e le persone potrebbero cliccare sul link.
|
||||
Apparentemente, di default, in Workspace i membri [**possono creare gruppi**](https://groups.google.com/all-groups) **e invitare persone in essi**. Puoi poi modificare l'email che sarà inviata all'utente **aggiungendo alcuni link.** L'**email arriverà da un indirizzo Google**, quindi sembrerà **legittima** e le persone potrebbero cliccare sul link.
|
||||
|
||||
È anche possibile impostare l'indirizzo **FROM** come l'**email del gruppo Google** per inviare **ulteriori email agli utenti all'interno del gruppo**, come nell'immagine seguente dove il gruppo **`google--support@googlegroups.com`** è stato creato e un'**email è stata inviata a tutti i membri** del gruppo (che sono stati aggiunti senza alcun consenso)
|
||||
È anche possibile impostare l'indirizzo **FROM** come la **Google group email** per inviare **più email agli utenti all'interno del gruppo**, come nell'immagine seguente dove il gruppo **`google--support@googlegroups.com`** è stato creato e un **email è stata inviata a tutti i membri** del gruppo (aggiunti senza alcun consenso)
|
||||
|
||||
<figure><img src="../../../images/image (5) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Google Chat Phishing
|
||||
|
||||
Potresti essere in grado di **iniziare una chat** con una persona semplicemente avendo il suo indirizzo email o inviare un'**invito a parlare**. Inoltre, è possibile **creare uno Spazio** che può avere qualsiasi nome (ad es. "Google Support") e **invitare** membri a farne parte. Se accettano, potrebbero pensare di stare parlando con il supporto Google:
|
||||
Potresti riuscire a iniziare una chat con una persona avendo solo il suo indirizzo email o inviare un **invito a parlare**. Inoltre, è possibile creare uno Space che può avere qualsiasi nome (es. "Google Support") e **invitare** membri. Se accettano potrebbero pensare di stare parlando con Google Support:
|
||||
|
||||
<figure><img src="../../../images/image (6).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!TIP]
|
||||
> **Tuttavia, nei miei test i membri invitati non hanno nemmeno ricevuto un invito.**
|
||||
> Nei miei test, però, i membri invitati non hanno nemmeno ricevuto l'invito.
|
||||
|
||||
Puoi controllare come questo ha funzionato in passato in: [https://www.youtube.com/watch?v=KTVHLolz6cE\&t=904s](https://www.youtube.com/watch?v=KTVHLolz6cE&t=904s)
|
||||
Puoi vedere come funzionava in passato su: [https://www.youtube.com/watch?v=KTVHLolz6cE\&t=904s](https://www.youtube.com/watch?v=KTVHLolz6cE&t=904s)
|
||||
|
||||
## Google Doc Phishing
|
||||
|
||||
In passato era possibile creare un **documento apparentemente legittimo** e in un commento **menzionare un'email (come @user@gmail.com)**. Google **inviava un'email a quell'indirizzo email** notificando che era stato menzionato nel documento.\
|
||||
Oggigiorno, questo non funziona più, ma se **dai accesso al documento alla vittima** Google invierà un'email che lo indica. Questo è il messaggio che appare quando menzioni qualcuno:
|
||||
In passato era possibile creare un documento apparentemente legittimo e poi in un commento menzionare un'email (es. @user@gmail.com). Google inviava un'email a quell'indirizzo notificando che erano stati menzionati nel documento.\
|
||||
Oggi questo non funziona, ma se dai all'email della vittima l'accesso al documento Google invierà un'email che lo indica. Questo è il messaggio che appare quando menzioni qualcuno:
|
||||
|
||||
<figure><img src="../../../images/image (7).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!TIP]
|
||||
> Le vittime potrebbero avere meccanismi di protezione che non permettono che le email che indicano che un documento esterno è stato condiviso con loro raggiungano la loro email.
|
||||
> Le vittime potrebbero avere meccanismi di protezione che non permettono che le email che indicano che un documento esterno è stato condiviso con loro arrivino alla loro casella.
|
||||
|
||||
## Google Calendar Phishing
|
||||
|
||||
Puoi **creare un evento di calendario** e aggiungere quanti più indirizzi email dell'azienda che stai attaccando. Pianifica questo evento di calendario in **5 o 15 minuti** dall'orario attuale. Fai sembrare l'evento legittimo e **metti un commento e un titolo che indicano che devono leggere qualcosa** (con il **link di phishing**).
|
||||
Puoi creare un evento del calendario e aggiungere quanti indirizzi email dell'azienda che stai attaccando vuoi. Pianifica questo evento del calendario tra 5 o 15 minuti dall'orario corrente. Fai sembrare l'evento legittimo e **inserisci un commento e un titolo che indichino che devono leggere qualcosa** (con il **phishing link**).
|
||||
|
||||
Questo è l'avviso che apparirà nel browser con un titolo di riunione "Licenziare persone", quindi potresti impostare un titolo più simile al phishing (e persino cambiare il nome associato alla tua email).
|
||||
Questo è l'avviso che apparirà nel browser con un titolo della riunione "Firing People", quindi potresti impostare un titolo più da phishing (e persino cambiare il nome associato alla tua email).
|
||||
|
||||
<figure><img src="../../../images/image (8).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Per farlo sembrare meno sospetto:
|
||||
Per renderlo meno sospetto:
|
||||
|
||||
- Impostalo in modo che **i destinatari non possano vedere le altre persone invitate**
|
||||
- **NON inviare email che notificano l'evento**. Così, le persone vedranno solo il loro avviso riguardo a una riunione tra 5 minuti e che devono leggere quel link.
|
||||
- A quanto pare, utilizzando l'API puoi impostare su **True** che **le persone** hanno **accettato** l'evento e persino creare **commenti a loro nome**.
|
||||
- Configuralo in modo che **i destinatari non possano vedere le altre persone invitate**
|
||||
- **NON** inviare email di notifica dell'evento. Così, le persone vedranno solo l'avviso della riunione tra 5 minuti e che devono leggere quel link.
|
||||
- Apparentemente usando l'API puoi impostare a **True** che **le persone** hanno **accettato** l'evento e persino creare **commenti per conto loro**.
|
||||
|
||||
## App Scripts Redirect Phishing
|
||||
|
||||
È possibile creare uno script in [https://script.google.com/](https://script.google.com/) e **esporlo come un'applicazione web accessibile a tutti** che utilizzerà il dominio legittimo **`script.google.com`**.\
|
||||
Con un codice come il seguente, un attaccante potrebbe far caricare contenuti arbitrari in questa pagina senza smettere di accedere al dominio:
|
||||
È possibile creare uno script su [https://script.google.com/](https://script.google.com/) ed esporlo come web application accessibile da chiunque che utilizzerà il dominio legittimo **`script.google.com`**.\
|
||||
Con un codice come il seguente un attacker potrebbe far caricare contenuto arbitrario in questa pagina senza smettere di accedere al dominio:
|
||||
```javascript
|
||||
function doGet() {
|
||||
return HtmlService.createHtmlOutput(
|
||||
@@ -62,16 +62,16 @@ return HtmlService.createHtmlOutput(
|
||||
).setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL)
|
||||
}
|
||||
```
|
||||
Per esempio, accedendo a [https://script.google.com/macros/s/AKfycbwuLlzo0PUaT63G33MtE6TbGUNmTKXCK12o59RKC7WLkgBTyltaS3gYuH_ZscKQTJDC/exec](https://script.google.com/macros/s/AKfycbwuLlzo0PUaT63G33MtE6TbGUNmTKXCK12o59RKC7WLkgBTyltaS3gYuH_ZscKQTJDC/exec) vedrai:
|
||||
For example accessing [https://script.google.com/macros/s/AKfycbwuLlzo0PUaT63G33MtE6TbGUNmTKXCK12o59RKC7WLkgBTyltaS3gYuH_ZscKQTJDC/exec](https://script.google.com/macros/s/AKfycbwuLlzo0PUaT63G33MtE6TbGUNmTKXCK12o59RKC7WLkgBTyltaS3gYuH_ZscKQTJDC/exec) you will see:
|
||||
|
||||
<figure><img src="../../../images/image (4) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!TIP]
|
||||
> Nota che apparirà un avviso mentre il contenuto viene caricato all'interno di un iframe.
|
||||
> Nota che apparirà un avviso poiché il contenuto viene caricato all'interno di un iframe.
|
||||
|
||||
## App Scripts OAuth Phishing
|
||||
|
||||
È possibile creare App Scripts collegati a documenti per cercare di ottenere accesso al token OAuth di una vittima, per ulteriori informazioni controlla:
|
||||
È possibile creare App Scripts collegati ai documenti per cercare di ottenere accesso al token OAuth di una vittima; per maggiori informazioni consulta:
|
||||
|
||||
{{#ref}}
|
||||
gws-app-scripts.md
|
||||
@@ -79,83 +79,142 @@ gws-app-scripts.md
|
||||
|
||||
## OAuth Apps Phishing
|
||||
|
||||
Qualsiasi delle tecniche precedenti potrebbe essere utilizzata per far accedere l'utente a un **Google OAuth application** che **richiederà** all'utente alcuni **accessi**. Se l'utente **si fida** della **fonte**, potrebbe **fidarsi** dell'**applicazione** (anche se sta chiedendo permessi ad alta privilegio).
|
||||
Qualsiasi delle tecniche precedenti potrebbe essere usata per far sì che l'utente acceda a una **Google OAuth application** che **richiederà** all'utente alcuni **accessi**. Se l'utente **si fida** della **sorgente**, potrebbe **fidarsi** dell'**application** (anche se sta chiedendo permessi con elevati privilegi).
|
||||
|
||||
> [!NOTE]
|
||||
> Nota che Google presenta un brutto avviso che avvisa che l'applicazione non è affidabile in diversi casi e gli amministratori di Workspace possono persino impedire alle persone di accettare le applicazioni OAuth.
|
||||
> Nota che Google mostra un prompt poco chiaro che avverte che l'applicazione non è attendibile in diversi casi e gli amministratori di Workspace possono anche impedire agli utenti di accettare applicazioni OAuth.
|
||||
|
||||
**Google** consente di creare applicazioni che possono **interagire per conto degli utenti** con diversi **servizi Google**: Gmail, Drive, GCP...
|
||||
**Google** permette di creare applicazioni che possono **agire per conto degli utenti** su diversi **servizi Google**: Gmail, Drive, GCP...
|
||||
|
||||
Quando si crea un'applicazione per **agire per conto di altri utenti**, lo sviluppatore deve creare un **OAuth app all'interno di GCP** e indicare gli ambiti (permessi) di cui l'app ha bisogno per accedere ai dati degli utenti.\
|
||||
Quando un **utente** desidera **utilizzare** quell'**applicazione**, verrà **richiesto** di **accettare** che l'applicazione avrà accesso ai propri dati specificati negli ambiti.
|
||||
Quando si crea un'applicazione per **agire per conto di altri utenti**, lo sviluppatore deve creare un **OAuth app inside GCP** e indicare gli scope (permessi) di cui l'app ha bisogno per accedere ai dati degli utenti.\
|
||||
Quando un **utente** vuole **usare** quell'**applicazione**, gli verrà **chiesto** di **accettare** che l'app abbia accesso ai dati specificati negli scope.
|
||||
|
||||
Questo è un modo molto allettante per **phishare** utenti non tecnici nell'utilizzo di **applicazioni che accedono a informazioni sensibili** perché potrebbero non comprendere le conseguenze. Tuttavia, negli account delle organizzazioni, ci sono modi per prevenire che ciò accada.
|
||||
Questo è un modo molto ghiotto per **phishare** utenti non tecnici inducendoli a usare **application che accedono a informazioni sensibili**, perché potrebbero non comprendere le conseguenze. Tuttavia, negli account organizzativi ci sono modi per prevenire che ciò accada.
|
||||
|
||||
### Avviso di App non verificate
|
||||
### Unverified App prompt
|
||||
|
||||
Come è stato menzionato, Google presenterà sempre un **avviso all'utente per accettare** i permessi che stanno dando all'applicazione per conto loro. Tuttavia, se l'applicazione è considerata **pericolosa**, Google mostrerà **prima** un **avviso** che indica che è **pericolosa** e **rende più difficile** per l'utente concedere i permessi all'app.
|
||||
Come già accennato, Google presenterà sempre un **prompt all'utente per accettare** i permessi che sta concedendo all'applicazione per suo conto. Tuttavia, se l'app viene considerata **pericolosa**, Google mostrerà **prima** un **prompt** che indica che è **pericolosa** e rende **più difficile** per l'utente concedere i permessi all'app.
|
||||
|
||||
Questo avviso appare nelle app che:
|
||||
Questo prompt appare in app che:
|
||||
|
||||
- Usano qualsiasi ambito che può accedere a dati privati (Gmail, Drive, GCP, BigQuery...)
|
||||
- App con meno di 100 utenti (per app > 100 è necessario anche un processo di revisione per smettere di mostrare l'avviso di non verifica)
|
||||
- Usano qualsiasi scope che possa accedere a dati privati (Gmail, Drive, GCP, BigQuery...)
|
||||
- App con meno di 100 utenti (per app > 100 è richiesto anche un processo di review per smettere di mostrare l'unverified prompt)
|
||||
|
||||
### Ambiti Interessanti
|
||||
### Interesting Scopes
|
||||
|
||||
[**Qui**](https://developers.google.com/identity/protocols/oauth2/scopes) puoi trovare un elenco di tutti gli ambiti OAuth di Google.
|
||||
[**Here**](https://developers.google.com/identity/protocols/oauth2/scopes) you can find a list of all the Google OAuth scopes.
|
||||
|
||||
- **cloud-platform**: Visualizza e gestisci i tuoi dati attraverso i servizi di **Google Cloud Platform**. Puoi impersonare l'utente in GCP.
|
||||
- **admin.directory.user.readonly**: Vedi e scarica la directory GSuite della tua organizzazione. Ottieni nomi, telefoni, URL del calendario di tutti gli utenti.
|
||||
- **cloud-platform**: View and manage your data across **Google Cloud Platform** services. You can impersonate the user in GCP.
|
||||
- **admin.directory.user.readonly**: See and download your organization's GSuite directory. Get names, phones, calendar URLs of all the users.
|
||||
|
||||
### Crea un OAuth App
|
||||
### Create an OAuth App
|
||||
|
||||
**Inizia a creare un OAuth Client ID**
|
||||
**Start creating an OAuth Client ID**
|
||||
|
||||
1. Vai a [https://console.cloud.google.com/apis/credentials/oauthclient](https://console.cloud.google.com/apis/credentials/oauthclient) e clicca su configura la schermata di consenso.
|
||||
2. Poi, ti verrà chiesto se il **tipo di utente** è **interno** (solo per le persone nella tua organizzazione) o **esterno**. Seleziona quello che si adatta alle tue esigenze
|
||||
- Interno potrebbe essere interessante se hai già compromesso un utente dell'organizzazione e stai creando questa App per phishingare un altro.
|
||||
3. Dai un **nome** all'app, un **email di supporto** (nota che puoi impostare un'email di googlegroup per cercare di anonimizzarti un po' di più), un **logo**, **domini autorizzati** e un'altra **email** per **aggiornamenti**.
|
||||
4. **Seleziona** gli **ambiti OAuth**.
|
||||
- Questa pagina è divisa in permessi non sensibili, permessi sensibili e permessi ristretti. Ogni volta che aggiungi un nuovo permesso, viene aggiunto alla sua categoria. A seconda dei permessi richiesti, appariranno diversi avvisi all'utente indicando quanto siano sensibili questi permessi.
|
||||
1. Go to [https://console.cloud.google.com/apis/credentials/oauthclient](https://console.cloud.google.com/apis/credentials/oauthclient) and click on configure the consent screen.
|
||||
2. Then, you will be asked if the **user type** is **internal** (only for people in your org) or **external**. Select the one that suits your needs
|
||||
- **Internal** potrebbe essere interessante se hai già compromesso un utente dell'organizzazione e stai creando questa App per phishare un altro.
|
||||
3. Give a **name** to the app, a **support email** (nota che puoi impostare un indirizzo googlegroup per cercare di anonimizzarti un po' di più), un **logo**, **authorized domains** e un altro **email** per **updates**.
|
||||
4. **Select** the **OAuth scopes**.
|
||||
- Questa pagina è divisa in permessi non sensibili, permessi sensibili e permessi restricted. Ogni volta che aggiungi un nuovo permission viene inserito nella sua categoria. A seconda dei permessi richiesti appariranno prompt diversi all'utente che indicano quanto sono sensibili questi permessi.
|
||||
- Sia **`admin.directory.user.readonly`** che **`cloud-platform`** sono permessi sensibili.
|
||||
5. **Aggiungi gli utenti di test.** Finché lo stato dell'app è in fase di test, solo questi utenti potranno accedere all'app, quindi assicurati di **aggiungere l'email che stai per phishingare**.
|
||||
5. **Add the test users.** Finché lo stato dell'app è testing, solo questi utenti potranno accedere all'app, quindi assicurati di **aggiungere l'email che intendi phishare**.
|
||||
|
||||
Ora otteniamo **credenziali per un'applicazione web** utilizzando il **precedentemente creato OAuth Client ID**:
|
||||
Ora otteniamo le **credentials for a web application** usando il **precedentemente creato OAuth Client ID**:
|
||||
|
||||
1. Torna a [https://console.cloud.google.com/apis/credentials/oauthclient](https://console.cloud.google.com/apis/credentials/oauthclient), questa volta apparirà un'opzione diversa.
|
||||
2. Seleziona di **creare credenziali per un'applicazione web**
|
||||
3. Imposta i necessari **origini Javascript** e **URI di reindirizzamento**
|
||||
- Puoi impostare in entrambi qualcosa come **`http://localhost:8000/callback`** per testare
|
||||
4. Ottieni le **credenziali** della tua applicazione
|
||||
2. Seleziona di **create credentials for a Web application**
|
||||
3. Imposta i necessari **Javascript origins** e **redirect URIs**
|
||||
- Per i test puoi impostare in entrambi qualcosa come **`http://localhost:8000/callback`**
|
||||
4. Ottieni le **credentials** della tua applicazione
|
||||
|
||||
Infine, eseguiamo **un'applicazione web che utilizzerà le credenziali dell'applicazione OAuth**. Puoi trovare un esempio in [https://github.com/carlospolop/gcp_oauth_phishing_example](https://github.com/carlospolop/gcp_oauth_phishing_example).
|
||||
Infine, esegui una web application che utilizzi le credenziali dell'OAuth application. Puoi trovare un esempio in [https://github.com/carlospolop/gcp_oauth_phishing_example](https://github.com/carlospolop/gcp_oauth_phishing_example).
|
||||
```bash
|
||||
git clone ttps://github.com/carlospolop/gcp_oauth_phishing_example
|
||||
cd gcp_oauth_phishing_example
|
||||
pip install flask requests google-auth-oauthlib
|
||||
python3 app.py --client-id "<client_id>" --client-secret "<client_secret>"
|
||||
```
|
||||
Vai su **`http://localhost:8000`**, clicca sul pulsante Accedi con Google, ti verrà **richiesto** un messaggio come questo:
|
||||
Vai su **`http://localhost:8000`**, clicca sul pulsante Login with Google, ti verrà **mostrato** un messaggio come questo:
|
||||
|
||||
<figure><img src="../../../images/image (333).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
L'applicazione mostrerà il **token di accesso e il token di aggiornamento** che possono essere facilmente utilizzati. Per ulteriori informazioni su **come utilizzare questi token controlla**:
|
||||
L'applicazione mostrerà gli **access and refresh token** che possono essere facilmente utilizzati. Per maggiori informazioni su **how to use these tokens check**:
|
||||
|
||||
{{#ref}}
|
||||
../../gcp-security/gcp-persistence/gcp-non-svc-persistence.md
|
||||
{{#endref}}
|
||||
|
||||
#### Utilizzando `glcoud`
|
||||
#### Using `glcoud`
|
||||
|
||||
È possibile fare qualcosa utilizzando gcloud invece della console web, controlla:
|
||||
È possibile fare alcune operazioni usando gcloud invece della console web, consulta:
|
||||
|
||||
{{#ref}}
|
||||
../../gcp-security/gcp-privilege-escalation/gcp-clientauthconfig-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
#### OAuth app protections
|
||||
|
||||
Per impostazione predefinita è configurato che qualsiasi utente all'interno di un'organizzazione Workspace **can accecpt any OAuth app with any permissions**, ma è possibile limitarle solo alle app che richiedono le informazioni di base necessarie per Sign in with Google o non consentire alcuna third-party app.
|
||||
|
||||
Inoltre, anche non permettendo la fiducia verso external third-party apps, è possibile consentire di **trust any internal apps** (app create all'interno dell'organizzazione). Questa trust è configurata di **default**.
|
||||
|
||||
<figure><img src="../../../images/workspace_oauth.png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### OAuth Consent Grant Abuse: Detection & Response (Admin Reports)
|
||||
|
||||
Quando un utente autorizza un OAuth app, Google Workspace lo registra in **Admin Reports OAuth Token Audit Activity** (application name `token`) con `events.name` impostato su `authorize`. Questi eventi sono la migliore telemetria per rilevare consent phishing e tracciare il client ID e gli scopes che sono stati concessi.
|
||||
|
||||
Campi chiave da estrarre dall'evento di audit:
|
||||
|
||||
- `id.time`, `id.customerId`
|
||||
- `actor.email`, `actor.profileId`
|
||||
- `ipAddress`, `networkInfo.regionCode`, `networkInfo.subdivisionCode`
|
||||
- `events[0]['parameters']` valori per `client_id`, `app_name`, `scope`, `scope_data`
|
||||
|
||||
**Baseline first (reduce noise):** costruisci un inventario dei client IDs e degli scopes esistenti, poi genera alert su consents nuovi/raramente usati.
|
||||
```bash
|
||||
gam all users print tokens todrive
|
||||
```
|
||||
**Idee per il rilevamento (new/rare app + risky scopes):**
|
||||
|
||||
- Avvisa se un `client_id` è **non in una allowlist approvata** e **non è stato visto negli ultimi X giorni** (es., 90).
|
||||
- Avvisa se il `scope` concesso include scope **ad alto rischio o rari**, specialmente quelli che permettono accesso massivo ai dati o impatto sulla supply-chain, come:
|
||||
- `https://mail.google.com/`
|
||||
- `https://www.googleapis.com/auth/gmail.readonly`
|
||||
- `https://www.googleapis.com/auth/drive`
|
||||
- `https://www.googleapis.com/auth/drive.readonly`
|
||||
- `https://www.googleapis.com/auth/chat.messages`
|
||||
- `https://www.googleapis.com/auth/chromewebstore`
|
||||
```text
|
||||
client_id NOT IN approved_client_ids
|
||||
AND client_id NOT IN last_seen_90d
|
||||
AND scope CONTAINS any(high_risk_scopes OR rare_scopes)
|
||||
```
|
||||
**Risposta / contenimento:**
|
||||
|
||||
- Revoca i token per l'OAuth client ID malevolo:
|
||||
```bash
|
||||
gam all users delete tokens clientId <client_id>
|
||||
```
|
||||
- Bloccare l'OAuth client ID nella Admin Console revocando l'accesso dell'applicazione ai dati Google.
|
||||
|
||||
**Pivot di threat hunting:**
|
||||
|
||||
- Elenca le app esterne a cui hanno acconsentito meno di N utenti (adozione rara).
|
||||
- Esamina il nome dell'app, il publisher, i permessi/scopes e l'ID univoco dell'applicazione.
|
||||
- Cerca app inattive che improvvisamente utilizzano permessi rischiosi (possibili azioni successive come internal phishing o data theft).
|
||||
|
||||
**Mitigazioni:**
|
||||
|
||||
- Limitare l'accesso di tutte le app di terze parti (consentite solo se approvate dall'amministratore).
|
||||
- Consentire accesso limitato in modo che gli utenti possano acconsentire solo alle informazioni di base del profilo "Sign in with Google".
|
||||
|
||||
## Riferimenti
|
||||
|
||||
- [https://www.youtube-nocookie.com/embed/6AsVUS79gLw](https://www.youtube-nocookie.com/embed/6AsVUS79gLw) - Matthew Bryant - Hacking G Suite: The Power of Dark Apps Script Magic
|
||||
- [https://www.youtube.com/watch?v=KTVHLolz6cE](https://www.youtube.com/watch?v=KTVHLolz6cE) - Mike Felch e Beau Bullock - OK Google, come faccio a Red Team GSuite?
|
||||
- [https://www.youtube.com/watch?v=KTVHLolz6cE](https://www.youtube.com/watch?v=KTVHLolz6cE) - Mike Felch and Beau Bullock - OK Google, How do I Red Team GSuite?
|
||||
- [https://redcanary.com/blog/threat-detection/google-workspace-oauth-attack/](https://redcanary.com/blog/threat-detection/google-workspace-oauth-attack/)
|
||||
- [https://github.com/GAM-team/GAM](https://github.com/GAM-team/GAM)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user