Marchando una de Auditbeat

por | octubre 12, 2018

Lo tenía pendiente desde que monté el stack ELK con Metricbeat para sacar métricas de mis máquinas. Ahora le toca el turno a Auditbeat.

En este artículo no voy a comentar cómo instalar todos los componentes ELK, eso está ya escrito en el anterior post que he enlazado. Simplemente me voy a centrar en Auditbeat.

Primer paso, instalación del componente en Debian Stretch:

apt-get install auditbeat

Una vez instalado lo habilito para que inicie con la máquina:

systemctl enable auditbeat.service

Y deshabilito el servicio de auditd, no pueden estar corriendo a la vez como veremos más adelante:

systemctl disable auditd.service

Ahora pasamos a configurar Auditbeat. En el fichero de configuración /etc/auditbeat/auditbeat.yml lo primero que hago es apuntar a mi instancia de ElasticSearch y Kibana. En esta ocasión no voy a utilizar el stack Logstash:

output.elasticsearch:
  hosts: ["192.168.1.2:9200"]

...

setup.kibana:
  host: "192.168.1.2:5601"

Auditbeat tiene dos módulos: auditd e integridad de ficheros.

El módulo auditd lee las reglas del directorio audit.rules.d como vemos:

audit_rule_files: [ '${path.config}/audit.rules.d/*.conf' ]

Es importante que en dicho directorio borremos el fichero sample de 32 bits (sample-rules-linux-32bit.conf) que viene de serie si estamos en un sistema de 64 bits y viceversa, de lo contrario al iniciar el demonio tendremos un mensaje de error. Las reglas que se cargan por defecto son suficientes para los dashboards que vamos a cargar en Kibana así que no hace falta que toquemos nada.

En cuando al módulo de integridad de ficheros añado algunos paths más sobre los que quiero monitorizar:

- module: file_integrity
  paths:
  - /bin
  - /usr/bin
  - /sbin
  - /usr/sbin
  - /etc
  - /boot
  - /root
  - /lib
  - /lib64

Una vez hecho esto tenemos todavía que dar algún paso más.

Cargamos los templates de Auditbeat en Elasticsearch:

auditbeat setup --template -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["192.168.1.2:9200"]'

Cargamos los dashboards:

auditbeat setup --dashboards

Hecho esto reiniciamos/arrancamos Auditbeat:

systemctl restart auditbeat.service

Como decía al principio no podemos tener ejecutándose a la vez auditd y auditbeat, obtendríamos el siguiente error al intentar arrancar auditbeat:

Failure receiving audit events	{"error": "failed to set audit PID. An audit process is already running (PID .....)"}

Ejemplo:

[root@jota-pc auditbeat]# tail -f auditbeat
2018-10-10T20:30:14.838+0200	INFO	[auditd]	auditd/audit_linux.go:241	Deleted 194 pre-existing audit rules.
2018-10-10T20:30:14.838+0200	INFO	[auditd]	auditd/audit_linux.go:260	Successfully added 9 of 9 audit rules.
2018-10-10T20:30:14.889+0200	INFO	[auditd]	auditd/audit_linux.go:284	audit status from kernel at start	{"audit_status": {"Mask":0,"Enabled":1,"Failure":1,"PID":16688,"RateLimit":0,"BacklogLimit":8192,"Lost":0,"Backlog":0,"FeatureBitmap":15,"BacklogWaitTime":0}}
2018-10-10T20:30:14.889+0200	INFO	[auditd]	auditd/audit_linux.go:308	Setting kernel backlog wait time to prevent backpressure propagating to the kernel.
2018-10-10T20:30:14.889+0200	ERROR	[auditd]	auditd/audit_linux.go:153	Failure receiving audit events	{"error": "failed to set audit PID. An audit process is already running (PID 16688)"}
2018-10-10T20:30:15.889+0200	INFO	pipeline/output.go:95	Connecting to backoff(elasticsearch(http://192.168.1.2:9200))
2018-10-10T20:30:15.892+0200	INFO	elasticsearch/client.go:712	Connected to Elasticsearch version 6.4.2
2018-10-10T20:30:15.894+0200	INFO	template/load.go:129	Template already exists and will not be overwritten.
2018-10-10T20:30:15.894+0200	INFO	pipeline/output.go:105	Connection to backoff(elasticsearch(http://192.168.1.2:9200)) established
2018-10-10T20:30:16.593+0200	INFO	[file_integrity]	file_integrity/eventreader_fsnotify.go:76	Started fsnotify watcher	{"file_path": ["/bin", "/etc", "/sbin", "/usr/bin", "/usr/sbin"], "recursive": false}

Un vistazo a los dashboards

Ya deberíamos tener disponibles los dashboards si los buscamos:

Tenemos un dashboard general:

Otro de integridad de ficheros:

Ejecuciones:

Y de sockets:

Con esto termino, aunque ahora me toca ponerme a trastear con los dashboards para personalizarlos un poco más.