Executar a detecção de intrusão de rede usando o Observador de Rede do Azure e ferramentas de software livre

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

Uma dessas ferramentas de software livre é o Suricata, um mecanismo IDS que usa conjuntos de regras para monitorar o tráfego de rede e dispara alertas sempre que ocorrem eventos suspeitos. O Suricata oferece um mecanismo multithreaded para executar a análise de tráfego de rede com maior velocidade e eficiência. Para obter mais informações sobre a Suricata e suas funcionalidades, acesse o site da Suricata.

Cenário

Este artigo explica como configurar seu ambiente para executar a detecção de intrusão de rede usando o Observador de Rede, o Suricata e a Pilha Elástica.

O Observador de Rede fornece as capturas de pacote para executar a detecção de intrusão de rede. O Suricata processa os pacotes captura e dispara alertas com base em pacotes que correspondem ao conjunto de regras de ameaças. O Suricata armazena esses alertas em um arquivo de log em seu computador local.

Usando a Pilha Elástica, você pode indexar os logs gerados pelo Suricata e usá-los para criar um painel do Kibana. Um painel fornece uma representação visual dos logs e uma maneira de obter rapidamente insights sobre possíveis vulnerabilidades de rede.

Diagram that shows a simple web application scenario.

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

Instalar o Suricata

  1. No terminal de linha de comando da 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 obter outros métodos de instalação, consulte o guia de início rápido da instalação do Suricata.

Baixar o conjunto de regras de Ameaças Emergentes

Nesta fase, você não tem nenhuma regra para o Suricata ser executado. Você pode criar suas próprias regras se quiser detectar 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ê usará o conjunto de regras de Ameaças Emergentes disponível livremente.

Baixe o 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 pacote usando o Suricata

Para processar capturas de pacote 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 o 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 ao Elastic Stack, você pode criar um painel do Kibana para pesquisar, grafar, analisar e derivar insights de seus logs.

Instalar Elasticsearch

  1. O Elastic Stack versão 5.0 e posteriores exigem o 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 compatíveis com o Azure.

  2. Baixe o pacote de binários correto para 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 elástica 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 elástica sobre a instalação.

Instalar 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. Conceda as permissões corretas ao 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 o oficial de documentação do Elastic.

Instalar 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. Exiba sua interface da Web do Kibana acessando http://localhost:5601.

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

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

Criar um painel Kibana

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

  1. Baixe o arquivo do painel, arquivo de visualização e 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.

Screenshot that shows a Kibana dashboard.

Visualizar logs de alerta de 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).

    Screenshot shows a map for geographic IP alerts.

  • Top 10 Alertas: um resumo dos 10 alertas disparados com mais frequência e suas descrições. Selecionar um alerta individual filtra o painel para as informações que pertencem a esse alerta específico.

    Screenshot that shows the most frequently triggered alerts.

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

    Screenshot shows the number of alerts.

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

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

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

    Screenshot shows a summary table with details about individual alerts.

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

Conclusão

Combinando capturas de pacotes do Observador de Rede e ferramentas de IDS de software livre, como o Suricata, você pode executar a detecção de intrusão de rede para uma ampla gama de ameaças.

Os painéis ajudam você a identificar rapidamente tendências e anomalias em 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 sua rede contra tentativas de intrusão prejudiciais.
  • Crie regras para evitar invasões futuras em sua rede.

Próxima etapa

Saiba como disparar capturas de pacotes com base em alertas: