Skip to main content

Suricata

Suricata is a Network Security Monitoring (NSM) tool that uses sets of community created and user defined signatures (also referred to as rules) to examine and process network traffic. Suricata can generate log events, trigger alerts, and drop traffic when it detects suspicious packets or requests to any number of different services running on a server.
Este repositório tem como objetivo ter todos os fichieros necessários para criar de formar simples e rápida um serviço suricata em modo IPS, Intrusion Prevention System , a correr num kibana, utilizando elastic Search.
De salientar que todas as regras que estão a ser utilizadas no suricata são simples e baśicas sendo da responsabilidade da testebed definir quais são as regras que devem estar presentes.
O suricata deve ter acesso a todos os pacotes da rede para eles o detetetar e dar as suas alarmisticas sendo que estes alarmes vão estar a ser enviadas para um slack, com todas as logs sendo que este slack deve também ser alterado os tokens de acesso ao slack para funcionar.

Como instalar o Suricata

sudo add-apt-repository ppa:oisf/suricata-stable
sudo apt install suricata sudo systemctl enable suricata.service
Output a receber:
"suricata.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable suricata"
sudo systemctl stop suricata.service -> Se tudo estiver certo, deve-se parar de correr porque ainda não há nada no suricata de regras

Configurar o yaml do suricata

sudo nano /etc/suricata/suricata.yaml -> Colocar la o nosso ficheiro do suricata.yaml que esta neste repositório
Caso se pretenda configurar uma nova interface basta, no ficheiro yaml nas linhas do af-packet: colocar a interface que se pretende e também colocar um valor para o cluster id, salientar que este valor não pode estar a ser utilizado nas outras interfaces.

Regras do Suricata

Para importar regras basicas no suricata, basta ir buscar regras por default com o comando: sudo suricata-update
Nota, as regras do surica-update vão para o ficheiro : /var/lib/suricata/rules/suricata.rules
Podem também serem criadas regras, e essas podem ser colocadas no /var/lib/suricata/rules/local.rules que já se encontra configurado no ficheiro yaml do suricata para aceitar as regras presentes neste ficheiro.

Testar se as regras estão a dar corretamente

sudo suricata -T -c /etc/suricata/suricata.yaml -v

Comandos a instalar

sudo apt update
sudo apt install jq

Começar a correr o suricata

sudo systemctl start suricata.service sudo systemctl status suricata.service Notas:
Esperar 1 a 2 minutos, suricata demora a correr
sudo tail -f /var/log/suricata/suricata.log e receber o output : data-- horas - Info - All AFP capture threads are running.

Colocar o Suricata em IPS

Deve se ir a /etc/default/suricata e alterar a linha:
LISTENMODE=af-packet para LISTENMODE=nfqueue

Como saber em que modo esta o suricata

sudo systemctl status suricata.service
Nas linhas do fundo deve estar a indicar:Starting suricata in IPS (nfqueue) mode... done.

Logs do Suricata

cat /var/log/suricata/fast.log ou cat /var/log/suricata/eve.json
As logs aqui presentes estão a ser enviadas para um slack.

Pesquisar por logs especificas

Fazendo o sid da regra pode-se fazer grep de todas as ocorrencias da regra.
grep sid_number /var/log/suricata/fast.log

Logs em Json

sudo apt install jq cat /var/log/suricata/eve.log jq 'select(.alert .signature_id==sid_number)' /var/log/suricata/eve.json

Configurar a UFW para enviar trafego para o Suricata

A definir pelo sistema no nosso sistema atual estamos a usar os ficheiros presentes no repositório sendo eles before.rules e before6.rules.
Sitio onde colocar o before. rules, /etc/ufw/before.rules
Sitio onde colocar o before6. rules,/etc/ufw/before6.rules
sudo ufw enable
Neste ficheiro colocamos, as configurações que para nós serviam, para uma outra rede pode ser necessário a alteração deste ficheiro.

Como instalar o kibana e elasticSearch

curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt update
sudo apt install elasticsearch kibana

Configurar o elasticSearch

Pode importar o ficheiro elasticsearch.yml presente no nosso repositório e colocar em /etc/elasticsearch/elasticsearch.yml onde deve apenas alterar o campo onde diz "your_private_ip".
Onde encontrar o your_private ip:
By default Elasticsearch is only accessible on localhost. Set a different
address here to expose this node on the network:
network.host: 192.168.0.1
network.bind_host: ["127.0.0.1", "your_private_ip"]
By default Elasticsearch listens for HTTP traffic on the first free port it
finds starting at 9200. Set a specific HTTP port here:

Como correr o elasticSearch

Para as interfaces que pretende monitorizar colocar no comando abaixo sudo ufw allow in on ethnumber sudo ufw allow out on ethnumber

sudo systemctl start elasticsearch.service
sudo systemctl enable elasticsearch.service

Como reduzir o espaço que o elasticSearch ocupa

sudo vim /etc/elasticsearch/jvm.options Dentro do ficheiro colocar:

JVM Heap Size - see /etc/elasticsearch/jvm.options

-Xms2g
-Xmx2g
E assim fica com 2g para o elasticSearch,se pretender 1Gb, basta meter
-Xms1g -Xmx1g

Passwords geradas de forma automática

Correr os seguintes comandos: (NOTA ESTES COMANDOS SÓ PODEM SER CORRIDOS 1 VEZ LOGO DEVEM SER GUARDADOS NUM LOCAL SEGUROS AS PASSWORDS)
cd /usr/share/elasticsearch/bin
sudo ./elasticsearch-setup-passwords auto

Configurar o Kibana

Correr os seguintes comandos: (NOTA ESTES COMANDOS SÓ PODEM SER CORRIDOS 1 VEZ LOGO DEVEM SER GUARDADOS NUM LOCAL SEGUROS AS PASSWORDS)
cd /usr/share/kibana/bin/ sudo ./kibana-encryption-keys generate -q

Pode importar o nosso ficheiro de configuração do kibana.yml e altera-lo em sudo vim /etc/kibana/kibana.yml , sendo apenas necessário depois colocar passwords geradas substituir nos campos key pela respetiva key gerada anteriormente e trocar o "your ip" dentro do ficheiro yaml.

cd /usr/share/kibana/bin
sudo ./kibana-keystore add elasticsearch.username -> colocar: kibana_system
sudo ./kibana-keystore add elasticsearch.password -> Password do kibana_system gerado em (sudo ./elasticsearch-setup-passwords auto)
sudo systemctl start kibana.service sudo systemctl enable kibana.service

Configurar o filebeat

curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt update
sudo apt install filebeat
sudo nano /etc/filebeat/filebeat.yml e colocar :
Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API.
This requires a Kibana endpoint configuration.
setup.kibana:
host: "your_private_ip:5601"
output.elasticsearch:
Array of hosts to connect to.
hosts: ["your_private_ip:9200"] Protocol - either http (default) or https.
protocol: "https"
Authentication credentials - either API key or username/password.
api_key: "id:api_key"
username: "elastic"
password: "pass do elastic gerado em (sudo ./elasticsearch-setup-passwords auto)"

Colocar o suricata no filebeat

sudo filebeat modules enable suricata , output esperado : (Enabled suricata)
sudo filebeat setup : Output esperado :
Overwriting ILM policy is disabled. Set setup.ilm.overwrite: true for enabling.
Index setup finished.
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards
Setting up ML using setup --machine-learning is going to be removed in 8.0.0. Please use the ML app instead.
See more: https://www.elastic.co/guide/en/machine-learning/current/index.html
It is not possible to load ML jobs into an Elasticsearch 8.0.0 or newer using the Beat.
Loaded machine learning job configurations
Loaded Ingest pipelines

Após isto executar
sudo systemctl start filebeat.service
sudo systemctl enable filebeat.service

Dashboard para ver os dados

http://your_ip:5601/ Colocar o user e a password do elastic que foi gerado anteriormente

type:dashboard suricata Alerts
type:dashboard suricata Events