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.
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
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
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
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.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.
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
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
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
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" } }
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
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
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
Execute o Kibana usando estes comandos:
cd kibana-5.2.0-linux-x86_64/ ./bin/kibana
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-*
.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:
Baixe o arquivo do painel, o arquivo de visualização e o arquivo de pesquisa salvo.
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.
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).
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.
Número de alertas: a contagem total de alertas que o conjunto de regras disparou.
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.
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.
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: