Una herramienta para evaluar rápidamente los permisos IAM en AWS.
Principal Mapper (PMapper) es un script y una biblioteca para identificar riesgos en la configuración de AWS Identity and Access Management (IAM) para una cuenta de AWS o una organización de AWS. Modela los diferentes usuarios y roles de IAM en una cuenta como un grafo dirigido, lo que permite realizar comprobaciones de escalada de privilegios y de rutas alternativas que un atacante podría tomar para obtener acceso a un recurso o acción en AWS.
PMapper incluye un mecanismo de consulta que utiliza una simulación local del comportamiento de autorización de AWS. Al ejecutar una consulta para determinar si un principal tiene acceso a una determinada acción/recurso, PMapper también verifica si el usuario o rol podría acceder a otros usuarios o roles que tengan acceso a esa acción/recurso. Esto captura escenarios como cuando un usuario no tiene permiso para leer un objeto S3, pero podría lanzar una instancia EC2 que pueda leer el objeto S3.
Se puede encontrar información adicional en la wiki del proyecto.
Principal Mapper está construido usando la biblioteca botocore y Python 3.5+. Principal Mapper también requiere pydot (disponible en pip), y graphviz (disponible en Windows, macOS y Linux desde https://graphviz.org/ ).
pip install principalmapper
Clona el repositorio:
git clone [email protected]:nccgroup/PMapper.git
Luego instala con Pip:
cd PMapper
pip install .
(Después de clonar desde el código fuente)
cd PMapper
docker build -t $TAG .
docker run -it $TAG
Puedes usar -e|--env o --env-file para pasar las variables de entorno AWS_* para las credenciales al llamar a docker run ..., o usar -v para montar tu directorio ~/.aws/ y usar las variables de entorno AWS_CONFIG_FILE y AWS_SHARED_CREDENTIALS_FILE. El Dockerfile actual debería colocarte en un shell con pmapper -h listo para usar, así como graphviz ya instalado.
Consulta la Página de inicio en la wiki para obtener más información sobre cómo usar PMapper desde la línea de comandos. También hay páginas con detalles completos sobre todas las funciones de línea de comandos y el código de la biblioteca.
Aquí tienes un ejemplo 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 ...]
Observa el uso de --profile, que debería comportarse igual que la CLI de AWS. Además, las llamadas posteriores con query/argquery/visualize usan un argumento --account que simplemente evita verificar con qué cuenta trabajar (de lo contrario, PMapper realiza una llamada API para determinarlo).
Aquí tienes un ejemplo de la visualización:

Y de nuevo al usar --only-privesc:
100% bienvenidas y apreciadas. Por favor, coordina a través de issues antes de comenzar y dirige las pull-requests a la rama de desarrollo actual (normalmente con el formato vX.Y.Z-dev).
Copyright (c) NCC Group and Erik Steringer 2019. Este archivo es parte de Principal Mapper.
Principal Mapper es software libre: puedes redistribuirlo y/o modificarlo
bajo los términos de la Licencia Pública General Affero de GNU publicada por
la Free Software Foundation, ya sea la versión 3 de la Licencia, o
(a tu elección) cualquier versión posterior.
Principal Mapper se distribuye con la esperanza de que sea útil,
pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de
COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la
Licencia Pública General Affero de GNU para obtener más detalles.
Deberías haber recibido una copia de la Licencia Pública General Affero de GNU
junto con Principal Mapper. Si no es así, consulta <https://www.gnu.org/licenses/>.