ELK Stack – Installazione Auditbeat

Published by Lello on

Auditbeat (disponibile per Linux, macOS e in beta per Windows) è ulteriore data-injection dello Stack Eastic che permette il monitoraggio dell’attività degli utenti e dei processi memorizzando i dati in Elasticsearch e analizzandoli tramite Kibana.

Auditbeat non utilizza auditd ma comunica direttamente con l’audit framework di Linux, collezionando gli stessi dati ed inviandoli in real-time allo Stack Elastic. Come gli altri beats, anche Auditbeat aggrega in un singolo evento i messaggi prima di inviarli.

Auditbeat permette di effettuare anche file-monitor per monitorare cambiamenti su file/directory critiche del sistema (Linux, macOS e Windows). Le modifiche ai files vengono inviate ad Elasticsearch e ogni messaggio contiene metadati ed hash crittografici del file per successive analisi.

L’installazione è molto semplice:

# yum -y update
# yum -y install auditbeat

All’interno del file di configurazione di auditbeat ( /etc/auditbeat/auditbeat.yml ) troviamo la configurazione dei moduli di cui è composto:

  • auditbeat
  • file_integrity
  • system

Modifichiamo il file di configurazione di Auditbeat in modo da:

  • configurare i singoli moduli
  • configurare il forward degli eventi verso Elasticsearch
  • abbassare il livello di log da info (default) a warning:
#==========================  Modules configuration =============================
auditbeat.modules:
- module: auditd
  audit_rule_files: [ '${path.config}/audit.rules.d/*.conf' ]
  audit_rules: |
  -a always,exit -F arch=b32 -S all -F key=32bit-abi        <== 32-bit system
  -a always,exit -F arch=b64 -S execve,execveat -k exec     <== 64-bit system
  ## Identity changes.
  -w /etc/group -p wa -k identity
  -w /etc/passwd -p wa -k identity
  -w /etc/gshadow -p wa -k identity
  ## Unauthorized access attempts.
  -a always,exit -F arch=b64 -S open,creat,truncate,ftruncate,openat,open_by_handle_at -F exit=-EACCES -k access
  -a always,exit -F arch=b64 -S open,creat,truncate,ftruncate,openat,open_by_handle_at -F exit=-EPERM -k access

- module: file_integrity
  paths:
  - /bin
  - /usr/bin
  - /sbin
  - /usr/sbin
  - /etc

- module: system
  datasets:
    - host    # General host information, e.g. uptime, IPs
    - login   # User logins, logouts, and system boots.
    - package # Installed, updated, and removed packages
    - process # Started and stopped processes
    - socket  # Opened and closed sockets
    - user    # User information

 # How often datasets send state updates with the current state of the system (e.g. all currently running processes, all open sockets).
  state.period: 12h
 # Enabled by default. Auditbeat will read password fields in /etc/passwd and /etc/shadow and store a hash locally to detect any changes.
  user.detect_password_changes: true

  # File patterns of the login record files.
  login.wtmp_file_pattern: /var/log/wtmp*
  login.btmp_file_pattern: /var/log/btmp*
...
#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
  hosts: ["192.168.xxx.xxx:9200"]              <== indirizzo/porta del nostro nodo elasticsearch
  username: "auditbeat_writer"                 <== user per connettersi a Elasticsearch (vedi dopo)
  password: "auditbeat_writer_password"        <== pwd connettersi a Elasticsearch (vedi dopo)
...
#================================ Logging =====================================
logging.level: warning                         <== impostiamo il livello di logging a warning

Come abbiamo già fatto per gli utenti filebeat_setup e filebeat_writer, creiamo in Kibana i ruoli e gli utenti per gestire il beat:

Management –> Security –> Roles –> Create role:

Rolename                         auditbeat_setup
Cluster privileges               monitor + manage_ilm + manage_ml
index.name                       auditbeat-*
index.privileges                 manage + read

Rolename                         auditbeat_writer
Cluster privileges               monitor + read_ilm + cluster:admin/ingest/pipeline/get + cluster:admin/ingest/pipeline/put + cluster:admin/ilm/put
index.name                       auditbeat-*
index.privileges                 create_doc + view_index_metadata + create_index

Management –> Security –> Users –> Create user:

Username          auditbeat_setup
password          <scelta da voi>
Roles             auditbeat_setup + kibana_user + ingest_admin + beats_admin

Username          auditbeat_writer
password          <scelta da voi>
Roles             auditbeat_writer

Cancelliamo eventuali indici auditbeat presenti in elasticsearch (ATTENZIONE: questa operazione, soprattutto se effettuata su sistemi in produzione, cancellerà tutti i dati presenti in Elasticsearch relativi all’indice auditbeat-*):

# curl -XDELETE -u auditbeat_setup:auditbeat_setup_password 'http://192.168.xxx.xxx:9200/auditbeat-*'

Creiamo in Elasticsearch gli indici che raccolgono i dati di Auditbeat e in Kibana le dashboard per analizzare i dati raccolti:

# auditbeat setup -e \
  -E output.elasticsearch.username=auditbeat_setup \
  -E output.elasticsearch.password=auditbeat_setup_password \
  -E setup.kibana.host=192.168.xxx.xxx:5601

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

Abilitiamo ed avviamo il servizio tramite systemd:

# systemctl enable --now auditbeat

I dati generati da Auditbeat, possono essere visualizzati ed analizzati tramite l’interfaccia Kibana dello Stack Elastic.

← ELK Stack – X-Pack

ELK Stack – Kibana Auditbeat Dashbords →