Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

EC2Rescue al rescate: cómo recuperar contraseñas perdidas en instancias Windows de AWS

By Ciara-CloudDec 7, 20236 min read

Esta página también está disponible en English, Deutsch, Français, Italiano, 日本語 y Português.

Hace poco me topé con un imprevisto al trabajar con Windows en AWS EC2.

Creé una Amazon Machine Image (AMI) cifrada de mi instancia Windows EC2 y me encontré con un obstáculo: no podía obtener la contraseña de Administrador de la instancia lanzada desde la AMI cifrada.

Fue una sorpresa, ya que se salía de mi experiencia habitual con AMIs sin cifrar. Logré resolverlo restableciendo la contraseña desde una instancia EC2 de recuperación.

En este blog post te explico paso a paso cómo lo solucioné.

Crear la instancia cifrada

Hace poco necesité asegurar la instancia Windows con la que estaba trabajando en AWS. ¿La solución? Crear una Amazon Machine Image (AMI) cifrada de la instancia.

Primero generé una AMI de mi instancia Windows. Para cifrarla, la copié y apliqué la configuración de cifrado.

Desde la AMI cifrada lancé una nueva instancia Windows.

Esperé a que la instancia estuviera en estado running y pasara ambas verificaciones de estado antes de conectarme.

Conectarse a Windows en EC2

Al intentar obtener la contraseña de Administrador de Windows, no fue posible. Por el mensaje de error, se debía a la AMI personalizada.

Con el comando get-password-data de EC2 intenté recuperar los datos cifrados de la contraseña, pero el campo PasswordData estaba vacío. La documentación de AWS indica que la generación y el cifrado de la contraseña pueden tardar unos minutos. Si intentas recuperarla antes de que esté disponible, la salida devuelve una cadena vacía.


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"
}

Sin embargo, tras esperar un buen rato quedó claro que la instancia no tenía la contraseña de Administrador.

¿Por qué no hay contraseña?

Al lanzar una instancia Windows se genera una contraseña única para la cuenta de Administrador. Esa contraseña se cifra con el par de claves indicado al lanzar la instancia, y necesitas el archivo del par de claves correspondiente para descifrarla.

Cuando creas una AMI a partir de una instancia, los datos de los volúmenes EBS se guardan en nuevos snapshots EBS. Pero la contraseña de la cuenta de Administrador no se incluye en esos snapshots. Es una medida de seguridad para garantizar que cada instancia tenga una contraseña única.

El servicio EC2Config o los scripts EC2Launch (aplicables a Windows Server 2016 y posteriores) generan la contraseña de Windows durante el arranque. Esto ocurre solo en el primer lanzamiento de la instancia.

Si la contraseña no se genera en AMIs reempaquetadas, no se puede recuperar. Esto puede ocurrir si EC2SetPassword no se activa antes de empaquetar la AMI.

Por eso no pude obtener la contraseña de Administrador de mi instancia cifrada.

Según la documentación de AWS:

Si la generación de contraseñas está deshabilitada y no recuerdas la contraseña de la instancia original, puedes restablecerla para esta instancia.

Restablecer la contraseña

Para restablecer la contraseña hay que desconectar el volumen raíz de la instancia Windows y conectarlo a una instancia temporal como volumen secundario.

A la instancia que necesita el restablecimiento la llamaré Broken Instance, y Recovery Instance a la temporal.

Ten en cuenta que ambas instancias deben estar en la misma Zona de Disponibilidad.

  1. Selecciona la Broken Instance y elige Actions, Instance state, Stop instance. Cuando el estado cambie a Stopped, continúa con el siguiente paso.
  2. Anota el mapeo de dispositivo del volumen raíz de la Broken Instance (/dev/sda1).
  3. Desconecta el volumen raíz de la instancia averiada. Elige Actions, Detach Volume. Cuando el estado del volumen cambie a available, continúa con el siguiente paso.
  4. Lanza una instancia temporal en la misma AZ que la instancia averiada.
  • En la página Launch an instance, dentro de Network settings, selecciona la Subnet en la que reside tu instancia averiada.

  • En Configure storage selecciona Advanced.

  • En el campo Encrypted, cambia 'Not encrypted' por 'Encrypted'.
  • Selecciona la KMS key con la que quieras cifrar el volumen.

  • En Advanced, asocia un IAM instance profile. Verifica que el instance profile tenga los permisos de KMS necesarios.

El instance profile contiene un rol de IAM. La instancia usa los permisos de ese rol para interactuar con los volúmenes cifrados conectados.

5. Espera a que la Recovery Instance esté en estado running y haya pasado ambas verificaciones de estado.

6. En el panel de navegación, elige Volumes, selecciona el volumen que desconectaste de la Broken Instance y luego elige Actions, Attach Volume.

  • En el cuadro de diálogo Attach Volume, en Instances, selecciona la Recovery Instance de la lista.
  • En Device, escribe xvdf (si no aparece ya) y elige Attach.

**Restablecer la contraseña de Administrador**

Conéctate a la Recovery Instance por RDP.

Abre una ventana del navegador y descarga la herramienta EC2Rescue for Windows Server desde el siguiente enlace:

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

Extrae el contenido y ejecuta EC2Rescue.exe.

  • Lee el acuerdo de licencia y acepta los términos haciendo clic en el botón I Agree.

En la pantalla Welcome to EC2Rescue, selecciona Next.

En la pantalla Select mode, elige Offline instance.

En la pantalla Select a disk, selecciona el dispositivo xvdf y elige Next.

Si recibes el error 'The media is write protected', tendrás que deshabilitar esa protección en el disco.

Este error indica que Windows está bloqueando los cambios en el disco. Usa la utilidad Diskpart para quitar el atributo de solo lectura. Así se hace:

  • Abre Command Prompt como administrador.
  • Escribe diskpart y presiona Enter.
  • Escribe list disk y presiona Enter. Aparecerá la lista de todos los discos del sistema.
  • Escribe select disk X (reemplaza X por el número del disco con problema) y presiona Enter.
  • Escribe attributes disk clear readonly y presiona Enter. Con esto se debería quitar el atributo de solo lectura del disco.

Una vez cargado el volumen, elige OK.

En la pantalla Select Offline Instance Option, elige Diagnose and Rescue. En la pantalla Summary, revisa la información y elige Next.

En la pantalla Detected possible issues, selecciona Reset Administrator Password y elige Next.

En la pantalla Confirm, elige Rescue, OK.

En la pantalla Done, elige Finish.

Revisa el EC2 Rescue Log para confirmar que no aparezcan mensajes de error o advertencia.

Cierra la herramienta EC2Rescue for Windows Server, desconéctate de la instancia temporal y vuelve a la consola de Amazon EC2.

Reiniciar la instancia

Desconecta el volumen secundario (xvdf) de la Recovery Instance y vuelve a conectarlo como volumen raíz (/dev/sda1) en la instancia original.

Confirma que la instancia esté en ejecución y pasando las verificaciones de estado antes de conectarte a ella.

Después pude obtener la contraseña de Administrador y conectarme por RDP a la instancia cifrada. La misma contraseña se obtiene con el comando EC2 get-password-data.

Acuérdate de terminar la Recovery Instance y eliminar cualquier otra instancia que ya no necesites.