DEFCON DFIR CTF 2019 writeup (I): Crypto + Deadbox Forensics

Como ya parece ser una (estupenda) tradición dentro de la DEFCON, se ha vuelto a lanzar un reto forense no oficial. Este año se lanzó el día en el que me iba de vacaciones, así que llegamos con retraso para resolverlo, pero llegamos.

Lo primero son los datos con los que tenemos que trabajar. Las evidencias están disponibles en este enlace de Dropbox:

https://www.dropbox.com/sh/4qfk1miauqbvqst/AAAVCI1G8Sc8xMoqK_TtmSbia?dl=0

y aquí tenéis el enlace al sitio web del CTF:

https://defcon2019.ctfd.io/

El reto es más largo que un día sin pan (83 preguntas si he hecho bien las cuentas), así que para no volverme loco me he puesto un límite temporal: tengo una semana para dedicarle al reto, writeup incluido. El domingo 25 ya descargué todas las evidencias y dejé todo listo para empezar, así que el lunes 26 empezamos con ganas.

0. En la página web del reto habrás visto el log de la asociación del colegio de análisis forense digital Champlain ¿Puedes descifrar el mensaje oculto?

Estamos en un reto forense, así que no espero nada de cripto dura (posiblemente un poco de stego, que está muy de moda). Pero como tenemos una cadena de caracteres, vamos a trabajarla un poco a ver si tenemos suerte.

Empezamos con la cadena: 70 6F 71 64 63 68 68 6E, que así a primera vista, por cómo están escritos y sus valores, parece hexadecimal. Si lo convertimos a texto con CyberChef (muy útil para estas chapucillas) tenemos este otro valor:

Poqdchhn

Podría ser base64… pero no decodifica. Si probamos con otros cifrados/codificaciones (algo que con CyberChef se hace en un periquete), no encontramos nada fácil a primera vista. La primera en la frente. Como el resto del reto sea de idea feliz, vamos apañados…

* Respuesta: N/A

1. ¿Cuál es el nombre del examinador que creó el .E01?

Lo primero que hay que hacer al comenzar un análisis es leer los logs de la adquisición forense. En este caso tenemos el fichero Horcrux.E01.txt, que nos da la respuesta de forma automática.

Examiner: Minerva

* Respuesta: Minerva

2. ¿Cuál es el nombre del usuario primario del equipo?

Podemos usar FTK Imager para montar la imagen en formato de Encase (.E01)

Nos aparecen varias particiones, y la segunda corresponde a un Windows. Si abrimos el C:\Users comprobamos que solo tenemos un usuario registrado:

* Respuesta: Karen

3. ¿Cuál es el hash SHA1 de la evidencia?

El propio informe nos da el hash calculado, pero … ¿y si es falso? Los únicos hashes verdaderos deberían de ser los que el analista ha extraído con sus propias manos a partir de las evidencias frías y muertas. En este caso tenemos un fichero en formato Encase partido en varios segmentos, por lo que no podemos usar herramientas del estilo de HashMyFiles.

Afortunadamente no tenemos que pagar una licencia de Encase, porque Autopsy hace el trabajo por nosotros.

Vale, solo calcula el hash MD5, pero si este es correcto vamos a asumir que el SHA1 también lo es (si alguien es capaz de crear una colisión en el MD5 solo para poder manipular la evidencia, algo me dice que poco sacaremos del análisis)

* Respuesta: 0fa6ab4bd9a707d49ded70e8b9198fe18114b369

4. ¿A qué hora se capturó la imagen? Responde en formato 24h MM/DD/YYYY HH:MM:SS UTC

El log nos muestra la fecha en la que la imagen fue capturada:

Acquisition started:   Fri Mar 22 20:08:08 2019

pero desafortunadamente no nos dice si esa fecha es o no UTC (y el primer intento nos da un error, así que habrá que comerse un poco el coco).

Si miramos la fecha de creación de los ficheros .e01 que estaban en el .zip descargado (que conserva los metadatos correctamente) con las evidencias vemos que la fecha que indican es el 23/03/2019 a las 01:09, lo cual nos permite hacer la conversión a UTC dado que ahora mismo estamos en horario de verano (UTC+2) … ¡FAIL again!

Después de un par de minutos dándole vueltas se me enciende la lucecita: ahora estamos en horario de verano, pero el 23 de Marzo estábamos todavía en el horario normal, o sea UTC+1. Convertimos la hora correctamente y obtenemos nuestra respuesta (mucho ojo con los cambios en los formatos de fecha entre EEUU y España y el volteo de MM/DD)

* Respuesta: 03/23/2019 00:08:08

5. ¿Qué SO está instalado en este equipo? Windows __

Windows guarda varios valores de la instalación (entre ellos la versión de Windows instalada) en la clave:

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion

Si nos copiamos la carpeta C:\Windows\system32\config podremos abrir el hive SOFTWARE con Registry Explorer y obtener nuestra merecida respuesta

* Respuesta: 10

6. Parece que se está siguiendo un tema a la hora de crear el E01 ¿Cuál es? (Dos palabras, sensible a mayúsculas)

Aunque no sea un fanático de la saga, los puntos en la habilidad de «Cultura friki» se pueden estirar mucho. Los dementores no crecen en los árboles, y en el peor de los casos una búsqueda en Google por Horcrux (el nombre de la imagen) nos da una fácil respuesta.

* Respuesta: Harry Potter

7. ¿Cuál es nombre decodificado del fichero de evidencias?

Vamos a asumir que el «nombre del fichero de evidencias» se refiere a esta misteriosa cadena que tenemos en el log de la adquisición forense:

Unique description: Lbh'er n jvmneq Uneel!

Tiene toda la pinta de ser un cifrado irrompible, así que tendremos que usar magia (bueno, en este caso CyberChef, que para estas cosas viene muy bien) y lanzar un hechizo: !púdrete 13 veces! (rot13 para los amigos):

* Respuesta: You’re a wizard Harry!

8. ¿Cuál es el hostname de la partición Windows?

Volvemos de nuevo al registro, en este caso a la clave:

HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName

Como no teníamos ni cerrado el Registry Explorer, es coser y cantar (recordad que si el equipo está apagado, CurrentControlSet = ControlSet001):

* Respuesta: TOTALLYNOTAHACK

9. Se empleó una plataforma de mensajería para comunicarse con un compañero entusiasta de las alpacas ¿Cuál es el nombre del software?

Si se ejecutó … tendría que estar en el Prefetch (a menos que tengamos disco SSD, en cuyo caso el Prefetch estará vacío y tendremos que buscarnos la vida).

Afortunadamente no parece ser el caso, y nuestro fiel WinPrefetchView nos da un listado de lo ejecutado. Una revisión somera nos da fácilmente la respuesta:

* Respuesta: Skype.

10. ¿Cuál es el zipcode del artículo de Karen en craiglist?

Craiglist es un conocido sitio de EEUU donde poner anuncios (un poco al estilo de MilAnuncios en España), por lo que la primera idea era mirar la navegación de usuario de Karen. Usamos ChromeHistoryView y comprobamos que está buscando trabajos en Vermont, y aparece un número que es nuestro zipcode:

* Respuesta: 19709

11. ¿Cuáles son las iniciales de la persona que contactó con Karen?

Esta pregunta me ha costado como 4h responderla, y la culpa la tiene uno de los pecados capitales de un analista forense: la prisa. La pregunta tenía toda la pinta de estar relacionada con el correo, así que en ese momento hice una búsqueda para ver si Karen tenía buzones de correo en mi equipo Windows, y creo que hice estas búsquedas:

*.pst y ost

Se nota la falta de un pequeño asterisco, ¿verdad? Pues ese asterisco me costó no encontrar el buzón de correo de Karen, lo que me llevó a mil búsquedas inútiles hasta que el domingo por la tarde comencé la segunda vuelta de las preguntas que me quedaban. En ese momento tomé la decisión de empezar desde cero … momento en el que al hacer la búsqueda en mi Linux encontré el susodicho buzón.

-r-------- 2 root root 17M Mar 23 00:40 ./AppData/Local/Microsoft/Outlook/klovespizza@outlook.com.ost

Una vez localizado el buzón ya es cuestión de montarlo con Kernel Outlook OST Viewer y buscar nuestro correo. Como en el programa aparece en HTML bruto, lo copiamos a un fichero de texto y lo abrimos en Firefox para tener nuestra respuesta:

* Respuesta: MS

12. ¿Cuánto dinero estaba dispuesto a pagar por adelantado la TAAUSAI a Karen? Responde sin comas ni símbolos de dólar

Si buscamos por los correos enviados por taausai@gmail.com tardamos poco en encontrar una conversación entre MS y Karen, en la que aparece referenciada nuestra cantidad de dinero deseada:

* Respuesta: 150000

13. ¿En qué país se va a reunir Karen con el grupo de hackers?

Dentro de la cadena de correos anterior podemos ver que aparece un texto que parece indicar la localización, pero la codificación del correo nos impide verla claramente:

Nos va a tocar decodificar lo que tiene toda la pinta de ser unas coordenadas hasta dejarlas un poco más legibles. Si aplicamos esta tabla de equivalencias: https://www.utf8-chartable.de/unicode-utf8-table.pl podemos hacer la traducción.

°	c2 b0	
’	e2 80 99	
″	e2 80 b3

Por lo que

27=C2=B022=E2=80=9950.10=E2=80=B3N, 33=C2=B037=E2=80=9954.6=2=E2=80=B3E

Pasa a ser:

27° 22' 9950.10'' N, 33° 37' 9954.6'' E

Si introducimos estas coordenadas en una página que sepa interpretarlas (como por ejemplo https://www.gps-coordinates.net/ ), obtendremos nuestra respuesta.

* Respuesta: Egypt

14. ¿Cuál es la timezone? (Usa la abreviatura de tres letras)

La timezone se guarda en la siguiente clave del registro:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation

Un minuto de Registry Explorer y tenemos nuestra flag

* Respuesta: UTC

15. Cuál es el tiempo de último acceso para el fichero AlpcaCare.docx? Responde en formato 24h MM/DD/YYYY HH:MM:SS UTC

Una pregunta para la MFT. La extraemos con FTK Imager y le pasamos mftdump.exe para convertirla a .csv

* Respuesta: 03/17/2019 21:52:20

16. Karen tenía una segunda partición en el disco ¿Qué letra de unidad tenía asignada?

El registro lo sabe (casi) todo. En este caso, las letras de unidad se guardan en la siguiente clave del hive SYSTEM:

HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices

Si accedemos con Registry Explorer podemos comprobar que tenemos tres unidades (una más de las que esperábamos):

Sin embargo, si nos fijamos bien podemos ver que D: en realidad es un CD-ROM (la cadena \SCSI CdRom lo delata), así que no es la unidad que estábamos buscando y debemos continuar nuestro camino. La respuesta esperada está justo al lado.

* Respuesta: A

17. ¿Cuál es la respuesta a la pregunta que el gerente de Michael hace a Karen?

En la misma cadena de correos de las preguntas 12 y 13 tenemos tanto la pregunta como la respuesta (ciertamente es importante para un hacker saber base64, afirmo):

* Respuesta: TheCardCriesNoMore

18. ¿Para qué trabajo está siendo considerada Karen? La respuesta debe realizarse sin espacios y en minúsculas.

Esa cadena de correos nos va a dar una pila de puntos. Revisándola con un poco de cariño encontramos nuestra respuesta:

* Respuesta: cybersecurityanalysts

19. ¿Cuándo se cambió la contraseña de Karen por última vez? Responde en formato 24h as MM:DD:YYYY HH:MM:YYYY UTC

La información de cuentas de usuario se guarda en el registro, concretamente en la SAM. Un poco de RegRipper nos facilita en nada la información:

Username        : Karen [1001]
Full Name       : 
User Comment    : 
Account Type    : 
Account Created : Sat Jan 26 19:40:22 2019 Z
Name            :  
Password Hint   : forensics is boring
Last Login Date : Fri Mar 22 23:22:01 2019 Z
Pwd Reset Date  : Thu Mar 21 19:13:09 2019 Z
Pwd Fail Date   : Thu Mar 21 19:14:49 2019 Z
Login Count     : 32
  --> Password does not expire
  --> Password not required
  --> Normal user account

* Respuesta: 03/21/2019 19:13:09

20. ¿Qué versión de Chrome está instalada en el equipo?

Navegamos hasta %SYSTEMDRIVE%\Program Files (x86)\Google\Chrome\Application y obtenemos la versión desplegada:

* Respuesta: 72.0.3626.121

21. Karen recibió una respuesta a su anuncio de craiglist por parte de un colega entusiasta de las alpacas ¿Cuál es la dirección de correo asociada con esta respuesta?

Revisando las direcciones, solo encontramos una de locos de las alpacas… que es justo la que empieza todo el fregado:

* Respuesta: 7066d7539fdf30539e2e43ba5fd21606@reply.craigslist.org

22. ¿Qué herramienta Karen espera aprender a usar? Esta respuesta es sensible a las mayúsculas

En los logs de navegación aparecen unas cuantas referencias a timestomp, y en los programas recientes aparece SetMace … pero ninguna de ellas es válida.

UPDATE: La había dejado por imposible, pero respondiendo a la pregunta 29 he realizado una búsqueda por keywords de “Secrets.txt” (que aparecía entre los documentos recientes de Karen), y me encuentro con esta línea dentro de “AlpacaCare.docx”:

Algunas preguntas rizan el rizo de tal forma que si fueran Rapunzel no ganarían para champú

* Respuesta: BeEF

23. ¿Cuál es el nombre del volumen de la segunda partición del portátil?

Esta se auto responde porque FTK Imager nos ha reconocido el valor al hacer el montado de la partición

* Respuesta: PacaLady

24. ¿Cuál es el HostUrl de Skype?

Después de revisar de arriba abajo la configuración de Skype sin resultados, recurro a Google para ver qué narices es el HostUrl. Un buen rato más tarde encuentro esta pequeña joya:

https://cyberforensicator.com/2018/06/26/where-did-it-come-from-forensic-analysis-of-zone-identifier/

que nos indica que el HostURL está relacionado con las descargas de Internet. Es decir, que lo que (creo) que nos están pidiendo es la URL desde la que se descargó Skype. Dado que tenemos acceso a las URL visitadas con ChromeHistoryView… pero no tenemos suerte.
Tendremos que ir a la otra fuente de información que nos indica el artículo: los ADS (Alternate Data Stream). Además de para ocultar ficheros dentro de otros, los ADS se generan por algunas aplicaciones cuando un fichero es descargado a través de Internet.

Hemos localizado el fichero descargado de Skype en la partición adicional (PacaLady), por lo que podemos ejecutar AlternateStreamView sobre la partición entera para ver qué encontramos:

Si exportamos el ADS del Skype y lo abrimos tendremos nuestro premio:

[ZoneTransfer]
ZoneId=3
ReferrerUrl=https://www.skype.com/en/get-skype/
HostUrl=https://download.skype.com/s4l/download/win/Skype-8.41.0.54.exe

* Respuesta: https://download.skype.com/s4l/download/win/Skype-8.41.0.54.exe

25. Bob le dijo a Karen el nombre de su alpaca favorita ¿Cuál es?
En uno de los correos Karen responde con una conversación de Skype y una contraseña “pacalady”

Esa codificación suena a base64, pero CyberChef no nos da resultados. Probamos el truco de ROT13, y nada. Hacemos combos de los dos y de varios otros cifrados facilones / codificaciones y no damos con la respuesta. Seguro que es un combo de uno o varios, pero hoy no estoy inspirado y ya es domingo por la tarde, así que se va a quedar en el tintero 

* Respuesta: N/A

26. Encuentra el fichero con MD5 2BD8E82961FC29BBBCF0083D0811A9DB. Te llevará a la victoria.
Lo primero de todo es fijarnos en el aviso que tiene el reto:

Actualización: el enlace que se encuentra en el fichero ya no está activo. La flag se ha actualizado para aceptar como respuesta la URL completa a la que apunta el enlace.

Acotamos en primera instancia el alcance del análisis al directorio de usuario de Karen, y generamos un listado de todos los hashes MD5:

# find . -exec md5sum {} \; > /fast/defcon/deadbox/full_filelist_md5.txt

Buscamos el que nos interesa, y encontramos dos hits:

#  fgrep -i 2BD8E82961FC29BBBCF0083D0811A9DB /fast/defcon/deadbox/full_filelist_md5.txt
2bd8e82961fc29bbbcf0083d0811a9db  ./AppData/Roaming/Microsoft/Windows/Recent/temp.url
2bd8e82961fc29bbbcf0083d0811a9db  ./Desktop/Tor Browser/Browser/sudormrf.url

que resultan tener el mismo contenido (algo esperado):

# cat ./AppData/Roaming/Microsoft/Windows/Recent/temp.url
[{000214A0-0000-0000-C000-000000000046}]
Prop3=19,2
[InternetShortcut]
IDList=
URL=http://ctf.champdfa.org/winnerwinnerchickendinner/potato.txt

* Respuesta: http://ctf.champdfa.org/winnerwinnerchickendinner/potato.txt

27. What is the domain name of the website Karen browsed on Alpaca care that the file AlpacaCare.docx is based on?

Una búsqueda rápida en Internet por un par de términos del documento nos da la respuesta (tampoco hay TANTOS fans de las alpacas sueltos por Internet). Si elegimos «Palomino Alpaca Farm» y «Designed & Configured by Mountain Ash Web» nos sale la respuesta directa:

palominoalpacafarm.com

Lo confirmamos con ChromeHistoryView, verificando que está marcado en el historial.

* Respuesta: palominoalpacafarm

28. What is the Created Timestamp for the secret file? Submit in UTC as MM/DD/YYYY HH:MM:SS in 24 format.


Hint: Secrets are best kept hidden in plain sight.

Sabemos por los documentos recientes que existe un fichero llamado Secrets.txt… pero no aparece por ninguna parte. Hacemos recuperación de las dos unidades con Recuva sin encontrar nada relevante, así que nos decidimos a tirar Autopsy para poder realizar una búsqueda completa de palabras en todo el disco.

Tenemos mucha suerte porque la búsqueda nos da un doble combo: respondemos esta pregunta y la 22, que ya había dado por perdida. La verdad está dentro del fichero AlpacaCare.docx, dentro de la partición extra que tenía el equipo.

Como ya sabemos que un .docx es a efectos prácticos un .zip, lo abrimos con 7Zip y encontramos nuestro fichero, con su fecha de creación. Como nos faltan los segundos, le damos al botón de propiedades para sacar la fecha completa.

7Zip no indica en ningún momento que la fecha esté en UTC, por lo que nos toca convertirla restando dos horas (en el momento de hacer el reto estamos en horario de verano, UTC+2)

* Respuesta: 03/25/2019 08:23:45

29. Duanes Challenge: Duane Dunston had his passwords hijacked. Karen hid them C:\Users\Karen\Desktop\DuanesChallenge somewhere, what is the password to Duane’s LinkedIn?

Son 150 puntazos, así que toca darlo todo. Vamos a desplegar una estrategia multinivel hasta dar con nuestro password.

  1. Hacemos un strings guarro a toda la carpeta por cadenas estándar (Duane, LinkedIn, password) sin obtener resultado (no tenía muchas esperanzas pero había que probar).
  2. Hacemos un file a toda la carpeta para comprobar que todos los ficheros son lo que tienen que ser, y verificamos que no hay “extraños”.
  3. Sacamos los metadatos de todos los ficheros con exiftools a ver si alguien se ha dejado algo dentro (sin éxito).
    Tenemos 3 tipos de fichero grosso modo: de texto, PDF y de Office.
  4. Los de texto los inspeccionamos directamente y a priori los descartamos. Los de ofimática los pasamos por las oletools para comprobar que no tienen ninguna macro, y los PDF por pdf-parser para ver si no tienen ningún objeto raro.

Y es justamente pdf-parser quien nos da la pista, ya que en el fichero South_Carolina_Academic_Standards_and_Performance_Indicators_for_Science_2014.pdf nos da la siguiente salida:

trailer
  <<
    /Size 3189
    /Root 1 0 R
    /Info 322 0 R
    /ID []
    /Prev 1091378
    /XRefStm 1084442
  >>
startxref 1155322
PDF Comment '%%EOFaed000aed000UEsDBBQABgAIAAAAIQBi7p1oXgEAAJAEAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIo\r\n'

Ese comentario es altamente sospechoso. Si abrimos el fichero con vi comprobamos que hay “algo” después del final del fichero:

Si lo extraemos y lo convertimos a formato unix con dos2unix podemos decodificar el base64 y ver qué tipo de fichero hemos “pescado”:

# dos2unix tmp.pdf
dos2unix: converting file tmp.pdf to Unix format...
# base64 -d tmp.pdf > tmp.file
# file tmp.file
tmp.file: data

Parece que no hemos pescado nada. Vamos a abrirlo de nuevo a ver qué tenemos… y “casi” lo tenemos:

Se ve ahí casi al principio el comienzo de lo que parece un .zip (delatado por el “PK”). Vamos a ver qué pasa si lo editamos y eliminamos todos los caracteres que hay antes del PK:

# file tmp.file
tmp.file: Microsoft Excel 2007+

¡Fuck Yeah! Si abrimos ese Excel en un Windows tenemos nuestra merecida flag.

* Respuesta: R33*D)DogHouse