
Visualizador e Detector de Anomalias do AWS Identity and Access Management
Este repositório não está em desenvolvimento ativo. No entanto, estou aberto a aceitar PRs. O Aaia ainda funciona, pois não houve mudanças significativas nas APIs da AWS que ele utiliza para coletar dados.
(A)nálise de (I)dentidade e (A)cesso
Nota: A expansão foi criada depois que o nome foi decidido :P
O Aaia (pronunciado como mostrado aqui) ajuda a visualizar o IAM e as Organizações da AWS em formato de grafo com a ajuda do Neo4j. Isso ajuda a identificar facilmente os outliers. Como é baseado no neo4j, é possível consultar o grafo usando consultas cypher para encontrar anomalias.
O Aaia também suporta módulos para buscar dados programaticamente do banco de dados neo4j e processá-los de forma personalizada. Isso é útil principalmente quando uma comparação ou lógica complexa precisa ser aplicada, o que não seria fácil através de consultas cypher.
O Aaia foi inicialmente concebido para ser uma ferramenta para enumerar possibilidades de escalonamento de privilégios e encontrar brechas no IAM da AWS. Foi inspirado na citação de @JohnLaTwC:
"Defensores pensam em listas. Atacantes pensam em grafos. Enquanto isso for verdade, os atacantes vencem."
Aaia em Tâmil significa avó. Em geral, a Aaia sabe tudo sobre a família. Ela consegue conectar facilmente quem é parente de quem; e como; e te dá a conexão em uma fração de segundo. Ela é um banco de dados de grafos vivo. :P
Como o "Aaia" (esta ferramenta) também faz mais ou menos a mesma coisa, daí o nome.
i. Instalar o Runtime Docker
Consulte a documentação oficial sobre instalação aqui.
ii. Execute o seguinte 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: O comando acima persiste os dados do neo4j no seu disco. No entanto, sinta-se à vontade para modificar conforme suas necessidades e alterar a autenticação de acordo com sua preferência. As credenciais fornecidas aqui devem ser configuradas também no arquivo Aaia.conf.
Instruções aqui
Configure o nome de usuário, senha e URI de conexão bolt no arquivo Aaia.conf. Um formato de exemplo já é fornecido no arquivo Aaia.conf.
Nota: O Aaia foi testado com neo4j v 3.5.17. Pode funcionar com versões mais antigas. O Neo4j introduziu algumas mudanças novas após a v 4.0 que se mostraram incompatíveis com a base de código atual do Aaia.
apt-get install awscli jq
yum install awscli jq
Esses pacotes são necessários para o script Aaia_aws_collector.sh. Certifique-se de que esses pacotes estejam presentes no sistema base de onde o script coletor está sendo executado.
git clone https://github.com/rams3sh/Aaia
cd Aaia/
python3 -m venv env
source env/bin/activate
Nota: O Aaia depende da biblioteca pyjq, que não é estável no Windows atualmente. Portanto, o Aaia não é suportado para o sistema operacional Windows.
python -m pip install -r requirements.txt
O Aaia exigiria as seguintes permissões da AWS para que o script coletor colete os dados relevantes 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
As permissões relacionadas a "Organizations" podem ser omitidas. No entanto, todas as permissões de "IAM" mencionadas acima são necessárias.
Certifique-se de que as permissões estejam disponíveis para o usuário/papel/qualquer principal da AWS que será usado para a coleta de dados pelo script coletor.
Certifique-se de ter as credenciais AWS configuradas. Consulte isto para obter ajuda.
Uma vez que a credencial esteja configurada.
Execute:-
./Aaia_aws_collector.sh <profile_name>
Certifique-se de que o formato de saída do perfil AWS usado para coleta de dados esteja definido como json, pois o Aaia espera que os dados coletados estejam no formato json.
Caso haja a necessidade de coletar dados de outra instância; copie o arquivo "Aaia_aws_collector.sh" para a instância remota, execute-o e copie a pasta "offline_data" gerada para o caminho do Aaia na instância onde o Aaia está configurado e prossiga com as etapas seguintes. Isso será útil em casos de consultoria ou auditoria de cliente.
python Aaia.py -n <profile_name> -a load_data
-n suporta "all" como valor, o que significa carregar todos os dados coletados e presentes na pasta offline_data.
Certifique-se de que você não tenha um perfil chamado "all" no arquivo de credenciais, pois isso pode entrar em conflito com o argumento. :P
Agora estamos prontos para usar o Aaia.
Atualmente, um módulo de exemplo é fornecido como um esqueleto. Pode-se considerar isso como referência para construir módulos personalizados.
python Aaia.py -n all -m iam_sample_audit
O Aaia foi influenciado e inspirado por vários projetos open source incríveis. Um grande agradecimento a:
Um exemplo visual do IAM de uma conta AWS fictícia
Um exemplo visual do resultado de uma consulta cypher para encontrar todas as relações de um usuário no IAM da AWS