TS Solution pone a prueba la capacidad de protección del sistema de análisis de tráfico.
Como equipo de expertos de TS Solution que trabaja con la mayoría de los productos de Positive Technologies, a menudo recibimos preguntas de los clientes del tipo: “¿PT NAD detectará (inserte aquí la actividad maliciosa o la herramienta de los atacantes que le interese)?” Lamentablemente, no siempre es posible responder a todas las preguntas durante los proyectos piloto. Y a nosotros mismos también nos interesa saber hasta qué punto son amplias las capacidades del producto y cuán efectivas son en la práctica.
Para saciar nuestro interés mutuo, después de estudiar la documentación oficial y revisar conjuntos de reglas para ataques y actividades, decidimos llevar a cabo una serie de pruebas y compartirlas con todos los que están ante la disyuntiva de elegir o que se interesan por las capacidades de PT NAD.
Nuestras pruebas incluyen el uso de diversas utilidades e instrumentos de hacking populares para pruebas de penetración, que también utilizan los atacantes reales. Los resultados del testeo los hemos recopilado en este artículo, donde cada herramienta cuenta con su propio capítulo.
Estas pruebas están creadas con el fin de familiarizar al lector con los métodos de detección del producto PT NAD. No asumimos ninguna responsabilidad por las consecuencias del uso de estas herramientas en la vida real.
En los capítulos encontrarán una breve descripción de cada producto, los pasos para utilizarlo y el resultado de la detección de su actividad en PT NAD. Adicionalmente, hemos agregado la descripción del entorno de pruebas que usamos, para que si lo desean puedan reproducir por su cuenta todos los test.
Para realizar la prueba de PT NAD necesitaremos tres máquinas virtuales. Una de ellas hará el papel de máquina víctima, la segunda actuará como la máquina atacante y la tercera, como enrutador. Además, será necesaria una cuarta VM donde instalaremos directamente PT NAD.
Para la máquina víctima emplearemos Debian 11 (en adelante, debian), en la máquina de nuestro supuesto atacante usaremos Kali Linux (en adelante, kali), y como enrutador, RouterOS (Mikrotik). Ahora debemos conectar estas dos máquinas para que el tráfico entre ellas pase a través de un conmutador. Para ello lo colocamos “entre” ellas y lo utilizamos para el enrutamiento de paquetes entre debian y kali.
Asignamos direcciones IP a todas las interfaces:
En PT NAD enviamos una copia del tráfico de la conexión entre Mikrotik y Debian.
PANIX es una herramienta de pentesting que proporciona un conjunto de utilidades para obtener acceso remoto al equipo de la víctima y mantener persistencia en él.
Lo primero que debemos hacer es instalar PANIX en el nodo a atacar (Debian). Se puede descargar esta utilidad desde este enlace. En el ordenador del “atacante” (Kali) comenzamos a escuchar conexiones entrantes en el puerto 1337 (puede elegir cualquier otro puerto que no se use en otros servicios). Para ello utilizaremos la utilidad NetCat.
Una vez que iniciamos la escucha del puerto, utilizamos PANIX para organizar un Reverse Shell desde el nodo Debian. Un Reverse Shell es un tipo de ataque en el que la máquina atacada se conecta al equipo atacante mediante una instrucción infiltrada o el trabajo de un framework. Para ello emplearemos la opción --at (panix creará una tarea en el programador de tareas at, que permite crear tareas diferidas), pasando como parámetros la dirección IP del nodo Kali (192.168.3.1), el puerto que estamos escuchando (1337) y el tiempo tras el cual se debe realizar la conexión (como no queremos esperar, usaremos “now”).
Después de esto, en Kali veremos que la conexión se ha establecido.
Podemos ejecutar algunos comandos. Por ejemplo, ver el nombre de usuario y del host o mostrar el contenido del archivo /etc/passwd. Dichos comandos son usados con frecuencia por atacantes para un reconocimiento rápido inicial del dispositivo comprometido. Para finalizar la sesión hay que ejecutar el comando exit.
El ataque se completó con éxito. Ahora veamos qué detectó PT NAD. En la ficha de sesión observamos dos reglas de ataque que han saltado: detectaron la ejecución del comando id y la transmisión del contenido del archivo /etc/passwd.
Shellz es un script para organizar una conexión de Reverse Shell. Enlace para consultarlo y descargarlo.
Instalamos la utilidad en Kali y la iniciamos.
Se abrirá un menú pseudográfico. A continuación, deberemos indicar las opciones y parámetros necesarios para crear la conexión. Primero, seleccionamos el mecanismo para crear el Reverse Shell: Bash (opción 3). Luego indicamos la dirección IP y el puerto para la conexión: 192.168.3.1 y 3300, y como formato de dirección IP elegimos “Normal” (opción 1). En la siguiente ventana seleccionamos generar la carga sin codificación adicional: “No encoding TCP” (opción 1). Como servicio para la escucha elegimos netcat (opción 2). Así comenzamos a escuchar el puerto 3300.
En la última ventana del menú, además de la elección del método para la escucha del puerto, aparecerá el comando que debemos ejecutar en el nodo Debian.
Tras ejecutar dicho comando desde el nodo Kali, podremos ejecutar instrucciones.
PT NAD detectó en el tráfico la ejecución de los comandos, en particular la orden id.
Metasploit Framework es una potente herramienta de código abierto que se utiliza para pruebas de penetración y evaluación de la seguridad de sistemas informáticos. Proporciona una plataforma para desarrollar, probar y ejecutar exploits contra objetivos remotos. Viene incluido en la distribución de Kali.
Una de las posibles utilidades de esta herramienta es la creación de una conexión de Reverse Shell, en la cual la máquina objetivo inicia la conexión hacia el ordenador atacante. Para mayor claridad, en este caso emplearemos una VM con Windows 10 con la dirección IP 192.168.2.5 como máquina atacada.
Para ello, primero debemos crear un archivo ejecutable malicioso, que posteriormente deberemos transferir a la máquina atacada y ejecutarlo allí. Generamos el archivo con la utilidad msfvenom, incluida en Metasploit Framework: la opción -p indica qué carga útil (payload) y parámetros de conexión usaremos; -f define el formato del archivo, y -o especifica la ruta y el nombre del archivo que generará la orden.
Ahora se debe iniciar el proceso que escuchará el puerto especificado al crear el archivo (en nuestro ejemplo, el puerto 3300) y esperará la conexión entrante de máquinas remotas. Para ello, ingresamos a la consola de Metasploit Framework con sudo msfconsole, seleccionamos el módulo exploit/multi/handler y establecemos la carga útil y parámetros de conexión (los mismos que al crear el archivo malicioso con msfvenom).
Transferimos el archivo creado por cualquier medio (por ejemplo, mediante SCP) a Windows 10 y lo abrimos con doble clic. En la sesión de Metasploit previamente abierta en Kali, obtendremos acceso para ejecutar comandos en la máquina remota.
PT NAD detectó el banner del intérprete de línea de comandos en el tráfico y, con base en ello, activó una alerta.
Así pues, al comparar la detección del reverse shell organizado con diferentes herramientas, observamos que PT NAD detecta la ejecución remota de comandos y la visualización de archivos, pero no detecta la herramienta en sí.
Hans es una utilidad que permite crear un túnel ICMP entre nodos de la red.
Para organizar un túnel ICMP, es necesario descargar el código fuente de hans y compilar el archivo ejecutable en ambos nodos, Debian y Kali. Después de instalar, en Kali vamos al directorio donde se instaló hans y ejecutamos el comando:
En lugar de 192.168.4.1 se puede indicar cualquier otra IP no usada en la máquina. Como resultado de esta orden, se creará una interfaz lógica nueva tun0 con la IP indicada.
Luego, en el nodo Debian, estando en el directorio con la utilidad, ejecutamos el comando:
Es importante indicar la dirección IP de Kali con la que haya conectividad de red, y no la IP de la interfaz lógica creada antes. En caso de que el comando se ejecute con éxito, se creará la interfaz lógica tun0 a la que se le asignará la IP de la misma subred que la IP en la interfaz equivalente en Debian. En nuestro caso, se asignó la IP 192.168.4.100.
Para comprobar el funcionamiento del túnel, lanzamos un ping entre las interfaces tun0. Se reciben respuestas. El túnel ICMP se ha creado.
Podemos usarlo de la forma que deseemos. Por ejemplo, para conectarnos por SSH.
PT NAD detectó el túnel ICMP y generó dos alertas. Una alerta identifica en general los túneles ICMP y no está ligada a análisis por firma, creando una ficha en el feed de actividad. La segunda alerta proviene del análisis de firmas y es una regla de ataque que detectó la herramienta concreta para la construcción del túnel ICMP, en nuestro caso, Hans.
Iodine es una utilidad para crear túneles DNS entre nodos de la red.
Descargamos el código fuente desde este enlace y compilamos la utilidad en ambos nodos: Debian y Kali. Como resultado, en el directorio /bin deberían aparecer dos archivos ejecutables: iodine y iodined, correspondientes a la parte cliente y servidor, respectivamente. Primero arrancamos el servidor en Kali con los parámetros siguientes: la contraseña para la conexión (usaremos 1234), la IP para crear el túnel (que no debe estar en uso; nosotros indicamos 192.168.5.1) y el dominio para el cual Kali hará de servidor DNS autoritativo (usamos nad.test). Así, el comando queda:
sudo ./iodined -f -P 1234 192.168.5.1 nad.test.
Tras ejecutarlo, se creará la interfaz lógica dns0 con la IP señalada.
En la máquina Debian ejecutamos la orden:
La contraseña (1234) y el nombre de dominio (nad.test) deben coincidir con los que usamos previamente al arrancar la parte servidor de la utilidad en Kali. Es importante indicar la IP del nodo Kali (192.168.3.1) con el que existe conectividad de red, y no la IP que especificamos en el comando anterior. Como resultado, aparecerá la nueva interfaz dns0 con la IP asignada automáticamente desde la subred adecuada para el túnel.
Comprobamos el estado del túnel haciendo ping a la interfaz dns0. Llegan las respuestas, así que el túnel DNS está activo y funcionando correctamente. Se puede utilizar según se desee, por ejemplo, para SSH.
PT NAD detectó el túnel y determinó la utilidad con la que fue construido.
Havoc es un framework diseñado para la gestión y el control (CnC), así como para la post-explotación de máquinas infectadas con Windows. El proceso de instalación, las instrucciones de uso de este framework y demás información se encuentran en este enlace.
En Havoc, los nodos pueden tener uno de tres roles: cliente, servidor o agente. El servidor cumple las tareas estándar de un servidor CnC: escuchar puertos, esperar conexiones de máquinas infectadas y pasarles comandos para ejecutar, además de generar archivos ejecutables maliciosos. El cliente puede conectarse al servidor para gestionarlo mediante una interfaz gráfica. El agente es la máquina infectada, controlada por el servidor.
En nuestro entorno, Kali combina los roles de servidor y cliente. El rol de agente se lo asignaríamos a Debian, pero el framework no admite la instalación de agentes en sistemas Linux. Por ello, se cambió la VM Debian por una con Windows 10. La asignación de IP se mantiene sin cambios.
Tras completar la instalación de todos los componentes de Havoc en Kali, iniciamos el servidor con parámetros por defecto.
Después, iniciamos el cliente:
Aparecerá la ventana de autenticación, donde debemos especificar los datos de conexión al servidor. Si en el arranque del servidor se usó el perfil por defecto, se puede pulsar el botón New Profile y los datos se autocompletarán. Solo restaría introducir la contraseña password1234. Presionamos Connect y nos conectamos al servidor.
Lo primero será crear una tarea que escuche el puerto al que se conectarán los agentes. Para ello, en el panel Listeners (si no aparece, se activa en el menú View) hacemos clic en Add. Se abre la ventana de configuración de escucha. Indicamos el nombre base y el modo de conexión http. Dejamos el resto de parámetros sin modificar y pulsamos Save al final de la ventana.
Ahora podemos generar el archivo ejecutable malicioso, que al abrirse en la máquina remota se conectará al servidor y ejecutará los comandos que reciba. Para ello, vamos a Attack → Payload. En la ventana que se abre, podemos dejar todo tal cual y hacer clic en Generate.
Tras esto, hay que esperar un poco y guardar el archivo exe generado en un lugar conveniente y luego transferirlo a la máquina con Windows. Al ejecutarlo, veremos que en el cliente de administración aparecerá un nuevo nodo disponible.
Al hacer clic derecho en él, se abre un menú contextual donde se puede ver el listado de archivos o procesos en ejecución (Explorer), así como acceder al panel de envío de comandos (Interact). Puede consultarse la lista de comandos en la página Agent de la documentación. Por ejemplo, el comando checkin mostrará información sobre el agente.
PT NAD detectó la conexión al servidor CnC y estableció que se estaba empleando el framework Havoc.
Hydra es una herramienta para realizar fuerza bruta y password spraying. Viene integrada en Kali, así que no hace falta instalarla aparte. El código fuente y la documentación se encuentran en este enlace.
Intentemos conectarnos a un servidor ftp con el usuario post. Configuraremos la generación automática de contraseñas a partir de letras minúsculas del alfabeto latino, de longitud de 4 a 5 caracteres.
PT NAD detectó este forcejeo de contraseñas.
También probemos la búsqueda de contraseñas en tráfico cifrado, por ejemplo la conexión por ssh. Anticipando un poco, diremos que PT NAD “de serie” no detecta estos ataques, pero sí ofrece herramientas para corregirlo. Una de las opciones es la notificación basada en un filtro de número de sesiones. Filtraremos todas las sesiones por ssh con autenticación fallida (app.proto==”ssh” && ssh.auth==”failed”) y añadiremos una regla de alerta en ese filtro: “Más de 120 sesiones en 10 minutos”.
También conviene mencionar las reglas de perfilado personalizadas (abreviadas PPP en ruso). Las PPP funcionan de forma similar a la notificación por filtro, pero el umbral de activación lo determina el propio PT NAD por medio de aprendizaje automático. PT NAD se entrena con el tráfico saliente de distintas máquinas durante el periodo elegido por el usuario (al menos 7 días) para detectar la normalidad del tráfico de cada nodo, y si después el tráfico supera esa normalidad, PT NAD dará la alerta.
Pasemos a la prueba: ejecutamos la orden de fuerza bruta para ssh.
La regla basada en el filtro se disparó y detectó el intento de fuerza bruta.
Sandman es una herramienta para evadir medidas de protección aplicadas en la red. Emplea NTP, un protocolo de sincronización de hora, que suele estar permitido en muchas redes y entornos de infraestructura, posibilitando así que Sandman cargue y ejecute código en la máquina remota a pesar de los firewalls.
Puedes informarte sobre el proyecto y descargar su código fuente en este enlace. En Kali debemos trasladar el contenido del directorio SandmanServer. En lugar de Debian usaremos una VM con Windows 10 en la IP 192.168.2.5. A esa VM hay que pasar los otros dos directorios restantes y compilarlos en VS2022.
Para que Sandman cargue y ejecute alguna carga en la máquina remota, primero tenemos que crearla. Para ello volvemos a Metasploit Framework. Repetiremos los pasos del capítulo “Metasploit Framework. Reverse shell” pero con una diferencia: no integraremos la carga en un archivo ejecutable, sino que la dejaremos “cruda”. Es importante prestar atención al tamaño de la carga: debemos recordarlo (o anotarlo), pues lo necesitaremos más adelante.
Ahora, el archivo con la carga útil lo publicamos en algún servidor web para descargarlo después. Nosotros levantaremos un SimpleHttpServer en Python. Vamos al directorio donde está nuestro archivo y ejecutamos python -m http.server. Así, bajo la dirección http://192.168.3.1:8000 se podrá acceder al contenido del directorio donde está el archivo (podemos comprobarlo en el navegador).
Todo listo: pasamos ya a Sandman. Recordamos o comprobamos (por ejemplo, con ls -l) el tamaño de la carga. En nuestro caso, son 510 bytes. Abrimos en un editor de texto (usamos nano) el script sandman_server.py y modificamos el parámetro PAYLOAD_SIZE.
Ahora ejecutamos el servidor y le pasamos como parámetros la interfaz y el enlace URL para descargar la carga.
En Windows 10 arrancamos el archivo Sandman.exe compilado. Veremos conexiones al seudo-servidor NTP, la descarga al servidor web y también el Reverse Shell resultante.
PT NAD detectó la actividad de Sandman y la posterior transmisión de la salida del intérprete de línea de comandos en el tráfico.
Así, hemos examinado un conjunto variado de herramientas de hacking: utilidades para levantar túneles, frameworks para explotar vulnerabilidades, mantener persistencia y moverse lateralmente, reverse shells, simuladores de ataque y mucho más.
PT NAD ha cumplido a la perfección su cometido. Ha detectado la actividad de todo el software malicioso probado. Y en muchos casos ha sido capaz de identificar la herramienta específica que se utilizaba.
La lista de herramientas que hemos probado no es completa. Planeamos ir añadiendo gradualmente nuevos capítulos a este material.