Ransomware Petya, solucionado el problema!

Publicado por Diego Córdoba en

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 forensekali_forensics

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.

paste_data

Al cargar los datos el sistema nos dará la clave:

your_key

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!

petya-sector-extractor

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.

decrypting

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!!


Diego Córdoba

- Ingeniero en Informática - Mg. Teleinformática - Tesis pendiente - Docente universitario - Investigador