Extrayendo las claves privadas SSH del ssh-agent de Windows 10

Desde Abril de este año Windows 10 incluye OpenSSH de forma nativa, así que ya no es necesario usar Putty ni las claves con formato PPK. Pero, ¿es seguro cómo Windows almacena las claves privadas SSH?

Pues las claves privadas se almacenan en la sección de registro de HKCU (HKCU\Software\OpenSSH\Agent\Keys) y están protegidas con DPAPI (Data Protection API)... y se puede descifrar simplemente con este one-liner de Atif Aziz:

Add-Type -AssemblyName System.Security;
[Text.Encoding]::ASCII.GetString([Security.Cryptography.ProtectedData]::Unprotect([Convert]::FromBase64String((type -raw (Join-Path $env:USERPROFILE foobar))), $null, 'CurrentUser'))

Así que el americano Ronnie Flathers aka @ropnop ha juntado esta información para demostrar que es posible extraer y reconstruir la clave privada RSA del registro y ha publicado el código necesario para llevarlo a cabo. ¡Vamos ha probarlo!

Primero generamos una clave privada en nuestro cliente Windows 10 para posteriormente llevar su par al servidor SSH:


Añadimos la clave privada a nuestro agente ssh:


Ahora obtenemos la clave del registro (base64):


Y finalmente extraemos la clave privada RSA desde el json obtenido:

# python3 extractPrivateKeys.py extracted_keyblobs.json


 Fuente: Extracting SSH Private Keys from Windows 10 ssh-agent

Comentarios