À propos des interrogations

Les interrogations du service de protection d'infrastructure en nuage vous permettent de créer des interrogations pour obtenir des informations sur l'état de vos ressources. Vous pouvez réexécuter des interrogations passées, enregistrer des interrogations favorites et créer des interrogations sur demande.

Instance Security, qui exécute OSQuery sous le capot, prend en charge les interrogations SQL telles que comprises par SQLite. Ces interrogations SQL peuvent inspecter vos hôtes en temps quasi réel pour la recherche de menaces, les détections ou la surveillance générale des opérations.

Vous pouvez exécuter des interrogations une seule fois ou convertir les interrogations que vous avez déjà exécutées en interrogations programmées à exécuter à une fréquence définie et envoyer les résultats au service de journalisation OCI pour créer des problèmes du service de protection d'infrastructure en nuage ou exporter des informations vers un module SIEM 3P. Vous pouvez également réexécuter des interrogations qui ont déjà été exécutées.

Note

Les interrogations ne peuvent contenir qu'un seul énoncé d'interrogation par demande.

Interrogations sur demande

Une interrogation sur demande ou personnalisée est une interrogation ponctuelle écrite à l'aide de OSQuery qui utilise des interrogations SQL conformes à SQLite. L'interrogation est exécutée par Instance Security sur une cible.

Vous pouvez exécuter une interrogation sur demande sur une seule instance et valider les résultats avant de l'exécuter sur l'ensemble du parc.

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

Note

Voici quelques éléments à prendre en compte lors de la création et de l'utilisation d'interrogations :
  • L'exécution d'interrogations dans des environnements de production peut avoir une incidence sur les ressources d'UC et de mémoire, de sorte que :
    • Limiter les groupes d'utilisateurs ayant accès aux interrogations.
    • Testez les interrogations sur une seule instance avant de les exécuter sur l'ensemble du parc.

Les résultats d'interrogation sur demande sont automatiquement supprimés après deux jours.

Interrogations programmées

Les interrogations programmées sont créées à partir d'interrogations exécutées précédemment que vous voulez maintenant exécuter périodiquement dans votre parc afin que vous puissiez collecter les résultats bruts pour le post-traitement. Vous sélectionnez l'interrogation et choisissez les cibles à exécuter, définissez la fréquence d'exécution et configurez le service de journalisation pour enregistrer les résultats.

Contrôle de l'accès aux interrogations

Vous pouvez contrôler l'accès aux interrogations en créant des groupes dynamiques et en utilisant des politiques. Voir :

À propos de OSquery

Les interrogations sont des énoncés SQL compréhensibles SQLite construits à l'aide du langage SQL OSquery.

OSquery est un agent hôte multiplateforme performant à code source libre qui vous permet d'obtenir de la visibilité et des données clés sur votre parc. Il peut collecter et normaliser les données indépendamment du système d'exploitation tout en augmentant la visibilité sur l'ensemble de votre infrastructure. OSquery peut aider toute équipe de sécurité à détecter les menaces, les analyses judiciaires 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 la prise en charge 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 que quiconque commence, il doit 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 il revient à connaître le schéma.

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

Au 7 mai 2024, le schéma contient 274 tables. Vous pouvez utiliser toutes les tables, à l'exception des éléments suivants :

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

Meilleures pratiques pour les interrogations

Suivez ces meilleures pratiques :

  • N'oubliez pas que les interrogations ne peuvent contenir qu'un seul énoncé d'interrogation par demande.
  • Formatez l'interrogation de sorte qu'elle soit facile à lire et qu'elle reste simple.
  • Utilisez les recherches Join et Sub judicieusement.
  • Définissez les informations que vous souhaitez collecter et étendez l'interrogation à 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 des données volumineuses, peut-être la plupart inutiles.

    Une meilleure pratique consisterait à sélectionner uniquement les colonnes dont vous avez besoin, et à définir un ordre par 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;

Ensembles d'interrogations

Les ensembles d'interrogations OSquery sont des jeux d'interrogations 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 ensembles d'interrogations pour vous aider à comprendre comment votre système répond aux jeux d'interrogations et, si nécessaire, à adapter les interrogations à votre environnement.

Pour en savoir plus sur les ensembles d'interrogations, voir osquery.readthedocs.io, Ensembles d'interrogations.

Vous pouvez trouver des ensembles d'interrogations utiles en ligne, par exemple celui-ci sur GitHub, https://github.com/osquery/osquery/tree/master/packs.

Exemples d'interrogations

Vous pouvez démarrer en exécutant certaines interrogations locales de base telles que les utilisateurs SELECT * FROM ou SELECT * FROM processed LIMIT 10 pour savoir comment fonctionnent les tables.

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

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

    Linux (Ubuntu) :

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

    uid 1000 est l'emplacement où les utilisateurs commencent généralement sous Linux

    Linux : Cette interrogation recherche tous les utilisateurs qui ont des interpréteurs de commandes de connexion réels (et non bin/false ou bin/true, avec des autorisations pour ceux qui vivent à différents endroits, par exemple /usr/bin/false ou /bin/false).

    SELECT * FROM users WHERE shell NOT LIKE '%false' AND shell NOT LIKE '%true';
  2. Process Open Sockets (process_open_sockets) : Recherche des processus établissant des connexions réseau, autres que les 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) : Retourne des informations sur le fichier spécifié sur le disque. Les interrogations suivantes permettent de rechercher tous les fichiers de tous les dossiers Téléchargements d'utilisateurs jusqu'à 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;