Az - Function Apps
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Azure Functions è una soluzione serverless che consente di scrivere meno codice, mantenere meno infrastruttura e risparmiare sui costi. Invece di preoccuparsi del deployment e della manutenzione dei server, l'infrastruttura cloud fornisce tutte le risorse aggiornate necessarie per mantenere le tue applicazioni in esecuzione.
Nel portale Azure, l'integrazione tra Azure Functions e Azure API Management è facilitata, consentendo che gli endpoint delle funzioni attivate da HTTP siano esposti come API REST. Le API esposte in questo modo sono descritte utilizzando una definizione OpenAPI, fornendo un'interfaccia standard, indipendente dal linguaggio, per le API RESTful.
Il piano Flex Consumption offre scalabilità dinamica e basata su eventi con opzioni di calcolo flessibili. Aggiunge o rimuove automaticamente le istanze della funzione in base alla domanda, garantendo un uso efficiente delle risorse e un costo contenuto attraverso un modello pay-as-you-go. Questo piano supporta il networking virtuale per una maggiore sicurezza e consente di ridurre i cold start pre-provisionando le istanze. È ideale per applicazioni che presentano carichi di lavoro variabili e richiedono una scalabilità rapida senza la necessità di supporto per i container.
Il tradizionale piano Consumption per Azure Functions è l'opzione di hosting serverless predefinita, in cui paghi solo per le risorse di calcolo quando le tue funzioni sono in esecuzione. Si scala automaticamente in base al numero di eventi in arrivo, rendendolo altamente conveniente per applicazioni con carichi di lavoro intermittenti o imprevedibili. Sebbene non supporti i deployment di container, include ottimizzazioni per ridurre i tempi di avvio a freddo ed è adatto per una vasta gamma di applicazioni serverless che richiedono scalabilità automatica senza l'onere di gestire l'infrastruttura.
Il piano Premium per Azure Functions è progettato per applicazioni che necessitano di prestazioni costanti e funzionalità avanzate. Si scala automaticamente in base alla domanda utilizzando lavoratori pre-riscaldati, eliminando i cold start e garantendo che le funzioni vengano eseguite prontamente anche dopo periodi di inattività. Questo piano offre istanze più potenti, tempi di esecuzione prolungati e supporta la connettività di rete virtuale. Inoltre, consente l'uso di immagini Linux personalizzate, rendendolo adatto per applicazioni mission-critical che richiedono alte prestazioni e maggiore controllo sulle risorse.
Il piano Dedicated, noto anche come piano App Service, esegue le tue funzioni su macchine virtuali dedicate all'interno di un ambiente App Service. Questo piano fornisce una fatturazione prevedibile e consente la scalabilità manuale o automatica delle istanze, rendendolo ideale per scenari a lungo termine in cui le Durable Functions non sono adatte. Supporta l'esecuzione di più app web e funzioni sullo stesso piano, offre dimensioni di calcolo maggiori e garantisce piena isolamento di calcolo e accesso sicuro alla rete attraverso gli App Service Environments (ASE). Questa opzione è migliore per applicazioni che necessitano di allocazione costante delle risorse e ampie personalizzazioni.
Container Apps ti consentono di distribuire app di funzione containerizzate all'interno di un ambiente completamente gestito ospitato da Azure Container Apps. Questa opzione è perfetta per costruire applicazioni serverless basate su eventi che funzionano insieme ad altri microservizi, API e flussi di lavoro. Supporta il packaging di librerie personalizzate con il tuo codice di funzione, la migrazione di applicazioni legacy a microservizi cloud-native e l'utilizzo di potenza di elaborazione avanzata con risorse GPU. Le Container Apps semplificano il deployment eliminando la necessità di gestire cluster Kubernetes, rendendole ideali per gli sviluppatori che cercano flessibilità e scalabilità in un ambiente containerizzato.
Quando crei una nuova Function App non containerizzata (ma fornendo il codice da eseguire), il codice e altri dati relativi alla funzione saranno memorizzati in un'account di archiviazione. Per impostazione predefinita, la console web creerà un nuovo account per ogni funzione per memorizzare il codice.
Inoltre, ogni volta che è necessaria l'esecuzione di una nuova istanza dell'app, il codice dell'app verrà raccolto da qui ed eseguito.
Questo è molto interessante dal punto di vista di un attaccante poiché l'accesso in scrittura su questo bucket consentirà a un attaccante di compromettere il codice e aumentare i privilegi alle identità gestite all'interno della Function App.
È possibile dare accesso a una funzione a tutto Internet senza richiedere alcuna autenticazione o dare accesso basato su IAM.
È anche possibile dare o limitare l'accesso alla Function App da Internet, dando accesso a una rete interna (VPC) alla Function App.
Questo è molto interessante dal punto di vista di un attaccante poiché potrebbe essere possibile pivotare verso reti interne da una funzione Lambda vulnerabile esposta a Internet.
Inoltre, la Function App potrebbe avere determinati endpoint che richiedono un certo livello di autenticazione, come "admin" o "anonimo". Un attaccante potrebbe cercare di accedere agli endpoint consentiti anonimamente per bypassare le restrizioni e ottenere accesso a dati o funzionalità sensibili.
Nota che non ci sono permessi RBAC per dare accesso agli utenti per invocare le funzioni. L'invocazione della funzione dipende dal trigger selezionato quando è stata creata e se è stato selezionato un Trigger HTTP, potrebbe essere necessario utilizzare una chiave di accesso.
Quando crei un endpoint all'interno di una funzione utilizzando un trigger HTTP, è possibile indicare il livello di autorizzazione della chiave di accesso necessario per attivare la funzione. Sono disponibili tre opzioni:
ANONYMOUS: Chiunque può accedere alla funzione tramite l'URL.
FUNCTION: L'endpoint è accessibile solo agli utenti che utilizzano una chiave di funzione, host o master.
ADMIN: L'endpoint è accessibile solo agli utenti con una chiave master.
Tipo di chiavi:
Chiavi di Funzione: Le chiavi di funzione possono essere predefinite o definite dall'utente e sono progettate per concedere accesso esclusivamente a specifici endpoint di funzione all'interno di una Function App. Questo consente un controllo di sicurezza dettagliato, garantendo che solo utenti o servizi autorizzati possano invocare funzioni particolari senza esporre l'intera applicazione.
Chiavi Host: Le chiavi host, che possono essere predefinite o definite dall'utente, forniscono accesso a tutti gli endpoint di funzione all'interno di una Function App. Questo è utile quando più funzioni devono essere accessibili utilizzando una singola chiave, semplificando la gestione e riducendo il numero di chiavi che devono essere distribuite o memorizzate in modo sicuro.
Chiave Master: La chiave master (_master
) funge da chiave amministrativa che offre permessi elevati, inclusi l'accesso alle API REST runtime di una Function App. Questa chiave non può essere revocata e deve essere gestita con la massima attenzione. È cruciale non condividere la chiave master con terze parti o includerla in applicazioni client native per prevenire accessi amministrativi non autorizzati.
Quando si imposta l'autenticazione di una funzione su ADMIN (e non ANONYMOUS o FUNCTION), è necessario utilizzare questa chiave.
Chiavi di Sistema: Le chiavi di sistema sono gestite da estensioni specifiche e sono necessarie per accedere agli endpoint webhook utilizzati dai componenti interni. Esempi includono il trigger Event Grid e le Durable Functions, che utilizzano chiavi di sistema per interagire in modo sicuro con le rispettive API. Le chiavi di sistema possono essere rigenerate tramite il Portale Azure o le API delle chiavi per mantenere la sicurezza.
Esempio per accedere a un endpoint API di funzione utilizzando una chiave:
https://<function_uniq_name>.azurewebsites.net/api/<endpoint_name>?code=<access_key>
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)