A propos des requêtes

Les requêtes Cloud Guard vous permettent de créer des requêtes pour obtenir des informations sur l'état de vos ressources. Vous pouvez réexécuter des requêtes passées, enregistrer des requêtes favorites et créer des requêtes à la demande.

La sécurité d'instance, qui exécute OSQuery sous le capot, prend en charge les requêtes SQL telles qu'elles sont comprises par SQLite. Ces requêtes SQL peuvent inspecter vos hôtes en temps quasi réel à la recherche de menaces, de détections ou de surveillance générale des opérations.

Vous pouvez exécuter des requêtes une seule fois ou convertir des requêtes que vous avez déjà exécutées en requêtes programmées à exécuter à une cadence définie et envoyer des résultats au service OCI Logging pour créer des problèmes Cloud Guard ou exporter des informations vers un SIEM 3P. Vous pouvez également réexécuter des requêtes qui ont déjà été exécutées.

Remarque

Les requêtes ne peuvent contenir qu'une instruction de requête par demande.

Requêtes à la demande

Une requête à la demande ou personnalisée est une requête unique écrite à l'aide de OSQuery qui utilise des requêtes SQL conformes à SQLite. La requête est exécutée par la sécurité d'instance sur une cible.

Vous pouvez exécuter une requête à la demande sur une instance unique et valider les résultats avant de l'exécuter sur le parc.

Vous pouvez réexécuter des requêtes et les enregistrer en tant que favoris pour les réexécuter.

Remarque

Lorsque vous créez et utilisez des requêtes, vous devez prendre en compte les points suivants :
  • L'exécution de requêtes dans des environnements de production peut avoir un impact sur les ressources de CPU et de mémoire, de sorte que :
    • Limitez les groupes d'utilisateurs ayant accès aux requêtes.
    • Testez les requêtes sur une seule instance avant de les exécuter sur l'ensemble du parc.

Les résultats de requête à la demande sont automatiquement supprimés au bout de deux jours.

Requêtes programmées

Les requêtes programmées sont créées à partir de requêtes précédemment exécutées que vous voulez à présent exécuter périodiquement sur votre parc afin de collecter les résultats bruts pour le post-traitement. Vous sélectionnez la requête et choisissez les cibles sur lesquelles l'exécuter, définissez la fréquence de son exécution et configurez le service Logging pour enregistrer les résultats.

Contrôle de l'accès aux requêtes

Vous pouvez contrôler l'accès aux requêtes en créant des groupes dynamiques et en utilisant des stratégies. Voir :

A propos d'osquery

Les requêtes sont des instructions SQL compréhensibles SQLite construites à l'aide du langage SQL OSquery.

OSquery est un agent hôte performant, open source et multiplateforme qui vous permet d'obtenir de la visibilité et des informations sur votre parc. Il peut collecter et normaliser des données indépendamment du système d'exploitation tout en augmentant la visibilité sur votre infrastructure. OSquery peut aider toute équipe de sécurité à détecter les menaces, les analyses médico-légales et les intrusions en fournissant des vues en temps réel de chaque processus en cours d'exécution et de chaque connexion réseau. OSquery est fourni avec le support de centaines de tables couvrant tout, des processus en cours d'exécution aux extensions de noyau chargées.

Introduction à OSquery

La collecte des bonnes données nécessite de poser les bonnes questions. Pour commencer, ils doivent connaître l'emplacement des données pour savoir comment les demander. La seule façon de poser les bonnes questions est de comprendre comment poser, et cela revient à connaître le schéma.

Comprenez le schéma : https://osquery.io/schema/5.5.1/.

Au 7 mai 2024, le schéma comptait 274 tables. Vous pouvez utiliser toutes les tables, à l'exception de :

  • Tables dont le nom contient _events.
  • Tables nécessitant la prise en charge de YARA.
  • Tables curl et carves.

Meilleures pratiques pour les requêtes

Appliquez les meilleures pratiques suivantes :

  • N'oubliez pas que les requêtes ne peuvent contenir qu'une seule instruction par requête.
  • Formatez la requête pour qu'elle soit facile à lire et pour qu'elle reste simple.
  • Utilisez les recherches Join et Sub judicieusement.
  • Définissez les informations que vous souhaitez collecter et définissez la portée de la requête sur ces informations.

    Par exemple, si vous souhaitez exécuter des processus qui pourraient consommer beaucoup de ressources sur l'instance, vous pouvez écrire :

    SELECT * from processes

    mais cela générerait un grand volume de données, peut-être la plupart inutiles.

    Il est préférable de sélectionner uniquement les colonnes dont vous avez besoin, et de définir un ordre et une limite.

    Voici un exemple qui vous permet d'obtenir une table bien formatée pour les 10 principaux processus par consommation de mémoire.

    SELECT pid, name, ROUND((total_size * '10e-7'), 2) AS memory_used FROM processes ORDER BY total_size DESC LIMIT 10;

Packs de requêtes

Les packs de requêtes OSquery sont des ensembles de requêtes prédéfinis ou personnalisés organisés par type, tels que la conformité ou la gestion des vulnérabilités. Vous pouvez utiliser des packs de requêtes pour vous aider à comprendre comment votre système répond aux ensembles de requêtes et, si nécessaire, adapter les requêtes à votre environnement.

Pour en savoir plus sur les packs de requêtes, consultez osquery.readthedocs.io, Packages de requêtes.

Vous pouvez trouver des packs de requêtes utiles en ligne, par exemple celui-ci sur GitHub, https://github.com/osquery/osquery/tree/master/packs.

Exemples de requêtes

Pour commencer, vous pouvez exécuter des requêtes locales de base telles que les utilisateurs SELECT * FROM ou SELECT * FROM processed LIMIT 10 pour en savoir plus sur le fonctionnement des tables.

Nous avons également dressé une liste de requêtes suggérées pour vous aider à être opérationnel.

  1. Utilisateurs : (users) recherchez tous les comptes utilisateur locaux qui existent sur un ordinateur.

    Linux (Ubuntu) :

    SELECT * FROM users WHERE gid < 65534 AND uid >= 1000;
    Remarque

    uid 1000 est l'endroit où les utilisateurs commencent généralement sur Linux.

    Linux : cette requête recherche tous les utilisateurs qui ont des shells de connexion réels (pas bin/false ou bin/true, avec des allocations pour eux vivant à des endroits différents, par exemple, /usr/bin/false ou /bin/false.

    SELECT * FROM users WHERE shell NOT LIKE '%false' AND shell NOT LIKE '%true';
  2. Sockets ouverts de processus (process_open_sockets) : recherche les processus effectuant des connexions réseau, autres que des connexions Web.
    SELECT s.pid, p.name, local_address, remote_address, family, protocol, local_port, remote_port FROM process_open_sockets s JOIN processes p ON s.pid = p.pid WHERE remote_port NOT IN (80, 443) AND local_port NOT IN (0) AND family = 2;
  3. Ports d'écoute (listening_ports) : recherche les ports ouverts sur un système.
    SELECT DISTINCT p.pid, p.name, l.port FROM listening_ports AS l JOIN processes as p ON l.pid = p.pid WHERE l.address = '0.0.0.0';
  4. Utilisateurs connectés : (logged_in_users) indique qui est actuellement connecté à un système.
    SELECT liu.*, p.name, p.cmdline, p.cwd, p.root FROM logged_in_users liu, processes p WHERE liu.pid = p.pid;
  5. Fichier (file) : renvoie des informations sur le fichier spécifié sur le disque. Les requêtes suivantes permettent de rechercher tous les fichiers de tous les dossiers de téléchargements utilisateur à un niveau de profondeur de dossier.

    Linux:

    SELECT file.path, users.username AS owner, groups.groupname AS groups, datetime(file.btime,'unixepoch') AS created, datetime(file.mtime,'unixepoch') AS last_mod, ROUND((file.size * 10e-7),4) AS size_mb FROM file JOIN users USING (uid) JOIN groups USING (gid) WHERE path LIKE '/home/%/Downloads/%%' ORDER BY last_mod DESC;

    Windows :

    SELECT file.path, users.username AS owner, datetime(file.btime,'unixepoch') AS created, datetime(file.mtime,'unixepoch') AS last_mod, ROUND((file.size * 10e-7),4) AS size_mb FROM file JOIN users USING (uid) WHERE path LIKE 'c:\Users\%\Downloads\%%' ORDER BY last_mod DESC;