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.
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
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
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
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.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.
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
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" } }
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
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
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
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-*
.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:
Baixe o arquivo do painel, arquivo de visualização e 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 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).
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.
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 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.
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.
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: