
Visualiseur et détecteur d'anomalies pour AWS Identity and Access Management
Ce dépôt n'est pas en développement actif. Cependant, je suis ouvert à l'acceptation de PRs. Aaia fonctionne toujours car il n'y a pas eu de changements significatifs dans les API AWS qu'il utilise pour collecter des données.
(A)n(a)lyse de (I)dentité et (A)ccès
Remarque : L'expansion a été créée après le choix du nom :P
Aaia (prononcé comme indiqué ici ) permet de visualiser AWS IAM et Organizations sous forme de graphe avec l'aide de Neo4j. Cela facilite l'identification des valeurs aberrantes. Comme il est basé sur Neo4j, on peut interroger le graphe à l'aide de requêtes Cypher pour trouver les anomalies.
Aaia prend également en charge des modules permettant de récupérer programmatiquement les données de la base Neo4j et de les traiter de manière personnalisée. Cela est surtout utile si une comparaison ou une logique complexe doit être appliquée, ce qui ne serait pas facile autrement avec des requêtes Cypher.
Aaia était initialement destiné à être un outil pour énumérer les possibilités d'escalade de privilèges et trouver des failles dans AWS IAM. Il a été inspiré par la citation de @JohnLaTwC :
« Les défenseurs pensent en listes. Les attaquants pensent en graphes. Tant que cela sera vrai, les attaquants gagneront. »
Aaia en tamoul signifie grand-mère. En général, une grand-mère sait tout sur la famille. Elle peut facilement relier qui est apparenté à qui, et comment, et vous donner la connexion en une fraction de seconde. Elle est une base de données de graphes vivante. :P
Comme « Aaia » (cet outil) fait plus ou moins la même chose, d'où le nom.
i. Installer le runtime Docker
Consultez la documentation officielle concernant l'installation ici.
ii. Exécutez la commande Docker suivante
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
Remarque : La commande ci-dessus persiste les données Neo4j sur votre disque. Cependant, n'hésitez pas à modifier selon vos besoins et à changer l'authentification selon vos préférences. Les identifiants fournis ici doivent également être configurés dans le fichier Aaia.conf.
Instructions ici
Configurez le nom d'utilisateur, le mot de passe et l'URI de connexion Bolt dans le fichier Aaia.conf. Un exemple de format est déjà donné dans le fichier Aaia.conf.
Remarque : Aaia a été testé avec Neo4j v 3.5.17. Il peut fonctionner avec des versions plus anciennes. Neo4j a introduit quelques changements après la v 4.0 qui se sont avérés incompatibles avec la base de code actuelle d'Aaia.
apt-get install awscli jq
yum install awscli jq
Ces paquets sont nécessaires pour le script Aaia_aws_collector.sh. Assurez-vous que ces paquets sont présents sur le système de base à partir duquel le script de collecte est exécuté.
git clone https://github.com/rams3sh/Aaia
cd Aaia/
python3 -m venv env
source env/bin/activate
Remarque : Aaia dépend de la bibliothèque pyjq qui n'est pas stable sur Windows actuellement. Par conséquent, Aaia n'est pas pris en charge pour le système d'exploitation Windows.
python -m pip install -r requirements.txt
Aaia nécessite les autorisations AWS suivantes pour que le script de collecte puisse récupérer les données pertinentes depuis AWS
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
Les autorisations liées à « Organizations » peuvent être omises. Cependant, toutes les autorisations « IAM » mentionnées ci-dessus sont nécessaires.
Assurez-vous que les autorisations sont disponibles pour l'utilisateur / le rôle / tout principal AWS qui sera utilisé pour la collecte de données avec le script de collecte.
Assurez-vous d'avoir configuré les identifiants AWS. Reportez-vous ici pour obtenir de l'aide.
Une fois les identifiants configurés.
Exécutez :-
./Aaia_aws_collector.sh <profile_name>
Assurez-vous que le format de sortie du profil AWS utilisé pour la collecte de données est défini sur json, car Aaia s'attend à ce que les données collectées soient au format json.
En cas de besoin de collecte de données depuis une autre instance, copiez le fichier "Aaia_aws_collector.sh" sur l'instance distante, exécutez-le et copiez le dossier "offline_data" généré dans le chemin Aaia sur l'instance où Aaia est installé, puis poursuivez avec les étapes suivantes. Cela sera utile dans les cas de conseil ou d'audit client.
python Aaia.py -n <profile_name> -a load_data
-n prend en charge la valeur "all", ce qui signifie charger toutes les données collectées et présentes dans le dossier offline_data.
Assurez-vous de ne pas avoir de profil nommé "all" dans le fichier d'identifiants, car cela pourrait entrer en conflit avec l'argument. :P
Maintenant nous sommes prêts à utiliser Aaia.
Pour l'instant, un module d'exemple est fourni comme squelette. On peut le considérer comme une référence pour construire des modules personnalisés.
python Aaia.py -n all -m iam_sample_audit
Aaia est influencé et inspiré par divers projets open source impressionnants. Un grand merci à :-
Un exemple visuel de l'IAM d'un compte AWS factice
Un exemple visuel du résultat d'une requête Cypher pour trouver toutes les relations d'un utilisateur dans AWS IAM