En un servidor Proxmox, vamos a crear nuestro propio laboratorio purple team para aprender a gestionar y detectar incidentes de ciberseguridad.

Nuestro entorno tendrá los siguientes sistemas:

  • Router/Cortafuegos con:
    • pfBlocker (limitará el acceso por dominios y listas de IP)
    • Snort (como IPS)
  • Servidor Ubuntu con los siguientes servicios:
    • InfluxDB
    • Grafana
    • Kibana
    • Elastic
  • Máquina Windows Flare
  • Servidor Windows Server 2012
  • Kali Linux Purple
  • Kali Linux Estándar

Esquema Homelab

Instalación de pfSense

Necesitamos una máquina virtual pfsense con dos tarjetas de red (o una tarjeta si disponemos de switch inteligentes con soporte VLAN).

1) Descarga de la ISO.

  • Desde la web oficial y subirla a proxmox.
  • Descargar por URl desde proxmox.
  • Si ya la tenemos en nuestro equipo, subirla por sftp con sftp /var/lib/vz/template/iso.

2) Creamos una máquina virtual con 4 GB de RAM, 20 GB de disco y 4 núcleos. La configuramos para que arranque con la ISO.

3) Una tarjeta de red irá al bridge donde está la interfaz física (vmbr0 por ejemplo).

4) Ponemos una segunda tarjeta de red a un switch virtual (OVS Bridge).

Configuración de pfSense

Desde la terminal configuramos que boca será la WAN y cuál la LAN, la IP de cada uno, el servicio DHCP en la LAN y habilitamos la interfaz web.

Vía web, configuramos la contraseña de acceso para admin (por defecto es pfsense), los DNS del sistema operativo, puerta de enlace, servicio de DNS, servidores DNS para el servicio DNS.

A continuación instalamos los siguientes paquetes:

  • Snort: Conocido IDS (Sistema de detección de intrusiones) e IPS (Sistema de prevención de intrusiones). IPS cuando activamos el bloqueo de IPS que ofenden reglas.
  • pfBlockerNG: Bloqueador de contenido basándose en dominios y direcciones IP. Cargamos listas negras desde Internet y así bloqueamos contenido como: anuncios, pornografía, contenido ofensivo, páginas de apuestas, juegos, etc.
  • Darkstat: Genera estadísticas de direcciones IP, MAC, protocolos y puertos.
  • ntopng (puerto 3000): Monitor de red. Nos permite ver flujos de red y hacer capturas en tiempo real.

Configuración de Snort

Vamos a “System” > “Package Manager” > “Available Packages”, buscamos e instalamos “snort”.

Una vez finalizado el proceso, nos movemos a “Services” -> “Snort” -> “Global Settings”. Marcamos la casilla de “Enable Snort VRT” y se nos solicita un “Snort Oinkmaster Code”, este código podemos obtenerlo gratuitamente si nos registramos en la página oficial de Snort. Cuando ya tengamos nuestra cuenta, debemos acceder a “My Account” -> “Oinkcode” y copiar el código que nos dan.

oinkcode_1

Ahora que tenemos nuestro “Oinkcode” podemos pegarlo dentro de pfSense.

oinkcode_2

Configuramos Snort.

config_snort

Configuración de pfBlockerNG

Vamos a “System” > “Package Manager” > “Available Packages”, buscamos e instalamos “pfBlockerNG”.

Una vez finalice el proceso, iremos a “Firewall” > “Feeds” y habilitamos listas de pri1, pri4, pri5.

También accederemos al apartado “DNSBL” y lo activaremos.

config_pfblockerng

Configuración de Darkstat

Vamos a “System” > “Package Manager” > “Available Packages”, buscamos e instalamos “darkstat”.

Iremos a “Services” > “darkstat”, lo activamos y le configuramos una contraseña.

config_darkstat

Para entrar al servicio, iremos a “Diagnostics” > “darkstat”.

config_darksta 2

Configuración de ntopng

Vamos a “System” > “Package Manager” > “Available Packages”, buscamos e instalamos “ntopng”.

Nos movemos a “Diagnostics” > “ntopng” y configuramos su contraseña.

config_ntopng

Como usar una OVA en proxmox

Para usar una OVA en proxmox, subimos por SSH el archivo a nuestro servidor. En este caso, tenemos la OVA de un Windows 10.

Desde nuestro servidor desempaquetamos la OVA con tar -xf 'nombrearchivo.ova'. Buscamos el archivo VMDK, que será el disco de Windows 10.

Creamos una VM para Windows 10. No le ponemos CDROM ni disco duro. Le añadimos 12 GB de RAM, 6 cores y BIOS normal. Esta máquina virtual la convertiremos en plantilla para poder clonarla tantas veces como necesitemos.

Convertir Win10 en plantilla

Una vez tenemos la plantilla, hacemos un clonado de ella. Buscamos el ID de la VM clonada (120 en este caso) y desde línea de comandos en proxmos hacemos:

qm disk import 120 'MSEdge - Win10-disk001.vmdk' local-lvm --format qcow2

Añadir disco a Win10

Esto importa el disco ‘MSEdge - Win10-disk001.vmdk’ en la máquina 120 y lo guarda en el espacio de almacenamiento local.lvm (en esa partición). Una vez acaba el proceso, el disco aparece en la máquina pero sin conectar. Hacemos doble clic en él y lo añadimos como SATA 0.

Añadir disco como SATA 0

Antes de arrancar el sistema, debemos asegurarnos de cambiar el modo de arranque al nuevo disco.

Orden arranque Win10

La máquina viene con 40 GB, así que necesitaremos añadirle 30 GB más. Pulsamos en “Hardware” -> “Disk Action” -> “Resize”.

Expandir disco

Desde Windows vamos al administrador de discos, hacemos clic derecho en la partición actual y pulsamos en la opción “Extend Volume”. Con esto extendemos la partición hasta el final del disco.

Expandir disco 2

Vemos como se ha actualizado el espacio.

Expandir disco 3

Crear Windows Flare

Para realizar la instalación de Windows Flare, necesitamos desactivar el windows defender y la protección en tiempo real. Si una de estas cosas está activa, no se realizará la instalación correctamente.

Desactivar Windows Defender

También lo desactivamos de las políticas de grupo. Abrimos “Local Group Policy Editor”, nos movemos a “Computer Configuration” -> “Administrative Templates” -> “Windows Components” -> “Windows Defender Antivirus”, allí hacemos doble clic en “Turn off Windows Defender Antivirus” y marcamos la casilla de “Enable”. Para guardar los cambios pulsamos en Aplicar.

Desactivar Windows Defender desde policy group

Además, será necesario desactivar las actualizaciones automáticas desde los ajustes de Windows.

Una vez hemos preparado el entorno, seguiremos los pasos de instalación que vienen en el repositorio de Windows Flare. Nos descargaremos el archivo install.ps1 en una PowerShell como root, y ejecutamos los siguientes comandos:

(New-Object net.webclient).DownloadFile('https://raw.githubusercontent.com/mandiant/flare-vm/main/install.ps1',"$([Environment]::GetFolderPath("Desktop"))\install.ps1") 
Unblock-File .\install.ps1
Set-ExecutionPolicy Unrestricted -Force
.\install.ps1

Una vez finalice el proceso, tendremos instalado Windows Flare.

Conectarnos a nuestro laboratorio por VPN

Desde pfSense, exportamos el cliente OpenVPN a nuestro Windows y lo pasamos por SSH a proxmox. Pasamos el archivo ovpn a nuestro servidor proxmox con el comando:

scp MIARCHIVO.ovpn root@192.168.32.13:/root

Pasar fichero ovpn a proxmox

Para descargarlo en nuestra máquina local ejecutamos:

scp root@192.168.32.13:/root/naranja.ovpn /home/usuario/

Descargar fichero ovpn a nuestra máquina local

Por último, solo nos queda importar el archivo ovpn en la configuración VPN de nuestro equipo.

Instalación y configuración de Ubuntu Server + ELK

Instalaremos un Ubuntu Server 22.04 para crear nuestra pila ELK. El sistema tendrá 10 GB de RAM, 16 cores, 80 GB de disco y deberá estar conectada a la red de pfsense.

Instalar Ubuntu Server

Cuando finalicemos la instalación, nos aseguramos de tener ip estática en esta máquina. Modificamos fichero /etc/netplan/00-installer-config.yaml y añadimos la siguiente configuración (asignamos la ip de la red que tenga nuestro pfsense):

Modificar la IP del Ubuntu Server

Aplicamos los cambios con el comando:

sudo netplan apply

A continuación, vamos a añadir el Ubuntu al DNS de nuestro pfsense.

Anadir ELK a DNS

El siguiente paso, será realizar la instalación de la pila ELK. Ejecutamos los siguientes comandos:

#!/bin/bash

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg

sudo apt-get install apt-transport-https

echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list


sudo apt-get update
sudo apt-get install elasticsearch 
sudo apt-get install kibana
sudo apt-get install logstash

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service
sudo /bin/systemctl enable kibana.service

sudo systemctl start elasticsearch.service
sudo systemctl start kibana.service

IMPORTANTE: Guardar la contraseña que se genera automáticamente al instalar elasticsearch. Si en algún momento la perdemos podemos resetearla con sudo /usr/share/elasticsearch/bin/elasticsearch-reset-password -a -u elastic.

Una vez hayamos finalizado la instalación, debemos crear un túnel SSH para poder acceder a Kibana. Usamos el comando:

ssh -L 5601:localhost:5601  usuario@IP_UBUNTU_SERVER

Ahora ya podemos acceder a Elastic por http://localhost:5601.

Acceder a Elastic vía web

Vemos que se nos solicita un token para hacer el enrolment de kibana a elastic. Podemos generarlo ejecutando:

sudo /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana

Una vez introducimos el token que se ha generado, se nos solicita un codigo de verificación. Lo obtenemos con:

sudo /usr/share/kibana/bin/kibana-verification-code

Finalmente, accedemos con el usuario elastic y la contraseña que genera elastic.

Acceder a Elastic vía web 2

A continuación, añadiremos la integración de Sysmon para Linux. Nos vamos a “Add Integrations” -> Buscamos “sysmon for Linux” -> “Add Sysmon for Linux”

Integración Sysmon

Añadimos la integración y creamos un nuevo agente.

Integración Sysmon 2

Telegraf

En pfsense buscamos e instalamos el paquete telegraf.

Instalacion de Telegraf 1

Nos movemos a “Services” > “Telegraf” y marcamos las casillas de “Enable Telegraf” y “Skip SSL Verify”.

Instalación de Telegraf 5

A continuación, accedemos a la consola de nuestra máquina pfsense y editamos el fichero telegraf.conf con el siguiente comando:

vi /usr/local/etc/telegraf.conf

Añadimos la siguiente configuración (importante usar la ip de nuestro Ubuntu server y contraseña de elastic):

[[inputs.net]]
        interfaces = ['em*'] 
[[inputs.processes]]

[[inputs.swap]]

[[inputs.system]]

[[inputs.pf]]

[[outputs.elasticsearch]]
  enable_sniffer = false
  health_check_interval = "10s"
  index_name = "telegraf-%Y.%m.%d"
  manage_template = false
  overwrite_template = true
  template_name = "telegraf"
  urls = ["https://192.168.99.10:9200"]
  # timeout = "5s"
  username = "elastic"
  password = "jqmIi0pdlo3d9HVS+MsQ"
  # health_check_timeout = "1s" 
  # auth_bearer_token = "Vzlld3FJNEIyWFMyUG80US12RGc6aGVPQ2ZqR01Rc1M1cjJiTkZNOEdQQQ=="
  # force_document_id = false
  default_pipeline = "logs-pfsense.log-1.19.0"

Cuando terminemos de modificar el fichero, debemos parar y volver a arrancar el servicio.

/usr/local/etc/rc.d/telegraf.sh stop
/usr/local/etc/rc.d/telegraf.sh start

Veremos que nos da un error de conexión debido a que no reconoce el certificado digital. Para solucionar esto, debemos importar el certificado de elastic a pfsense. Accedemos a elastic y descargamos el certificado.

Instalación de Telegraf 2

Si abrimos el certificado, podemos ver su contenido.

Instalación de Telegraf 3

El siguiente paso será ir a nuestro pfsense y acceder a “System” > “Certificates”. Añadimos un nuevo certificado, le damos un nombre, marcamos la casilla de “Confiar en este certificado”, seleccionamos la opción de “Importar una autoridad” y pegamos el contenido del certificado que hemos descargado.

Instalación de Telegraf 4

Ahora podemos volver reiniciar el servicio y conseguiremos conectar con elastic.

Teniendo acceso a los logs, el siguiente paso será crear un data view que recoja toda la información de Telegraf. Iremos a “Stack Management” > “Data views” > “Create Data view”.

Dataview Telegraf 1

Para seleccionar que registro deseamos ver, tenemos que pulsar en “Add field”. Introduciendo “telegraf-*” obtendremos todos sus datos.

Dataview Telegraf 2

Para poder visualizar estos datos, debemos generar una nueva visualización. Tenemos que ir a “Dashboard” > “Create Dashboard” > “Create Visualization”, seleccionar los datos que deseemos y vemos la gráfica correspondiente. Una vez tengamos la información que necesitemos, guardaremos la visualización

Dataview Telegraf 3

Instalación de FIR

FIR (Fast Incident Response) es una plataforma de gestión de incidentes de ciberseguridad. Permite crear, rastrear y reportar fácilmente incidentes de ciberseguridad. Nosotros la utilizaremos para crear ticket cuando detectemos una alerta de seguridad. Podemos encontrar la herramienta en su repositorio oficial https://github.com/certsocietegenerale/FIR.

Para instalar FIR utilizaremos un contenedor LXC en nuestro proxmox.

https://github.com/certsocietegenerale/FIR

Para instalar FIR utilizaremos contenedores. Necesitaremos tres servidores para los servicios de MySQL, Redis y Django. Generaremos una plantilla para cada servicio, vamos a “Local(prxmx)” > “CT Templates” > “Templates” y descargamos MySQL, Redis y Django.

Una vez hayamos descargado las plantillas, pulsamos en “Create CT” para hacer un nuevo contenedor. Seleccionamos la plantilla de MySQL y le asignamos 4 GB de RAM, 2 cores, 15 GB de disco y la interfaz red de pfsense.

Cuando finalicemos, iniciamos la máquina y configuramos una contraseña para el servicio.

Repetimos este paso con Redis y Django.

Ahora que ya tenemos todos los servicios que necesitamos, desplegaremos el contenedor docker de FIR dentro del linux container Django. Para acceder a él mediante línea de comandos, debemos acceder por ssh a proxmox y después entrar a esa máquina virtual.

ssh root@$IP_PROXMOX
lxc-attach $ID_CONTENEDOR_DJANGO

Descargamos el repositorio de FIR haciendo un git clone.

git clone https://github.com/certsocietegenerale/FIR.git

Creamos un entorno virtual con python y entramos en él.

apt-get install python3-venv
python3 -m venv venv
. ./venv/bin/activate

Instalamos las siguientes dependencias.

apt-get install python3-dev python3-pip python3-lxml git libxml2-dev libxslt1-dev libz-dev build-essential default-libmysqlclient-dev pkg-config
pip3 install celery abuse-finder

Ahora, nos movemos al directorio de FIR e instalamos los requerimientos.

cd FIR
pip3 install -r requirements.txt

Continuamos ejecutando los comandos que vienen en la guía de instalacion de FIR.

cp fir/config/installed_apps.txt.sample fir/config/installed_apps.txt
./manage.py migrate
./manage.py loaddata incidents/fixtures/01_seed_data.json
./manage.py loaddata incidents/fixtures/02_dev_users.json
./manage.py runserver

Editamos el fichero /etc/ssh/sshd_config.d/turnkey.conf y cambiamos “AllowTcpForwarding yes”.

vi /etc/ssh/sshd_config.d/turnkey.conf

Configurar FIR

Reiniciamos el servicio.

systemctl restart sshd
./manage.py runserver

Abrimos tunel a la máquina.

ssh -L 8000:localhost:8000 root@192.168.99.23

Podemos acceder a la web de FIR desde http://localhost:8000 con las credenciales admin/admin.

FIR 1

Para crear un nuevo ticket, debemos pulsar en “New event”.

FIR 2

Comprobamos como se ha creado correctamente.

FIR 3

FIR 4

Kali Linux Purple

Nuestro Homelab va a necesitar un Kali Linux Defensivo (Purple). El sistema tendrá 10 GB de RAM, 6 cores, 50 GB de disco y estará conectado a la red de pfSense.

Kali Linux 1

Kali Linux 3

Kali Linux 4

Kali Linux 5

Kali Linux 6

Kali Linux 7

kali Linux 8

Análisis de malware con Windows Flare

Con este laboratorio, podemos explotar malware y analizar cuál es su comportamiento. Es importante que creemos una instantánea de la máquina Windows para poder recuperar su estado tras ejecutar programas maliciosos.

Primero deberemos de tener instalada la herramienta git en el sistema. Después, descargamos el repositorio de Malware Analysis Techniques mediante un git clone. Una vez el proceso, descomprimimos el zip de “Chapter 2”.

Podemos observar como hay una imagen llamada 8888888.png, la cual contiene malware, por lo que es importante no abrirla ni ejecutarla.

Capítulo 2

Si hacemos un filetype vemos que es un archivo ejecutable.

Imagen ejecutable

A continuación, comprobaremos como VirusTotal es capaz de analizar el hash de la foto y detectar que es malicioso. Ejecutamos Get-FileHash para obtener su SHA256.

Hash SHA256

Se lo pasamos a VirusTotal y nos informa de que se trata de un virus.

Resultados VirusTotal

Si miramos las cadenas de caracteres imprimibles usando strings, observaremos varios indicadores de compromiso.

Strings 1

Strings 2

Strings 3

Además, podemos escanear el hash que genera el comando ssdeep.

ssdeep

Conclusiones

Tras crear todo nuestro Homelab, nos quedará un entorno con las siguientes características.

Proxmox

Ahora, tenemos un potente entorno donde vamos a poder explotar malware para analizarlo y así aprender a como defendernos del mismo. También hemos conseguido aprender a como se recogen y procesan los logs en un SIEM.

Esta práctica se llevó a cabo durante el ciclo de especialización en ciberseguridad del IES Virgen del Carmen, haciendo uso de los servidores del centro.

Etiquetas:

Categorías:

Actualizado: