Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

EC2Rescue ao resgate: recuperando senhas perdidas em instâncias Windows na AWS

By Ciara-CloudDec 7, 20236 min read

Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.

Recentemente, me deparei com um desafio inesperado ao trabalhar com AWS EC2 Windows.

Criei uma Amazon Machine Image (AMI) criptografada da minha instância EC2 Windows e travei na hora de recuperar a senha de Administrator da instância iniciada a partir dessa AMI criptografada.

Foi uma surpresa, porque fugia da minha experiência habitual com AMIs não criptografadas. Resolvi a questão redefinindo a senha a partir de uma instância EC2 de recuperação.

Neste post, vou te mostrar o passo a passo de como superei esse desafio.

Criando a instância criptografada

Recentemente, precisei proteger a instância Windows com a qual eu estava trabalhando na AWS. A solução? Criar uma Amazon Machine Image (AMI) criptografada da instância.

Primeiro, gerei uma AMI da minha instância Windows. Para criptografá-la, copiei a AMI e apliquei a configuração de criptografia.

A partir da AMI criptografada, subi uma nova instância Windows.

Esperei a instância ficar em estado running e passar nos dois status checks antes de me conectar a ela.

Conectando ao EC2 Windows

Quando tentei obter a senha de Administrator do Windows, não rolou. Pela mensagem de erro, o motivo era a AMI customizada.

Usando o comando get-password-data do EC2, tentei recuperar os dados criptografados da senha. Notei que o campo PasswordData estava vazio. A documentação da AWS menciona que a geração e a criptografia da senha podem levar alguns minutos. Se você tentar recuperá-la antes de estar disponível, a saída retorna uma string vazia.


aws ec2 get-password-data --instance-id i-0ece1184ee316f9f2
--priv-launch-key ~/.ssh/windows.pem --region eu-west-1 --profile ciara
{
    "InstanceId": "i-0ece1184ee316f9f2",
    "PasswordData": "",
    "Timestamp": "2023-11-02T17:34:27+00:00"
}

Mas, depois de esperar um bom tempo, ficou claro que a instância não tinha a senha de Administrator.

Por que não há senha?

Ao iniciar uma instância Windows, é gerada uma senha exclusiva para a conta de Administrator. Essa senha é criptografada com o key pair informado no momento da inicialização. Para descriptografá-la, você precisa fornecer o arquivo do key pair correspondente.

Quando você cria uma AMI a partir de uma instância, os dados dos volumes EBS são salvos em novos snapshots EBS. Mas a senha da conta de Administrator não entra nesses snapshots. É uma medida de segurança para garantir que cada instância tenha uma senha exclusiva.

O serviço EC2Config ou os scripts EC2Launch (aplicáveis ao Windows Server 2016 e versões posteriores) geram a senha do Windows durante o boot. Isso só acontece na primeira inicialização da instância.

Se a senha não for gerada nas AMIs reempacotadas, não há como recuperá-la. Esse cenário pode aparecer quando o EC2SetPassword não é ativado antes de empacotar a AMI.

Foi exatamente por isso que eu não conseguia obter a senha de Administrator da minha instância criptografada.

Conforme a documentação da AWS:

Se a geração de senha estiver desativada e você não lembrar a senha da instância original, é possível redefinir a senha dessa instância.

Redefinindo a senha

Para redefinir a senha, precisamos desanexar o volume raiz da instância Windows e anexá-lo como volume secundário em uma instância temporária.

Vou chamar a instância que precisa da redefinição de senha de Broken Instance. E a instância temporária, de Recovery Instance.

Atenção: as duas instâncias precisam estar na mesma Availability Zone.

  1. Selecione a Broken Instance e escolha Actions, Instance state, Stop instance. Depois que o status mudar para Stopped, siga para o próximo passo.
  2. Anote o device mapping do volume raiz da Broken Instance (/dev/sda1).
  3. Desanexe o volume raiz da Broken Instance. Escolha Actions, Detach Volume. Quando o status do volume mudar para available, siga adiante.
  4. Suba uma instância temporária na mesma AZ da Broken Instance.
  • Na página Launch an instance, em Network settings, selecione a Subnet em que a sua Broken Instance está.

  • Em Configure storage, selecione Advanced.

  • No campo Encrypted, mude de "Not encrypted" para "Encrypted".
  • Selecione a chave KMS que você quer usar para criptografar o volume.

  • Em Advanced, anexe um IAM instance profile. Confira se ele tem as permissões de KMS necessárias.

O instance profile contém uma role IAM. A instância usa as permissões dessa role para interagir com os volumes criptografados anexados.

5. Aguarde a Recovery Instance ficar em estado running, com os dois status checks passando.

6. No painel de navegação, clique em Volumes, selecione o volume que você desanexou da Broken Instance e escolha Actions, Attach Volume.

  • Na caixa de diálogo Attach Volume, em Instances, selecione a Recovery Instance na lista.
  • Em Device, digite xvdf (se ainda não estiver preenchido) e clique em Attach.

**Redefinindo a senha de Administrator**

Conecte-se à Recovery Instance via RDP.

Abra uma janela do navegador e baixe a ferramenta EC2Rescue for Windows Server pelo link a seguir:

https://s3.amazonaws.com/ec2rescue/windows/EC2Rescue\_latest.zip

Extraia o conteúdo e execute o EC2Rescue.exe.

  • Leia o contrato de licença e aceite os termos clicando no botão I Agree.

Na tela Welcome to EC2Rescue, clique em Next.

Na tela Select mode, escolha Offline instance.

Na tela Select a disk, selecione o dispositivo xvdf e clique em Next.

Se aparecer o erro "The media is write protected", você vai precisar desativar essa proteção no disco.

Esse erro significa que o Windows está bloqueando alterações no disco. Use o utilitário Diskpart para limpar o atributo somente leitura. Veja como:

  • Abra o Prompt de Comando como administrador.
  • Digite diskpart e pressione Enter.
  • Digite list disk e pressione Enter. Vai aparecer a lista de todos os discos do sistema.
  • Digite select disk X (substitua X pelo número do disco com problema) e pressione Enter.
  • Digite attributes disk clear readonly e pressione Enter. Isso deve remover o atributo somente leitura do disco.

Depois que o volume carregar, clique em OK.

Na tela Select Offline Instance Option, escolha Diagnose and Rescue. Na tela Summary, revise as informações e clique em Next.

Na tela Detected possible issues, selecione Reset Administrator Password e clique em Next.

Na tela Confirm, escolha Rescue e depois OK.

Na tela Done, clique em Finish.

Confira o EC2 Rescue Log para ter certeza de que não houve mensagens de erro ou aviso.

Feche a ferramenta EC2Rescue for Windows Server, desconecte da instância temporária e volte para o console do Amazon EC2.

Reiniciando a instância

Desanexe o volume secundário (xvdf) da Recovery Instance. Reanexe o volume como volume raiz (/dev/sda1) na instância original.

Confirme se a instância está em execução e passando nos status checks antes de se conectar a ela.

Pronto: consegui obter a senha de administrator e acessar a instância criptografada via RDP. A mesma senha é retornada pelo comando EC2 get-password-data.

Não esqueça de encerrar a Recovery Instance e fazer a limpeza de outras instâncias que você não vá mais usar.