Comment surveiller l'intégrité des fichiers sur Linux à l'aide d'OsQuery

Comment surveiller l'intégrité des fichiers sur Linux à l'aide d'OsQuery

Le concept de base impliqué dans l'utilisation de l'application Osquery est «l'abstraction tabulaire» de nombreux aspects du système d'exploitation, tels que les processus, les utilisateurs, etc. Les données sont stockées dans des tables qui peuvent être interrogées en utilisant SQL syntaxe, directement via le Osqueryi coquille, ou via le osqueryd démon.

Dans ce tutoriel, nous verrons comment installer l'application, comment exécuter des requêtes de base et comment utiliser Fim (Surveillance de l'intégrité du fichier) dans le cadre de votre travail d'administration du système Linux.

Dans ce tutoriel, vous apprendrez:

  • Comment installer OsQuery
  • Comment répertorier les tables disponibles
  • Comment effectuer des requêtes de la coque Osqueryi
  • Comment utiliser le démon Osqueryd pour surveiller l'intégrité des fichiers
Comment surveiller l'intégrité des fichiers sur Linux à l'aide d'OsQuery

Exigences et conventions logicielles utilisées

  • Connaissance de base des concepts SQL
  • Permissions racinaires pour effectuer des tâches administratives
Exigences logicielles et conventions de ligne de commande Linux
Catégorie Exigences, conventions ou version logicielle utilisée
Système Indépendant de la distribution
Logiciel Osquery
Autre
Conventions # - Exige que les commandes Linux soient exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande
$ - Exige que les commandes Linux soient exécutées en tant qu'utilisateur non privilégié régulier

Installation

Nous avons essentiellement deux options à installer osquery: Le premier consiste à télécharger le package approprié pour notre système à partir du site officiel; La seconde, généralement préférée, est d'ajouter le référentiel OSQuery à nos sources de logiciels de distribution. Ici, nous explorerons brièvement les deux options.





Installation via le package

Du site officiel d'Osquery est possible de télécharger signé deb et RPM packages, ou plus de tarball génériques. En tant que première chose, nous sélectionnons la version que nous voulons installer, puis nous téléchargeons un package.

Le conseil est de sélectionner la dernière version disponible (4.1.2 au moment de l'écriture). Une fois le package téléchargé, nous pouvons l'installer en utilisant notre gestionnaire de packages de distribution. Par exemple, pour installer le logiciel sur un système Fedora (en supposant que le package se trouve dans notre répertoire de travail actuel), nous exécuterons:

$ sudo dnf install ./ OSQuery-4.1.2-1.linux.x86_64.RPM

Utilisation d'un référentiel

En tant qu'alternative, nous pouvons ajouter le RPM ou deb Référentiel à notre distribution. Si nous utilisons une distribution basée sur RPM, nous pouvons exécuter les commandes suivantes pour accomplir la tâche:

$ curl -l https: // pkg.osquery.IO / RPM / GPG | sudo tee / etc / pki / rpm-gpg / rpm-gpg-key-osquery $ sudo yum-config-manager --add-repo https: // pkg.osquery.IO / RPM / OSQuery-S3-RPM.Repo $ sudo yum-config-manager - Enable OSQuery-S3-RPM-repo $ sudo yum installer OSQuery

Avec les commandes Linux ci-dessus, nous ajoutons la clé GPG Pulic utilisée pour signer les packages à notre système, puis nous ajoutons le référentiel. Enfin, nous installons le package Osquery. Remarquerez que Miam, Dans les versions récentes de Fedora et Centos / Rhel n'est juste un lien symbolique vers DNF, Donc, quand nous invoquons l'ancien.

Si nous exécutons une distribution basée sur Debian, nous pouvons plutôt ajouter le référentiel Deb à nos sources logicielles en fonctionnant:



$ sudo apt-key adv - keyserver keyserver.ubuntu.com --rev-keys 1484120AC4E9F8A1A577AEEE97A80C63C9D8B80B $ sudo add-APT-Repository 'Deb [Arch = AMD64] https: // pkg.osquery.io / deb deb Main '$ sudo apt-get update $ sudo apt-get installer osquery

Une fois le package installé, nous pouvons jeter un œil à l'utilisation de base du logiciel.

Utilisation de base

OSQuery nous permet de surveiller divers aspects d'un système d'exploitation adoptant une «abstraction tabulaire», en utilisant une syntaxe SQL similaire à celle utilisée sur sqlite bases de données. Les requêtes sont exécutées sur des tables qui résument divers aspects du système d'exploitation, tels que les processus et les services.

Nous pouvons exécuter les requêtes directement en utilisant le Osqueryi Shell interactif, ou nous pouvons les planifier via le osqueryd démon. Voici un exemple de requête pour répertorier toutes les tables disponibles (la liste complète avec la description des tables peut également être trouvée
en ligne):

$ osqueryi osquery> .Tables => acpi_tables => apt_sources => arp_cache => atom_packages => Augeas => autorisé_keys => block_devices => carbon_black_info => scarves => chrome_extensions => cpu_time => cpuid => crontab = curl => curl_certtificator => deb_packages = crontab > 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 => elf_sections = elf_segments => elf_symoles => etc_hosts => etc_ad-ox => ecchevices => ecchet => ecchevil groupes =>hardware_events => hash => Intel_me_info => Interface_Address => interface_details => interface_ipv6 => iptables => kernel_info => kernel_integrity => kernel_modules => connu_hosts => last => écoute => lldp_neigh => lOggEfever => LOGGET > md_devices => md_drives => md_personalités => Memory_Array_Mapp => osquery_extensions => osquery_flags => osquery_info => osquery_packs => osquery_registry => osquery_schedule => pci_devices => plateforme_info => portage_keywords => Portage_Packages => Portage_Use = Process_envs => Processage => ProcessPace =)) process_open_files =>process_open_sockets => processus => prometheus_metrics => python_packages => itinéraires => rpm_package_files => rpm_packages => selinux_events => shadow => shared_memory => shell_history => smart_drive_info => SMBIO > syslog_events => System_Controls => System_Info => Time => ulimit_info => Uptime => USB_DEVICES => user_events => user_groups => user_ssh_keys => users => yara => yara_events => yum_sources


Exécuter le Osqueryi Commande Nous entrons le shell interactif; De là, nous pouvons émettre nos requêtes et nos instructions. Voici un autre exemple d'une requête, cette fois pour répertorier tous les processus en cours d'exécution piquer et nom. La requête est effectuée sur le processus Tableau (La sortie de la requête a été tronquée pour plus de commodité):

OSQuery> Sélectionnez PID, nom dans les processus; + ------- + ------------------------------------ + | pid | Nom | + ------- + ------------------------------------ + | 1 | systemd | | 10 | RCU_SCHED | | 10333 | kworker / u16: 5-events_unbound | | 10336 | KWORKER / 2: 0-EVENTS | | 11 | migration / 0 | | 11002 | kworker / u16: 1-kcryptd / 253: 0 | | 11165 | KWORKER / 1: 1-EVENTS | | 11200 | KWORKER / 1: 3-EVENTS | | 11227 | bash | | 11368 | Osqueryi | | 11381 | KWORKER / 0: 0-EVENTS | | 11395 | Contenu Web | | 11437 | KWORKER / 0: 2-EVENTS | | 11461 | kworker / 3: 2-events_power_efficient | | 11508 | kworker / 2: 2 | | 11509 | KWORKER / 0: 1-EVENTS | | 11510 | kworker / u16: 2-kcryptd / 253: 0 | | 11530 | bash | […] | +-------+------------------------------------+ 
Copie

Il est même possible d'effectuer des requêtes sur des tables jointes en utilisant le REJOINDRE déclaration, tout comme nous le faisons dans les bases de données relationnelles. Dans l'exemple ci-dessous, nous effectuons une requête sur le processus table, jointe au utilisateurs un via le uid colonne:

OSQuery> Sélectionnez les processus.PID, processus.nom, utilisateurs.Nom d'utilisateur à partir de processus Rejoignez des utilisateurs sur les processus.uid = utilisateurs.uid; + ------- + ------------------------------- + --------- --------- + | pid | Nom | Nom d'utilisateur | + ------- + ------------------------------- + --------- --------- + | 1 | systemd | Root | | 10 | RCU_SCHED | Root | | 11 | migration / 0 | Root | | 11227 | bash | Egdoc | | 11368 | Osqueryi | Egdoc | | 13 | CPUHP / 0 | Root | | 14 | CPUHP / 1 | Root | | 143 | kintegrityd | Root | | 144 | Kblockd | Root | | 145 | blkcg_punt_bio | Root | | 146 | TPM_DEV_WQ | Root | | 147 | ATA_SFF | Root | […] | 9130 | Contenu Web | Egdoc | | 9298 | Contenu Web | Egdoc | | 9463 | GVFSD-Metadata | Egdoc | | 9497 | GVFSD-Network | Egdoc | | 9518 | GVFSD-DNSSD | Egdoc | +-------+-------------------------------+------------------+ 
Copie

Surveillance de l'intégrité des fichiers (FIM)

Jusqu'à présent, nous avons utilisé osquery via la coque interactive: Osqueryi. Utiliser Fim (Surveillance de l'intégrité du fichier), nous voulons utiliser le osqueryd démon à la place. Via le fichier de configuration, nous fournissons une liste des fichiers que nous souhaitons surveiller. Des événements tels que les modifications d'attribut impliquant les fichiers et répertoires spécifiés sont enregistrés dans le file_events tableau. Le démon exécute une requête sur ce tableau après un intervalle de temps spécifié et en avertit dans les journaux lorsque de nouveaux enregistrements sont trouvés. Voyons un exemple de configuration.

Configuration de la configuration

Le fichier de configuration principal pour Osquery est / etc / osquery / osquery.confli. Le fichier n'existe pas par défaut, nous devons donc le créer. La configuration est fournie dans Json format. Supposons que nous voulons surveiller tous les fichiers et répertoires sous /etc; Voici comment nous configurerions l'application:

"Options": "Disable_events": "false", "schedule": "file_events": "query": "select * from file_events;", "interval": 300, "file_paths":  "etc/%%" ], ,  
Copie

Analysons la configuration ci-dessus. Tout d'abord, dans le options Section, nous définissons Disable_events pour "FAUX", Afin d'activer les événements de fichiers.

Après cela, nous avons créé le calendrier Section: À l'intérieur de cette section, nous pouvons décrire et créer diverses requêtes prévues nommées. Dans notre cas, nous avons créé une requête qui sélectionne toutes les colonnes dans le file_events table, qui est censée être exécutée chaque 300 secondes (5 minutes).

Après avoir planifié la requête, nous avons créé le file_paths Section, où nous avons spécifié les fichiers à surveiller. Dans cette section, chaque clé représente le nom d'un ensemble de fichiers à surveiller (une catégorie dans le jargon OSQuery). Dans ce cas, la clé «etc» fait référence à une liste avec une seule entrée, /etc/%%.

Ce que % le symbole représente? Lors de la spécification des chemins de fichier, nous pouvons utiliser la norme (*) ou SQL (%). Si un seul wildcard est fourni, il sélectionne tous les fichiers et répertoires existant au niveau spécifié. Si un double joker est fourni, il sélectionne tous les fichiers et dossiers récursivement. Par exemple, le /etc/% L'expression correspond à tous les fichiers et dossiers un niveau sous /etc, alors que /etc/%% correspond à tous les fichiers et dossiers sous /etc récursivement.

Si nous en avons besoin, nous pouvons également exclure des fichiers spécifiques du chemin que nous avons fourni, en utilisant le exclure_paths Section dans le fichier de configuration. Dans la section, nous ne pouvons que référencer les catégories définies dans le file_paths Section, («etc» dans ce cas). Nous fournissons la liste des fichiers à exclure:

 "exclure_paths": "etc": ["/ etc / alias"]
Copie

Tout comme un exemple, nous avons exclu le / etc / alias fichier de la liste. Voici à quoi ressemble notre configuration finale:

"Options": "Disable_events": "false", "Schedule": "File_events": "Query": "select * FROM File_events;", "Interval": 20, "file_paths":  "etc": ["/ etc / %%"], "exclure_paths": "etc": ["/ etc / alias"]
Copie

Commencer le démon

Avec notre configuration en place, nous pouvons démarrer le osqueryd démon:

$ sudo systemctl start osqueryd

Pour faire démarrer le démon automatique au démarrage, nous devons courir:

$ sudo systemctl activer Osqueyd

Une fois le démon est en cours d'exécution, nous pouvons vérifier que notre configuration fonctionne. À titre d'exemple, nous modifierons les autorisations du / etc / fstab fichier, en les modifiant de 644 pour 600:

$ sudo chmod 600 / etc / fstab

Nous pouvons maintenant vérifier que la modification du fichier a été enregistrée en lisant le / var / log / osquery / osqueryd.résultats.enregistrer déposer. Voici la dernière ligne du fichier (embelli):



"name": "file_events", "hostidentifier": "fingolfin", "calendartime": "lun 30 décembre 19:57:31 2019 UTC", "Unixtime": 1577735851, "epoch": 0, "compteur": 0, "LognumericsAsNumbers": false, "colonnes": "Action": "Attributes_Modified", "Atime": "1577735683", "catégorie": "etc.:" ctime ":" 1577735841 "," gid ":" 0 "," Hashed ":" 0 "," Inode ":" 262147 "," MD5 ":" "," mode ":" 0600 "," Mtime ":" 1577371335 "," Sha1 ":" "," sha256 ":" "," size ":" 742 "," cible_path ":" / etc / fstab "," time ":" 1577735841 "," transaction_id ":" 0 "," uid ":" 0 ", "Action": "ajouté"
Copie

Dans le journal ci-dessus, nous pouvons clairement voir qu'un Attributs_modified L'action (ligne 10) s'est produite sur le Target_path «/ Etc / fstab» (ligne 23), qui fait partie du «etc» catégorie (Ligne 12). Il est important de remarquer que si nous interrogeons le file_events table à partir du Osqueryi Shell, nous ne verrons aucune ligne, puisque le osqueryd démon, et Osqueryi Ne communiquez pas.

Conclusions

Dans ce tutoriel, nous avons vu les concepts de base impliqués dans l'utilisation du osquery Application, qui résume divers concepts de système d'exploitation à l'aide de données tabulaires que nous pouvons interroger en utilisant la syntaxe SQL. Nous avons vu comment installer l'application, comment effectuer des requêtes de base en utilisant le Osqueryi shell, et enfin comment configurer la surveillance des fichiers à l'aide du osqueryd démon. Nous avons juste gratté la surface de ce que l'application peut faire; Comme toujours, le conseil est de consulter la documentation du projet pour une connaissance plus approfondie.

Tutoriels Linux connexes:

  • Choses à installer sur Ubuntu 20.04
  • Meilleur outil de surveillance du système pour Linux
  • Ubuntu 20.04 Surveillance du système avec des widgets conky
  • Ubuntu 22.04 Surveillance du système avec des widgets conky
  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Optimisation des performances de Linux: outils et techniques
  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Choses à installer sur Ubuntu 22.04
  • Comment correctement grep pour le texte dans les scripts bash
  • Fichiers de configuration Linux: 30 premiers