
Mehrthread-fähiges AWS-Inventarsammelwerkzeug mit Fokus auf sicherheitsrelevante Ressourcen und Metadaten.
Ein multi-threaded, auf AWS-Sicherheit ausgerichtetes Inventarsammelwerkzeug, geschrieben in Ruby.
Dieses Werkzeug wurde entwickelt, um die effiziente Sammlung einer großen Menge von AWS-Ressourcenattributen und -Metadaten zu erleichtern. Es zielt darauf ab, nahezu alles zu sammeln, was für die Sicherheitskonfiguration und den Sicherheitsstatus einer AWS-Umgebung relevant ist.
Bestehende Werkzeuge (z. B. AWS Config), die eine Form der Ressourcensammlung durchführen, haben nicht die Abdeckung und Spezifität, um den Sicherheitsstatus genau zu messen (z. B. detaillierte Ressourcenattributdaten, vollständig geparste Richtliniendokumente und verschachtelte Ressourcenbeziehungen).
AWS Recon bewältigt die Sammlung aus großen Konten durch die Nutzung automatischer Wiederholungsversuche (entweder aufgrund von Netzwerkzuverlässigkeit oder API-Drosselung), automatisches Paging großer Antworten (> 100 Ressourcen pro API-Aufruf) und Multi-Threading paralleler Anfragen, um die Sammlung zu beschleunigen.
** Nutzung impliziert keine Befürwortung
AWS Recon benötigt eine AWS-Kontorolle oder Anmeldeinformationen mit ReadOnlyAccess. Vollständiger AdministratorAccess ist überprivilegiert, funktioniert aber ebenfalls. Die SecurityAudit-Richtlinie ist nicht ausreichend, da sie den Zugriff auf viele Dienste ausschließt.
Verwenden Sie Docker Version 19.x oder höher, um das vorgefertigte Image auszuführen, ohne etwas installieren zu müssen.
Wenn Sie bereits Ruby installiert haben (2.6.x oder 2.7.x), möchten Sie möglicherweise das Ruby-Gem installieren.
AWS Recon kann lokal über einen Docker-Container oder durch Installation des Ruby-Gems ausgeführt werden.
Zur Ausführung über einen Docker-Container übergeben Sie die erforderlichen AWS-Anmeldeinformationen in den Docker-run-Befehl. Zum Beispiel:
$ 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
Zur lokalen Ausführung installieren Sie zuerst das Gem:
$ 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
Oder fügen Sie es mit bundle zu Ihrer Gemfile hinzu:
$ 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 nutzt alle AWS-Anmeldeinformationen (siehe Voraussetzungen), die derzeit in der Umgebung verfügbar sind, in der es ausgeführt wird. Wenn Sie Daten aus mehreren Konten sammeln, möchten Sie möglicherweise etwas wie aws-vault verwenden, um verschiedene Anmeldeinformationen zu verwalten.
$ aws-vault exec profile -- aws_recon
Einfache Umgebungsvariablen funktionieren ebenfalls.
$ AWS_PROFILE=<profile> aws_recon
Zur Ausführung aus einem Docker-Container mit aws-vault-verwalteten Anmeldeinformationen (Ausgabe auf 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
Zur Ausführung aus einem Docker-Container mit aws-vault-verwalteten Anmeldeinformationen und Ausgabe in eine Datei müssen Sie einige Voraussetzungen erfüllen. Erstens benötigt Docker Zugriff, um den von Ihnen angegebenen Pfad (oder einen übergeordneten Pfad) einzubinden. Zweitens müssen Sie eine leere Datei erstellen, in die die Ausgabe gespeichert werden soll (z. B. output.json). Dies liegt daran, dass nur diese eine Datei zur Laufzeit in den Docker-Container eingebunden wird. Zum Beispiel:
Erstellen Sie eine leere Datei.
$ touch output.json
Führen Sie den aws_recon-Container aus und geben Sie die Ausgabedatei an.
$ 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
Sie möchten möglicherweise zu Beginn das Flag -v oder --verbose verwenden, um Status und Aktivität während der Sammlung zu sehen.
Im ausführlichen Modus zeigt die Konsolenausgabe Folgendes:
<thread>.<region>.<service>.<operation>
Das Präfix t gibt an, unter welchem Thread eine bestimmte Anfrage ausgeführt wird. Region, Dienst und Vorgang geben an, welche Anforderungsoperation gerade läuft und wo.
$ 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
Finished in 46 seconds. Saving resources to output.json.
# Sammle S3- und EC2-globale Ressourcen sowie us-east-1 und us-east-2
$ AWS_PROFILE=<profile> aws_recon -s S3,EC2 -r global,us-east-1,us-east-2
# Sammle S3- und EC2-globale Ressourcen sowie us-east-1 und us-east-2