
Uma ferramenta para avaliar rapidamente permissões IAM na AWS.
Principal Mapper (PMapper) é um script e biblioteca para identificar riscos na configuração do AWS Identity and Access Management (IAM) para uma conta AWS ou uma organização AWS. Ele modela os diferentes Usuários e Funções IAM em uma conta como um grafo direcionado, o que permite verificar escalonamento de privilégios e caminhos alternativos que um invasor poderia tomar para obter acesso a um recurso ou ação na AWS.
PMapper inclui um mecanismo de consulta que usa uma simulação local do comportamento de autorização da AWS. Ao executar uma consulta para determinar se um principal tem acesso a uma determinada ação/recurso, o PMapper também verifica se o usuário ou função poderia acessar outros usuários ou funções que têm acesso a essa ação/recurso. Isso captura cenários como quando um usuário não tem permissão para ler um objeto S3, mas pode lançar uma instância EC2 que pode ler o objeto S3.
Informações adicionais podem ser encontradas na wiki do projeto.
O Principal Mapper é construído usando a biblioteca botocore e Python 3.5+. O Principal Mapper também requer pydot (disponível no pip) e graphviz (disponível no Windows, macOS e Linux em https://graphviz.org/).
pip install principalmapper
Clone o repositório:
git clone [email protected]:nccgroup/PMapper.git
Então instale com o Pip:
cd PMapper
pip install .
(Após clonar a partir do fonte)
cd PMapper
docker build -t $TAG .
docker run -it $TAG
Você pode usar -e|--env ou --env-file para passar as variáveis de ambiente AWS_* para credenciais ao chamar docker run ..., ou usar -v para montar seu diretório ~/.aws/ e usar as variáveis de ambiente AWS_CONFIG_FILE e AWS_SHARED_CREDENTIALS_FILE. O Dockerfile atual deve colocá-lo em um shell com pmapper -h pronto para uso, bem como graphviz já instalado.
Veja a Página de Introdução na wiki para mais informações sobre como usar o PMapper via linha de comando. Há também páginas com detalhes completos sobre todas as funções de linha de comando e o código da biblioteca.
Aqui está um exemplo rápido:
# Create a graph for the account, accessed through AWS CLI profile "skywalker"
pmapper --profile skywalker graph create
# [... graph-creation output goes here ...]
# Run a query to see who can make IAM Users
$ pmapper --profile skywalker query 'who can do iam:CreateUser'
# [... query output goes here ...]
# Run a query to see who can launch a big expensive EC2 instance, aside from "admin" users
$ pmapper --account 000000000000 argquery -s --action 'ec2:RunInstances' --condition 'ec2:InstanceType=c6gd.16xlarge'
# [... query output goes here ...]
# Run the privilege escalation preset query, skip reporting current "admin" users
$ pmapper --account 000000000000 query -s 'preset privesc *'
# [... privesc report goes here ...]
# Create an SVG representation of the admins/privescs/inter-principal access
$ pmapper --account 000000000000 visualize --filetype svg
# [... information output goes here, file created ...]
Note o uso de --profile, que deve se comportar da mesma forma que a AWS CLI. Além disso, chamadas posteriores com query/argquery/visualize usam um argumento --account que simplesmente atalha a verificação de qual conta utilizar (caso contrário, o PMapper faz uma chamada de API para determinar isso).
Aqui está um exemplo da visualização:

E novamente ao usar --only-privesc:
100% bem-vindas e apreciadas. Por favor, coordene através de issues antes de começar e direcione pull-requests para o branch de desenvolvimento atual (tipicamente da forma vX.Y.Z-dev).
Copyright (c) NCC Group e Erik Steringer 2019. Este arquivo faz parte do Principal Mapper.
Principal Mapper é um software livre: você pode redistribuí-lo e/ou modificá-lo
sob os termos da Licença Pública Geral Affero GNU, conforme publicada pela
Free Software Foundation, seja a versão 3 da Licença, ou
(a seu critério) qualquer versão posterior.
Principal Mapper é distribuído na esperança de que seja útil,
mas SEM NENHUMA GARANTIA; sem even a garantia implícita de
COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM DETERMINADO FIM. Consulte a
Licença Pública Geral Affero GNU para mais detalhes.
Você deve ter recebido uma cópia da Licença Pública Geral Affero GNU
junto com o Principal Mapper. Caso contrário, veja <https://www.gnu.org/licenses/>.