Por Rodrigo Ribeiro Montoro

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:

  1. Access Analyzer Service Found
  2. Amazon Certificate Manager (ACM) Service Found
  3. Audit Manager Service Found
  4. Backup Service Found
  5. Batch Service Found
  6. CloudTrail Service Found
  7. Cognito IDP Service Found
  8. Config Service Found
  9. Direct Connect Service Found
  10. EKS Service Found
  11. Elastic Container Service (ECS) Found
  12. Elastic File System (EFS) Service Found
  13. Elasticsearch/Opensearch Service Found
  14. EventBridge Service Found
  15. GuardDuty Service Found
  16. Inspector Service Found
  17. Lightsail Service Found
  18. Macie Service Found
  19. Network Firewall Service Found
  20. Organizations Service Found
  21. RDS Service Found
  22. Redshift Service Found
  23. Resource Access Manager (RAM) Service Found
  24. Route53 Resolver Service Found
  25. Security Hub Service Found
  26. Support Service Found
  27. System Manager Service (SSM) Found
  28. 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

Figura 1: PACU Framework exibindo opções do módulo de roles

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:

  1. aws-service-role/access-analyzer.amazonaws.com/AWSServiceRoleForAccessAnalyzer
  2. aws-service-role/acm.amazonaws.com/AWSServiceRoleForCertificateManager
  3. aws-service-role/auditmanager.amazonaws.com/AWSServiceRoleForAuditManager
  4. aws-service-role/backup.amazonaws.com/AWSServiceRoleForBackup
  5. aws-service-role/batch.amazonaws.com/AWSServiceRoleForBatch
  6. aws-service-role/cloudtrail.amazonaws.com/AWSServiceRoleForCloudTrail
  7. aws-service-role/cognito-idp.amazonaws.com/AWSServiceRoleForAmazonCognitoIdp
  8. aws-service-role/config.amazonaws.com/AWSServiceRoleForConfig
  9. aws-service-role/directconnect.amazonaws.com/AWSServiceRoleForDirectConnect
  10. aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS
  11. aws-service-role/eks.amazonaws.com/AWSServiceRoleForAmazonEKS
  12. aws-service-role/elasticfilesystem.amazonaws.com/AWSServiceRoleForAmazonElasticFileSystem
  13. aws-service-role/es.amazonaws.com/AWSServiceRoleForAmazonElasticsearchService
  14. aws-service-role/events.amazonaws.com/AWSServiceRoleForCloudWatchEvents
  15. aws-service-role/guardduty.amazonaws.com/AWSServiceRoleForAmazonGuardDuty
  16. aws-service-role/inspector.amazonaws.com/AWSServiceRoleForAmazonInspector
  17. aws-service-role/lightsail.amazonaws.com/AWSServiceRoleForLightsail
  18. aws-service-role/macie.amazonaws.com/AWSServiceRoleForAmazonMacie
  19. aws-service-role/network-firewall.amazonaws.com/AWSServiceRoleForNetworkFirewall
  20. aws-service-role/organizations.amazonaws.com/AWSServiceRoleForOrganizations
  21. aws-service-role/ram.amazonaws.com/AWSServiceRoleForResourceAccessManager
  22. aws-service-role/rds.amazonaws.com/AWSServiceRoleForRDS
  23. aws-service-role/redshift.amazonaws.com/AWSServiceRoleForRedshift
  24. aws-service-role/route53resolver.amazonaws.com/AWSServiceRoleForRoute53Resolver
  25. aws-service-role/securityhub.amazonaws.com/AWSServiceRoleForSecurityHub
  26. aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM
  27. aws-service-role/support.amazonaws.com/AWSServiceRoleForSupport
  28. 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:

Figura 2: Saída Script bash executado contra um account id exibindo os serviços encontrados na conta em questão
Figura 3: Saída Script bash executado contra uma segunda account id exibindo os serviços encontrados na conta em questão

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.