Wazuh – Un’ estensione di OSSEC

Published by Lello on

Wazuh (3.12 è la versione attuale al momento della scrittura di questo post) è un sistema open source  di host based intrusion detection (HIDS) basato su Ossec. Come OSSEC, Wazuh garantisce i necessari controlli di sicurezza, richiesti da standard come PCI DSS, HIPAA, GDPR e altri; fornisce funzionalità di rilevamento delle minacce, gestione della conformità e risposta agli incidenti.

Wazuh include le seguenti funzionalità:

  • Security Analytics: permette la raccolta, aggregazione, indicizzazione ed analisi dei dati di sicurezza;
  • Intrusion Detection: gli agent effettuano la scansione alla ricerca di malware, rootkit e anomalie sospette; 
  • Log Data Analysis: gli agent si occupano di leggere i log del sistema operativo e delle applicazioni e inoltrarli verso un manager centralizzato per l’analisi rule-based e la memorizzazione;
  • File Integrity Monitoring: grazie al monitoring continuo dei file systems è possibile identificare le modifiche al contenuto, autorizzazioni, proprietà e attributi dei file da monitorare; identifica nativamente gli utenti e le applicazioni utilizzate per la creazione e modifica dei file;
  • Vulnerability Detection: gli agent raccolgono i dati di inventario del software e inviano queste informazioni al manager, dove vengono confrontati con i database CVE (Common Vulnerabilities and Exposure) costantemente aggiornati, al fine di identificare le vulnerabilità più conosciute;
  • Configuration Assessment: monitora le impostazioni di configurazione del sistema e dell’applicazione per assicurarsi che siano conformi ai criteri di sicurezza, agli standard. Gli agenti eseguono scansioni periodiche per rilevare applicazioni che sono note per essere vulnerabili, senza patch o configurate in modo non sicuro.
  • Incident Response: fornisce risposte pro-attive per affrontare le minacce, come ad esempio il blocco dell’accesso a un sistema quando vengono soddisfatti determinati criteri o l’esecuzione di script query da remoto, identificando gli indicatori di compromesso (IOCs – Indicators of Compromise);
  • Regulatory Compliance: fornisce alcuni dei controlli di sicurezza necessari per conformarsi agli standard e alle normative del settore; viene spesso utilizzato dalle società di elaborazione dei pagamenti e dalle istituzioni finanziarie per soddisfare i requisiti PCI DSS (Payment Card Industry Data Security Standard); viene utilizzato anche per aiutare a soddisfare i requisiti legati a regolamenti quali GPG13 o GDPR;
  • Cloud Security Monitoring e Containers Security: monitorare l’infrastruttura cloud a livello di API, utilizzando moduli di integrazione in grado di estrarre i dati di sicurezza da noti provider cloud, come Amazon AWS, Azure o Google Cloud; offre visibilità sulla sicurezza degli host e dei container Docker, monitorandone il comportamento e rilevando minacce, vulnerabilità e anomalie.

Il vantaggio principale rispetto ad OSSEC è quello di interagire in maniera nativa con lo Stack Elastic e OpenSCAP, grazie all’utilizzo delle API.

OpenSCAP è un interprete OVAL (Open Vulnerability Assessment Language) e XCCDF (Extensible Configuration Checklist Description Format) utilizzato per controllare la configurazione e scovare le vulnerabilità.

Le API di Wazuh sono RESTful based e forniscono un’interfaccia per gestire e monitorare la configurazione di manager e agent; possono essere utilizzate per registrare gli agent, controllare i messaggi di log, dei decoders e delle regole del manager e per fornire informazioni dettagliate sugli agent (lo stato, il dettaglio del sistema operativo, degli alert collegati all’integrity monitoring e rootcheck).

L’installazione e la configurazione sono identici a quella di OSSEC; utilizzeremo come base una distribuzione CentOS 8.1 e i repository di Wazuh per facilitare l’installazione e i futuri aggiornamenti.

Dopo aver effettuato un’installazione minimal di CentOS 8.1, aver disabilitato selinux, il sistema di firewalld (NEGLI AMBIENTI IN CUI QUESTO È CONSENTITO), installiamo il repository:

# rpm --import https://packages.wazuh.com/key/GPG-KEY-WAZUH

# cat > /etc/yum.repos.d/wazuh.repo <<\EOF
[wazuh_repo]
gpgcheck=1
gpgkey=https://packages.wazuh.com/key/GPG-KEY-WAZUH
enabled=1
name=Wazuh repository
baseurl=https://packages.wazuh.com/3.x/yum/
protect=1
EOF

Installiamo Wazuh Manager (OSSEC Server), Wazuh API  ed avviamo i servizi:

# yum -y install wazuh-manager
# yum -y install nodejs npm
# yum -y install wazuh-api
# systemctl enable --now wazuh-manager
# systemctl enable --now wazuh-api

Installiamo sulla macchina Filebeat (utilizzando il repo fornito da Elastic) per forwardare gli alert e gli archivi ad Elasticsearch:

# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

# cat > /etc/yum.repos.d/elastic.repo << EOF
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

# yum -y install filebeat

Per la configurazione di filebeat (filebeat.yml, template per gli indici e modulo wazuh di filebeat) utilizzeremo i template forniti da Wazuh:

# curl -so /etc/filebeat/filebeat.yml https://raw.githubusercontent.com/wazuh/wazuh/v3.12.3/extensions/filebeat/7.x/filebeat.yml
# chmod go+r /etc/filebeat/filebeat.yml
# curl -so /etc/filebeat/wazuh-template.json https://raw.githubusercontent.com/wazuh/wazuh/v3.12.3/extensions/elasticsearch/7.x/wazuh-template.json
# chmod go+r /etc/filebeat/wazuh-template.json
# curl -s https://packages.wazuh.com/3.x/filebeat/wazuh-filebeat-0.1.tar.gz | sudo tar -xvz -C /usr/share/filebeat/module

Per la configurazione e l’uso di Filebeat, creeremo due utenti (wazuh_setup e wazuh_writer) come indicato nella guida di Filebeat.

Modifichiamo la configurazione di Filebeat ( /etc/filebeat/filebeat.yml ), per indicare il server Elastic e le credenziali per accedere:

output.elasticsearch:
  hosts: ["192.168.xxx.xxx:9200"]
  username: "wazuh_writer"
  password: "wazuh_writer"

Nel file di configurazione, disabilitiamo anche l’overwrite del template e abbassiamo il logging level a warning:

setup.template.overwrite: false
logging.level: warning

Creiamo gli indici con gli account dello Stack Elastic che hanno i permessi di farlo ed avviamo Filebeat, Wazuh Manager e Wazuh API

# filebeat setup --index-management \
-E output.elasticsearch.username=wazuh_setup \
-E output.elasticsearch.password=wazuh_setup_password

# systemctl enable --now wazuh-manager
# systemctl enable --now wazuh-api
# systemctl enable --now filebeat

Sul server Kibana, installiamo l’app plugin di Wazuh; dopo aver creato il repository  di Wazuh come visto precedentemente:

# cd /usr/share/kibana
# sudo -u kibana bin/kibana-plugin install https://packages.wazuh.com/wazuhapp/wazuhapp-3.12.3_7.6.2.zip

Incrementiamo l’heap size di Kibana per garantire l’installazione del plugin e riavviamo Kibana

# cat >> /etc/default/kibana << EOF
NODE_OPTIONS="--max_old_space_size=2048"
EOF

# systemctl restart kibana

Per l’installazione di un agent, possiamo operare esattamente come fatto precedentemente con l’agent di OSSEC; occore considerare che l’agent di OSSEC è perfettamente compatibile con quello di Wazuh, per cui possiamo solo modificare l’indirizzo IP a cui il client di collega e provvedere nuovamente alla registrare del client. L’ agent può essere installato anche utilizzando il repo:

# WAZUH_MANAGER="192.168.xxx.xxx" yum install wazuh-agent

Per registrare il client sul server, abbiamo 3 possibilità:

  • in modo manuale (utilizzando CLI)
  • in modo semiautomatico, utlizzando le API
  • in modo automatico (utilizzando il registration service – con o senza password – , con il manager con verifica SSL o con l’agent verification – con o senza host validation).

Abbiamo visto come registrare un client utilizzando CLI; proviamo a registrare un client tramite CLI utilizzando le API e procedendo direttamente dal client; ricordiamoci che l’utente di default (che dovremo provvedere a cambiare) per le API è username=foo e password=bar

  • aggiungiamo l’agent (ip=192.168.0.10 ) al manager (ip=192.168.0.100):
# curl -u foo:bar -k -X POST -d '{"name":"ubuntu-20.04","ip":"192.168.0.10"}' -H 'Content-Type:application/json' "https://192.168.0.100:55000/agents?pretty"
{
  "error": 0,
  "data": {
      "id": "001",
      "key": "MDAxIE5ld0FnZW50IDEwLjAuMC44IDM0MGQ1NjNkODQyNjcxMWIyYzUzZTE1MGIzYjEyYWVlMTU1ODgxMzVhNDE3MWQ1Y2IzZDY4M2Y0YjA0ZWVjYzM="
  }
}
  • importiamo la key:
# /var/ossec/bin/manage_agents -i MDAxIE5ld0FnZW50IDEwLjAuMC44IDM0MGQ1NjNkODQyNjcxMWIyYzUzZTE1MGIzYjEyYWVlMTU1ODgxMzVhNDE3MWQ1Y2IzZDY4M2Y0YjA0ZWVjYzM=
  • Abilitiamo e avviamo l’agent
# systemctl enable --now wazuh-agent

A questo punto la nostra installazione di Wazuh (Server, API e Agents) è effettuata; cominciamo a vedere l’interfaccia in Kibana

← OSSEC – Installazione agents

Wazuh – Securing API →