Uma das coisas que sempre precisamos entender em segurança da informação para proteger ou atacar um determinado ambiente é a superfície de ataque que temos à disposição. Para isso é comum atacantes usarem técnicas de enumeração e a partir daí buscarem falhas em serviços, configurações, bem como outros tipos de vulnerabilidades que podem ocorrer pela falta de aplicação de correções de segurança e defeitos de implementação ou implantação.
Pensando em como entender a superfície de ataque de nuvem de clientes, visando desenvolver técnicas de proteção e casos de uso para o nosso SOC focado em nuvem e de como usar as informações de enumeração em ataques e trabalhos consultivos de arquitetura de nuvem na Tempest, passamos a investigar e dedicar um tempo para metodologias e técnicas de enumeração de roles. Partimos de pesquisas já existentes e feitas por outras empresas, no entanto resolvemos adicionar um “molho extra” no que já existia publicado e começamos a pesquisar sobre as roles que alguns serviços criam quando iniciados numa conta Amazon Web Services (AWS). O resultado dessa pesquisa foi algo bem interessante, onde conseguimos elencar de forma imediata vinte e oito (28) serviços, porém acreditamos que aprofundando temos a probabilidade de chegar a algumas dezenas extras, especialmente levando em consideração que temos quase trezentos (300) serviços existentes AWS.
Como resultado de uma primeira análise, conseguimos de uma forma não autenticada e sem gerar eventos de auditoria numa conta alvo, conseguimos apenas de posse de seu account id identificar e enumerar os seguintes serviços listados a seguir:
- Access Analyzer Service Found
- Amazon Certificate Manager (ACM) Service Found
- Audit Manager Service Found
- Backup Service Found
- Batch Service Found
- CloudTrail Service Found
- Cognito IDP Service Found
- Config Service Found
- Direct Connect Service Found
- EKS Service Found
- Elastic Container Service (ECS) Found
- Elastic File System (EFS) Service Found
- Elasticsearch/Opensearch Service Found
- EventBridge Service Found
- GuardDuty Service Found
- Inspector Service Found
- Lightsail Service Found
- Macie Service Found
- Network Firewall Service Found
- Organizations Service Found
- RDS Service Found
- Redshift Service Found
- Resource Access Manager (RAM) Service Found
- Route53 Resolver Service Found
- Security Hub Service Found
- Support Service Found
- System Manager Service (SSM) Found
- Trusted Advisor Service Found
Como já dito anteriormente que partimos de algumas pesquisas já existentes e para efeito prático, utilizamos neste cenário o PACU Framework (https://github.com/RhinoSecurityLabs/pacu/), ferramenta de código aberto, criado pela Rhino Security para realização de testes ofensivos em ambientes hospedados na AWS. O PACU, permite que analistas que trabalham com consultoria de segurança ofensiva, realizem enumerações, elevação de privilégio, movimentação lateral, persistência entre outros.
Dentro do nosso escopo de pesquisa usamos o PACU e dois de seus módulos de enumeração não autenticada, sendo um para usuários IAM (identity & Access Management) e um para roles (funções), este último método utilizado para nossas necessidades.
Quando utilizamos o módulo de enumeração de roles, ele precisa exclusivamente de uma informação, sendo o account id. Porém, caso queira utilizar uma wordlist própria, precisamos adicionar um parâmetro extra. Com isso os parâmetros utilizados foram:
–word-list
–account-id
Criamos um arquivo de wordlist e colocamos as roles padrão que são criadas pelos serviços utilizados na AWS, através de uma “linked role” do serviço que seria o alvo da nossa enumeração. Caso a role exista na conta que estamos avaliando, podemos concluir que a conta está utilizando aquele determinado serviço.
Assim, o resultado inicial simulando a criação dessas linked roles foi uma lista de vinte oito (28) serviços conforme listado a seguir:
-
aws-service-role/access-analyzer.amazonaws.com/AWSServiceRoleForAccessAnalyzer
-
aws-service-role/acm.amazonaws.com/AWSServiceRoleForCertificateManager
-
aws-service-role/auditmanager.amazonaws.com/AWSServiceRoleForAuditManager
-
aws-service-role/backup.amazonaws.com/AWSServiceRoleForBackup
-
aws-service-role/batch.amazonaws.com/AWSServiceRoleForBatch
-
aws-service-role/cloudtrail.amazonaws.com/AWSServiceRoleForCloudTrail
-
aws-service-role/cognito-idp.amazonaws.com/AWSServiceRoleForAmazonCognitoIdp
-
aws-service-role/config.amazonaws.com/AWSServiceRoleForConfig
-
aws-service-role/directconnect.amazonaws.com/AWSServiceRoleForDirectConnect
-
aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS
-
aws-service-role/eks.amazonaws.com/AWSServiceRoleForAmazonEKS
-
aws-service-role/elasticfilesystem.amazonaws.com/AWSServiceRoleForAmazonElasticFileSystem
-
aws-service-role/es.amazonaws.com/AWSServiceRoleForAmazonElasticsearchService
-
aws-service-role/events.amazonaws.com/AWSServiceRoleForCloudWatchEvents
-
aws-service-role/guardduty.amazonaws.com/AWSServiceRoleForAmazonGuardDuty
-
aws-service-role/inspector.amazonaws.com/AWSServiceRoleForAmazonInspector
-
aws-service-role/lightsail.amazonaws.com/AWSServiceRoleForLightsail
-
aws-service-role/macie.amazonaws.com/AWSServiceRoleForAmazonMacie
-
aws-service-role/network-firewall.amazonaws.com/AWSServiceRoleForNetworkFirewall
-
aws-service-role/organizations.amazonaws.com/AWSServiceRoleForOrganizations
-
aws-service-role/ram.amazonaws.com/AWSServiceRoleForResourceAccessManager
-
aws-service-role/rds.amazonaws.com/AWSServiceRoleForRDS
-
aws-service-role/redshift.amazonaws.com/AWSServiceRoleForRedshift
-
aws-service-role/route53resolver.amazonaws.com/AWSServiceRoleForRoute53Resolver
-
aws-service-role/securityhub.amazonaws.com/AWSServiceRoleForSecurityHub
-
aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM
-
aws-service-role/support.amazonaws.com/AWSServiceRoleForSupport
-
aws-service-role/trustedadvisor.amazonaws.com/AWSServiceRoleForTrustedAdvisor
De posse dessa wordlist criamos um script bash para fazer o mapeamento dos findings com os serviços para uma nomenclatura mais fácil e direta, com isso teremos como saída os resultados de acordo com a saída do script a seguir:
Como pode ser observado nas figuras anteriores, fica evidenciado a possibilidade de usar a técnica para enumeração e reconhecimento de serviços em uma conta sem a necessidade de autenticação.
Falando de um exemplo para trabalhos ofensivos, uma abordagem interessante é que podemos utilizar essa enumeração de serviços para verificar, a existência de serviços de proteção como Guard Duty, Security Hub, Config, Inspector os quais podem dar algum insight acerca de cuidados extras de segurança e boas práticas para a conta para quando tiverem tentativas de utilizar um accesskey ou acesso ao control plane, fazendo com que o atacante possa se preparar de melhor forma buscando agir de uma forma mais furtiva para maior efetividade no ataque. No lado da defesa, governança, riscos, essa enumeração pode se transformar em um sistema de scoring para validar se a conta possui serviços e melhores práticas, como Organizations, Cloudtrail, Access Analyzer, Guard Duty e entre outros.
Além dessas possibilidades de melhor entendimento de como o ambiente de nuvem da empresa está arquitetado, podemos, a partir das permissões padrões envolvidas em cada uma dessas roles, criar um mapa padrão de privilégios no IAM para o serviço(s) encontrado(s) na enumeração.
Mapearemos para uma segunda parte desse artigo de enumeração, todas as políticas vinculadas com essas roles e publicaremos no SideChannel os possíveis riscos e impactos que podem existir no seu ambiente.
Tendo em vista a maneira que essa enumeração de roles funciona, ela somente gerará eventos na conta origem (do atacante), ou seja, isso não gerará eventos na sua conta, tornando essa enumeração invisível para detecções na organização alvo.
Happy Hacking!
Referências
[1] – RHINO Security Labs. Assume the Worst: Enumerating AWS Roles through ‘AssumeRole’. Disponível em https://rhinosecuritylabs.com/aws/assume-worst-aws-assume-role-enumeration/ . Acessado em 01/Out/2021.
[2] – Github. Rhino Security Labs/PACU Framework. Disponível em https://github.com/RhinoSecurityLabs/pacu/ . Acessado em 02/Out/2021.