Cómo monitorear la integridad de los archivos en Linux usando Osquery

Cómo monitorear la integridad de los archivos en Linux usando Osquery

El concepto básico involucrado con el uso de la aplicación Osquery es la "abstracción tabular" de muchos aspectos del sistema operativo, como procesos, usuarios, etc. Los datos se almacenan en tablas que se pueden consultar utilizando Sql Sintaxis, directamente a través del Osqueryi caparazón, o a través del Osqueryd demonio.

En este tutorial veremos cómo instalar la aplicación, cómo ejecutar consultas básicas y cómo usar Fim (Monitoreo de integridad de archivos) como parte de su trabajo de administración de sistemas de Linux.

En este tutorial aprenderás:

  • Cómo instalar Osquery
  • Cómo enumerar las tablas disponibles
  • Cómo realizar consultas desde el shell de Osqueryi
  • Cómo usar el demonio Osqueryd para monitorear la integridad de los archivos
Cómo monitorear la integridad de los archivos en Linux usando Osquery

Requisitos y convenciones de software utilizados

  • Conocimientos básicos de los conceptos SQL
  • Permisos de raíz para realizar tareas administrativas
Requisitos de software y convenciones de línea de comandos de Linux
Categoría Requisitos, convenciones o versión de software utilizada
Sistema Independiente de la distribución
Software Úsquería
Otro
Convenciones # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominio
ps - Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado

Instalación

Básicamente tenemos dos opciones para instalar Úsquería: El primero consiste en descargar el paquete apropiado para nuestro sistema desde el sitio web oficial; El segundo, generalmente preferido, es agregar el repositorio de Osquery a nuestras fuentes de software de distribución. Aquí exploraremos brevemente ambas opciones.





Instalación a través del paquete

Desde el sitio web oficial de Osquery es posible descargar firmado debutante y rpm paquetes o más tarballs genéricos. Como lo primero que seleccionamos la versión que queremos instalar, luego descargamos un paquete.

El consejo es seleccionar la última versión disponible (4.1.2 en el momento de la escritura). Una vez que se descarga el paquete, podemos instalarlo utilizando nuestro Administrador de paquetes de distribución. Por ejemplo, para instalar el software en un sistema Fedora (suponiendo que el paquete se encuentre en nuestro directorio de trabajo actual), ejecutaríamos:

$ sudo dnf instalación ./OSQUERY-4.1.2-1.Linux.x86_64.rpm

Usando un repositorio

Como alternativa podemos agregar el rpm o debutante repositorio de nuestra distribución. Si estamos utilizando una distribución basada en RPM, podemos ejecutar los siguientes comandos para lograr la tarea:

$ curl -l https: // pkg.Úsquería.IO/RPM/GPG | sudo tee/etc/pki/rpm-gpg/rpm-gpg-key-osquery $ sudo yum-config-manager --add-repo https: // pkg.Úsquería.IO/RPM/OSQUERY-S3-RPM.Repo $ sudo yum-config-manager-insequery-s3-rpm-repo $ sudo yum instalación

Con los comandos de Linux arriba, agregamos la tecla GPG Pulic utilizada para firmar los paquetes a nuestro sistema, luego agregamos el repositorio. Finalmente, instalamos el paquete de Osquery. Darse cuenta de beque, En versiones recientes de Fedora y Centos/Rhel es solo un enlace simbólico a DNF, Entonces, cuando invocamos el primero, el segundo se usa en su lugar.

Si estamos ejecutando una distribución basada en Debian, en su lugar, podemos agregar el repositorio de DEB a nuestras fuentes de software ejecutando:



$ sudo apt-key adv-keyserver keyserver.ubuntu.com--recv-keys 1484120aC4e9f8a1a577aeeeeeeeeee97a80c63c9d8b80b $ sudo add-apt-repository 'deb [arch = amd64] https: // pkg.Úsquería.IO/Deb Deb Main '$ sudo apt-get actualización $ sudo apt-get install oSquery

Una vez que el paquete está instalado, podemos echar un vistazo al uso básico del software.

Uso básico

Osquery nos permite monitorear varios aspectos de un sistema operativo que adopta una "abstracción tabular", utilizando una sintaxis SQL similar a la utilizada en sqlite bases de datos. Las consultas se ejecutan en tablas que resume varios aspectos del sistema operativo, como procesos y servicios.

Podemos ejecutar las consultas directamente usando el Osqueryi caparazón interactivo, o podemos programarlos a través del Osqueryd demonio. Aquí hay un ejemplo de una consulta para enumerar todas las tablas disponibles (la lista completa con la descripción de las tablas también se puede encontrar
en línea):

$ OSQUERYI OSQUERY> .Tablas => ACPI_TABLES => apt_sources => arp_cache => Atom_packages => augeas => autorized_keys => block_devices => carbon_black_info => falles => chrome_extensions => cpu_time => cpuid => crontab => curl => curl_certificate => deb_packages > device_file => device_hash => device_partitions => disk_encryption => dns_resolvers => docker_container_labels => docker_container_mounts => docker_container_networks => docker_container_ports => docker_container_processes => docker_container_stats => docker_containers => docker_image_labels => docker_images => docker_info => docker_network_labels => docker_networks => docker_version => docker_volume_labels => docker_volumes => ec2_instance_metadata => ec2_instance_tags => elf_dynamic => elf_info => eft_sections => eLf_segments => Elf_symbols => etc_hosts => etc_prots grupos =>hardware_events => hash => Intel_me_info => interface_addresses => interface_details => interface_ipv6 => iPtables => kernel_info => kernel_integity => kernel_modules => kenel_hosts => last => listen_ports => lldp_neighbors > md_devices => md_drives => md_personalities => memoria_array_mapped_addresses => memoria_arrays => memoria_device_mapped_addresses => memoria_devices => memoria_error_info => Memory_info => Memory_map => Monta => msr => npm_packages => => osquery_extensions => osquery_flags => osquery_info => osquery_packs => osquery_registry => osquery_schedule => pci_devices => plataforma_info => portage_keywords => portage_packages => portage_use => process_envs => process_events =>>> proceso => process_open_files =>Process_open_sockets => procesos => prometheus_metrics => python_packages => rutas => rpm_package_files => rpm_packages => selinux_events => sharw => shared_memory => shell_history => smart_drive_info => smbios_tables => soce_evalk_evals => > syslog_events => system_controls => system_info => time => ulimit_info => endtime => usb_devices => user_events => user_groups => user_ssh_keys => ussers => yara => yara_events => yum_sources


Ejecutando el Osqueryi Comando Entramos en el shell interactivo; De esto, podemos emitir nuestras consultas e instrucciones. Aquí hay otro ejemplo de una consulta, esta vez para enumerar todos los procesos de ejecución pid y nombre. La consulta se realiza en el proceso Tabla (la salida de la consulta se ha truncado por conveniencia):

Osquery> Seleccionar PID, nombre de los procesos; +-------+------------------------------------+| PID | nombre | +-------+------------------------------------+| 1 | Systemd | | 10 | rcu_sched | | 10333 | KWorker/U16: 5-Events_Unbound | | 10336 | KWorker/2: 0-Events | | 11 | migración/0 | | 11002 | KWORKER/U16: 1-KCRYPTD/253: 0 | | 11165 | KWorker/1: 1-Events | | 11200 | KWorker/1: 3 eventos | | 11227 | Bash | | 11368 | Osqueryi | | 11381 | KWorker/0: 0-Events | | 11395 | Contenido web | | 11437 | KWorker/0: 2 eventos | | 11461 | KWORKER/3: 2-EVENTS_POWER_EFFIENCE | | 11508 | KWorker/2: 2 | | 11509 | KWorker/0: 1-Events | | 11510 | KWORKER/U16: 2-KCRYPTD/253: 0 | | 11530 | Bash | […] | +-------+------------------------------------+ 
Copiar

Incluso es posible realizar consultas en tablas unidas usando el UNIRSE Declaración, al igual que solemos hacer en bases de datos relacionales. En el siguiente ejemplo realizamos una consulta en el procesos mesa, unida con el usuarios uno a través del uid columna:

OSQuery> Seleccionar procesos.PID, procesos.Nombre, usuarios.Nombre de usuario de los procesos Unirse a los usuarios en los procesos.uid = usuarios.uid; +-------+-------------------------------+--------- ---------+ | PID | nombre | nombre de usuario | +-------+-------------------------------+--------- ---------+ | 1 | Systemd | raíz | | 10 | rcu_sched | raíz | | 11 | migración/0 | raíz | | 11227 | Bash | EGDOC | | 11368 | Osqueryi | EGDOC | | 13 | CPUHP/0 | raíz | | 14 | CPUHP/1 | raíz | | 143 | Kintegityd | raíz | | 144 | Kblockd | raíz | | 145 | blkcg_punt_bio | raíz | | 146 | tpm_dev_wq | raíz | | 147 | ata_sff | raíz | […] | 9130 | Contenido web | EGDOC | | 9298 | Contenido web | EGDOC | | 9463 | GVFSD-Metadata | EGDOC | | 9497 | GVFSD-NETWork | EGDOC | | 9518 | GVFSD-DNSSD | EGDOC | +-------+-------------------------------+------------------+ 
Copiar

Monitoreo de integridad de archivos (FIM)

Hasta ahora usamos Úsquería a través del caparazón interactivo: Osqueryi. Usar Fim (Monitoreo de integridad de archivos), queremos usar el Osqueryd demonio en su lugar. A través del archivo de configuración, proporcionamos una lista de los archivos que queremos monitorear. Eventos como los cambios de atributo que involucran los archivos y directorios especificados se registran en el file_events mesa. El demonio ejecuta una consulta en esta tabla después de un intervalo de tiempo específico y notifica en los registros cuando se encuentran nuevos registros. Veamos un ejemplo de configuración.

Configuración

El archivo de configuración principal para Osquery es /etc/osquery/osquery.confusión. El archivo no existe de forma predeterminada, por lo que debemos crearlo. La configuración se proporciona en Json formato. Supongamos que queremos monitorear todos los archivos y directorios en /etc; Así es como configuraríamos la aplicación:

"Opciones": "Disable_events": "False", "programar": "file_events": "consulta": "seleccione * de file_events;", "intervalo": 300, "file_paths":  "etcétera etcétera/%%" ], ,  
Copiar

Analicemos la configuración anterior. En primer lugar, en el opción Sección, establecemos deshabilitar_EVENTS a "FALSO", Para habilitar los eventos de archivo.

Después de eso, creamos el cronograma Sección: Dentro de esta sección podemos describir y crear varias consultas programadas con nombre. En nuestro caso, creamos una consulta que selecciona todas las columnas del file_events tabla, que está destinada a ser ejecutada cada 300 segundos (5 minutos).

Después de programar la consulta, creamos el file_paths sección, donde especificamos los archivos a ser monitoreados. En esta sección, cada clave representa el nombre de un conjunto de archivos a ser monitoreados (una categoría en la jerga de Osquery). En este caso, la clave "ETC" hace referencia a una lista con solo una entrada, /etc/%%.

Que De % El símbolo representa? Al especificar rutas de archivo podemos usar estándar (*) o SQL (De %) comodines. Si se proporciona un solo comodín, selecciona todos los archivos y directorios existentes en el nivel especificado. Si se proporciona un comodín doble, selecciona todos los archivos y carpetas recursivamente. Por ejemplo, el /etc/% La expresión coincide con todos los archivos y carpetas un nivel en /etc, mientras /etc/%% coincide con todos los archivos y carpetas en /etc recursivamente.

Si necesitamos, también podemos excluir archivos específicos de la ruta que proporcionamos, utilizando el excluir_paths Sección en el archivo de configuración. En la sección solo podemos hacer referencia a categorías definidas en el file_paths Sección, ("etc" en este caso). Proporcionamos la lista de archivos que se excluirán:

 "Exclude_paths": "etc": ["/etc/alias"]
Copiar

Justo como ejemplo, excluimos el /etc/alias Archivo desde la lista. Así es como se ve nuestra configuración final:

"Opciones": "Disable_events": "false", "programar": "file_events": "consulta": "seleccione * de file_events;", "intervalo": 20, "file_paths":  "etc": ["/etc/%%"], "Exclude_paths": "etc": ["/etc/aliases"]
Copiar

Comenzando el demonio

Con nuestra configuración en su lugar, podemos iniciar el Osqueryd demonio:

$ sudo systemctl start Osqueryd

Para hacer que el demonio comience automáticamente en el arranque, debemos ejecutar:

$ sudo systemctl habilita osqueyd

Una vez que el demonio se está ejecutando, podemos verificar nuestros trabajos de configuración. Solo como ejemplo, modificaremos los permisos del /etc/fstab archivo, cambiándolos de 644 a 600:

$ sudo chmod 600 /etc /fstab

Ahora podemos verificar el cambio en el archivo se ha registrado leyendo el /var/log/Osquery/Osqueryd.resultados.registro archivo. Aquí está la última línea del archivo (embellecido):



"name": "file_events", "hostIdentifier": "fingolfin", "calendtime": "lun 30 de diciembre 19:57:31 2019 UTC", "untime": 1577735851, "Epoch": 0, "contador": 0, "LognumericsAsnumbers": False, "Columnas": "Acción": "Attributes_Modified", "Atime": "1577735683", "Categoría": "etc", "ctime": "15777735841", "GID": " 0 "," Hashed ":" 0 "," inode ":" 262147 "," md5 ":" "," modo ":" 0600 "," mtime ":" 1577371335 "," sha1 ":" ",", "," Sha256 ":" "," tamaño ":" 742 "," Target_path ":"/etc/fstab "," Time ":" 15777735841 "," Transaction_id ":" 0 "," uid ":" 0 ", "Acción": "Agregado"
Copiar

En el registro de arriba, podemos ver claramente que un Atributos_modificado La acción (línea 10) ocurrió en el Target_path "/Etc/fstab" (línea 23), que es parte del "etc" categoría (Línea 12). Es importante notar que si consultamos el file_events mesa del Osqueryi Shell, no veremos filas, desde el Osqueryd demonio y Osqueryi No te comunices.

Conclusiones

En este tutorial vimos los conceptos básicos involucrados en el uso del Úsquería Aplicación, que resume varios conceptos del sistema operativo utilizando datos tabulares, podemos consultar utilizando la sintaxis SQL. Vimos cómo instalar la aplicación, cómo realizar consultas básicas utilizando el Osqueryi shell, y finalmente cómo configurar el monitoreo de archivos utilizando el Osqueryd demonio. Acabamos de rascar la superficie de lo que la aplicación puede hacer; Como siempre, el consejo es echar un vistazo a la documentación del proyecto para un conocimiento más profundo.

Tutoriales de Linux relacionados:

  • Cosas para instalar en Ubuntu 20.04
  • La mejor herramienta de monitoreo de sistemas para Linux
  • Ubuntu 20.04 Monitoreo del sistema con widgets de Conky
  • Ubuntu 22.04 Monitoreo del sistema con widgets de Conky
  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Optimización de rendimiento de Linux: herramientas y técnicas
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Cosas para instalar en Ubuntu 22.04
  • Cómo Grep Correntemente para el texto en scripts bash
  • Archivos de configuración de Linux: los 30 principales más importantes