Serverless.com Security
Last updated
Last updated
Impara e pratica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Un'Organizzazione è l'entità di livello più alto all'interno dell'ecosistema Serverless Framework. Rappresenta un gruppo collettivo, come un'azienda, un dipartimento o qualsiasi grande entità, che comprende più progetti, team e applicazioni.
Il Team sono gli utenti con accesso all'interno dell'organizzazione. I team aiutano a organizzare i membri in base ai ruoli. I Collaboratori
possono visualizzare e distribuire app esistenti, mentre gli Admin
possono creare nuove app e gestire le impostazioni dell'organizzazione.
Un'App è un raggruppamento logico di servizi correlati all'interno di un'Organizzazione. Rappresenta un'applicazione completa composta da più servizi serverless che lavorano insieme per fornire una funzionalità coesa.
Un Servizio è il componente centrale di un'applicazione Serverless. Rappresenta l'intero progetto serverless, racchiudendo tutte le funzioni, configurazioni e risorse necessarie. È tipicamente definito in un file serverless.yml
, un servizio include metadati come il nome del servizio, configurazioni del provider, funzioni, eventi, risorse, plugin e variabili personalizzate.
Questo è un riepilogo del tutorial ufficiale dalla documentazione:
Crea un account AWS (Serverless.com inizia nell'infrastruttura AWS)
Crea un account su serverless.com
Crea un'app:
Questo dovrebbe aver creato un app chiamata tutorialapp
che puoi controllare in serverless.com e una cartella chiamata Tutorial
con il file handler.js
contenente del codice JS con un codice helloworld
e il file serverless.yml
che dichiara quella funzione:
Crea un provider AWS, andando nel dashboard in https://app.serverless.com/<org name>/settings/providers?providerId=new&provider=aws
.
Per dare accesso a serverless.com
ad AWS, verrà chiesto di eseguire uno stack cloudformation utilizzando questo file di configurazione (al momento della scrittura): https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml
Questo template genera un ruolo chiamato SFRole-<ID>
con arn:aws:iam::aws:policy/AdministratorAccess
sull'account con un Trust Identity che consente all'account AWS di Serverless.com
di accedere al ruolo.
Il tutorial chiede di creare il file createCustomer.js
che sostanzialmente creerà un nuovo endpoint API gestito dal nuovo file JS e chiede di modificare il file serverless.yml
per far sì che generi una nuova tabella DynamoDB, definisca una variabile d'ambiente, il ruolo che utilizzerà le lambdas generate.
Distribuiscilo eseguendo serverless deploy
Il deployment verrà eseguito tramite un CloudFormation Stack
Nota che le lambdas sono esposte tramite API gateway e non tramite URL diretti
Testalo
Il passaggio precedente stamperà gli URL dove le tue funzioni lambda degli endpoint API sono state distribuite
Ruoli IAM eccessivamente permissivi possono concedere accesso non autorizzato alle risorse cloud, portando a violazioni dei dati o manipolazione delle risorse.
Principio del Minimo Privilegio: Assegna solo i permessi necessari a ciascuna funzione.
Usa Ruoli Separati: Differenzia i ruoli in base ai requisiti delle funzioni.
Memorizzare informazioni sensibili (ad es., chiavi API, credenziali del database) direttamente in serverless.yml
o nel codice può portare a esposizione se i repository vengono compromessi o se l'accesso ad AWS viene compromesso poiché saranno leggibili dalle configurazioni delle lambdas.
Variabili d'Ambiente: Inietta segreti durante l'esecuzione senza hardcoding.
Integrazione con Secrets Manager: Usa servizi come AWS Secrets Manager, Azure Key Vault o HashiCorp Vault.
Variabili Crittografate: Sfrutta le funzionalità di crittografia del Serverless Framework per dati sensibili.
Controlli di Accesso: Limita l'accesso ai segreti in base ai ruoli.
Evita di Registrare Segreti: Assicurati che i segreti non siano esposti nei log o nei messaggi di errore.
Dipendenze obsolete o insicure possono introdurre vulnerabilità, mentre una gestione inadeguata degli input può portare ad attacchi di iniezione di codice.
Gestione delle Dipendenze: Aggiorna regolarmente le dipendenze e scansiona per vulnerabilità.
Validazione degli Input: Implementa una validazione e sanificazione rigorose di tutti gli input.
Revisioni del Codice: Esegui revisioni approfondite per identificare difetti di sicurezza.
Analisi Statica: Usa strumenti per rilevare vulnerabilità nel codice sorgente.
Senza un logging e monitoraggio adeguati, le attività malevole possono rimanere non rilevate, ritardando la risposta agli incidenti.
Logging Centralizzato: Aggrega i log utilizzando servizi come AWS CloudWatch o Datadog.
Abilita Logging Dettagliato: Cattura informazioni essenziali senza esporre dati sensibili.
Imposta Avvisi: Configura avvisi per attività sospette o anomalie.
Monitoraggio Regolare: Monitora continuamente log e metriche per potenziali incidenti di sicurezza.
API aperte o mal sicure possono essere sfruttate per accessi non autorizzati, attacchi Denial of Service (DoS) o attacchi cross-site.
Autenticazione e Autorizzazione: Implementa meccanismi robusti come OAuth, chiavi API o JWT.
Limitazione della Frequenza e Throttling: Prevenire abusi limitando le frequenze delle richieste.
Configurazione CORS Sicura: Limita le origini, i metodi e le intestazioni consentite.
Usa Firewall per Applicazioni Web (WAF): Filtra e monitora le richieste HTTP per schemi malevoli.
Risorse condivise e isolamento inadeguato possono portare a escalation di privilegi o interazioni indesiderate tra funzioni.
Isola le Funzioni: Assegna risorse e ruoli IAM distinti per garantire un'operazione indipendente.
Partizionamento delle Risorse: Usa database o bucket di archiviazione separati per diverse funzioni.
Usa VPC: Distribuisci le funzioni all'interno di Cloud Privati Virtuali per un miglior isolamento della rete.
Limita i Permessi delle Funzioni: Assicurati che le funzioni non possano accedere o interferire con le risorse delle altre a meno che non sia esplicitamente richiesto.
Dati non crittografati a riposo o in transito possono essere esposti, portando a violazioni dei dati o manomissioni.
Crittografa i Dati a Riposo: Utilizza le funzionalità di crittografia dei servizi cloud.
Crittografa i Dati in Transito: Usa HTTPS/TLS per tutte le trasmissioni di dati.
Comunica API in Sicurezza: Applica protocolli di crittografia e valida i certificati.
Gestisci le Chiavi di Crittografia in Sicurezza: Usa servizi di gestione delle chiavi e ruota le chiavi regolarmente.
Messaggi di errore dettagliati possono esporre informazioni sensibili sull'infrastruttura o sul codice, mentre eccezioni non gestite possono portare a crash dell'applicazione.
Messaggi di Errore Generici: Evita di esporre dettagli interni nelle risposte di errore.
Gestione Centralizzata degli Errori: Gestisci e sanifica gli errori in modo coerente in tutte le funzioni.
Monitora e Registra gli Errori: Traccia e analizza gli errori internamente senza esporre dettagli agli utenti finali.
Configurazioni di distribuzione esposte o accesso non autorizzato a pipeline CI/CD possono portare a distribuzioni di codice malevolo o malconfigurazioni.
Sicurezza delle Pipeline CI/CD: Implementa controlli di accesso rigorosi, autenticazione a più fattori (MFA) e audit regolari.
Conserva la Configurazione in Sicurezza: Mantieni i file di distribuzione privi di segreti hardcoded e dati sensibili.
Usa Strumenti di Sicurezza per l'Infrastructure as Code (IaC): Utilizza strumenti come Checkov o Terraform Sentinel per applicare politiche di sicurezza.
Distribuzioni Immobili: Prevenire modifiche non autorizzate dopo la distribuzione adottando pratiche di infrastruttura immutabile.
L'uso di plugin di terze parti non verificati o malevoli può introdurre vulnerabilità nelle tue applicazioni serverless.
Valuta i Plugin Attentamente: Valuta la sicurezza dei plugin prima dell'integrazione, privilegiando quelli provenienti da fonti affidabili.
Limita l'Uso dei Plugin: Usa solo i plugin necessari per ridurre la superficie di attacco.
Monitora gli Aggiornamenti dei Plugin: Mantieni i plugin aggiornati per beneficiare delle patch di sicurezza.
Isola gli Ambienti dei Plugin: Esegui i plugin in ambienti isolati per contenere potenziali compromissioni.
Funzioni pubblicamente accessibili o API senza restrizioni possono essere sfruttate per operazioni non autorizzate.
Limita l'Accesso alle Funzioni: Usa VPC, gruppi di sicurezza e regole del firewall per limitare l'accesso a fonti fidate.
Implementa Autenticazione Robusta: Assicurati che tutti gli endpoint esposti richiedano una corretta autenticazione e autorizzazione.
Usa API Gateway in Sicurezza: Configura gli API Gateway per applicare politiche di sicurezza, inclusa la validazione degli input e la limitazione della frequenza.
Disabilita gli Endpoint Non Utilizzati: Rivedi regolarmente e disabilita eventuali endpoint che non sono più in uso.
Concedere permessi eccessivi ai membri del team e ai collaboratori esterni può portare a accessi non autorizzati, violazioni dei dati e uso improprio delle risorse. Questo rischio è aumentato in ambienti in cui più individui hanno livelli di accesso variabili, aumentando la superficie di attacco e il potenziale per minacce interne.
Principio del Minimo Privilegio: Assicurati che i membri del team e i collaboratori abbiano solo i permessi necessari per svolgere i loro compiti.
Chiavi di Accesso e Chiavi di Licenza sono credenziali critiche utilizzate per autenticare e autorizzare interazioni con il Serverless Framework CLI.
Chiavi di Licenza: Sono identificatori unici richiesti per autenticare l'accesso alla versione 4 del Serverless Framework che consente di effettuare il login tramite CLI.
Chiavi di Accesso: Credenziali che consentono al Serverless Framework CLI di autenticarsi con il Dashboard del Serverless Framework. Quando si effettua il login con serverless
cli, una chiave di accesso sarà generata e memorizzata nel laptop. Puoi anche impostarla come variabile d'ambiente chiamata SERVERLESS_ACCESS_KEY
.
Esposizione Tramite Repository di Codice:
Hardcoding o impegno accidentale di Chiavi di Accesso e Chiavi di Licenza nei sistemi di controllo versione possono portare ad accessi non autorizzati.
Memorizzazione Insicura:
Memorizzare le chiavi in testo semplice all'interno di variabili d'ambiente o file di configurazione senza una crittografia adeguata aumenta la probabilità di esposizione.
Distribuzione Impropria:
Condividere le chiavi tramite canali non sicuri (ad es., email, chat) può comportare l'intercettazione da parte di attori malevoli.
Mancanza di Rotazione:
Non ruotare regolarmente le chiavi estende il periodo di esposizione se le chiavi vengono compromesse.
Permessi Eccessivi:
Chiavi con permessi ampi possono essere sfruttate per eseguire azioni non autorizzate su più risorse.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)