Tiago Souza - Tecnologia, Riscos e Segurança

Principal Mapper: avaliando permissões IAM na AWS

Um projeto para acelerar o processo de revisão de permissões do IAM (Identity and Access Management) da conta da Amazon Web Services (AWS).

Propósito

O objetivo do sistema de autenticação da AWS IAM é aplicar e forçar controles de acesso a ações e recursos na AWS. Essa ferramenta ajuda a identificar se as políticas implementadas cumprirão as intenções dos proprietários da conta.

A AWS já possui ferramentas para verificar se as políticas anexadas a um recurso permitirão uma ação. Essa ferramenta baseia-se nessa funcionalidade para identificar outros caminhos possíveis para um usuário obter acesso a um recurso. Isso significa verificar o acesso a outros usuários, funções e serviços como formas de dinamizar.

Como Utilizar

Representação Gráfica

O Principal Mapper possui um subcomando graph que faz o trabalho pesado de passar por cada principal em uma conta e encontrar quaisquer outros princípios que ele possa acessar. Os resultados são armazenados em ~/.principalmap e usados por outros subcomandos.

Consultando

O Principal Mapper tem um subcomando query que executa uma consulta definida pelo usuário. As consultas podem verificar se um ou mais principais podem executar uma determinada ação com um determinado recurso. As consultas suportadas são: "can Principal do Action [with Resource]" "who can do Action [with Resource]" "preset preset_query_name preset_query_args"

O primeiro formulário verifica se um principal ou qualquer outro principal acessível a ele pode executar uma ação com um recurso (default wildcard). A segunda forma enumera todos os principais que são capazes de executar uma ação com um recurso.

Observe as aspas ao redor da consulta completa, para que o argument parser saiba que a string inteira deve ser usada.

Observe que _Principal_ pode ser o ARN completo de um principal ou a última parte desse ARN (user/... ou role/...).

Predefinições

A predefinição existente é priv_esc ou change_perms, que possuem a mesma função. Eles descrevem quais principais têm a capacidade de alterar suas próprias permissões. Se um principal é capaz de alterar suas próprias permissões, então ele efetivamente tem permissões ilimitadas.

Visualizando

O subcomando visualize produz um arquivo DOT e SVG que representa os nós e arestas que foram representados graficamente.

Para criar os arquivos DOT e SVG, execute o comando: python pmapper.py visualize

Atualmente, a saída é um gráfico direcionado, que agrupa todas as arestas com os mesmos nós de origem e destino. Não desenha arestas onde a fonte é um administrador. Nós para administradores são de cor azul. Os nós para usuários com a capacidade de acessar administradores são de cor vermelha (risco potencial de priv-esc).

Amostra de Saída

Puxando um gráfico

esteringer@ubuntu:~/Documents/projects/Skywalker$ python pmapper.py graph Using profile: default Pulling data for account [REDACTED] Using principal with ARN arn:aws:iam::[REDACTED]:user/TestingSkywalker [+] Pulling info on IAM users and roles, finding admins. Principals Checked: 100%|##############################################################| 43/43 [00:24<00:00, 1.72it/s] [+] Finished finding admins. [+] Started EC2 checks. Principals Checked: 100%|##############################################################| 43/43 [00:24<00:00, 1.78it/s] [+] Finished EC2 checks. [+] Started IAM checks. Principals Checked: 100%|##############################################################| 43/43 [05:34<00:00, 7.77s/it] [+] Finished IAM checks. [+] Starting Lambda checks.

Regions Checked for Lambda Functions: 100% ############################################ 15/15 [00:15<00:00, 1.02s/it]

[+] Finished Lambda checks. [+] Starting CloudFormation checks.

CloudFormation Regions Checked: 100% ################################################## 15/15 [00:16<00:00, 1.07s/it]

[+] Finished CloudFormation checks. Created an AWS Graph with 43 nodes and 258 edges

Consultando com o gráfico

esteringer@ubuntu:~/Documents/projects/Skywalker$ ./pmapper.py --profile skywalker query "who can do s3:GetObject with *" user/AdminUser can do s3:GetObject with * user/EC2Manager can do s3:GetObject with * through role/EC2Role-Admin user/EC2Manager can create an EC2 instance and use an existing instance profile to access role/EC2Role-Admin role/EC2Role-Admin can do s3:GetObject with * user/LambdaFullAccess can do s3:GetObject with * user/PowerUser can do s3:GetObject with * user/S3ManagementUser can do s3:GetObject with * user/S3ReadOnly can do s3:GetObject with * user/TestingSkywalker can do s3:GetObject with * role/EC2-Fleet-Manager can do s3:GetObject with * through role/EC2Role-Admin role/EC2-Fleet-Manager can create an EC2 instance and use an existing instance profile to access role/EC2Role-Admin role/EC2Role-Admin can do s3:GetObject with * role/EC2Role-Admin can do s3:GetObject with * role/EC2WithS3ReadOnly can do s3:GetObject with * role/EMR-Service-Role can do s3:GetObject with * role/LambdaRole-S3ReadOnly can do s3:GetObject with * role/UpdateCredentials can do s3:GetObject with * through user/AdminUser role/UpdateCredentials can create access keys with IAM to access user/AdminUser user/AdminUser can do s3:GetObject with *

Identificando o escalonamento potencial de privilégios

esteringer@ubuntu:~/Documents/projects/Skywalker$ ./pmapper.py --profile skywalker query "preset priv_esc user/PowerUser" Discovered a potential path to change privileges: user/PowerUser can change privileges because: user/PowerUser can access role/EC2Role-Admin because: user/PowerUser can create an EC2 instance and use an existing instance profile to access role/EC2Role-Admin and role/EC2Role-Admin can change its own privileges.

Amostra de Visualização

Principal_Mapper_exemplo_saida

Planned TODOs

Download do PMapper - Revisão de permissões do IAM da AWS

Para efetuar download da ferramenta, baixe diretamente por este link (173 kb) ou acesse o repositório do projeto no Github.

.

Disclaimer: Todas as informações aqui contidas são para fins didáticos e não para causar danos e prejuízos para alguém, usem sempre o conhecimento aqui compartilhado com ética e responsabilidade. Não nos responsabilizamos pela utilização indevida do conteúdo aqui exposto. Leia mais no aviso legal em nosso site.

.

#AWS #EC2 #IAM #PMapper #S3