Comment surveiller ton serveur Linux avec osquery

Osquery est un logiciel open source de surveillance, d’interrogation et d’analyse des systèmes d’exploitation. Créé par Facebook, il expose un système d’exploitation comme une base de données relationnelle haute performance qui peut être interrogée à l’aide de requêtes basées sur SQL.

Osquery est un logiciel multiplateforme, qui peut être installé sur Linux, Windows, MacOS et FreeBSD. Osquery nous permet d’explorer le profil du système d’exploitation, les performances, la sécurité et bien d’autres métriques en utilisant des requêtes basées sur SQL.

Dans ce tutoriel, je vais te montrer comment installer osquery sur les distributions Linux Ubuntu 18.04 LTS et CentOS 7. Nous installerons osquery, apprendrons à utiliser le mode interactif ‘osqueryi’ et à surveiller un système en direct avec osquery.

Conditions préalables

  • Système d’exploitation Linux (Ubuntu 18.04 ou CentOS 7)
  • Privilèges de racine

Ce que nous allons faire

  • Installer osquery sur le système d’exploitation Linux
  • Utilisation de base d’osqueryi en mode interactif
  • Surveillance du système à l’aide d’osquery

Étape 1 – Installer osquery sur le système d’exploitation Linux

osquery fournit son propre référentiel pour chaque plateforme. Dans cette étape, nous allons installer le paquet osquery à partir du dépôt officiel d’osquery.

Sur Ubuntu

Ajoute la clé osquery.

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

Installe le paquet osquery sur Ubuntu.

sudo add-apt-repository 'deb [arch=amd64] https://pkg.osquery.io/deb deb main'
sudo apt install osquery -y

Sur CentOS

Ajoute la clé osquery.

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

Installe le paquet osquery sur 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

Attends que tous les paquets soient installés.

Installe osquery

Étape 2 – Utilisation de base d’osqueryi Mode interactif

osquery fournit deux interfaces principales aux utilisateurs, osqueryi et osqueryd.

osqueryi est la console de requête interactive d’osquery. C’est comme le shell de commande ‘mysql’ sur la base de données MySQL et le shell ‘psql’ sur la base de données PostgreSQL.

Dans cette étape, nous allons apprendre l’utilisation de base du mode interactif ‘osqueryi’.

Tape la commande ‘osqueryi’ sur le terminal du serveur et tu obtiendras le mode console interactif osquery.

osqueryi

Ensuite, nous allons apprendre les commandes de base du mode console osqueryi.

Montre toutes les commandes de base disponibles sur le mode interactif osqueryi.

.help

en utilisant la commande osqueryi

Montre les configurations et paramètres actuels d’osquery.

.show

Afficher la configuration d'osquery

Osquery propose plusieurs modes d’affichage pour montrer les résultats des requêtes. Le mode par défaut est le mode ‘joli’.

Nous allons maintenant changer le mode d’affichage des résultats de la requête. Dans ce guide, nous utiliserons le mode ‘ligne’.

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

Osquery expose le système d’exploitation comme un système de base de données relationnelle. Toutes les informations sur le système sont stockées dans les tables d’osquery et nous pouvons explorer toutes les informations du système en interrogeant toutes les tables disponibles.

Pour obtenir une liste de toutes les tables disponibles dans osquery, exécute la commande ci-dessous.

.tables

Obtiens une liste de toutes les tables

Une fois que nous connaissons toutes les tables disponibles dans le système osquery, nous allons examiner les colonnes.

Utilise la commande suivante pour obtenir le schéma (colonnes, types) des tables.

.schema users
.schema processes

Obtenir des colonnes osquery

Et tu obtiendras toutes les colonnes du schéma de la table.

Étape 3 – Surveillance de base de Linux à l’aide d’osquery

Dans cette étape, nous allons surveiller un système Linux en direct à l’aide d’osquery. Nous surveillerons les informations de profil du système, les utilisateurs, les interfaces réseau, etc. grâce au mode interactif d’osqueryi.

Obtenir des informations sur le système

Affiche des détails sur le matériel du système.

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

Afficher les détails du matériel du système

Obtenir la version du système d’exploitation

Affiche les infos sur le système d’exploitation actuel, notamment la version de l’OS, la plateforme, le patch de l’OS et le nom de code.

SELECT * FROM os_version;

Montre les détails de l'OS

Afficher la version du noyau et les modules

Pour vérifier les informations sur le noyau du système, osquery fournit les tables ‘kernel_info’ et ‘kernel_modules’.

Montre le noyau utilisé par le système.

SELECT * FROM kernel_info;

Montre tous les modules du noyau chargés sur le système.

SELECT * FROM kernel_modules LIMIT 5;

obtenir des détails sur le noyau Linux utilisé

Vérification du référentiel et des paquets

osquery fournit des tableaux pour vérifier les dépôts et les paquets installés sur Linux Ubuntu et CentOS.

– Sur Ubuntu

Sur Ubuntu, nous pouvons vérifier les dépôts disponibles via ‘apt_sources’ et vérifier les paquets installés via ‘deb_packages’.

Vérifie tous les dépôts Ubuntu disponibles.

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

Vérifie tous les paquets installés à l’aide du tableau deb_packages.

SELECT * FROM deb_packages;

Affiche uniquement le nom du paquet et la version.

SELECT name, version FROM deb_packages ORDER BY name;

Vérifier les paquets installés sur Ubuntu

Pour un paquet spécifique, ajoute le filtre du nom.

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

obtenir des détails sur un paquet spécifique, dans ce cas nginx

– Sur CentOS

Sur CentOS, nous pouvons vérifier le dépôt disponible via ‘yum_sources’ et vérifier les paquets installés via ‘rpm_packages’.

Vérifie tous les référentiels CentOS disponibles.

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

Vérifie les référentiels activés en ajoutant le filtre ‘enabled’.

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

Obtenir des détails sur les paquets sur CentOS

Vérifie tous les paquets installés à l’aide du tableau rpm_packages.

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

Pour un nom de paquet spécifique, ajoute le filtre ‘name’.

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

Détails concernant Firewalld

Informations sur le disque de montage

Nous pouvons utiliser la table mounts pour vérifier tous les détails concernant le disque du système, notamment les inodes libres, les drapeaux, le type, etc.

Vérifie tous les disques montés par le système.

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

Pour le type de périphérique spécifique.

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

Obtenir des montages de disques

Info mémoire

Vérifie la mémoire du système en octets.

SELECT * FROM memory_info;

Obtiens des détails sur la mémoire

Informations sur l’interface réseau

Vérifie l’adresse réseau à l’aide de ‘interface_addresses’.

SELECT * FROM interface_addresses;

Informations sur l'interface réseau

Vérifie les détails de l’interface réseau à l’aide de ‘interface_details’.

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

Détails de l'interface réseau

Temps de fonctionnement du serveur

Vérifie le temps de fonctionnement du serveur.

SELECT * FROM uptime;

Vérification de l’utilisateur

osqery fournit des tableaux détaillés pour vérifier les utilisateurs du système. Tu peux utiliser le tableau ‘users’ pour vérifier tous les utilisateurs du système, utiliser le tableau ‘last’ pour vérifier la dernière connexion des utilisateurs et utiliser ‘logged_in_users’ pour obtenir l’utilisateur connecté avec le shell actif.

Pour vérifier tous les utilisateurs disponibles sur le serveur, utilise le tableau ‘users’.

SELECT * FROM users;

Pour les utilisateurs normaux, nous pouvons spécifier l’uid à ‘>=1000’.

SELECT * FROM users WHERE uid>=1000;

Détails de l'utilisateur du système

Pour vérifier les derniers utilisateurs connectés, utilise le tableau ‘last’.

SELECT * FROM last;

Dernière connexion

Pour les utilisateurs normaux, donne à ‘type’ la valeur ‘7’.

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

Obtiens des détails sur les utilisateurs normaux uniquement

Pour vérifier l’utilisateur connecté avec le shell actif, utilise les tables ‘logged_in_users’.

SELECT * FROM logged_in_users;

Tables IP Informations sur le pare-feu

Avec le tableau ‘tables’, nous pouvons vérifier toutes les règles disponibles du pare-feu, y compris la chaîne, la politique, l’IP src/dst et le port, etc.

Montre toutes les règles iptables.

SELECT * FROM iptables;

Spécifie la règle en utilisant la requête personnalisée ci-dessous.

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

Tables IP Infos sur le pare-feu

Info sur les processus

Nous pouvons vérifier tous les processus d’application en utilisant le tableau ‘processus’. Il fournit des informations détaillées sur le processus, notamment le pid, le nom, le chemin, la commande, etc.

Requête de base sur les processus pour vérifier toutes les applications en cours.

SELECT * FROM processes;

Spécifie les colonnes pour le pid, le chemin et la commande.

SELECT pid, name, path, cmdline FROM processes;

Détails sur les processus Linux

Vérification de la tâche Cron

Vérifie la tâche cron disponible et l’heure d’exécution du script à l’aide du tableau ‘crontab’.

SELECT * FROM crontab;

Cronjobs

Fichier binaire SUID

SUID (Set owner User ID up on execution) est un type spécial d’autorisations de fichiers données à un fichier et principalement aux fichiers exécutables binaires.

Vérifie toutes les autorisations disponibles pour le fichier binaire.

SELECT * FROM suid_bin;

Indique le nom d’utilisateur et le nom du groupe.

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

Liste des fichiers SUID

Et tout ce qui précède est la surveillance de base du système Linux à l’aide d’osquery.

Référence

Vous aimerez aussi...