Ransomware Petya, solucionado el problema!
Hace algunos días estuvimos hablando del ransomware Petya y de su maliciosa intención de cifrar de una manera interesante nuestro disco rígido para luego pedir «rescate» de la información pagando en bitcoins.
Pues bien, hecha la trampa, hecha la solución! Un investigador de Malwarebytes, @hasherezade
desarrolló un decoder para el Stage 1 de Petya, es decir, cuando el sistema de archivos se encuentra en el estado en el que Petya reemplazó el MBR del disco, pero el equipo aún no ha sido reiniciado.
Por otro lado, @leo_and_stone propuso la solución al Stage 2, con lo cual ya, quien tiene su dicso cifrado con Petya puede descifrarlo sin necesidad de comprar los bitcoins para pagar el rescate.
Vamos al grano, la solución
En este caso presento la solución basada en Linux, específicamente con Kali, pero puede ser cualquier distro live. También hay una forma de solucionarlo usando un port de la aplicación de descifrado compilada para Windows, a no desesperar 😛
Paso 1: Descargar Kali Linux o una distro live
Podemos descargar un Kali Linux en otra computadora, y grabarlo en un dvd, o en un USB si el equipo puede bootear desde USB.
En el caso de que quisiéramos quemar la iso en un usb para hacerla booteable, desde un Linux cualquiera podemos hacerlo siguiendo estos simples pasos.
Paso 2: Iniciar Kali en modo forense
Al iniciar Kali en el equipo afectado por Petya Ransomware, bootear en modo forense, aquí una captura.
También puede correrse Kali en otro equipo, al que previamente hayamos conectado el disco infectado (esto nos facilitará el backup del paso 6.
Paso 3: Montar el disco original, el que fue «dañado» por Petya.
Para ello podemos, en una consola de Kali, listar los dispositivos de almacenamiento, usando por ejemplo, fdisk, o parted, o, si nos sirve, un simple «ls -l /dev/sd*».
Aquí algunos ejemplos de salidas:
diego@cryptos:~$ sudo fdisk -l Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: dos Disk identifier: 0x000a5999 Device Boot Start End Sectors Size Id Type /dev/sda1 2048 5859327 5857280 2.8G 82 Linux swap / Solaris /dev/sda2 * 5859328 83984383 78125056 37.3G 83 Linux /dev/sda3 83986430 1953523711 1869537282 891.5G 5 Extended /dev/sda5 83986432 1953523711 1869537280 891.5G 83 Linux
diego@cryptos:~$ sudo parted -l Model: ATA WDC WD10EZEX-00B (scsi) Disk /dev/sda: 1000GB Sector size (logical/physical): 512B/4096B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 1049kB 3000MB 2999MB primary linux-swap(v1) 2 3000MB 43.0GB 40.0GB primary ext4 boot 3 43.0GB 1000GB 957GB extended 5 43.0GB 1000GB 957GB logical ext4
diego@cryptos:~$ ls -l /dev/sd* brw-rw---- 1 root disk 8, 0 Apr 13 12:35 /dev/sda brw-rw---- 1 root disk 8, 1 Apr 13 12:35 /dev/sda1 brw-rw---- 1 root disk 8, 2 Apr 13 12:35 /dev/sda2 brw-rw---- 1 root disk 8, 3 Apr 13 12:35 /dev/sda3 brw-rw---- 1 root disk 8, 5 Apr 13 12:35 /dev/sda5
Paso 4: Aplicar el decoder
Podemos descargar el decoder desde este sitio. También podemos descargar el código fuente.
Luego darle permisos de ejecución:
chmod +x decoder
Y por último ejecutarlo pasándole la referencia del disco infectado:
./decoder /dev/sda
La salida nos dirá si el decoder encontró a Petya en el disco:
[+] Petya bootloader detected! [+] Petya http address detected! [+] Petya FOUND on the disk! ---
Si Petya solo llegó al Stage 1:
Si al infectarnos con Petya no hemos reiniciado el equipo, es decir, nunca pasó al Stage 2 de cifrado, el decoder nos dará directamente la clave de recuperación:
Key: MbVNTr2C2JicRsG8 [OK] Stage 1 key recovered!
Si Petya pasó al Stage 2:
En este caso el decoder nos dará un dato de verificación y un nonce para que podamos intentar descifrar el disco desde el Stage 2.
Invalid Stage1 key! Probably the key has been already erased! Try to recover from Stage2 by third-party decoder! Paste the data you got below on one of the following sites: + https://petya-pay-no-ransom.herokuapp.com/ + https://petya-pay-no-ransom-mirror1.herokuapp.com/ verification data: /Mc3N7nDNzeXYjc3q+Y3N+//Nzfs/zc3FcQ3N7UxNzc3NTc3t3Q3N1RtNzdvPTc3cZ83N69yNze1bDc33/03N/3HNzc5wjc3l3g3N6vmNzdv/zc37P83NxVENze1MTc3NTU3N7d0NzdSbTc37z43N3FfNzevcjc3tWo3N9/9Nzf7xzc3OcM3N5dsNzer5jc37/43N+z/NzcVhDc3tTE3NzMxNze39Dc3VW03N289NzdxXzc3r3I3N7VsNzff/Tc3+8c3N7nDNzeXbjc3qyY3N+/xNzfs/zc3FYQ3N7UxNzcxNzc3t/Q3N1VtNzfvPjc3cd83N69yNze1aTc33/03N/7HNze5wjc3l2A3N6vmNzfv/zc37P83NxWENze1MTc3PzM3N7d0NzdUbTc37z83N3EfNzevcjc3NWs3N9/9Nzf8xzc3OcI3N5duNzerJjc3b/A3N+z/NzcVhDc3tTE3Nz0xNze3dDc3U203N+8+NzdxHzc3r3I3NzVrNzff/Tc3+8c3NznCNzeXZjc3q2Y3N+/+Nzfs/zc3FQQ3N7UxNzc7Nzc3t/Q3N1VtNzfvPzc3cV83N69yNzc1azc33/03N/zHNze5wjc3l3o3N6tmNzfv/jc37P83NxVENze1MTc3OTU3N7d0NzdSbTc3bz43N3GfNzevcjc3tWk3N9/9Nzc= nonce: kRl080HvgUU=
Con esta información, entramos en uno de los enlaces que nos cita el decoder (el original o el mirror) y copiamos dicha información.
Al cargar los datos el sistema nos dará la clave:
Para usuarios de Windows:
Pueden descargar el Petya Key Extractor desde acá: http://download.bleepingcomputer.com/fabian-wosar/PetyaExtractor.zip
Al ejecutarlo tendremos la clave del decoder… no es otra cosa que el decoder con interfaz gráfica compilado para Windows. Gracias Fabian Wosar por el aporte!
Paso 5: Copiamos la clave
Es MUY IMPORTANTE no equivocarse en este paso.
Paso 6: BACKUP!!
Cable aclarar en este paso, que Petya puede tener varias versiones con mínimos cambios, por lo que el decoder podría no poder recuperar la información.
Ahora bien, en criptografía, si intentamos descifrar un dato con una clave diferente a la que se usó para cifrarlo, obtendremos otro dato cifrado. En términos prácticos, darle esta clave a Petya puede ocasionar, o que recuperemos el disco e iniciemos el equipo normalmente, o que perdamos toda la información irremediablemente.
Por lo tanto, vamos a proceder a hacer un backup a nivel de bits del disco en cuestión.
Introducimos un disco extraible en el equipo, que tenga capacidad suficiente para almacenar todo el contenido del disco original sin comprimir. Si hemos ejecutado Kali en otro equipo, el destino del backup puede ser una partición montada.
Ejecutamos lo siguiente:
dd if=/dev/sda of=/punto/de/montaje/backup.img
Donde sda es nuestro disco infectado, y backup.img es el archivo de imagen, dentro del punto de montaje de nuestro disco externo o partición montada.
Paso 7: Reiniciar
Al reiniciar el sistema, veremos la pantalla de Petya en la que podremos introducir ahora la clave obtenida del sistema web de descifrado.
Paso 8: Esperar, y cruzar los dedos
Esperamos a que el disco se descifre de Petya, y reiniciamos el ordenador. Si todo salió bien, volveremos a ver el sistema operativo que habíamos perdido, y toda su información!
Conclusiones y referencias
Espero que con este tutorial puedan salvarse «vidas» sin pagar la recompensa!
Este artículo está basado en el artículo original de @hasherezada, el autor del decoder, Petya key decoder.
Para los interesados en el funcionamiento a bajo nivel de Petya, pueden visitar este sitio, es excelente el análisis que hacen!
Desde ya, se agradece si pueden difundir esta info así llega a más víctimas de Petya y pueden librarse sin pagar!!
Y por supuesto, MIL GRACIAS a los autores de estos decoders por compartirlos con la comunidad!!