Ir al contenido principal

Forense (XXI): Solución Reto CyberOlympics 2019 "Broken Pad"

En esta entrada la solución a uno de los retos de la categoría 'Forense' de la edición de 2019 de CyberOlympics, competición en modalidad 'on-line', estilo 'Capture the Flag' y formato 'Jeopardy', dirigida a centros educativos y organizada por el Instituto Nacional de Ciberseguridad (INCIBE) en el marco de la actividad llamada CyberCamp.

Este desafío lleva por título 'Broken Pad' y, en mi opinión, presenta un nivel de dificultad alto ().

EnunciadoHan solicitado tu ayuda en un caso forense y han puesto a tu disposición una imagen de disco y de memoria RAM. Sin embargo, parece ser que quien realizase la adquisición olvidó el detalle de que el disco está cifrado con Bitlocker.

Utiliza tus dotes de investigación para conseguir acceder a los datos que contiene. Utiliza la herramienta volatility para el análisis de RAM y cuando tengas la clave, utiliza el comando "dislocker-fuse" desde tu Kali.

Busca algún recurso que te permita montar y desmontar unidades con dicha utilidad.

#usethehelp #volatilityprofile #bitlockerrecovery #bruteforceifincomplete #bashscripting #utf16strings

Recursos asociados al reto: archivo comprimido Broken Pad.tar.

Solución: Extraigo los archivos que se encuentran dentro del que se proporciona como recurso asociado al reto.

Aunque por el enunciado parece evidente que este reto está diseñado para ser resuelto con Kali, yo voy a resolverlo íntegramente en entorno Windows. Mi tocayo y amigo, al que dedico la solución de este reto, él ya sabe quién es, será plenamente consciente de que sólo hago esto por fastidiarle :). Él es un auténtico fan de Linux y le reto a que ponga la solución en ese entorno :).

En primer lugar ejecuto el comando volatility_2.6_win64_standalone -f dump.mem imageinfo para conocer el tipo de perfil del volcado de memoria:
A continuación, obtengo los procesos en ejecución en el momento del volcado de memoria, mediante la ejecución del comando volatility_2.6_win64_standalone --profile Win7SP1x64 -f dump.mem pslist:
De todos ellos, me llaman la atención los procesos del Bloc de notas ('notepad'), por lo que, en primer lugar, mediante el comando volatility_2.6_win64_standalone --profile=Win7SP1x64 -f dump.mem -p 264 memdump -D procesosobtengo el volcado de todos los segmentos de memoria asociados al proceso de 'notepad' (PID 264):
Una vez obtenido el volcado de este proceso, extraigo las cadenas de texto para inspeccionarlas:
Abro el fichero de texto generado con el Bloc de notas ('notepad') y buscando "bitlocker" doy con la clave de recuperación de BitLocker, o al menos parte de ella:
Y digo que parte de ella porque una clave de recuperación de BitLocker está compuesta por 48 dígitos (los caracteres ‘X’ que se indican a continuación representan los dígitos que me faltan para completar la clave de recuperación):

305459-531696-060808-710622-6XXXX9-665797-244211-319924

Bueno, son sólo 4 dígitos, por lo que la fuerza bruta, tal y como se menciona en el enunciado del reto (#bruteforceifincomplete), es una opción factible para obtenerlos.

Para ello y siguiendo otra de las pistas que se dan en el enunciado (#bashscripting), busco en Internet un script bash que realice esto por mí, si no lo encuentro tendré que programarlo, pero doy con uno que cumple perfectamente lo que se requiere (añado como primera línea el sitio de donde se puede obtener):

#   http://www.nogeekleftbehind.com/2018/01/19/mailbag-brute-forcing-a-missing-bitlocker-recovery-key/
#   The PowerShell Script tries to determine the recovery key by brute-forcing an unlock
#   of a BitLockered drive. This script only works if you’re missing one of the 6-digit
#   groups of numbers in the recovery key.

#   First group of Recovery Key characters, followed by a hyphen, in quotation marks
#   Example: "630564-061798-390588-707146-"
    $FirstGroup = "305459-531696-060808-710622-6"

#   Last group of characters, preceded, in quotation marks
#   Example: "-631521-598389-222321"
    $LastGroup = "9-665797-244211-319924"

# Loop through the set of numbers
# Note: You can change the numbers from 1..100000 to a smaller range if you like
   
        ForEach ($MiddleGroup in 0..9999)
            {

            # Adds Leading Zeros
                $Leading = $MiddleGroup.ToString("0000")

            # Concatenates the Recovery Key
                $Key = "$FirstGroup$Leading$LastGroup"

            # Try to unlock the drive
                .\manage-bde.exe -unlock H: -recoverypassword $Key >$null

            # Get the status of the drive
                $Status = Get-BitlockerVolume -MountPoint "H:"
       
            # Write the currently-guessed Recovery Key to Screen
                Write-Host $Key

            # Check disk space of drive, if capacity equals "0" that means drive is still locked
            # If capacity is not equal to "0", that means the drive is now unlocked
                If ($Status.CapacityGB -ne "0") {Break}
            }
# Output when successful
    Write-Host
    Write-Host
    Write-Host "Drive successfully unlocked with the following Recovery Key:"
    Write-Host
    Write-Host "   1  |   2  |   3  |   4  |   5  |   6  |   7  |  8   " -BackgroundColor "Yellow" -ForegroundColor "Black"
    Write-Host $Key -Back "Yellow" -Fore "Black"
    Write-Host
    Write-Host "(You should write this down immediately!)"
    Write-Host
    Get-BitLockerVolume -MountPoint "H:"   

En este script he puesto las partes conocidas de la 'Recovery Key' (grupos primero y último) y he cambiado la unidad donde voy a montar la imagen (H:) que se proporciona en el reto (drive.dd).

A partir de aquí:

1.- Monto la imagen del reto (drive.dd) en la unidad H:. Para ello utilizo la herramienta 'FTK Imager':
2.- Ejecuto como administrador el entorno de scripting integrado (ISE) de PowerShellabro el script anterior y lo ejecuto.

Y ya puedo ver que la unidad (H:) se ha desbloqueado y que los cuatro dígitos que faltaban en la 'Recovery Key' son '0190':
Y finalmente, lo único que me queda por hacer es acceder a la unidad H: y ver que me encuentro:
Abro el archivo flag.txt y ya puedo ver la solución a este reto:

Comentarios

Entradas populares de este blog

Criptografía (I): cifrado Vigenère y criptoanálisis Kasiski

Hace unos días mi amigo Iñaki Regidor ( @Inaki_Regidor ), a quien dedico esta entrada :), compartió en las redes sociales un post titulado "Criptografía: el arte de esconder mensajes"  publicado en uno de los blogs de EiTB . En ese post se explican ciertos métodos clásicos para cifrar mensajes , entre ellos el cifrado de Vigenère , y , al final del mismo, se propone un reto consistente en descifrar un mensaje , lo que me ha animado a escribir este post sobre el método Kasiski  para atacar un cifrado polialfabético ( conociendo la clave descifrar el mensaje es muy fácil, pero lo que contaré en este post es la forma de hacerlo sin saberla ). El mensaje a descifrar es el siguiente: LNUDVMUYRMUDVLLPXAFZUEFAIOVWVMUOVMUEVMUEZCUDVSYWCIVCFGUCUNYCGALLGRCYTIJTRNNPJQOPJEMZITYLIAYYKRYEFDUDCAMAVRMZEAMBLEXPJCCQIEHPJTYXVNMLAEZTIMUOFRUFC Como ya he dicho el método de Vigenère es un sistema de sustitución polialfabético , lo que significa que, al contrario que en un sistema de

Criptografía (XXIII): cifrado de Hill (I)

En este post me propongo explicar de forma comprensible lo que he entendido sobre el cifrado de Hill , propuesto por el matemático Lester S. Hill , en 1929, y que se basa en emplear una matriz como clave  para cifrar un texto en claro y su inversa para descifrar el criptograma correspondiente . Hay tres cosas que me gustan de la criptografía clásica, además de que considero que ésta es muy didáctica a la hora de comprender los sistemas criptográficos modernos: la primera de ellas es que me "obliga" a repasar conceptos de matemáticas aprendidos hace mucho tiempo y, desgraciadamente, olvidados también hace demasiado tiempo, y, por consiguiente, que, como dice  Dani , amigo y coautor de este blog, me "obliga" a hacer "gimnasia mental"; la segunda es que, en la mayoría de las ocasiones, pueden cifrarse y descifrase los mensajes, e incluso realizarse el criptoanálisis de los criptogramas, sin más que un simple lápiz y papel, es decir, para mi es como un pasat

¿Qué significa el emblema de la profesión informática? (I)

Todas o muchas profesiones tienen un emblema que las representa simbólicamente y en el caso de la  informática: " es el establecido en la resolución de 11 de noviembre de 1977  para las titulaciones universitarias superiores de informática, y  está constituido por una figura representando en su parte central  un  núcleo toroidal de ferrita , atravesado por  hilos de lectura,  escritura e inhibición . El núcleo está rodeado por  dos ramas : una  de  laurel , como símbolo de recompensa, y la otra, de  olivo , como  símbolo de sabiduría. La  corona  será la  de la casa real  española,  y bajo el escudo se inscribirá el acrónimo de la organización. ". Veamos los diferentes elementos tomando como ejemplo el emblema del COIIE/EIIEO (Colegio Oficial de Ingenieros en Informática del País Vasco/ Euskadiko Informatikako Ingeniarien Elkargo Ofiziala ) . Pero no sólo el COIIE/EIIEO adopta el emblema establecido en dicha resolución, sino que éste se adopta también como im