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 en la implementación de sistemas de detección de intrusiones de red (IDS) y en la realización de actividades de supervisión de seguridad de la red. 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 Azure Network Watcher, puede analizar la red para detectar intrusiones perjudiciales o vulnerabilidades.

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 para realizar el análisis del tráfico de red con una mayor velocidad y eficiencia. Para obtener más información sobre Suricata y sus capacidades, visite el sitio web de Suricata.

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 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 especificado de reglas de amenazas. Estas alertas se almacenan en un archivo de registro en la máquina local.

Con Elastic Stack, puede indexar los registros que Suricata genera y, luego, usarlos para crear un panel de Kibana. Un panel proporciona una representación visual de los registros y una manera de obtener rápidamente información sobre posibles vulnerabilidades de red.

Diagram that shows a simple web application scenario.

Puede configurar ambas herramientas de código abierto en una máquina virtual (VM) de Azure, por lo que puede realizar este análisis dentro de su propio entorno de red de Azure.

Instalación de Suricata

  1. En el terminal de la línea de comandos de la VM, ejecute los siguientes comandos:

    sudo add-apt-repository ppa:oisf/suricata-stable
    sudo apt-get update
    sudo apt-get install suricata
    
  2. Para comprobar la instalación, ejecute el comando suricata -h para ver la lista completa de comandos.

Para ver todos los demás métodos de instalación, consulte la guía de inicio rápido de instalación de Suricata.

Descarga del conjunto de reglas Emerging Threats

En este momento, no tiene ninguna regla para que Suricata ejecute. Puede crear sus propias reglas si quiere detectar amenazas específicas en la red. También puede usar conjuntos de reglas desarrollados por varios proveedores, como Emerging Threats o las reglas Talos rules de Snort. En este artículo, usará el conjunto de reglas Emerging Threats disponible gratuitamente.

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 con 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

Los registros que produce Suricata contienen información valiosa sobre lo que sucede en la red, pero estos archivos de registro no son los más fáciles de leer y comprender. Al conectar Suricata con Elastic Stack, puede crear un panel de Kibana para buscar, grafo, representar, analizar y obtener información a partir de los registros.

Instalación de Elasticsearch

  1. La versión de Elastic Stack 5.0 y posteriores requieren Java 8. Ejecute el comando java -version para comprobar la versión. Si no tiene instalado Java, consulte la documentación sobre los kits de desarrollo de Java compatibles con Azure.

  2. 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 la página web de Elastic para instalar Elasticsearch.

  3. Compruebe que Elasticsearch se esté ejecutando mediante el comando:

    curl http://127.0.0.1:9200
    

    Debe obtener una respuesta similar a este ejemplo:

    {
    "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 obtener más instrucciones sobre cómo instalar Elasticsearch, consulte la página web de Elastic sobre la instalación.

Instalación de Logstash

  1. Instale Logstash mediante la ejecución de 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
    
  2. Configure Logstash para leer de la salida del archivo eve.json. Cree un archivo de logstash.conf mediante este comando:

    sudo touch /etc/logstash/conf.d/logstash.conf
    
  3. Agregue el siguiente contenido 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"
    }
    }
    
  4. Conceda los permisos correctos al archivo eve.json para que Logstash pueda ingerir el archivo:

    sudo chmod 775 /var/log/suricata/eve.json
    
  5. Ejecute este comando para iniciar Logstash:

    sudo /etc/init.d/logstash start
    

Para obtener más instrucciones sobre cómo instalar Logstash, consulte la documentación oficial de Elastic.

Instalación de Kibana

  1. 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
    
  2. Ejecute Kibana mediante estos comandos:

    cd kibana-5.2.0-linux-x86_64/
    ./bin/kibana
    
  3. 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-*.

  4. Si quiere ver el panel de Kibana de forma remota, cree una regla de grupo de seguridad de red de entrada (NSG) que permita el acceso al puerto 5601.

Creación de un panel de Kibana

En este artículo, se proporciona un panel de ejemplo para ver tendencias y detalles en las alertas. Para usarla:

  1. Descargue el archivo de panel, el archivo de visualización y el archivo de búsqueda guardada.

  2. En la pestaña Administración de Kibana, vaya a Objetos guardados e importe los tres archivos. Luego, en la pestaña Panel, puede abrir y cargar el panel de ejemplo.

También puede crear sus propias visualizaciones y paneles adaptados 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.

Screenshot that shows a Kibana dashboard.

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).

    Screenshot shows a map for geographic IP alerts.

  • 10 alertas principales: resumen de las 10 alertas activadas más frecuentes y sus descripciones. Al seleccionar una alerta individual, se filtra el panel a para mostrar la información a la que pertenece a esa alerta específica.

    Screenshot that shows the most frequently triggered alerts.

  • Número de alertas: recuento total de alertas que desencadenó el conjunto de reglas.

    Screenshot shows the number of alerts.

  • 20 ScrIP principales - Alertas, 20 DestIP principales - Alertas, 20 SrcPort principales - Alertas, 20 DestPort principales - Alertas: gráficos circulares que muestran los orígenes y destinos de las 20 direcciones IP y puertos principales en los que se desencadenaron las alertas. Puede filtrar por direcciones IP o puertos específicos para ver cuántas alertas, y de qué tipos, se desencadenan.

    Screenshot that shows pie charts of the top 20 IPs and ports that alerts were triggered on.

  • 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.

    Screenshot shows a summary table with details about individual alerts.

Para obtener más información sobre cómo crear visualizaciones y paneles personalizados, consulte la documentación oficial de Kibana.

Conclusión

Al combinar las capturas de paquetes de Network Watcher con herramientas IDS de código abierto como Suricata, puede realizar la detección de intrusiones para una amplia variedad de amenazas.

Los paneles le ayudan a detectar rápidamente tendencias y anomalías dentro de la red. También puede usar paneles para examinar los datos para detectar 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:

  • Reaccionar y proteger la red frente a intentos de intrusiones perjudiciales
  • Crear reglas para evitar intrusiones futuras en la red

Paso siguiente

Aprenda a desencadenar capturas de paquetes basadas en alertas: