Visualizador y Buscador de Anomalías de AWS Identity and Access Management
Este repositorio no está en desarrollo activo. Sin embargo, estoy abierto a aceptar PRs. Aaia aún funciona ya que no ha habido cambios significativos en las APIs de AWS que utiliza para recopilar datos.
Análisis de Identidad y Acceso
Nota: La expansión se creó después de decidir el nombre :P
Aaia (pronunciado como se muestra aquí) ayuda a visualizar IAM y Organizations de AWS en formato de grafo con la ayuda de Neo4j. Esto facilita la identificación de valores atípicos. Al estar basado en neo4j, se puede consultar el grafo usando consultas cypher para encontrar anomalías.
Aaia también soporta módulos para obtener datos programáticamente de la base de datos neo4j y procesarlos de forma personalizada. Esto es útil principalmente si se necesita aplicar una comparación o lógica compleja que de otro modo no sería fácil mediante consultas cypher.
Aaia fue inicialmente concebida como una herramienta para enumerar posibilidades de escalada de privilegios y encontrar brechas en AWS IAM. Fue inspirada por la cita de @JohnLaTwC:
"Los defensores piensan en listas. Los atacantes piensan en grafos. Mientras esto sea así, los atacantes ganan."
Aaia en tamil significa abuela. En general, una Aaia lo sabe todo sobre la familia. Puede conectar fácilmente quién está relacionado con quién, y cómo, y darte la conexión en una fracción de segundo. Es una base de datos de grafos viviente. :P
Como "Aaia" (esta herramienta) hace más o menos lo mismo, de ahí el nombre.
i. Instalar el runtime de Docker
Consulta la documentación oficial sobre la instalación aquí.
ii. Ejecutar el siguiente 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: El comando anterior persiste los datos de neo4j en tu disco. Sin embargo, siéntete libre de modificarlo según tus necesidades y cambiar las credenciales según tu preferencia. Las credenciales proporcionadas aquí deben configurarse también en el archivo Aaia.conf.
Instrucciones aquí
Configura el nombre de usuario, la contraseña y la URI de conexión bolt en el archivo Aaia.conf. Ya se proporciona un formato de ejemplo en el archivo Aaia.conf.
Nota: Aaia ha sido probado con neo4j v 3.5.17. Puede funcionar con versiones anteriores. Neo4j ha introducido algunos cambios nuevos posteriores a v 4.0 que se ha encontrado que no son compatibles con el código base actual de Aaia.
apt-get install awscli jq
yum install awscli jq
Estos paquetes son necesarios para el script Aaia_aws_collector.sh. Asegúrate de que estos paquetes estén presentes en el sistema base desde donde se ejecuta el script recolector.
git clone https://github.com/rams3sh/Aaia
cd Aaia/
python3 -m venv env
source env/bin/activate
Nota: Aaia depende de la librería pyjq que actualmente no es estable en Windows. Por lo tanto, Aaia no es compatible con el sistema operativo Windows.
python -m pip install -r requirements.txt
Aaia requeriría los siguientes permisos de AWS para que el script recolector recopile datos relevantes de 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
Los permisos relacionados con "Organizations" pueden omitirse. Sin embargo, todos los permisos de "IAM" mencionados anteriormente son necesarios.
Asegúrate de que los permisos estén disponibles para el usuario/rol/cualquier principal de AWS que se utilizará para la recopilación de datos mediante el script recolector.
Asegúrate de tener las credenciales de AWS configuradas. Consulta esto para obtener ayuda.
Una vez configuradas las credenciales.
Ejecuta:-
./Aaia_aws_collector.sh <nombre_de_perfil>
Asegúrate de que el formato de salida del perfil de AWS que se utiliza para la recopilación de datos esté configurado en json, ya que Aaia espera que los datos recopilados estén en formato json.
En caso de que se requiera recopilar datos desde otra instancia; copia el archivo "Aaia_aws_collector.sh" a la instancia remota, ejecútalo y copia la carpeta "offline_data" generada a la ruta de Aaia en la instancia donde está configurado Aaia y continúa con los siguientes pasos. Esto será útil en casos de consultoría o auditoría de clientes.
python Aaia.py -n <nombre_de_perfil> -a load_data
-n soporta "all" como valor, lo que significa cargar todos los datos recopilados y presentes dentro de la carpeta offline_data.
Asegúrate de no tener un perfil llamado "all" en el archivo de credenciales, ya que podría entrar en conflicto con el argumento. :P
Ahora estamos listos para usar Aaia.
Por ahora, se proporciona un módulo de ejemplo como esqueleto. Se puede considerar como referencia para construir módulos personalizados.
python Aaia.py -n all -m iam_sample_audit
Aaia está influenciado e inspirado por varios proyectos de código abierto increíbles. Un enorme agradecimiento a:
Una visualización de ejemplo del IAM de una cuenta de AWS ficticia
Una visualización de ejemplo del resultado de una consulta cypher para encontrar todas las relaciones de un usuario en AWS IAM