Cómo configurar la supervisión de la integridad de los archivos (FIM) con osquery en Linux
Osquery es un sistema operativo de código abierto de instrumentación, monitorización y análisis. Creado por Facebook, expone un sistema operativo como una base de datos relacional de alto rendimiento que puede consultarse mediante consultas basadas en SQL.
Osquery es un software multiplataforma, se puede instalar en Linux, Windows, MacOS y FreeBSD. Nos permite explorar el perfil de todos esos sistemas operativos, su rendimiento, comprobar su seguridad, etc., mediante consultas basadas en SQL.
En este tutorial, te mostraremos cómo configurar la Monitorización de la Integridad de los Archivos (FIM) utilizando osquery. Utilizaremos los sistemas operativos Linux Ubuntu 18.04 y CentOS 7.
Requisitos previos
- Linux (Ubuntu o CentOS)
- Privilegios de root
- Primera guía de osquery completada
Qué haremos
- Instalar osquery en un servidor Linux
- Habilitar el Consumo de Syslog para osquery
- Configuración básica de osquery
- Configurar la Monitorización de Integridad de Archivos de osquery
- Probar
Paso 1 – Instalar osquery en el Servidor Linux
Osquery proporciona su propio repositorio para la instalación en todas las plataformas, y el primer paso que vamos a hacer es instalar el paquete osquery DESDE el repositorio oficial de osquery.
En Ubuntu
Añade la clave osquery al sistema.
export OSQUERY_KEY=1484120AC4E9F8A1A577AEEE97A80C63C9D8B80B sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys $OSQUERY_KEY
Añade el repositorio osquery e instala el paquete.
sudo add-apt-repository 'deb [arch=amd64] https://pkg.osquery.io/deb deb main' sudo apt install osquery -y
En CentOS
Añade la clave osquery al sistema.
curl -L https://pkg.osquery.io/rpm/GPG | sudo tee /etc/pki/rpm-gpg/RPM-GPG-KEY-osquery
Añade y activa el repositorio osquery, e instala el paquete.
sudo yum-config-manager --add-repo https://pkg.osquery.io/rpm/osquery-s3-rpm.repo sudo yum-config-manager --enable osquery-s3-rpm sudo yum install osquery -y
Espera a que se instalen todos los paquetes.
Nota:
Si aparece el error del comando yum-config-manager.
sudo: yum-config-manager: command not found
Instala el paquete ‘yum-utils’.
yum -y install yum-utils
Paso 2 – Habilitar el consumo de Syslog en osquery
Osquery proporciona funciones para leer o consumir registros del sistema en el MacOS de Apple utilizando el Apple System Log (ASL), y para Linux es utilizando el syslog.
En este paso, habilitaremos el consumo de syslog para osquery a través del rsyslog.
En Ubuntu
Instala el paquete rsyslog utilizando el comando apt que aparece a continuación.
sudo apt install rsyslog -y
En CentOS
Instala el paquete rsyslog utilizando el siguiente comando yum.
sudo yum install rsyslog -y
Una vez completada la instalación, ve al directorio ‘/etc/rsyslog.d’ y crea un nuevo archivo de configuración osquery.conf.
cd /etc/rsyslog.d/ vim osquery.conf
Pega allí la siguiente configuración.
template( name="OsqueryCsvFormat" type="string" string="%timestamp:::date-rfc3339,csv%,%hostname:::csv%,%syslogseverity:::csv%,%syslogfacility-text:::csv%,%syslogtag:::csv%,%msg:::csv%\n" ) *.* action(type="ompipe" Pipe="/var/osquery/syslog_pipe" template="OsqueryCsvFormat")
Guarda y sal.
Paso 3 – Configuración básica osquery
La configuración por defecto de osquery es ‘osquery.conf’, normalmente ubicado en el directorio ‘/etc/osquery’. Existen ejemplos de configuración de osquery ‘/usr/share/osquery/osquery.conf’ y ejemplos de configuración de paquetes de osquery.
En este paso, conoceremos los componentes de la configuración de osquery, crearemos la configuración personalizada de osquery y, a continuación, desplegaremos osqueryd como servicio.
La configuración de osquery formateada como un archivo JSON contiene las especificaciones de configuración de osquery que se describen a continuación.
- Opciones: forma parte del comando CLI de osqueryd y determina el inicio y la inicialización de la aplicación.
- Programación: Define el flujo de los nombres de las consultas programadas a los detalles de la consulta.
- Decoradores: Se utilizan para añadir «decoraciones» adicionales a los resultados y a los registros de instantáneas.
- Paquetes: un grupo de las consultas programadas.
- Más información: Ruta de archivos, YARA, Prometheus, Vistas, EC2, Configuración de Chef.
Ve al directorio ‘/etc/osquery’ y crea una nueva configuración personalizada ‘osquery.conf’.
cd /etc/osquery/ vim osquery.conf
Pega allí las siguientes configuraciones.
{ "options": { "config_plugin": "filesystem", "logger_plugin": "filesystem", "logger_path": "/var/log/osquery", "disable_logging": "false", "log_result_events": "true", "schedule_splay_percent": "10", "pidfile": "/var/osquery/osquery.pidfile", "events_expiry": "3600", "database_path": "/var/osquery/osquery.db", "verbose": "false", "worker_threads": "2", "enable_monitor": "true", "disable_events": "false", "disable_audit": "false", "audit_allow_config": "true", "host_identifier": "hakase-labs", "enable_syslog": "true", "syslog_pipe_path": "/var/osquery/syslog_pipe", "force": "true", "audit_allow_sockets": "true", "schedule_default_interval": "3600" }, "schedule": { "crontab": { "query": "SELECT * FROM crontab;", "interval": 300 }, "system_info": { "query": "SELECT hostname, cpu_brand, physical_memory FROM system_info;", "interval": 3600 }, "ssh_login": { "query": "SELECT username, time, host FROM last WHERE type=7", "interval": 360 } }, "decorators": { "load": [ "SELECT uuid AS host_uuid FROM system_info;", "SELECT user AS username FROM logged_in_users ORDER BY time DESC LIMIT 1;" ] }, "packs": { "osquery-monitoring": "/usr/share/osquery/packs/osquery-monitoring.conf" } }
Guarda y sal.
Nota:
- Estamos utilizando el ‘filesystem’ como config y plugins logger.
- Define la ruta del logger al directorio ‘/var/log/osquery’.
- Habilita el syslog pip al archivo ‘/var/syslog/syslog_pipe’.
- En el programador, definimos tres consultas para comprobar el crontab, la información del sistema y el inicio de sesión ssh.
- Habilita los paquetes osquery llamados ‘osquery-monitoring’, y los archivos packs ubicados en el directorio ‘/usr/share/osquery/packs’.
Ahora inicia el servicio demonio osqueryd y habilítalo para que se inicie cada vez que arranque el sistema.
systemctl start osqueryd systemctl enable osqueryd
Y reinicia el servicio rsyslog.
systemctl restart rsyslog
La configuración básica de osquery ha finalizado.
Paso 4 – Configurar la Monitorización de la Integridad de los Archivos (FIM) mediante osquery
Osquery proporciona Monitorización de la Integridad de los Ficheros en Linux y MacOS Darwin utilizando inotify y FSEvents. Simplemente, monitoriza y detecta cualquier cambio de archivos en el directorio definido utilizando el ‘file_path’y luego almacena toda la actividad en la tabla file_events.
En este paso, configuraremos osquery para que supervise directorios importantes como home, directorio ssh, etc, tmp, y el directorio raíz de la web www utilizando paquetes FIM personalizados.
Ve al directorio ‘/usr/share/osquery/packs’ y crea un nuevo archivo de configuración de packs ‘fim.conf’.
cd /usr/share/osquery/packs vim fim.conf
Pega las configuraciones a continuación.
{ "queries": { "file_events": { "query": "SELECT * FROM file_events;", "removed": false, "interval": 300 } }, "file_paths": { "homes": [ "/root/.ssh/%%", "/home/%/.ssh/%%" ], "etc": [ "/etc/%%" ], "home": [ "/home/%%" ], "tmp": [ "/tmp/%%" ], "www": [ "/var/www/%%" ] } }
Guarda y sal.
Ahora vuelve al directorio de configuración ‘/etc/osquery’ y edita el archivo osquery.conf.
cd /etc/osquery/ vim osquery.conf
Añade la configuración de los paquetes de Monitorización de la Integridad de los Archivos dentro de la sección ‘paquetes’.
"packs": { "osquery-monitoring": "/usr/share/osquery/packs/osquery-monitoring.conf", "fim": "/usr/share/osquery/packs/fim.conf" }
Guarda y sal, luego reinicia el servicio osqueryd.
systemctl restart osqueryd
Nota:
Sigue comprobando el archivo de configuración JSON utilizando el linter JSON‘http://jsonlint.com/‘ y asegúrate de que no hay ningún error.
Paso 5 – Pruebas
Probaremos los paquetes de Monitorización de la Integridad de los Archivos creando un nuevo archivo en el directorio definido ‘home’ y ‘www’.
Ve al directorio ‘/var/www/’ y crea un nuevo archivo llamado ‘howtoforge.md’.
cd /var/www/ touch howtoforge.md
Ve al directorio ‘/home/tuusuario/’ y crea un nuevo archivo llamado ‘hakase-labs.md’.
cd /home/vagrant/ touch hakase-labs.md
Ahora comprobaremos todos los registros de monitorización utilizando el modo interactivo en tiempo real osqueryi y los registros de los resultados de osquery.
osqueryi
Ejecuta el siguiente comando osqueryi.
osqueryi --config-path /etc/osquery/osquery.conf
Ahora comprueba todos los logs sobre cambios de archivos en la tabla ‘file_events’.
Para cambios globales.
select * from file_events;
Para el directorio ‘home’.
select target_path, category, action, atime, ctime, mtime from file_events WHERE category="home";
Para el directorio raíz web ‘www’.
select target_path, category, action, atime, ctime, mtime from file_events WHERE category="www";
registro de resultados osqueryd
Ve al directorio ‘/var/log/osquery’ y obtendrás el archivo ‘osqueryd.results.log’.
cd /var/log/osquery/ ls -lah osqueryd.results.log
Filtra los registros de osquery utilizando el comando ‘grep’.
grep -rin howtoforge.md osqueryd.results.log grep -rin hakase-labs.md osqueryd.results.log
Verás información sobre los archivos que se han creado.
La instalación y configuración de la Monitorización de la Integridad de los Ficheros (FIM) en los servidores Linux Ubuntu y CentOS mediante osquery se ha completado con éxito.