
Visualizzatore e Rilevatore di Anomalie di AWS Identity and Access Management
Questo repository non è in fase di sviluppo attivo. Tuttavia, sono aperto ad accettare PR. Aaia funziona ancora poiché non ci sono stati cambiamenti significativi in termini di API AWS che utilizza per raccogliere dati.
(A)n(a)lisi di (I)dentità e (A)ccesso
Nota: Espansione creata dopo che il nome è stato deciso :P
Aaia (pronunciato come mostrato qui ) aiuta a visualizzare AWS IAM e Organizations in formato grafico con l'aiuto di Neo4j. Questo aiuta a identificare facilmente gli outlier. Poiché è basato su neo4j, è possibile interrogare il grafico usando query cypher per trovare le anomalie.
Aaia supporta anche moduli per prelevare dati dal database neo4j in modo programmatico e processarli in modo personalizzato. Questo è utile soprattutto se è necessario applicare confronti complessi o logiche che altrimenti non sarebbero facili con le query cypher.
Aaia è stato inizialmente pensato per essere uno strumento per enumerare le possibilità di escalation dei privilegi e trovare falle in AWS IAM. È stato ispirato dalla citazione di @JohnLaTwC
"Defenders think in lists. Attackers think in graphs. As long as this is true, attackers win."
Aaia in Tamil significa nonna. In generale, una nonna sa tutto della famiglia. Può facilmente collegare chi è parente di chi; e come; e darti la connessione in una frazione di secondo. È un database a grafo vivente. :P
Poiché "Aaia" (questo strumento) fa più o meno lo stesso, da qui il nome.
i. Installa Docker Runtime
Controlla la documentazione ufficiale per l'installazione qui.
ii. Esegui il seguente comando docker
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
Nota: Il comando sopra persiste i dati neo4j sul disco. Tuttavia, sentiti libero di modificare per le tue esigenze e cambiare le credenziali secondo le tue preferenze. Le credenziali fornite qui devono essere configurate anche nel file Aaia.conf.
Istruzioni qui
Imposta il nome utente, la password e l'URI di connessione bolt nel file Aaia.conf. Un formato di esempio è già fornito nel file Aaia.conf.
Nota: Aaia è stato testato con neo4j v 3.5.17. Potrebbe funzionare con versioni precedenti. Neo4j ha introdotto alcune modifiche dopo la v 4.0 che sono risultate non compatibili con il codice attuale di Aaia.
apt-get install awscli jq
yum install awscli jq
Questi pacchetti sono necessari per lo script Aaia_aws_collector.sh. Assicurati che questi pacchetti siano presenti nel sistema di base da cui viene eseguito lo script di raccolta.
git clone https://github.com/rams3sh/Aaia
cd Aaia/
python3 -m venv env
source env/bin/activate
Nota: Aaia dipende dalla libreria pyjq che non è stabile su Windows al momento. Quindi Aaia non è supportato per il sistema operativo Windows.
python -m pip install -r requirements.txt
Aaia richiederà le seguenti autorizzazioni AWS perché lo script di raccolta possa raccogliere dati rilevanti da 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
Le autorizzazioni relative a Organizations possono essere omesse. Tuttavia, tutte le autorizzazioni IAM menzionate sopra sono necessarie.
Assicurati che le autorizzazioni siano disponibili per l'utente / ruolo / qualsiasi principale AWS che verrà utilizzato per la raccolta dei dati per lo script di raccolta.
Assicurati di aver configurato le credenziali AWS. Fai riferimento a questo per aiuto.
Una volta impostate le credenziali.
Esegui:-
./Aaia_aws_collector.sh <profile_name>
Assicurati che il formato di output del profilo AWS utilizzato per la raccolta dati sia impostato su json poiché Aaia si aspetta che i dati raccolti siano in formato json.
Nel caso in cui sia necessario raccogliere dati da un'altra istanza; copia il file "Aaia_aws_collector.sh" nell'istanza remota, eseguilo e copia la cartella "offline_data" generata nel percorso Aaia nell'istanza in cui Aaia è configurato e prosegui con i passaggi successivi. Questo sarà utile in caso di consulenza o audit clienti.
python Aaia.py -n <profile_name> -a load_data
-n supporta "all" come valore, il che significa caricare tutti i dati raccolti e presenti nella cartella offline_data.
Per favore assicurati di non avere un profilo chiamato "all" nel file delle credenziali poiché potrebbe entrare in conflitto con l'argomento. :P
Ora siamo pronti per usare Aaia.
Per ora, un modulo di esempio è fornito come scheletro. Si può considerare questo come riferimento per costruire moduli personalizzati.
python Aaia.py -n all -m iam_sample_audit
Aaia è influenzato e ispirato da vari progetti open source fantastici. Un enorme ringraziamento a:-
Un esempio visivo dell'IAM di un account AWS fittizio
Un esempio visivo del risultato di una query cypher per trovare tutte le relazioni di un utente in AWS IAM