AWS API Gateway è un servizio completo offerto da Amazon Web Services (AWS) progettato per gli sviluppatori per creare, pubblicare e gestire API su larga scala. Funziona come punto di ingresso per un'applicazione, consentendo agli sviluppatori di stabilire un framework di regole e procedure. Questo framework governa l'accesso che gli utenti esterni hanno a determinati dati o funzionalità all'interno dell'applicazione.
API Gateway ti consente di definire come gestire le richieste alle tue API, e può creare endpoint API personalizzati con metodi specifici (ad esempio, GET, POST, PUT, DELETE) e risorse. Può anche generare SDK client (Software Development Kits) per facilitare agli sviluppatori la chiamata alle tue API dalle loro applicazioni.
Tipi di API Gateway
API HTTP: Costruisci API REST a bassa latenza e convenienti con funzionalità integrate come OIDC e OAuth2, e supporto nativo CORS. Funziona con i seguenti: Lambda, backend HTTP.
API WebSocket: Costruisci un'API WebSocket utilizzando connessioni persistenti per casi d'uso in tempo reale come applicazioni di chat o dashboard. Funziona con i seguenti: Lambda, HTTP, Servizi AWS.
API REST: Sviluppa un'API REST in cui hai il controllo completo sulla richiesta e sulla risposta insieme alle capacità di gestione dell'API. Funziona con i seguenti: Lambda, HTTP, Servizi AWS.
API REST Privata: Crea un'API REST accessibile solo da all'interno di una VPC.
Principali Componenti di API Gateway
Risorse: In API Gateway, le risorse sono i componenti che costituiscono la struttura della tua API. Rappresentano i diversi percorsi o endpoint della tua API e corrispondono alle varie azioni supportate dalla tua API. Una risorsa è ciascun metodo (ad esempio, GET, POST, PUT, DELETE) all'interno di ciascun percorso (/, o /utenti, o /utente/{id}).
Fasi: Le fasi in API Gateway rappresentano diverse versioni o ambienti della tua API, come sviluppo, staging o produzione. Puoi utilizzare le fasi per gestire e distribuire più versioni della tua API contemporaneamente, consentendoti di testare nuove funzionalità o correzioni di bug senza influenzare l'ambiente di produzione. Le fasi supportano anche le variabili di fase, che sono coppie chiave-valore che possono essere utilizzate per configurare il comportamento della tua API in base alla fase corrente. Ad esempio, potresti utilizzare le variabili di fase per indirizzare le richieste API a diverse funzioni Lambda o altri servizi backend a seconda della fase.
La fase è indicata all'inizio dell'URL del punto di accesso di API Gateway.
Autorizzatori: Gli autorizzatori in API Gateway sono responsabili del controllo dell'accesso alla tua API verificando l'identità del chiamante prima di consentire alla richiesta di procedere. Puoi utilizzare funzioni Lambda di AWS come autorizzatori personalizzati, che ti consentono di implementare la tua logica di autenticazione e autorizzazione. Quando arriva una richiesta, API Gateway passa il token di autorizzazione della richiesta all'autorizzatore Lambda, che elabora il token e restituisce una policy IAM che determina quali azioni il chiamante è autorizzato a eseguire. API Gateway supporta anche autorizzatori integrati, come Identity and Access Management (IAM) di AWS e Amazon Cognito.
Policy delle Risorse: Una policy delle risorse in API Gateway è un documento JSON che definisce i permessi per accedere alla tua API. È simile a una policy IAM ma specificamente progettata per API Gateway. Puoi utilizzare una policy delle risorse per controllare chi può accedere alla tua API, quali metodi possono chiamare e da quali indirizzi IP o VPC possono connettersi. Le policy delle risorse possono essere utilizzate in combinazione con gli autorizzatori per fornire un controllo degli accessi dettagliato per la tua API.
Per rendere effettiva l'API è necessario rilasciarla nuovamente dopo che la policy delle risorse è stata modificata.
Registrazione
Per impostazione predefinita, i Log di CloudWatch sono disattivati, il Logging di Accesso è disattivato, e il tracciamento X-Ray è anche disattivato.
Enumerazione
Nota che in entrambe le API AWS per enumerare risorse (apigateway e apigatewayv2) l'unica autorizzazione di cui hai bisogno e l'unica autorizzazione di lettura concessa è apigateway:GET, con quella puoi enumerare tutto.
# Generic infoawsapigatewayget-accountawsapigatewayget-domain-namesawsapigatewayget-usage-plansawsapigatewayget-vpc-linksawsapigatewayget-client-certificates# Enumerate APIsawsapigatewayget-rest-apis# This will also show the resource policy (if any)## Get stagesawsapigatewayget-stages--rest-api-id<id>## Get resourcesawsapigatewayget-resources--rest-api-id<id>## Get API resource action per HTTP verb (check authorizers and api key required)awsapigatewayget-method--http-methodGET--rest-api-id<api-id>--resource-id<resource-id>## Call APIhttps://<api-id>.execute-api.<region>.amazonaws.com/<stage>/<resource>## API authorizersawsapigatewayget-authorizers--rest-api-id<id>## Modelsawsapigatewayget-models--rest-api-id<id>## More infoawsapigatewayget-gateway-responses--rest-api-id<id>awsapigatewayget-request-validators--rest-api-id<id>awsapigatewayget-deployments--rest-api-id<id># Get api keys generatedawsapigatewayget-api-keys--include-valueawsapigatewayget-api-key--api-key<id>--include-value# Get just 1## Example use API keycurl-XGET-H"x-api-key: AJE&Ygenu4[..]"https://e83uuftdi8.execute-api.us-east-1.amazonaws.com/dev/test## Usage plansawsapigatewayget-usage-plans#Get limit use infoawsapigatewayget-usage-plan-keys--usage-plan-id<plan_id>#Get clear text values of api keysawsapigatewayget-usage-plan-key--usage-plan-id<plan_id>--key-id<key_id>###Already consumedawsapigatewayget-usage--usage-plan-id<plan_id>--start-date2023-07-01--end-date2023-07-12
Enumerazione API Gateway v2
Descrizione
L'enumerazione di API Gateway v2 può essere eseguita utilizzando tecniche di forza bruta per scoprire informazioni sulle API disponibili.
Strumenti
aws-api-gateway-v2-enumerator: Uno script Python che utilizza la libreria Boto3 per enumerare le API Gateway v2.
Procedure
Installare il modulo Boto3 per Python.
Eseguire lo script aws-api-gateway-v2-enumerator.py specificando il profilo AWS e la regione da esaminare.
Il tool eseguirà una scansione delle API Gateway v2 disponibili e restituirà informazioni dettagliate.
Per mitigare il rischio di enumerazione delle API Gateway v2, è consigliabile implementare controlli di sicurezza come l'autenticazione a più fattori e il monitoraggio delle attività sospette.
# Generic infoawsapigatewayv2get-account--awsapigatewayv2get-domain-namesawsapigatewayv2get-domain-name--domain-name<name>awsapigatewayv2get-usage-plans--awsapigatewayv2get-vpc-linksawsapigatewayv2get-client-certificates--# Enumerate APIsawsapigatewayv2get-apis# This will also show the resource policy (if any)awsapigatewayv2get-api--api-id<id>## Get all the info from an api at onceawsapigatewayv2export-api--api-id<id>--output-typeYAML--specificationOAS30/tmp/api.yaml## Get stagesawsapigatewayv2get-stages--api-id<id>## Get routesawsapigatewayv2get-routes--api-id<id>awsapigatewayv2get-route--api-id<id>--route-id<route-id>## Get deploymentsawsapigatewayv2get-deployments--api-id<id>awsapigatewayv2get-deployment--api-id<id>--deployment-id<dep-id>## Get integrationsawsapigatewayv2get-integrations--api-id<id>## Get authorizersawsapigatewayv2get-authorizers--api-id<id>awsapigatewayv2get-authorizer--api-id<id>--authorizer-id<uth-id>## Get domain mappingsawsapigatewayv2get-api-mappings--api-id<id>--domain-name<dom-name>awsapigatewayv2get-api-mapping--api-id<id>--api-mapping-id<map-id>--domain-name<dom-name>## Get modelsawsapigatewayv2get-models--api-id<id>## Call APIhttps://<api-id>.execute-api.<region>.amazonaws.com/<stage>/<resource>
Diverse autorizzazioni per accedere ai punti finali dell'API Gateway
Policy delle risorse
È possibile utilizzare le policy delle risorse per definire chi può chiamare i punti finali dell'API.
Nell'esempio seguente puoi vedere che l'IP indicato non può chiamare il punto finale /resource_policy tramite GET.
IAM Authorizer
È possibile impostare che un metodo all'interno di un percorso (una risorsa) richieda l'autenticazione IAM per chiamarlo.
Quando ciò è impostato, riceverai l'errore {"message":"Missing Authentication Token"} quando cerchi di raggiungere il punto finale senza alcuna autorizzazione.
Un modo semplice per generare il token previsto dall'applicazione è utilizzare il tipo AWS Signature all'interno di Postman.
Imposta l'accessKey e il SecretKey dell'account che desideri utilizzare e potrai autenticarti contro il punto finale dell'API.
Nota che in altri casi l'Authorizer potrebbe essere stato codificato male e inviare qualsiasi cosa all'interno dell'intestazione di autorizzazione permetterà di vedere il contenuto nascosto.
È possibile utilizzare una funzione lambda che, basandosi su un token fornito, restituirà una policy IAM indicando se l'utente è autorizzato a chiamare il punto finale dell'API.
È possibile impostare ciascun metodo della risorsa che utilizzerà l'autorizzatore.
</details>
Chiamalo con qualcosa del genere:
<pre class="language-bash" data-overflow="wrap"><code class="lang-bash"><strong>curl "https://jhhqafgh6f.execute-api.eu-west-1.amazonaws.com/prod/custom_auth" -H 'Authorization: your-secret-token'
</strong></code></pre>
<div data-gb-custom-block data-tag="hint" data-style='warning'>
A seconda del codice Lambda, questa autorizzazione potrebbe essere vulnerabile
</div>
Nota che se viene generata e restituita una **policy di negazione**, l'errore restituito da API Gateway è: `{"Message":"User is not authorized to access this resource with an explicit deny"}`
In questo modo potresti **identificare che questa autorizzazione** è in atto.
### Chiave API richiesta
È possibile impostare endpoint API che **richiedono una chiave API valida** per contattarli.
<figure><img src="../../../.gitbook/assets/image (88).png" alt=""><figcaption></figcaption></figure>
È possibile generare chiavi API nel portale di API Gateway e anche impostare quanto può essere utilizzata (in termini di richieste al secondo e in termini di richieste al mese).
Per far funzionare una chiave API, è necessario aggiungerla a un **Piano di utilizzo**, questo piano di utilizzo deve essere aggiunto alla **Fase API** e la fase API associata deve avere configurato un **limitatore di metodo** per il **endpoint** che richiede la chiave API:
<figure><img src="../../../.gitbook/assets/image (198).png" alt=""><figcaption></figcaption></figure>
## Accesso non autenticato
<div data-gb-custom-block data-tag="content-ref" data-url='../aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md'>
[aws-api-gateway-unauthenticated-enum.md](../aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md)
</div>
## Privesc
<div data-gb-custom-block data-tag="content-ref" data-url='../aws-privilege-escalation/aws-apigateway-privesc.md'>
[aws-apigateway-privesc.md](../aws-privilege-escalation/aws-apigateway-privesc.md)
</div>
## Post Esploitation
<div data-gb-custom-block data-tag="content-ref" data-url='../aws-post-exploitation/aws-api-gateway-post-exploitation.md'>
[aws-api-gateway-post-exploitation.md](../aws-post-exploitation/aws-api-gateway-post-exploitation.md)
</div>
### Persistenza
<div data-gb-custom-block data-tag="content-ref" data-url='../aws-persistence/aws-api-gateway-persistence.md'>
[aws-api-gateway-persistence.md](../aws-persistence/aws-api-gateway-persistence.md)
</div>
<details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Altri modi per supportare HackTricks:
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>