AWS - Elastic Beanstalk Enum
Last updated
Last updated
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)
Amazon Elastic Beanstalk fornisce una piattaforma semplificata per distribuire, gestire e scalare applicazioni e servizi web. Supporta una varietà di linguaggi di programmazione e framework, come Java, .NET, PHP, Node.js, Python, Ruby e Go, oltre a contenitori Docker. Il servizio è compatibile con server ampiamente utilizzati, tra cui Apache, Nginx, Passenger e IIS.
Elastic Beanstalk fornisce un modo semplice e flessibile per distribuire le tue applicazioni nel cloud AWS, senza la necessità di preoccuparsi dell'infrastruttura sottostante. Gestisce automaticamente i dettagli della provisioning della capacità, del bilanciamento del carico, della scalabilità e del monitoraggio della salute dell'applicazione, consentendoti di concentrarti sulla scrittura e distribuzione del tuo codice.
L'infrastruttura creata da Elastic Beanstalk è gestita da Autoscaling Groups in EC2 (con un bilanciatore di carico). Ciò significa che alla fine della giornata, se comprometti l'host, dovresti sapere riguardo a EC2:
AWS - EC2, EBS, ELB, SSM, VPC & VPN EnumInoltre, se viene utilizzato Docker, è possibile utilizzare ECS.
AWS - EKS EnumIn AWS Elastic Beanstalk, i concetti di "applicazione" e "ambiente" servono a scopi diversi e hanno ruoli distinti nel processo di distribuzione.
Un'applicazione in Elastic Beanstalk è un contenitore logico per il codice sorgente, gli ambienti e le configurazioni della tua applicazione. Raggruppa diverse versioni del codice della tua applicazione e ti consente di gestirle come un'unica entità.
Quando crei un'applicazione, fornisci un nome e una descrizione, ma nessuna risorsa viene provisionata in questa fase. È semplicemente un modo per organizzare e gestire il tuo codice e le risorse correlate.
Puoi avere più versioni dell'applicazione all'interno di un'applicazione. Ogni versione corrisponde a un rilascio specifico del tuo codice, che può essere distribuito a uno o più ambienti.
Un ambiente è un'istanza provisionata della tua applicazione in esecuzione sull'infrastruttura AWS. È dove il codice della tua applicazione è distribuito ed eseguito. Elastic Beanstalk provisiona le risorse necessarie (ad es., istanze EC2, bilanciatori di carico, gruppi di auto-scaling, database) in base alla configurazione dell'ambiente.
Ogni ambiente esegue una singola versione della tua applicazione, e puoi avere più ambienti per scopi diversi, come sviluppo, test, staging e produzione.
Quando crei un ambiente, scegli una piattaforma (ad es., Java, .NET, Node.js, ecc.) e un tipo di ambiente (ad es., server web o worker). Puoi anche personalizzare la configurazione dell'ambiente per controllare vari aspetti dell'infrastruttura e delle impostazioni dell'applicazione.
Ambiente Server Web: È progettato per ospitare e servire applicazioni web e API. Queste applicazioni gestiscono tipicamente le richieste HTTP/HTTPS in arrivo. L'ambiente del server web provisiona risorse come istanze EC2, bilanciatori di carico e gruppi di auto-scaling per gestire il traffico in arrivo, gestire la capacità e garantire l'alta disponibilità dell'applicazione.
Ambiente Worker: È progettato per elaborare compiti in background, che sono spesso operazioni che richiedono tempo o risorse eccessive che non richiedono risposte immediate ai client. L'ambiente worker provisiona risorse come istanze EC2 e gruppi di auto-scaling, ma non ha un bilanciatore di carico poiché non gestisce direttamente le richieste HTTP/HTTPS. Invece, consuma compiti da una coda Amazon Simple Queue Service (SQS), che funge da buffer tra l'ambiente worker e i compiti che elabora.
Quando crei un'app in Beanstalk ci sono 3 opzioni di sicurezza molto importanti da scegliere:
Coppia di chiavi EC2: Questa sarà la chiave SSH che potrà accedere alle istanze EC2 che eseguono l'app.
Profilo istanza IAM: Questo è il profilo istanza che le istanze avranno (privilegi IAM).
Il ruolo generato automaticamente si chiama aws-elasticbeanstalk-ec2-role
e ha alcuni accessi interessanti su tutto ECS, tutto SQS, DynamoDB elasticbeanstalk e elasticbeanstalk S3 utilizzando le politiche gestite da AWS: AWSElasticBeanstalkWebTier, AWSElasticBeanstalkMulticontainerDocker, AWSElasticBeanstalkWorkerTier.
Ruolo di servizio: Questo è il ruolo che il servizio AWS utilizzerà per eseguire tutte le azioni necessarie. A quanto ne so, un normale utente AWS non può accedere a quel ruolo.
Questo ruolo generato da AWS si chiama aws-elasticbeanstalk-service-role
e utilizza le politiche gestite da AWS AWSElasticBeanstalkEnhancedHealth e AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy
Per impostazione predefinita, la versione dei metadati 1 è disabilitata:
I dati di Beanstalk sono memorizzati in un bucket S3 con il seguente nome: elasticbeanstalk-<region>-<acc-id>
(se è stato creato nella console AWS). All'interno di questo bucket troverai il codice sorgente dell'applicazione caricato.
L'URL della pagina web creata è http://<webapp-name>-env.<random>.<region>.elasticbeanstalk.com/
Se ottieni accesso in lettura sul bucket, puoi leggere il codice sorgente e persino trovare credenziali sensibili in esso.
Se ottieni accesso in scrittura sul bucket, potresti modificare il codice sorgente per compromettere il ruolo IAM che l'applicazione sta utilizzando la prossima volta che viene eseguita.
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)