Cómo monitorizar tu servidor Linux con osquery

Osquery es un software de código abierto de monitorización, consulta y análisis del sistema operativo. 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. Osquery nos permite explorar el perfil del sistema operativo, el rendimiento, la seguridad y muchas más métricas mediante consultas basadas en SQL.

En este tutorial, te mostraré cómo instalar osquery en las distribuciones de Linux Ubuntu 18.04 LTS y CentOS 7. Instalaremos osquery, aprenderemos a utilizar el modo interactivo ‘osqueryi’ y a monitorizar un sistema en vivo utilizando osquery.

Requisitos previos

  • Sistema operativo Linux (Ubuntu 18.04 o CentOS 7)
  • Privilegios de root

Qué vamos a hacer

  • Instalar osquery en el sistema operativo Linux
  • Uso básico de osqueryi modo interactivo
  • Monitorización del sistema con osquery

Paso 1 – Instalar osquery en el sistema operativo Linux

osquery proporciona su propio repositorio para cada plataforma. En este paso, instalaremos el paquete osquery desde el repositorio oficial de osquery.

En Ubuntu

Añade la clave osquery.

export OSQUERY_KEY=1484120AC4E9F8A1A577AEEE97A80C63C9D8B80B
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys $OSQUERY_KEY

Instala el paquete osquery en Ubuntu.

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.

curl -L https://pkg.osquery.io/rpm/GPG | sudo tee /etc/pki/rpm-gpg/RPM-GPG-KEY-osquery

Instala el paquete osquery en CentOS 7.

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

Espera a que se instalen todos los paquetes.

Instalar osquery

Paso 2 – Uso básico del modo interactivo de osqueryi

osquery proporciona dos interfaces principales a los usuarios, osqueryi, y osqueryd.

osqueryi es la consola de consulta interactiva de osquery. Es como el shell de comandos ‘mysql’ en MySQL y el shell ‘psql’ en la base de datos PostgreSQL.

En este paso, aprenderemos el uso básico del modo interactivo ‘osqueryi’.

Escribe el comando ‘osqueryi’ en el terminal del servidor, y obtendrás el modo interactivo de consola osquery.

osqueryi

A continuación, aprenderemos los comandos básicos del modo de consola osqueryi.

Mostrar todos los comandos básicos disponibles en el modo interactivo osqueryi.

.help

utilizando el comando osqueryi

Mostrar las configuraciones y ajustes actuales de osquery.

.show

Mostrar la configuración de osquery

Osquery proporciona múltiples modos de vista para mostrar los resultados de las consultas. El modo por defecto es el modo «bonito».

Ahora cambiaremos el modo de vista de los resultados de la consulta, para esta guía, utilizaremos el modo ‘línea’.

.mode csv
.mode list
.mode column
.mode line
.mode pretty

Osquery expone el sistema operativo como un sistema de base de datos relacional. Toda la información sobre el sistema se almacena en las tablas de osquery y podemos explorar toda la información del sistema consultando todas las tablas disponibles.

Para obtener una lista de todas las tablas disponibles en osquery, ejecuta el siguiente comando.

.tables

Obtener una lista de todas las tablas

Una vez que conozcamos todas las tablas disponibles en el sistema osquery, miraremos las columnas.

Utiliza el siguiente comando para obtener el esquema (columnas, tipos) de las tablas.

.schema users
.schema processes

Obtener columnas de osquery

Y obtendrás todas las columnas del esquema de la tabla.

Paso 3 – Monitorización básica de Linux mediante query

En este paso, monitorizaremos un sistema Linux en vivo utilizando el osquery. Monitorizaremos la información del perfil del sistema, los usuarios, las interfaces de red, etc. a través del modo interactivo de osqueryi.

Obtener información del sistema

Muestra detalles sobre el hardware del sistema.

SELECT * FROM system_info;
SELECT hostname, cpu_type, physical_memory, hardware_vendor, hardware_model FROM system_info;

Mostrar los detalles del hardware del sistema

Obtener la versión del sistema operativo

Muestra la información actual del sistema operativo, incluyendo la versión del SO, la plataforma, el parche del SO y el nombre del código.

SELECT * FROM os_version;

Mostrar detalles sobre el SO

Ver la versión del kernel y los módulos

Para comprobar la información del núcleo del sistema, osquery proporciona las tablas ‘kernel_info’ y ‘kernel_modules’.

Muestra el núcleo utilizado por el sistema.

SELECT * FROM kernel_info;

Muestra todos los módulos del núcleo cargados en el sistema.

SELECT * FROM kernel_modules LIMIT 5;

obtener detalles sobre el Kernel Linux utilizado

Comprobar el repositorio y los paquetes

osquery proporciona tablas para comprobar los repositorios y los paquetes instalados tanto en Linux Ubuntu como en CentOS.

– En Ubuntu

En Ubuntu, podemos comprobar los repositorios disponibles a través de ‘apt_sources’ y comprobar los paquetes instalados a través de ‘deb_packages’.

Comprueba todos los repositorios disponibles en Ubuntu.

SELECT * FROM apt_sources;
SELECT name, base_uri, release, maintainer, components FROM apt_sources ORDER BY name;

Comprueba todos los paquetes instalados a través de la tabla deb_packages.

SELECT * FROM deb_packages;

Muestra sólo el nombre del paquete y la versión.

SELECT name, version FROM deb_packages ORDER BY name;

Comprobar los paquetes instalados en Ubuntu

Para un paquete concreto, añade el filtro de nombre.

SELECT name, version FROM deb_packages WHERE name="nginx";

obtener detalles sobre un paquete específico, en este caso nginx

– En CentOS

En CentOS, podemos comprobar el repositorio disponible a través de ‘yum_sources’ y comprobar los paquetes instalados a través de ‘rpm_packages’.

Comprueba todos los repositorios disponibles de CentOS.

SELECT * FROM yum_sources;
SELECT name, baseurl, enabled FROM yum_sources;

Comprueba los repositorios habilitados añadiendo el filtro ‘enabled’.

SELECT name, baseurl, enabled FROM yum_sources WHERE enabled=1;

Obtener detalles de los paquetes en CentOS

Comprueba todos los paquetes instalados mediante la tabla rpm_packages.

SELECT * FROM rpm_packages;
SELECT name, version FROM rpm_packages ORDER BY name;

Para un nombre de paquete específico, añade el filtro de nombre.

SELECT name, version FROM rpm_packages WHERE name="firewalld";

Detalles sobre Firewalld

Información del disco de montaje

Podemos utilizar la tabla de montajes para comprobar todos los detalles sobre el disco del sistema, incluyendo los inodos libres, las banderas, el tipo, etc.

Comprueba todos los discos montados por el sistema.

SELECT * FROM mounts;
SELECT device, path, type, inodes_free, flags FROM mounts;

Para el tipo de dispositivo específico.

SELECT device, path, type, inodes_free, flags FROM mounts WHERE type="ext4";
SELECT device, path, type, inodes_free, flags FROM mounts WHERE type="tmpfs";

Conseguir montajes de disco

Información sobre la memoria

Comprueba la memoria del sistema en bytes.

SELECT * FROM memory_info;

Obtén los detalles de la memoria

Información de la interfaz de red

Comprobación de la dirección de red mediante ‘direcciones_de_interfaz’.

SELECT * FROM interface_addresses;

Información de la interfaz de red

Comprobación de los detalles de la interfaz de red mediante «detalles_de_interfaz».

SELECT * FROM interface_details;
SELECT interface, mac, ipackets, opackets, ibytes, obytes FROM interface_details;

Detalles de la interfaz de red

Tiempo de actividad del servidor

Comprobación del tiempo de actividad del servidor.

SELECT * FROM uptime;

Comprobación del usuario

osqery proporciona tablas detalladas para comprobar los usuarios del sistema. Podemos utilizar la tabla ‘users’ para comprobar todos los usuarios del sistema, utilizar la tabla ‘last’ para comprobar el último inicio de sesión de los usuarios, y utilizar la tabla ‘logged_in_users’ para obtener el usuario conectado con el shell activo.

Para comprobar todos los usuarios disponibles en el servidor, utiliza la tabla ‘users’.

SELECT * FROM users;

Para los usuarios normales, podemos especificar el uid a ‘>=1000’.

SELECT * FROM users WHERE uid>=1000;

Datos del usuario del sistema

Para comprobar los últimos usuarios conectados, utiliza la tabla ‘last’.

SELECT * FROM last;

Último acceso

Para los usuarios normales, pon el ‘tipo’ a ‘7’.

SELECT username, time, host FROM last WHERE type=7;

Obtener detalles sobre los usuarios normales solamente

Para comprobar los usuarios conectados con shell activo, utiliza las tablas ‘logged_in_users’.

SELECT * FROM logged_in_users;

Tablas IP Información del cortafuegos

Con la tabla ‘tables’, podemos comprobar todas las reglas disponibles del cortafuegos, incluyendo la cadena, la política, la IP src/dst y el puerto, etc.

Mostrar todas las reglas iptables.

SELECT * FROM iptables;

Especifica la regla utilizando la consulta personalizada que aparece a continuación.

SELECT chain, policy, src_ip, dst_ip FROM iptables WHERE chain="POSTROUTING" order by src_ip;

Tablas IP Información del cortafuegos

Información del proceso

Podemos comprobar todos los procesos de la aplicación utilizando la tabla «procesos». Proporciona información detallada sobre el proceso, incluyendo pid, nombre, ruta, comando, etc.

Consulta básica de procesos para comprobar todas las aplicaciones en ejecución.

SELECT * FROM processes;

Especifica las columnas de pid, etc., la ruta y el comando.

SELECT pid, name, path, cmdline FROM processes;

Detalles sobre los procesos de Linux

Comprobación del trabajo cron

Comprueba el trabajo cron disponible y la hora de ejecución del script utilizando la tabla ‘crontab’.

SELECT * FROM crontab;

Cronjobs

Archivo binario SUID

SUID (Set owner User ID up on execution) es un tipo especial de permisos de archivo otorgados a un archivo y, en su mayoría, a archivos binarios ejecutables.

Comprueba todos los disponibles de dicho archivo binario.

SELECT * FROM suid_bin;

Especifica el nombre de usuario y de grupo.

SELECT * FROM suid_bin WHERE username="root" AND groupname="nobody" order by path;

Lista de archivos SUID

Y todo lo anterior es la monitorización básica del sistema Linux mediante osquery.

Referencia

También te podría gustar...