
Strumento di raccolta inventario AWS multi-thread con focus su risorse e metadati rilevanti per la sicurezza.
Uno strumento di raccolta inventario orientato alla sicurezza AWS, multi-threaded, scritto in Ruby.
Questo strumento è stato creato per facilitare la raccolta efficiente di una grande quantità di attributi e metadati delle risorse AWS. Mira a raccogliere quasi tutto ciò che è rilevante per la configurazione di sicurezza e la postura di un ambiente AWS.
Gli strumenti esistenti (ad es. AWS Config) che eseguono una qualche forma di raccolta di risorse mancano della copertura e della specificità per misurare accuratamente la postura di sicurezza (ad es. dati dettagliati sugli attributi delle risorse, documenti policy completamente analizzati e relazioni tra risorse nidificate).
AWS Recon gestisce la raccolta da account di grandi dimensioni sfruttando i tentativi automatici (a causa di affidabilità della rete o limitazione API), il paging automatico delle risposte di grandi dimensioni (> 100 risorse per chiamata API) e richieste parallele multi-threaded per velocizzare la raccolta.
** l'utilizzo non implica approvazione
AWS Recon necessita di un ruolo o credenziali dell'account AWS con ReadOnlyAccess. L'accesso completo AdministratorAccess è eccessivo, ma funzionerà comunque. La policy SecurityAudit non è sufficiente in quanto omette l'accesso a molti servizi.
Utilizzare Docker versione 19.x o superiore per eseguire l'immagine precompilata senza dover installare nulla.
Se hai già Ruby installato (2.6.x o 2.7.x), potresti voler installare la gemma Ruby.
AWS Recon può essere eseguito localmente tramite un container Docker o installando la gemma Ruby.
Per eseguire tramite un container Docker, passa le credenziali AWS necessarie nel comando docker run. Ad esempio:
$ docker run -t --rm \
-e AWS_REGION \
-e AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY \
-e AWS_SESSION_TOKEN \
-v $(pwd)/output.json:/recon/output.json \
darkbitio/aws_recon:latest \
aws_recon -v -s EC2 -r global,us-east-1,us-east-2
Per eseguire localmente, installa prima la gemma:
$ gem install aws_recon
Fetching aws_recon-0.5.17.gem
Fetching aws-sdk-3.0.1.gem
Fetching parallel-1.20.1.gem
...
Successfully installed aws-sdk-3.0.1
Successfully installed parallel-1.20.1
Successfully installed aws_recon-0.5.17
Oppure aggiungila al tuo Gemfile usando bundle:
$ bundle add aws_recon
Fetching gem metadata from https://rubygems.org/
Resolving dependencies...
...
Using aws-sdk 3.0.1
Using parallel-1.20.1
Using aws_recon 0.5.17
AWS Recon sfrutterà qualsiasi credenziale AWS (vedi requisiti) attualmente disponibile per l'ambiente in cui viene eseguito. Se stai raccogliendo da più account, potresti voler utilizzare qualcosa come aws-vault per gestire credenziali diverse.
$ aws-vault exec profile -- aws_recon
Anche le variabili d'ambiente semplici funzioneranno bene.
$ AWS_PROFILE=<profile> aws_recon
Per eseguire da un container Docker utilizzando credenziali gestite da aws-vault (output su stdout):
$ aws-vault exec <vault_profile> -- docker run -t --rm \
-e AWS_REGION \
-e AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY \
-e AWS_SESSION_TOKEN \
darkbitio/aws_recon:latest \
aws_recon -j -s EC2 -r global,us-east-1,us-east-2
Per eseguire da un container Docker utilizzando credenziali gestite da aws-vault e output su file, devi soddisfare un paio di requisiti. Innanzitutto, Docker deve avere accesso per montare il percorso specificato (o un percorso padre). In secondo luogo, devi creare un file vuoto in cui salvare l'output (ad es. output.json). Questo perché solo quel file viene montato nel container Docker al momento dell'esecuzione. Ad esempio:
Crea un file vuoto.
$ touch output.json
Esegui il container aws_recon, specificando il file di output.
$ aws-vault exec <vault_profile> -- docker run -t --rm \
-e AWS_REGION \
-e AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY \
-e AWS_SESSION_TOKEN \
-v $(pwd)/output.json:/recon/output.json \
darkbitio/aws_recon:latest \
aws_recon -s EC2 -v -r global,us-east-1,us-east-2
Potresti voler utilizzare l'opzione -v o --verbose inizialmente per vedere lo stato e l'attività durante la raccolta.
In modalità verbose, l'output della console mostrerà:
<thread>.<region>.<servizio>.<operazione>
Il prefisso t indica quale thread sta eseguendo una particolare richiesta. Regione, servizio e operazione indicano quale operazione di richiesta è attualmente in corso e dove.
$ aws_recon -v
t0.global.EC2.describe_account_attributes
t2.global.S3.list_buckets
t3.global.Support.describe_trusted_advisor_checks
t2.global.S3.list_buckets.acl
t5.ap-southeast-1.WorkSpaces.describe_workspaces
t6.ap-northeast-1.Lightsail.get_instances
...
t2.us-west-2.WorkSpaces.describe_workspaces
t1.us-east-2.Lightsail.get_instances
t4.ap-southeast-1.Firehose.list_delivery_streams
t7.ap-southeast-1.Lightsail.get_instances
t0.ap-south-1.Lightsail.get_instances
t1.us-east-2.Lightsail.get_load_balancers
t7.ap-southeast-2.WorkSpaces.describe_workspaces
t2.eu-west-3.SageMaker.list_notebook_instances
t3.eu-west-2.SageMaker.list_notebook_instances
Finito in 46 secondi. Salvataggio risorse in output.json.
# raccogli risorse globali S3 ed EC2, oltre a us-east-1 e us-east-2
$ AWS_PROFILE=<profile> aws_recon -s S3,EC2 -r global,us-east-1,us-east-2
# raccogli risorse globali S3 ed EC2, oltre a us-east-1 e us-east-2
$ AWS_PROFILE=<profile> aws_recon --services S3,EC2 --regions global,us-east-1,us-east-2
# salva output su bucket S3
$ AWS_PROFILE=<profile> aws_recon \
--services S3,EC2 \
--regions global,us-east-1,us-east-2 \
--verbose \
--s3-bucket my-recon-bucket