Inicio Linux & Systems Networks & Infrastructure Cybersecurity Cloud & DevOps SIEM & Monitoring DFIR & Threat Intel Development & Other Todas las categorias Herramientas

Implementación de SIRP Open Source

Implementación de  SIRP Open Source

Tabla de contenidos

En el siguiente articulo veremos como implementar un Security Incident Response Platform (SIRP) basado en software open source en alta disponibilidad.

Como podemos ver en el diagrama, el agente de Wazuh HIDS envía los datos de todos los servidores a Wazuh Manager y ElasticSearch. ElastAlert observará los nuevos eventos y generará alertas en TheHive.

Componentes:

NGINX

Nginx ​ es un servidor web/proxy inverso ligero de alto rendimiento con el cual proporcionaremos un balanceo de carga en el Cluster de Wazuh.

Wazuh

Wazuh es una solución de monitorización de seguridad basada en open source que recopila y analiza los datos de seguridad de un servidor.

Elasticsearch

Elasticsearch Se trata de un motor de búsqueda y análisis. Es distribuible y fácilmente escalable, enfocado sobre todo al mundo empresarial y científico. actuará como nuestro repositorio de registro.

AlastAlert

AlasAlert es un proyecto open source iniciado que nos proporciona un mecanismo de alerta para elasticsearch

TheHive

TheHive será nuestra plataforma de respuesta ante incidentes de seguridad. Es donde administraremos todas las alertas.

Cortex

Cortex es otro productos del mismo equipo de TheHive el cual lo complomenta. Mediante Cortex analizaremos la información sobre los indicadores que ya están presentes en los registros.

MISP

MISP es una plataforma de distribución de amenazas open source mantenida por CIRCL que, entre muchos otros usos permite al operador suscribirse a las fuentes de inteligencia de amenazas.

Instalación y configuración Load balancer

Para no alargar mucho el manual no vamos a poner en está entrada como instalar el Load balancer, para ello podemos consultar la siguiente entrada: Nginx high availability en FreeBSD con CARP y Monit

Configurar balanceo de carga

Para llevar a cabo la configuración debemos tener activado el modulo de Stream, en mi caso he generado un directorio donde depositar todos los sitios de Stream. Agregamos las siguientes lineas en /etc/nginx/nginx.confg

CODE
stream {


	include /etc/nginx/streams-enabled/*;

}

Una vez tenemos configurado todos los componentes de nuestro balanceador, añadirnos en /etc/nginx/streams-enabled/wazuh.conf el balanceo al cluster de wazuh

NGINX
    upstream cluster {
        hash $remote_addr consistent;
        server 192.168.4.155:1514; #Master
        server 192.168.4.156:1514; #Worker
        server 192.168.4.157:1514; #Worker
    }
    upstream master {
        server 192.168.4.155:1515; #Master
    }
    server {
        listen 1514;
        proxy_pass cluster;
    }
    server {
        listen 1515;
        proxy_pass master;
    }

Reiniciamos el servicio

CODE
service nginx restart 

Comprobamos que el puerto 1514 este inciado

BASH
# netstat -anb | grep 1514
tcp4       0      0 *.1514           *.*                   LISTEN     

Instalación y configuración de Wazuh Cluster

instalamos todos los paquetes necesarios para la instalación de wazuh server

BASH
apt install curl apt-transport-https lsb-release gcc g++ make nodejs yarn

curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | apt-key add --

echo "deb https://packages.wazuh.com/3.x/apt/ stable main" | tee -a /etc/apt/sources.list.d/wazuh.list

apt update

Instalamos wazuh-manager y su api

BASH
apt install wazuh-manager

curl -sL https://deb.nodesource.com/setup_10.x | bash --

apt install nodejs wazuh-api

Generamos un usuario para la API

CODE
cd /var/ossec/api/configuration/auth/

node htpasswd -c user redorbita

Instalamos FileBeats

BASH
curl -s https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add --

echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | tee /etc/apt/sources.list.d/elastic-7.x.lis

apt update

apt install  filebeat=7.1.0

Agregamos la configuración de filebeats para nuestra versión de wazuh, en este caso es la 3.9

BASH
curl -so /etc/filebeat/filebeat.yml https://raw.githubusercontent.com/wazuh/wazuh/v3.9.1/extensions/filebeat/7.x/filebeat.yml

A continuación debemos agregar los nodos de nuestro cluster de elasticsearch

CODE
output.elasticsearch:
  hosts: ['http://192.168.4.160:9200', 'http://192.168.4.161', 'http://192.168.4.162']
  #pipeline: geoip
  indices:
    - index: 'wazuh-alerts-3.x-%{+yyyy.MM.dd}'

También nos dan la opción de enviarlo por logstash como en versiones anteriores.

CODE
output.logstash.hosts: ["192.168.4.160:5000", "192.168.4.161:5000", "192.168.4.162:5000"]

Descargamos el template para elastic

BASH
curl -so /etc/filebeat/wazuh-template.json https://raw.githubusercontent.com/wazuh/wazuh/v3.9.1/extensions/elasticsearch/7.x/wazuh-template.json

Configuración Cluster de Wazuh

Debemos generar una clave de 32 digitos, para ello utilizamos openssl

CODE
 openssl rand -hex 16
bf292f9a466b151078f5285d0bc4d022

Primero, configuraremos los nodos workers, para ello debemos editar el archivo de configuración (/var/ossec/etc/ossec.conf) y nos vamos a <cluster></cluster>

CODE
  <cluster>
    <name>wazuh</name>
    <node_name>redorbita-wazuhdata02</node_name>
    <node_type>worker</node_type>
    <key>bf292f9a466b151078f5285d0bc4d022</key>
    <port>1516</port>
    <bind_addr>0.0.0.0</bind_addr>
    <nodes>
        <node>192.168.4.155</node>
    </nodes>
    <hidden>no</hidden>
    <disabled>no</disabled>
  </cluster>

Una vez configurado todos los nodos de nuestro cluster, pasamos a configurar el nodo master

CODE
  <cluster>
    <name>wazuh</name>
    <node_name>redorbita-wazuhmrg01</node_name>
    <node_type>master</node_type>
    <key>bf2b2f9a466b150078f5985d0bc4d065</key>
    <port>1516</port>
    <bind_addr>0.0.0.0</bind_addr>
    <nodes>
        <node>192.168.4.155</node>
    </nodes>
    <hidden>no</hidden>
    <disabled>no</disabled>
  </cluster>

Para que los clientes se puedan conectar utilzando el balanceador debemos modificar en el apartado <auth></auth> la linea use_source_ip

CODE
 <use_source_ip>no</use_source_ip>

También debemos modificar para utilizar TCP en vez de UDP en el puerto 1514

CODE
  <remote>
    <connection>secure</connection>
    <port>1514</port>
    <protocol>tcp</protocol>
    <queue_size>131072</queue_size>
  </remote>

Iniciamos los servicios y lo configuramos para que cuando arranque el servicio inicien automáticamente.

CODE
systemctl daemon-reload
systemctl enable filebeat.service
systemctl enable wazuh-api
systemctl enable wazuh-manager
systemctl start wazuh-manager
systemctl start wazuh-api
systemctl start filebeat.service

Comprobamos que a iniciado correctamente el cluster

CODE
/var/ossec/bin/cluster_control -l
NAME              TYPE    VERSION  ADDRESS      
redorbita-wazuhmrg01   master  3.9.0    192.168.4.155  
redorbita-wazuhdata02  worker  3.9.0    192.168.4.156  
redorbita-wazuhdata03  worker  3.9.0    192.168.4.157  

También podemos consultar la información del cluster mediante la API

BASH
curl -u foo:bar -X GET "http://localhost:55000/cluster/nodes?pretty"
{
   "error": 0,
   "data": {
      "totalItems": 3,
      "items": [
         {
            "name": "redorbita-wazuhmrg01",
            "type": "master",
            "version": "3.9.0",
            "ip": "192.168.4.155"
         },
         {
            "name": "redorbita-wazuhdata02",
            "type": "worker",
            "version": "3.9.0",
            "ip": "192.168.4.156"
         },
         {
            "name": "redorbita-wazuhdata03",
            "type": "worker",
            "version": "3.9.0",
            "ip": "192.168.4.157"
         }
      ]
   }
}

Una vez comprobado que funciona correctamente, vamos a configurar el servicio de SYSLOG remoto, para ello editamos /va/ossec/etc/ossec.conf y agregamos la siguientes lineas

CODE
  <remote>
    <connection>syslog</connection>
    <port>514</port>
    <protocol>udp</protocol>
    <allowed-ips>192.168.4.4</allowed-ips> 
  </remote>

También en la sección <global></global> debemos activar logall

CODE
<logall>yes</logall>

Reiniciamos el servicio

CODE
/var/ossec/bin/ossec-control restart

Instalación Cluster Elastic

A continuación, comenzaremos la instalación del cluster de Elasticsearch el cual contará con un nodo master y dos de datos.

Instalamos las dependencias de Elastic

BASH
apt install dirmngr default-jre curl apt-transport-https

Configuramos el repositorio de Elastic

BASH
curl -s https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -

echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | tee /etc/apt/sources.list.d/elastic-7.x.list

apt update

Instalamos Elastic

BASH
apt install elasticsearch=7.1.0

Configuramos el cluster de Elastic, el cual contará con tres nodos. Para ello debemos de modificar el siguiente archivo de configuración: /etc/elasticsearch/elasticsearch.yml

CODE
cluster.name: cluster-elastic
node.name: ${HOSTNAME}
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["192.168.4.160", "192.168.4.161", "192.168.4.162", "192.168.4.158"]
cluster.initial_master_nodes: ["192.168.4.160", "192.168.4.161", "192.168.4.162"]
gateway.recover_after_nodes: 3

Configuramos el servicio al inicio e iniciamos

CODE
systemctl daemon-reload
systemctl enable elasticsearch.service
systemctl start elasticsearch.service

Comprobamos que funciona correctamente

BASH
curl "http://localhost:9200/?pretty"
{
  "name" : "redorbita-elasticmrg01",
  "cluster_name" : "cluster-elastic",
  "cluster_uuid" : "_na_",
  "version" : {
    "number" : "6.7.2",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "56c6e48",
    "build_date" : "2019-04-29T09:05:50.290371Z",
    "build_snapshot" : false,
    "lucene_version" : "7.7.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

Comprobamos el esado del cluster

BASH
curl http://localhost:9200/_cat/health
1558094516 12:01:56 cluster-elastic green 3 3 0 0 0 0 0 0 - 100.0%

También lo podemos probar de la siguiente forma.

BASH
curl "http://localhost:9200/_cluster/state?pretty" 

Instalamos logstash

En esta versión de wazuh no necesitamos logstash, pero nosotros lo vamos a dejar preparado dado que podemos enviar alertas desde firewall o otros dispositivos de seguridad.

BASH
apt install logstash

Instalamos el plugin de wazuh en logstash, dado que nosotros estamos utilizando una arquitectura distribuida instalamos el siguiente plugin:

BASH
curl -so /etc/logstash/conf.d/01-wazuh.conf https://raw.githubusercontent.com/wazuh/wazuh/3.9/extensions/logstash/01-wazuh-remote.conf

En caso de ser en un unico servidor se instalaría el siguiente:

BASH
curl -so /etc/logstash/conf.d/01-wazuh.conf https://raw.githubusercontent.com/wazuh/wazuh/3.9/extensions/logstash/01-wazuh-local.conf

Configuramos en el output de logstash nuestros nodos de elasticserch en el archivo de configuración: /etc/logstash/conf.d/01-wazuh.conf

TERRAFORM
output {
    elasticsearch {
        hosts => ["192.168.4.160:9200", "192.168.4.161:9200", "192.168.4.162:9200"]
        index => "wazuh-alerts-3.x-%{+YYYY.MM.dd}"
        document_type => "wazuh"
    }
}

Reiniciamos y agregamos el servicio al inicio

CODE
systemctl daemon-reload
systemctl enable logstash.service
systemctl start logstash.service

Instalación Kibana

Bajo este servidor vamos a instalar el cliente de elastic y kibana.

Instalamos las dependencias de Elastic

BASH
apt install dirmngr default-jre curl apt-transport-https

Configuramos el repositorio de Elastic

BASH
curl -s https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -

echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | tee /etc/apt/sources.list.d/elastic-7.x.list

apt update

Instalamos Elastic

BASH
apt install elasticsearch=7.1.0 

Configuramos en modo cliente elastic, para ello modificamos las siguientes lineas en: /etc/elasticsearch/elasticsearch.yml

CODE
cluster.name: cluster-elastic
node.master: false
node.data: false
node.ingest: false
node.name: ${HOSTNAME}
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["192.168.4.160", "192.168.4.161", "192.168.4.162", "192.168.4.158"]
discovery.seed_hosts: ["192.168.4.160", "192.168.4.161", "192.168.4.162"]
gateway.recover_after_nodes: 3

Configuramos el servicio al inicio y lo iniciamos

CODE
systemctl daemon-reload
systemctl enable elasticsearch.service
systemctl start elasticsearch.service

Comprobamos de nuevo el estado del cluster desde el nodo cliente

BASH
curl -X GET "localhost:9200/_cluster/health"
{"cluster_name":"cluster-elastic","status":"green","timed_out":false,"number_of_nodes":4,"number_of_data_nodes":4,"active_primary_shards":8,"active_shards":12,"relocating_shards":0,"initializing_shards":0,"unassigned_shards":0,"delayed_unassigned_shards":0,"number_of_pending_tasks":0,"number_of_in_flight_fetch":0,"task_max_waiting_in_queue_millis":0,"active_shards_percent_as_number":100.0}

Instalamos Kibana

BASH
apt install kibana=7.1.0

Instalamos el plugin de wazuh en Kibana

BASH
sudo -u kibana /usr/share/kibana/bin/kibana-plugin install https://packages.wazuh.com/wazuhapp/wazuhapp-3.9.1_7.1.0.zip

Configuramos el direccionamiento por donde va a escuchar Kibana, la configuración de Kibana la podemos encontrar en: /etc/kibana/kibana.yml

CODE
server.host: "0.0.0.0"
elasticsearch.requestTimeout: 300000

Agregamos Kibana al inicio y lo iniciamos

CODE
systemctl enable kibana

systemctl start kibana

Una vez haya iniciado Kibana accedemos mediante nuestro navegador por el puerto 5601

Tras cargar la aplicación nos vamos a la sección de wazuh y configuramos la API para la conexión entre Kibana y wazuh

Implementación de  SIRP Open Source

Instalación Wazuh Agent

Instalamos los paquetes necesario

BASH
apt install curl apt-transport-https lsb-release

Agregamos la key del repositorio

BASH
curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | apt-key add -

Agregamos el repositorio y actualizamos en Debian

BASH
echo "deb https://packages.wazuh.com/3.x/apt/ stable main" | tee /etc/apt/sources.list.d/wazuh.list

apt update

Agregamos el repositorio en Redat

PYTHON
rpm --import http://packages.wazuh.com/key/GPG-KEY-WAZUH-5
cat > /etc/yum.repos.d/wazuh.repo <<\EOF
[wazuh_repo]
gpgcheck=1
gpgkey=http://packages.wazuh.com/key/GPG-KEY-WAZUH-5
enabled=1
name=Wazuh repository
baseurl=http://packages.wazuh.com/3.x/yum/5/$basearch/
protect=1
EOF

Instalamos el agente en Debian

BASH
 apt install wazuh-agent

Instalamos el agente en Redhat

BASH
yum install wazuh-agent

Nos vamos al servidor que tiene el rol maestro de wazuh manager, ejecutamos /var/ossec/bin/manage_agents y seleccionamos la opción A

Implementación de  SIRP Open Source

Agregamos el nombre del servidor y en caso que vayamos desde el balanceador ANY

Implementación de  SIRP Open Source

Nos devuelve al menu principal y seleccionamos la opción E para extraer la key

Implementación de  SIRP Open Source

Volvemos al cliente donde hemos instalado el Wazuh y editamos el fichero de configuración /var/ossec/etc/ossec.conf

En este fichero de configuración en el apartado de client debemos configurar la IP virtual de nuestro balanceador configurado anteriormente

CODE
  <client>
    <server>
      <address>VIP LOAD BALANCER</address>
      <port>1514</port>
      <protocol>tcp</protocol>
    </server>
    <config-profile>debian, debian9</config-profile>
    <notify_time>10</notify_time>
    <time-reconnect>60</time-reconnect>
    <auto_restart>yes</auto_restart>
    <crypto_method>aes</crypto_method>
  </client>

Una vez configurado, ejecutamos /var/ossec/bin/manage_agents y seleccionamos la opción I para importar la key generada anteriormente en el servidor de wazuh manager

Implementación de  SIRP Open Source

Reiniciamos el servicio

CODE
/etc/init.d/wazuh-agent restart

Nos vamos a la consola de Kibana > Wazuh > Agents y comprobamos que nuestro agente esta activo

Implementación de  SIRP Open Source

Instalación de Thehive y Elasticsearch 5.6

A continuación vamos a instalar el servidor de Thehive, para ello agregamos los repositorios con sus respectivas Keys

BASH
apt install dirmngr apt-transport-https

echo 'deb https://dl.bintray.com/thehive-project/debian-stable any main' | sudo tee -a /etc/apt/sources.list.d/thehive-project.list

echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list


wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch |  apt-key add -

curl https://raw.githubusercontent.com/TheHive-Project/TheHive/master/PGP-PUBLIC-KEY |  apt-key add -

Actualizamos e instalamos Java

BASH
apt update
apt install openjdk-8-jre

Instalamos y configuramos Elasticsearch

apt install elasticsearch

Modificamos las siguientes lineas en /etc/elasticsearch/elasticsearch.yml

CODE
cluster.name: hive
bootstrap.memory_lock: true
discovery.type: single-node

Iniciamos el servicio y lo agregamos al inicio

CODE
systemctl daemon-reload
systemctl enable elasticsearch
systemctl start elasticsearch

Comprobamos que responde

BASH
curl http://localhost:9200
{
  "name" : "gOK4ASj",
  "cluster_name" : "thehive",
  "cluster_uuid" : "elA6mKL8S9WcwM-6VtcO7w",
  "version" : {
    "number" : "5.6.16",
    "build_hash" : "3a740d1",
    "build_date" : "2019-03-13T15:33:36.565Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.1"
  },
  "tagline" : "You Know, for Search"
}

Instalamos TheHive

BASH
apt install thehive

Editamos /etc/thehive/application.conf y agregamos una contraseña

CODE
play.http.secret.key="TU CONTRASEÑA"

Iniciamos el servicio y lo agregamos al inicio

CODE
systemctl daemon-reload
systemctl enable thehive
systemctl start thehive

Accedemos mediante nuestro navegador a http://TheHiveIP:9000

Nos debería aparecer un mensaje similar a este:

Implementación de  SIRP Open Source

Presionamos a actualizar, en caso de que no nos haya aparecido esta pantalla y nos muestre un formulario de Login debemos revisar la configuración de thehive o elastic.

Una vez actualizada la base de datos, nos mostrará un formulario para la configuración del usuario y contraseña

Implementación de  SIRP Open Source

Instalar Cortex

BASH
apt install cortex=2.1.3-1

Instalamos todas los requisitos de cortex

BASH
apt install -y --no-install-recommends python-pip python2.7-dev python3-pip python3-dev ssdeep libfuzzy-dev libfuzzy2 libimage-exiftool-perl libmagic1 build-essential git libssl-dev


pip install -U pip setuptools &&  pip3 install -U pip setuptools

Clonamos el proyecto de Cortex-Analyzers en /etc/cortex

CODE
cd /etc/cortex
git clone https://github.com/TheHive-Project/Cortex-Analyzers

Otorgamos los permisos correctos

BASH
chown -R root:cortex Cortex-Analyzers

instalamos todas las dependencias de Analyzers

BASH
for I in $(find Cortex-Analyzers -name 'requirements.txt'); do sudo -H pip2 install -r $I; done && \
for I in $(find Cortex-Analyzers -name 'requirements.txt'); do sudo -H pip3 install -r $I || true; done

Una vez finalizado, accedemos a /etc/cortex/application.conf y debemos de modificar la contraseña y el path de Analyzers

CODE
play.http.secret.key="TU CONTRASEÑA"

Nos bajaamos hasta abajo, y en apartado de ##ANALYZERS modificamos el PATH

CODE
analyzer {
  # Absolute path where you have pulled the Cortex-Analyzers repository.
  path = ["/etc/cortex/Cortex-Analyzers/analyzers"]

Reiniciamos el servicio

CODE
systemctl enable cortex
systemctl start cortex

Mediante nuestro navegador accedemos http://CortexIP:9001

Nos debería aparecer un mensaje similar a este:

Implementación de  SIRP Open Source

Presionamos a actualizar, en caso de que no nos haya aparecido esta pantalla y nos muestre un formulario de Login debemos revisar la configuración de cortex

Una vez actualizada la base de datos, nos mostrará un formulario para la configuración del usuario y contraseña

Implementación de  SIRP Open Source

Tras iniciar sesión, creamos una organización, para ello presionamos + Add organization

Implementación de  SIRP Open Source

Accedemos a la organización creada y creamos un usuario en ella en + Add user

Implementación de  SIRP Open Source

Debemos crearla con el rol de orgadmin

Implementación de  SIRP Open Source

Una vez creado, debemos configurar una contraseña en New Password

Implementación de  SIRP Open Source

Ahora debemos de cerrar sesión y abrir con el nuevo usuario creado. si todo a salido bien, al irnos a Organization > Analyzers veremos los dispositivos que podemos activar

Implementación de  SIRP Open Source

Habitamos de momento los siguientes:

CODE
Abuse_Finder_2_0
CyberCrime-Tracker_1_0
Cyberprotect_ThreatScore_1_0
DShield_lookup_1_0
MISP_2_0
URLhaus_2_0
Urlscan_io_Search_0_1_0

El único que necesita configuración de la API es MISP, el cual veremos a después como integrarlo.

Creamos un nuevo usuario para integrar cortex con thehive, con rol read & analyze. para ello nos vamos de nuevo a Organization > + Add User

Implementación de  SIRP Open Source

En esta ocasión en ves de crear una contraseña debemos de presionar e: Create API key y copiamos la KEY

Implementación de  SIRP Open Source

Vamos a realizar una pequeña prueba, para ello presionamos en + New Analysis en la parte superior

Implementación de  SIRP Open Source

Configuramos el análisis de la siguiente forma y presionamos a start

Implementación de  SIRP Open Source

Si ahora vamos vamos al historial de trabajos podemos ver el análisis ejecutado

Implementación de  SIRP Open Source

Ahora que hemos comprobado el correcto funcionamiento de Cortex vamos a integrarlo con TheHive, para ello editamos el fichero /etc/thehive/application.conf

En la sección de #Cortex descomentamos:

CODE
play.modules.enabled += connectors.cortex.CortexConnector

Agregamos la KEY generado anteriormente en la configuración de la API

CODE
play.modules.enabled += connectors.cortex.CortexConnector

cortex {
  "CORTEX-SERVER-ID" {
    url = "http://127.0.0.1:9001"
    key = "AAAPI3cRjHQuNSsA"
  #  # HTTP client configuration (SSL and proxy)
  #  ws {}
  }
}

Reiniciamos el servidor.

Tras el reinicio del servidor accedemos a TheHive y abrimos un caso para comprobar la integración con Cortex, para ello nos vamos a + New case en la parte superior izquierda

Implementación de  SIRP Open Source

Una vez creada nos vamos Observables > + Add Observable(s)

Implementación de  SIRP Open Source
Implementación de  SIRP Open Source

Si hacemos doble click en la dirección ipde observables nos muestra toda la información

Implementación de  SIRP Open Source

Presionamos en la pestaña Run all

Implementación de  SIRP Open Source

Si regresamos a Cortex, en el apartado de Jobs history podemos ver todos los análisis realizados

Implementación de  SIRP Open Source

Si volvemos de nuevo a TheHive en el apartado de Observables de nuestro caso abierto de prueba podemos ver que nos da información sobre todos los procesos analizados

Implementación de  SIRP Open Source

Importar plantillas de informes

Nos descargamos los templates: https://dl.bintray.com/thehive-project/binary/report-templates.zip

iniciamos sesión en TheHive con una cuenta de administrador, nos vamos a Admin > Report templates

Implementación de  SIRP Open Source

Presionamos en Import templates

Implementación de  SIRP Open Source

Importamos los templates descargados anteriormente

Implementación de  SIRP Open Source

Ahora si nos vamos nuevamente a Observables y presionamos sobre el ultimo link podemos ver el informe

Implementación de  SIRP Open Source

Instalación MISP

Implementaremos MISP bajo docker dado que es mucho mas sencillo de instalare, para instalar docker podemos seguir la siguiente guía: https://docs.docker.com/install/linux/docker-ce/debian/

Clonamos el repositorio con la imagen de MISP

CODE
git clone https://github.com/harvard-itsecurity/docker-misp.git
cd docker-misp/

Editamos el fichero build.sh y cambiamos la contraseña de root y de la BBDD

BASH
#!/bin/bash
docker rmi harvarditsecurity/misp
docker build \
    --rm=true --force-rm=true \
    --build-arg MYSQL_MISP_PASSWORD=ChangeThisDefaultPassworda9564ebc3289b7a14551baf8ad5ec60a \
    --build-arg POSTFIX_RELAY_HOST=localhost \
    --build-arg MISP_FQDN=misp.red-orbita.com \
    --build-arg MISP_EMAIL=admin@localhost \
    --build-arg MISP_GPG_PASSWORD=ChangeThisDefaultPasswordXuJBao5Q2bps89LWFqWkKgDZwAFpNHvc \
    -t harvarditsecurity/misp container

Tambien debemos editar el fichero Dockerfile, que se encuentra en la ruta /docker-misp/container

CODE
ARG MYSQL_MISP_PASSWORD=ChangeThisDefaultPassword
 ARG POSTFIX_RELAY_HOST=127.0.0.1
 ARG MISP_FQDN=misp.red-orbita.com
 ARG MISP_EMAIL=admin@localhost
 ARG MISP_GPG_PASSWORD=ChangeThisDefaultPassworda

Una vez configurado todo, ejecutamos el script build.sh (esto puede tardar varios minutos)

CODE
./build.sh

Comprobamos que se hayan desplegado las imágenes

Implementación de  SIRP Open Source

Iniciamos la base de datos y arrancamos el contenedor

CODE
docker run -it  --restart=always \
     -v /docker/misp-db:/var/lib/mysql \
     harvarditsecurity/misp /init-db


docker run -it --restart=always -d \
    -p 443:443 \
    -p 80:80 \
    -p 3306:3306 \
    -v /docker/misp-db:/var/lib/mysql \
    harvarditsecurity/misp

Comprobamos que haya iniciado correctamente

Implementación de  SIRP Open Source

Accedemos utilizando el FQDN configurado anteriormente, si todo a salido bien nos debería mostrar un formulario de login

Implementación de  SIRP Open Source

Accedemos utilizando las siguientes credenciales:

CODE
Login: admin@admin.test
Password: admin

Una vez iniciado sesión nos indica que cambiemos la contraseña

Implementación de  SIRP Open Source

Tras el cambio de contraseña nos vamos Administration/Server Settings & Maintenance/ MISP/live. Deberemos 

Implementación de  SIRP Open Source

Nos vamos a Sync Actions > List Feeds

Implementación de  SIRP Open Source

Seleccionamos la suscripción que queremos y presionamos en Enabled selected

Implementación de  SIRP Open Source

Una vez activada nos vamos a la derecha y presionamos en el icono con un circulo y una flecha hacia abajo (Fetch all events)

Implementación de  SIRP Open Source

Si nos vamos a Administration > Jobs vemos una tarea ejecutandose

Implementación de  SIRP Open Source
Implementación de  SIRP Open Source

Vamos a probar la API con Postman, para ello nos descargamos la aplicación y la ejecutamos.

Una ve instalada nos vamos a Setting

Implementación de  SIRP Open Source

Desactivamos la verificación de certificado SSL

Implementación de  SIRP Open Source

Nos vamos a MISP y copiamos la Authkey del usuario en Administration > List users

En Postman nos vamos a la pestaña Headers y escribimos los siguientes encabezados allí

CODE
Accept application/json
Contect-Type application/json
Authorization <API_Key COPIADA ANTERIORMENTE
Implementación de  SIRP Open Source

Nos vamos a la pestalla de Body y tenemos que cambiar Raw por JSON

Implementación de  SIRP Open Source

Si todo a funcionado correctamente nos debería devolver algo similar a esto:

Implementación de  SIRP Open Source

Una vez comprobado que funciona vamos vamos nuevamente a Sync Action > List Feed y activamos algunas Feed mas, en mi caso he activado
CIRCL OSINT Feed MISP

Implementación de  SIRP Open Source

Por ultimo nos vamos a Administration > Scheduled Task y presionamos a Update All

Implementación de  SIRP Open Source

Integración MISP con Cortex

En la web de MISP nos vamos a Administration > Add User

Implementación de  SIRP Open Source

Creamos el usuario teniendo en cuenta:

CODE
Email: cortex@admin.test
Organización: ORGNAME
Role: User
Deseleccionamos todos los box de la parte inferior.  
Implementación de  SIRP Open Source

Nos vamos a Cortex > Organization > Analyzers, buscamos MISP_2_0 y acivamos

Implementación de  SIRP Open Source

Agregamos una breve descripción, la URL de nuestro servidor, el AuthKey del usuario creado anteriormente el MISP y desactivamos el chequeo del del certificado.

Implementación de  SIRP Open Source

Nos amos ahora nuevamente a MISP > Sync Actions > List Feeds > y presionamos sobre la lupa de uno de los Feed que hemos activado anteriormente

Implementación de  SIRP Open Source

Copiamos una IP de la lista

Implementación de  SIRP Open Source

De nuevo nos vamos a Cortex, presionamos en + New Analysis > seleccionamos MISP_2_0 y copiamos la IP seleccionada de la lista

Implementación de  SIRP Open Source

Nos vamos a Job History y si todo a salido bien deberíamos ver el análisis de la IP

Implementación de  SIRP Open Source

Ahora abriremos un Observable en TheHive para comprobar la integración desde aquí también, para ello + New Case

Implementación de  SIRP Open Source

Nos vamos a la pestaña Observables > Add Obsevables y agregamos la misma IP que en el caso anterior

Implementación de  SIRP Open Source

Accedemos al caso y ejecutamos sobre MISP_2_0

Implementación de  SIRP Open Source

En la consola de Jobs de Cortex podemos encontrar el análisis

Implementación de  SIRP Open Source

Instalación de ElastAlert

Para terminar toda la integración de la infraestructura con la instalación de ElastAlert, el cual nos proporcionará la integración de Elasticsearch y Thehive

ElasticAlert se puede instalar o en un servidor independiente o en uno de los nodos del cluster de Elastic, en mi casó lo voy a instalar dentro de uno de los servidores del cluster de Elastic.

BASH
apt install python-pip libffi-dev libxml2-dev libxslt1-dev libssl-dev
python -m easy_install --upgrade pyOpenSSL
pip install elastalert

Dado que cuando implemente está instalación había problemas con la versión 7 de Elasticsearch tuve que instalar elastalert==0.2.0b2, la cual es la versión beta, si ya que consiguieron arreglar todos los problemas en la versión estable instale mediante el comando anterior elastalert

CODE
pip install elastalert==0.2.0b2

Creamos el directorio para almacenar las reglas

BASH
mkdir -p ~/elastalert/rules

Descargamos la plantilla en https://github.com/Yelp/elastalert/blob/master/config.yaml.example en ~/elastalert/config.yaml

CODE
cd ~/elastalert/rules

Debería quedar algo similar a esto: (En mi caso pongo localhost dado que lo estoy instalando dentro de un servidor del cluster de elasticsearch, en caso de instalarlo por separado deberás apuntar a la ip de tu nodo maestro.

CODE
rules_folder: /home/username/elastalert/rules
run_every:
  minutes: 1
buffer_time:
  minutes: 15
es_host: localhost
es_port: 9200
use_ssl: False
writeback_index: elastalert_status
alert_time_limit:
  days: 2

Ejecutamos el comando elastalert-create-index el cual nos tiene que devolver algo similar a esto:

CODE
Elastic Version: 7.1.0
Reading Elastic 6 index mappings:
Reading index mapping 'es_mappings/6/silence.json'
Reading index mapping 'es_mappings/6/elastalert_status.json'
Reading index mapping 'es_mappings/6/elastalert.json'
Reading index mapping 'es_mappings/6/past_elastalert.json'
Reading index mapping 'es_mappings/6/elastalert_error.json'
New index elastalert_status created
Done!

Nos vamos a theHive: Admin > Users > Add User

Implementación de  SIRP Open Source

Creamos un usuario sin roles y presionamos la opción de Allow Alerts creation

Implementación de  SIRP Open Source

Damos Click a Create API Key y la copiamos

Implementación de  SIRP Open Source

Ahora vamos a crear una regla para probar el funcionamiento, para ello vamos a utilizar rule.id: «5710» que es los intentos fallidos de inicio de sesión mediante SSH

CODE
vi ~/elastalert/rules/failed_ssh_login.yaml

es_host: localhost
es_port: 9200
name: Failed password for invalid user
type: frequency
index: wazuh-alerts-3.x-*
num_events: 2
timeframe:
    hours: 1
filter:
- term:
    rule.id: "5710"
alert: hivealerter
hive_connection:
  hive_host: http://ip_thehive
  hive_port: 9000
  hive_apikey: <Paste API key for elastalert user here>

hive_alert_config:
  title: '{rule[name]}'
  type: 'external'
  source: 'elastalert'
  description: '{match[full_log]}'
  severity: 2
  tags: ['{rule[name]}', '{match[agent][name]}', '{match[predecoder][program_name]}']
  tlp: 3
  status: 'New'
  follow: True

hive_observable_data_mapping:
    - ip: "{match[src_ip]}"

Ahora nos vamos a los servidores Logstash para modificar la configuración de 01-wazuh.conf

Debemos cambiar en el filtro de [data][srcip] «@src_ip» por «src_ip», quedando de la siguiente forma

CODE
filter {
    if [data][srcip] {
        mutate {
            add_field => [ "src_ip", "%{[data][srcip]}" ]
        }
    }

Del mismo modo, en el filtro de geoip debemos cambiar «@src_ip» por «src_ip» quedando de la siguiente manera:

CODE
filter {
    geoip {
        source => "src_ip"
        target => "GeoLocation"
        fields => ["city_name", "country_name", "region_name", "location"]
    }

En caso de no funcionar con logstrash, nos vamos a la configuración de filebeat y cambiamos @src_ip por src_ip

CODE
  - rename:
      fields:
        - from: "data.srcip"
          to: "src_ip"

También debemos descomentar la linea

CODE
pipeline: geoip

Una vez cambiado debemos de ir a Kibana: Management > Kibana > Index Patterns, seleccionamos wazuh-alerts y presionamos a actualizar

Implementación de  SIRP Open Source

Ahora si todo a salido bien, debería salir el registro src_ip en wazuh-alerts

Implementación de  SIRP Open Source

Comprobamos la configuración de la alerta creada

CODE
elastalert-test-rule ~/elastalert/rules/failed_ssh_login.yaml

Activamos la alerta

CODE
elastalert --verbose --config ~/elastalert/config.yaml

Para probar intentamos acceder con un usuario que no exista tres veces por ssh, Si nos dirigimos a Kibana veremos una alerta

Implementación de  SIRP Open Source

Ahora nos debemos de ir a TheHive y comprobar que haya generado una alerta

Implementación de  SIRP Open Source

Una vez probado que funciona correctamente, vamos a generar un servicio para elastalert

CODE
vi /etc/systemd/system/elastalert.service
[Unit]
Description=elastalert
After=multi-user.target

[Service]
Type=simple
WorkingDirectory=/home/username/elastalert/
ExecStart=/usr/local/bin/elastalert --debug --config /home/username/elastalert/config.yaml

[Install]
WantedBy=multi-user.target

Iniciamos el servicio

CODE
systemctl daemon-reload
systemctl enable elastalert.service
systemctl start elastalert.service
systemctl status elastalert.service

:wq!

Comentarios