Comment surveiller l'intégrité des fichiers sur Linux à l'aide d'OsQuery
- 3943
- 1166
- Emilie Colin
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
Exigences et conventions logicielles utilisées
- Connaissance de base des concepts SQL
- Permissions racinaires pour effectuer des tâches administratives
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