Realización de detección de intrusiones en la red con Azure Network Watcher y herramientas de código abierto
Las capturas de paquetes son un componente clave de la implementación de sistemas de detección de intrusiones de red (IDS) y de la ejecución de supervisión de seguridad de la red (NSM). Existen varias herramientas IDS de código abierto que procesan las capturas de paquetes y buscan firmas de posibles intrusiones y actividad malintencionada. Con las capturas de paquetes que proporciona Network Watcher, puede analizar la red en busca de intrusiones o vulnerabilidades de carácter dañino.
Una de esas herramientas de código abierto es Suricata, un motor de IDS que usa conjuntos de reglas para supervisar el tráfico de red y desencadenar alertas cuando se produce algún evento sospechoso. Suricata ofrece un motor multiproceso, lo que significa que puede realizar el análisis del tráfico de red con una mayor velocidad y eficiencia. Para más información sobre Suricata y sus funcionalidades, visite este sitio web en https://suricata.io/.
Escenario
En este artículo se explica cómo configurar el entorno para realizar la detección de intrusiones de red con Network Watcher, Suricata y Elastic Stack. Network Watcher proporciona las capturas de paquetes usadas para realizar la detección de intrusiones de red. Suricata procesa las capturas de paquetes y desencadena alertas en función de los paquetes que coinciden con su conjunto de reglas especificada de amenazas. Estas alertas se almacenan en un archivo de registro en la máquina local. Con Elastic Stack, los registros que genera Suricata se pueden indexar y usar para crear un panel de Kibana. Este panel proporciona una representación visual de los registros y un medio de obtener rápidamente información detallada sobre posibles vulnerabilidades de la red.
Ambas herramientas de código abierto se pueden configurar en una máquina virtual de Azure, lo que le permite realizar este análisis dentro de su propio entorno de red de Azure.
Pasos
Instalación de Suricata
Para todos los demás métodos de instalación, visite https://suricata.readthedocs.io/en/suricata-5.0.2/quickstart.html#installation.
En el terminal de la línea de comandos de la máquina virtual, ejecute los siguientes comandos:
sudo add-apt-repository ppa:oisf/suricata-stable sudo apt-get update sudo apt-get install suricata
Para comprobar la instalación, ejecute el comando
suricata -h
para ver la lista completa de comandos.
Descarga del conjunto de reglas Emerging Threats
En esta fase, no tenemos ninguna regla para ejecutar con Suricata. Puede crear sus propias reglas si hay amenazas específicas para su red que quiera detectar, o también puede usar conjuntos de reglas desarrolladas por varios proveedores, como Emerging Threats o las reglas VRT de Snort. Aquí usaremos el conjunto de reglas de acceso gratuito Emerging Threats:
Descargue el conjunto de reglas y cópielo en el directorio:
wget https://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz
tar zxf emerging.rules.tar.gz
sudo cp -r rules /etc/suricata/
Procesamiento de las capturas de paquetes con Suricata
Para procesar las capturas de paquetes mediante Suricata, ejecute el siguiente comando:
sudo suricata -c /etc/suricata/suricata.yaml -r <location_of_pcapfile>
Para comprobar las alertas resultantes, lea el archivo fast.log:
tail -f /var/log/suricata/fast.log
Configuración de Elastic Stack
Si bien los registros que produce Suricata contienen información valiosa sobre lo que sucede en la red, estos archivos de registro no son los más fáciles de leer y comprender. Mediante la conexión a Suricata con Elastic Stack, podemos crear un panel de Kibana que nos permita buscar, representar, analizar y deducir información de nuestros registros.
Instalación de Elasticsearch
La versión 5.0 y superiores de Elastic Stack requieren Java 8. Ejecute el comando
java -version
para comprobar la versión. Si no tiene instalado Java, consulte la documentación en los JDK compatibles con Azure.Descargue el paquete binario correcto para su sistema:
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.0.deb sudo dpkg -i elasticsearch-5.2.0.deb sudo /etc/init.d/elasticsearch start
Puede encontrar otros métodos de instalación en Elasticsearch Installation (Instalación de Elasticsearch).
Compruebe que Elasticsearch se esté ejecutando con el comando:
curl http://127.0.0.1:9200
La respuesta debe ser similar a la siguiente:
{ "name" : "Angela Del Toro", "cluster_name" : "elasticsearch", "version" : { "number" : "5.2.0", "build_hash" : "8ff36d139e16f8720f2947ef62c8167a888992fe", "build_timestamp" : "2016-01-27T13:32:39Z", "build_snapshot" : false, "lucene_version" : "6.1.0" }, "tagline" : "You Know, for Search" }
Para más instrucciones sobre cómo instalar Elasticsearch, consulte la página de instalación.
Instalación de Logstash
Para instalar Logstash, ejecute los siguientes comandos:
curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-5.2.0.deb sudo dpkg -i logstash-5.2.0.deb
A continuación, se debe configurar Logstash para que lea la salida del archivo eve.json. Cree un archivo logstash.conf mediante:
sudo touch /etc/logstash/conf.d/logstash.conf
Agregue el contenido siguiente al archivo (asegúrese de que la ruta de acceso al archivo eve.json sea correcta):
input { file { path => ["/var/log/suricata/eve.json"] codec => "json" type => "SuricataIDPS" } } filter { if [type] == "SuricataIDPS" { date { match => [ "timestamp", "ISO8601" ] } ruby { code => " if event.get('[event_type]') == 'fileinfo' event.set('[fileinfo][type]', event.get('[fileinfo][magic]').to_s.split(',')[0]) end " } ruby{ code => " if event.get('[event_type]') == 'alert' sp = event.get('[alert][signature]').to_s.split(' group ') if (sp.length == 2) and /\A\d+\z/.match(sp[1]) event.set('[alert][signature]', sp[0]) end end " } } if [src_ip] { geoip { source => "src_ip" target => "geoip" #database => "/opt/logstash/vendor/geoip/GeoLiteCity.dat" add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ] add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ] } mutate { convert => [ "[geoip][coordinates]", "float" ] } if ![geoip.ip] { if [dest_ip] { geoip { source => "dest_ip" target => "geoip" #database => "/opt/logstash/vendor/geoip/GeoLiteCity.dat" add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ] add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ] } mutate { convert => [ "[geoip][coordinates]", "float" ] } } } } } output { elasticsearch { hosts => "localhost" } }
Asegúrese de conceder los permisos correctos para el archivo eve.json de modo que Logstash pueda ingerir el archivo.
sudo chmod 775 /var/log/suricata/eve.json
Para iniciar Logstash, ejecute el comando:
sudo /etc/init.d/logstash start
Para más instrucciones sobre cómo instalar Logstash, consulte la documentación oficial.
Instalación de Kibana
Ejecute los siguientes comandos para instalar Kibana:
curl -L -O https://artifacts.elastic.co/downloads/kibana/kibana-5.2.0-linux-x86_64.tar.gz tar xzvf kibana-5.2.0-linux-x86_64.tar.gz
Para ejecutar Kibana, use los comandos:
cd kibana-5.2.0-linux-x86_64/ ./bin/kibana
Para ver la interfaz web de Kibana, vaya a
http://localhost:5601
.En este escenario, el patrón de índice usado para los registros de Suricata es "logstash-*".
Si quiere ver el panel de Kibana de forma remota, cree una regla de grupo de seguridad de red de entrada que permita acceder al puerto 5601.
Creación de un panel de Kibana
En este artículo, se proporciona un panel de ejemplo para que vea tendencias y detalles de sus alertas.
Descargue el archivo de panel de aquí, el archivo de visualización de aquí y el archivo de búsqueda guardada de aquí.
En la pestaña Management (Administración) de Kibana, vaya a Saved Objects (Objetos guardados) e importe los tres archivos. A continuación, en la pestaña Dashboard (Panel), puede abrir y cargar el panel de ejemplo.
También puede crear visualizaciones y paneles propios que se adapten a las métricas que le interesen. Puede leer más sobre la creación de visualizaciones de Kibana en la documentación oficial de Kibana.
Visualización de registros de alertas de IDS
El panel de ejemplo proporciona varias visualizaciones de los registros de alerta de Suricata:
Alertas por GeoIP: mapa en el que se muestra la distribución de las alertas por país o región de origen según la ubicación geográfica (determinada por la IP)
10 alertas principales: resumen de las 10 alertas activadas más frecuentes y su descripción. Al hacer clic en una alerta individual se filtra el panel por la información relacionada con esa alerta específica.
Número de alertas: el número total de alertas activadas por el conjunto de reglas.
20 puertos/direcciones IP de origen y destino principales: gráficos circulares que muestran los 20 puertos y direcciones IP principales en los que se activaron las alertas. Puede filtrar por direcciones IP o puertos específicos para ver cuántas alertas y de qué tipo se han activado.
Resumen de alertas: tabla que resume detalles específicos de cada alerta individual. Puede personalizar esta tabla para mostrar otros parámetros de interés para cada alerta.
Para ver más documentación sobre la creación de visualizaciones y paneles personalizados, consulte la documentación oficial de Kibana.
Conclusión
Al combinar las capturas de paquetes proporcionadas por Network Watcher con herramientas IDS de código abierto como Suricata, puede realizar la detección de intrusiones para una amplia variedad de amenazas. Estos paneles permiten detectar rápidamente tendencias y anomalías de la red, así como escarbar en los datos para descubrir las causas principales de las alertas, como agentes de usuario malintencionados o puertos vulnerables. Con estos datos extraídos, puede tomar decisiones fundamentadas sobre cómo proteger su red y reaccionar ante intentos de intrusión perjudiciales en ella, y crear reglas para impedir que sucedan tales situaciones.
Pasos siguientes
Aprenda a desencadenar capturas de paquetes en función de alertas en el artículo Uso de la captura de paquetes para realizar la supervisión proactiva de redes con Azure Functions.
Aprenda a visualizar los registros de flujo de grupo de seguridad de red con Power BI en el artículo Visualize NSG flows logs with Power BI (Visualización de registros de flujo de grupo de seguridad de red con Power BI).