Execute a deteção de intrusão de rede usando o Azure Network Watcher e ferramentas de código aberto

As capturas de pacotes são um componente fundamental para implementar sistemas de deteção de intrusão de rede (IDSs) e executar o monitoramento de segurança de rede. Várias ferramentas IDS de código aberto processam capturas de pacotes e procuram assinaturas de possíveis invasões de rede e atividades maliciosas. Usando as capturas de pacotes que o Azure Network Watcher fornece, você pode analisar sua rede em busca de invasões ou vulnerabilidades prejudiciais.

Uma dessas ferramentas de código aberto é o Suricata, um mecanismo IDS que usa conjuntos de regras para monitorar o tráfego da rede e dispara alertas sempre que eventos suspeitos ocorrem. Suricata oferece um motor multithreaded para realizar a análise de tráfego de rede com maior velocidade e eficiência. Para obter mais informações sobre Suricata e suas capacidades, visite o site da Suricata.

Cenário

Este artigo explica como configurar seu ambiente para executar a deteção de intrusão de rede usando o Network Watcher, o Surigata e o Elastic Stack.

O Inspetor de Rede fornece as capturas de pacotes para executar a deteção de intrusão na rede. Suricata processa o pacote, captura e dispara alertas com base em pacotes que correspondem ao seu conjunto de regras de ameaças. Suricata armazena esses alertas em um arquivo de log em sua máquina local.

Usando o Elastic Stack, você pode indexar os logs que Suricata gera e, em seguida, usá-los para criar um painel do Kibana. Um painel fornece uma representação visual dos logs e uma maneira de obter rapidamente informações sobre possíveis vulnerabilidades da rede.

Diagrama que mostra um cenário simples de aplicação Web.

Você pode configurar ambas as ferramentas de código aberto em uma máquina virtual (VM) do Azure, para que possa executar essa análise em seu próprio ambiente de rede do Azure.

Instalar Suricata

  1. No terminal de linha de comando da sua VM, execute os seguintes comandos:

    sudo add-apt-repository ppa:oisf/suricata-stable
    sudo apt-get update
    sudo apt-get install suricata
    
  2. Para verificar a instalação, execute o comando suricata -h para ver a lista completa de comandos.

Para outros métodos de instalação, consulte o guia de início rápido de instalação do Suricata.

Baixe o conjunto de regras de Ameaças Emergentes

Nesta fase, você não tem nenhuma regra para Suricata correr. Você pode criar suas próprias regras se quiser detetar ameaças específicas à sua rede. Você também pode usar conjuntos de regras desenvolvidos de vários provedores, como Ameaças Emergentes ou regras Talos do Snort. Neste artigo, você usa o conjunto de regras de Ameaças Emergentes disponível gratuitamente.

Faça o download do conjunto de regras e copie-o para o diretório:

wget https://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz
tar zxf emerging.rules.tar.gz
sudo cp -r rules /etc/suricata/

Processar capturas de pacotes usando Suricata

Para processar capturas de pacotes usando o Suricata, execute o seguinte comando:

sudo suricata -c /etc/suricata/suricata.yaml -r <location_of_pcapfile>

Para verificar os alertas resultantes, leia o arquivo fast.log :

tail -f /var/log/suricata/fast.log

Configurar o Elastic Stack

Os logs que Suricata produz contêm informações valiosas sobre o que está acontecendo em sua rede, mas esses arquivos de log não são os mais fáceis de ler e entender. Ao conectar o Suricata com o Elastic Stack, você pode criar um painel do Kibana para pesquisar, criar gráficos, analisar e obter insights de seus logs.

Instalar o Elasticsearch

  1. O Elastic Stack versão 5.0 e posterior requer Java 8. Execute o comando java -version para verificar sua versão. Se você não tiver o Java instalado, consulte a documentação sobre os kits de desenvolvimento Java suportados pelo Azure.

  2. Faça o download do pacote binário correto para o seu 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
    

    Você pode encontrar outros métodos de instalação na página da Web do Elastic para instalar o Elasticsearch.

  3. Verifique se o Elasticsearch está em execução usando este comando:

    curl http://127.0.0.1:9200
    

    Você deve obter uma resposta semelhante a este exemplo:

    {
    "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 obter mais instruções sobre como instalar o Elasticsearch, consulte a página da Web do Elastic sobre a instalação.

Instalar o Logstash

  1. Instale o Logstash executando os seguintes 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 o Logstash para ler a partir da saída do arquivo eve.json . Crie um arquivo logstash.conf usando este comando:

    sudo touch /etc/logstash/conf.d/logstash.conf
    
  3. Adicione o seguinte conteúdo ao arquivo. Verifique se o caminho para o arquivo eve.json está correto.

    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. Dê as permissões corretas para o arquivo eve.json para que o Logstash possa ingerir o arquivo:

    sudo chmod 775 /var/log/suricata/eve.json
    
  5. Inicie o Logstash executando este comando:

    sudo /etc/init.d/logstash start
    

Para obter mais instruções sobre como instalar o Logstash, consulte a documentação oficial do Elastic.

Instalar o Kibana

  1. Execute os seguintes comandos para instalar o 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. Execute o Kibana usando estes comandos:

    cd kibana-5.2.0-linux-x86_64/
    ./bin/kibana
    
  3. Veja a interface web do Kibana acedendo a http://localhost:5601.

    Para esse cenário, o padrão de índice usado para os logs Suricata é logstash-*.

  4. Se você quiser visualizar o painel do Kibana remotamente, crie uma regra NSG (grupo de segurança de rede) de entrada que permita o acesso à porta 5601.

Criar um painel do Kibana

Este artigo fornece um painel de exemplo para você exibir tendências e detalhes em seus alertas. Para utilizá-lo:

  1. Baixe o arquivo do painel, o arquivo de visualização e o arquivo de pesquisa salvo.

  2. Na guia Gerenciamento do Kibana, vá para Objetos Salvos e importe os três arquivos. Em seguida, na guia Painel , você pode abrir e carregar o painel de exemplo.

Você também pode criar suas próprias visualizações e painéis personalizados para métricas de seu próprio interesse. Leia mais sobre como criar visualizações do Kibana a partir da documentação oficial do Kibana.

Captura de ecrã que mostra um painel do Kibana.

Visualizar logs de alertas do IDS

O painel de exemplo fornece várias visualizações dos logs de alerta Suricata:

  • Alerta por GeoIP: Um mapa que mostra a distribuição de alertas por seu país/região de origem com base na localização geográfica (determinada por IP).

    A captura de tela mostra um mapa para alertas de IP geográfico.

  • Top 10 Alerts: Um resumo dos 10 alertas mais frequentemente acionados e suas descrições. A seleção de um alerta individual filtra o painel para as informações referentes a esse alerta específico.

    Captura de ecrã que mostra os alertas acionados com mais frequência.

  • Número de alertas: a contagem total de alertas que o conjunto de regras disparou.

    A captura de tela mostra o número de alertas.

  • Top 20 ScrIP - Alertas, Top 20 DestIP - Alertas, Top 20 SrcPort - Alertas, Top 20 DestPort - Alertas: gráficos de pizza que mostram as origens e destinos dos 20 principais IPs e portas nos quais os alertas foram acionados. Você pode filtrar IPs ou portas específicas para ver quantos e quais tipos de alertas estão sendo acionados.

    Captura de tela que mostra gráficos de pizza dos 20 principais IPs e portas nas quais os alertas foram acionados.

  • Resumo do alerta: uma tabela que resume detalhes específicos de cada alerta. Você pode personalizar esta tabela para mostrar outros parâmetros de interesse para cada alerta.

    A captura de tela mostra uma tabela de resumo com detalhes sobre alertas individuais.

Para obter mais informações sobre como criar visualizações e painéis personalizados, consulte a documentação oficial do Kibana.

Conclusão

Ao combinar capturas de pacotes do Network Watcher e ferramentas IDS de código aberto, como o Suricata, você pode executar a deteção de intrusão de rede para uma ampla gama de ameaças.

Os painéis ajudam-no a identificar rapidamente tendências e anomalias na sua rede. Você também pode usar painéis para examinar os dados para descobrir as causas raiz dos alertas, como agentes de usuário mal-intencionados ou portas vulneráveis. Com esses dados extraídos, você pode tomar decisões informadas sobre como:

  • Reaja e proteja a sua rede de tentativas de intrusão prejudiciais.
  • Crie regras para evitar futuras invasões à sua rede.

Próximo passo

Saiba como acionar capturas de pacotes com base em alertas: