
Previna ataques SSRF no AWS EC2 por meio de atualizações automatizadas para o mais seguro Instance Metadata Service v2 (IMDSv2).
Previna ataques SSRF no AWS EC2 por meio de atualizações automatizadas para o Serviço de Metadados de Instância v2 (IMDSv2) mais seguro.
Finalidade e funcionalidade
As equipes de engenharia podem ter uma grande variedade de infraestrutura de computação na AWS que precisam proteger contra certas vulnerabilidades que aproveitam o serviço de metadados. O serviço de metadados é necessário para ser executado nas instâncias se qualquer IAM for usado ou se houver alguma informação de dados do usuário que a instância possa precisar ao inicializar. Limitar a superfície de ataque de suas instâncias é crucial para evitar a capacidade de pivotar em seu ambiente, roubando informações fornecidas pelo próprio serviço. Numerosos ataques famosos no passado aproveitaram este serviço específico para explorar uma função anexada à instância ou despejar dados sensíveis acessíveis através do serviço de metadados. O Metabadger pode ajudar a identificar onde e como você está usando o serviço de metadados da instância, além de fornecer a capacidade de reduzir qualquer alavancagem de ataque indesejada para diminuir sua postura geral de risco ao operar no EC2.
O uso desta ferramenta pode impactar sua infraestrutura de computação AWS, pois nem todos os serviços e aplicações podem funcionar sem o serviço de metadados ou na versão 2. Tome cuidado ao implantar isso em seu ambiente de produção e tenha um plano de reversão em vigor caso algo pareça fora do comum. O Metabadger vem com a capacidade integrada de reverter para a versão 1 padrão do serviço usando a flag -v1; você pode usar isso para reverter rapidamente suas instâncias para o padrão. Idealmente, você deve executar esta ferramenta e atualizar sua versão de metadados em ambientes não produtivos como um campo de provas antes de aplicá-la.
Passo 1
Inicialmente, queremos descobrir o uso geral do serviço de metadados em uma região AWS específica. O Metabadger avaliará o status atual do seu uso na região onde suas credenciais apontam no arquivo /.aws/credentials ou na função atual que está sendo assumida. Você também pode especificar a flag --region ao executar o comando discover-metadata se quiser mudar para outra região além da atualmente configurada. Depois de ter uma boa ideia de qual versão suas instâncias estão executando e se o serviço está ativado ou desativado, você poderá criar um plano de ação muito mais definido para endurecer o serviço. Observe que você pode encontrar o significado específico de cada opção de metadados definida aqui.
Passo 2
Uma das áreas que deve ser avaliada ao fazer a transição para a v2 do serviço é o uso de funções IAM. O Metabadger permite identificar instâncias em uma região que já podem estar usando uma função IAM. O comando discover-role-usage produzirá uma lista de instâncias que possuem funções anexadas a elas. Se você tiver muitas instâncias usando funções, tome cuidado ao atualizar o serviço para v2 para garantir que a funcionalidade geral de suas cargas de trabalho não seja impactada.
Passo 3
Após concluir sua descoberta e avaliação iniciais, você pode agora criar uma abordagem escalonada para endurecer sua infraestrutura de computação para usar a v2 do serviço de metadados ou desativá-lo onde não for utilizado. O comando harden-metadata permite atualizar todas as instâncias em uma região específica por padrão. Você também pode passar tags de instância usando a flag --tags ou um arquivo de entrada contendo um CSV de instâncias para as quais deseja aplicar uma configuração. Depois de fazer as atualizações apropriadas para a v2 e desativar o serviço onde não é usado, você pode reavaliar usando os itens do Passo 1 para confirmar que seu ambiente está bloqueado. Se você tiver certas instâncias que não deseja atualizar, pode excluí-las via a flag --exclusion por tag ou ID de instância.
O Metabadger requer uma função IAM ou credenciais com as seguintes permissões:
ec2:ModifyInstanceAttribute
ec2:DescribeInstances
Ao fazer alterações no Instance Metadata Service, você deve ter cuidado e seguir orientações adicionais da AWS sobre como atualizar com segurança para a versão 2. O Metabadger foi projetado para auxiliá-lo neste processo para proteger ainda mais sua infraestrutura de computação na AWS.
Guia de Melhores Práticas da AWS sobre Atualização para IMDSv2
Instalar via pip
pip3 install --user metabadger
Instalar via Github
$ git clone https://github.com/salesforce/metabadger
$ cd metabadger
$ pip install -e .
$ metabadger
Usage: metabadger [OPTIONS] COMMAND [ARGS]...
Metabadger is an AWS Security Tool used for discovering and hardening the
Instance Metadata service.
Options:
--version Show the version and exit.
--help Show this message and exit.
Commands:
cloudwatch-metrics Pull CloudWatch Metrics for MetadataNoToken usage
disable-metadata Disable the IMDS service on EC2 instances
discover-metadata Discover summary of IMDS service usage within EC2
discover-role-usage Discover summary of IAM role usage for EC2
harden-metadata Harden the AWS instance metadata service from v1 to v2
cloudwatch-metrics
Directly pull information about your usage of IMDSv1 with the MetadataNoToken metric in AWS CloudWatch. This command will show you instances within the last hour that are actively using v1 of the service. Note that when running this command you should have the IAM permissions to be able to view CloudWatch metrics.
Options:
-a, --all-region Pull CloudWatch metrics across all available
regions
-r, --region TEXT Specify which AWS region you will perform this
command in
-t, --time-period INTEGER The CloudWatch time period in seconds used to
track the IMDS v1 metric
-p, --profile TEXT Specify the AWS IAM profile.
--help Show this message and exit.
discover-metadata
A summary of your overall instance metadata service usage including which version and an overall enforcement percentage. Using these numbers will help you understand the overall posture of how hardened your metadata usage is and where you're enforcing v2 vs v1.
Options:
-a, --all-region Provide a metadata summary for all available regions in the AWS account
-j, --json Get metadata summary in JSON format
-r, --region TEXT Specify which AWS region you will perform this command in
-p, --profile TEXT Specify the AWS IAM profile.
discover-role-usage
A summary of instances and the roles that they are using, this will give you a good idea of the caution you must take when making updates to the metadata service itself.
Options:
-p, --profile TEXT Specify the AWS IAM profile.
-r, --region TEXT Specify which AWS region you will perform this command in
harden-metadata
The ability to modify the instances to use either metadata v1 or v2 and to get an understanding of how many instances would be modified by running a dry run mode.
Options:
-a, --all-region Update IMDS across all regions in your account
-e, --exclusion The exclusion flag will apply to everything besides what is specified, tags or instances
-d, --dry-run Dry run of hardening metadata changes
-v1, --v1 Enforces v1 of the metadata service
-i, --input-file PATH Path of csv file of instances to harden IMDS for
-t, --tags TEXT A comma seperated list of tags to apply the hardening setting to
-r, --region TEXT Specify which AWS region you will perform this command in
-p, --profile TEXT Specify the AWS IAM profile.
disable-metadata
Use this command to completely disable the metadata servie on instances.
Options:
-e, --exclusion The exclusion flag will apply to everything besides what is specified, tags or instances
-d, --dry-run Dry run of disabling the metadata service
-i, --input-file PATH Path of csv file of instances to disable IMDS for
-t, --tags TEXT A comma seperated list of tags to apply the hardening setting to
-r, --region TEXT Specify which AWS region you will perform this command in
-p, --profile TEXT Specify the AWS IAM profile.
Todas as alterações feitas pelo Metabadger serão registradas em um arquivo salvo no diretório de trabalho chamado metabadger.log. O arquivo incluirá o seguinte para cada ação que a ferramenta executa ao alterar o serviço de metadados:
* The time and date stamp for when a change was made
* Change that occured (disabled, hardened, or updated)
* The instance ID where the change was made
* Dry run information
* A status on if the change was successful or not