AWS Identity and Access Management Visualizer und Anomalie-Finder
Dieses Repository wird nicht aktiv weiterentwickelt. Ich bin jedoch offen für Pull Requests. Aaia funktioniert weiterhin, da es keine wesentlichen Änderungen an den AWS-APIs gab, die es zur Datenerfassung verwendet.
(A)n(a)lysis of (I)dentity and (A)ccess
Note: Expansion created post the name was decided :P
Aaia (ausgesprochen wie hier gezeigt) hilft dabei, AWS IAM und Organizations in einem Graph-Format mit Hilfe von Neo4j zu visualisieren. Dies hilft, Ausreißer leicht zu identifizieren. Da es auf Neo4j basiert, kann man den Graphen mit Cypher-Abfragen abfragen, um Anomalien zu finden.
Aaia unterstützt auch Module, um programmatisch Daten aus der Neo4j-Datenbank abzurufen und auf benutzerdefinierte Weise zu verarbeiten. Dies ist besonders nützlich, wenn komplexe Vergleiche oder Logik angewendet werden müssen, die ansonsten durch Cypher-Abfragen nicht einfach umsetzbar wären.
Aaia war ursprünglich als Werkzeug gedacht, um Privilegieneskalationsmöglichkeiten aufzulisten und Sicherheitslücken in AWS IAM zu finden. Es wurde durch das Zitat von @JohnLaTwC inspiriert.
"Verteidiger denken in Listen. Angreifer denken in Graphen. Solange dies wahr ist, gewinnen Angreifer."
Aaia bedeutet auf Tamil 'Großmutter'. Im Allgemeinen weiß Aaia alles über die Familie. Sie kann leicht verbinden, wer mit wem verwandt ist und wie, und dir die Verbindung innerhalb einer Sekunde geben. Sie ist eine lebende Graphdatenbank. :P
Da "Aaia" (dieses Werkzeug) auch mehr oder weniger dasselbe tut, daher der Name.
i. Docker-Laufzeit installieren
Die offizielle Dokumentation zur Installation findest du hier.
ii. Führe den folgenden Docker-Befehl aus
docker run -p 7687:7687 -p 7474:7474 -v `pwd`/neo4j/data:/data -v `pwd`/neo4j/logs:/logs -e NEO4J_AUTH=neo4j/test neo4j:3.5.17
Hinweis: Der obige Befehl speichert Neo4j-Daten auf deiner Festplatte. Du kannst ihn jedoch nach Bedarf anpassen und die Authentifizierung nach deinen Wünschen ändern. Die hier angegebenen Anmeldeinformationen sollten auch in der Datei Aaia.conf konfiguriert werden.
Anleitung hier
Richte Benutzername, Passwort und Bolt-Verbindungs-URI in der Datei Aaia.conf ein. In der Datei Aaia.conf ist bereits ein Beispielformat angegeben.
Hinweis: Aaia wurde mit Neo4j v 3.5.17 getestet. Es könnte mit älteren Versionen funktionieren. Neo4j hat nach v 4.0 einige Änderungen eingeführt, die nicht mit der aktuellen Codebasis von Aaia kompatibel sind.
apt-get install awscli jq
yum install awscli jq
Diese Pakete werden für das Skript Aaia_aws_collector.sh benötigt. Stelle sicher, dass diese Pakete auf dem Basissystem vorhanden sind, von dem aus das Collector-Skript ausgeführt wird.
git clone https://github.com/rams3sh/Aaia
cd Aaia/
python3 -m venv env
source env/bin/activate
Hinweis: Aaia ist von der pyjq-Bibliothek abhängig, die derzeit unter Windows nicht stabil ist. Daher wird Aaia unter Windows nicht unterstützt.
python -m pip install -r requirements.txt
Aaia benötigt die folgenden AWS-Berechtigungen, damit das Collector-Skript relevante Daten aus AWS sammeln kann
iam:GenerateCredentialReport
iam:GetCredentialReport
iam:GetAccountAuthorizationDetails
iam:ListUsers
iam:GetUser
iam:ListGroups
iam:ListRoles
iam:GetRole
iam:GetPolicy
iam:GetAccountPasswordPolicy
iam:GetAccountSummary
iam:ListAccountAliases
organizations:ListAccountsForParent
organizations:ListOrganizationalUnitsForParent
organizations:DescribeOrganization
organizations:ListRoots
organizations:ListAccounts
organizations:ListTagsForResource
organizations:ListPolicies
organizations:ListTargetsForPolicy
organizations:DescribePolicy
organizations:ListAWSServiceAccessForOrganization
Organizations-bezogene Berechtigungen können ausgelassen werden. Alle oben genannten IAM-Berechtigungen sind jedoch erforderlich.
Stelle sicher, dass die Berechtigungen für den Benutzer / die Rolle / den AWS-Principal verfügbar sind, der für die Datensammlung durch das Collector-Skript verwendet wird.
Stelle sicher, dass AWS-Anmeldeinformationen konfiguriert sind. Hilfe findest du hier.
Sobald die Anmeldeinformationen eingerichtet sind.
Führe aus:-
./Aaia_aws_collector.sh <profile_name>
Stelle sicher, dass das Ausgabeformat des AWS-Profils, das für die Datensammlung verwendet wird, auf json gesetzt ist, da Aaia die gesammelten Daten im JSON-Format erwartet.
Falls Daten von einer anderen Instanz gesammelt werden müssen, kopiere die Datei "Aaia_aws_collector.sh" auf die entfernte Instanz, führe sie aus und kopiere den generierten Ordner "offline_data" in den Aaia-Pfad auf der Instanz, auf der Aaia eingerichtet ist, und fahre mit den folgenden Schritten fort. Dies ist in Fällen von Beratung oder Kunden-Audits hilfreich.
python Aaia.py -n <profile_name> -a load_data
-n unterstützt den Wert "all", was bedeutet, dass alle gesammelten Daten aus dem Ordner offline_data geladen werden.
Bitte stelle sicher, dass du kein Profil mit dem Namen "all" in der Anmeldedatendatei hast, da dies mit dem Argument kollidieren könnte. :P
Jetzt sind wir bereit, Aaia zu verwenden.
Derzeit ist ein Beispielmodul als Skelettbeispiel gegeben. Man kann dies als Referenz für die Erstellung benutzerdefinierter Module betrachten.
python Aaia.py -n all -m iam_sample_audit
Aaia wurde von verschiedenen großartigen Open-Source-Projekten beeinflusst und inspiriert. Ein riesiger Dank geht an:-
Eine Beispielvisualisierung der IAM eines Dummy-AWS-Kontos
Eine Beispielvisualisierung des Ergebnisses einer Cypher-Abfrage, um alle Beziehungen eines Benutzers in AWS IAM zu finden