Utilisez SQL et osquery pour interroger votre matériel sous Linux –
Oubliez-vous toujours la syntaxe des commandes matérielles obscures que vous utilisez à peine? L’application osquery vous permet d’interroger le matériel, les utilisateurs et les performances de votre ordinateur Linux avec des commandes SQL standard.
Sommaire
L’application osquery
L’application osquery est un programme gratuit et open-source de la fondation osquery. Il rassemble une énorme quantité d’informations sur votre ordinateur Linux et le rend accessible en tant que pseudo-base de données. La base de données contient de nombreuses tables contenant différentes catégories d’informations. Les données des tables peuvent être récupérées à l’aide de commandes SQL (SQL).
osquery peut être utilisé de manière interactive, ou il peut être contrôlé via un fichier de configuration et exécuté en tant que démon. L’exécuter en tant que démon vous permet de planifier des requêtes. osquery est une application très flexible et sophistiquée. Il contient bien plus que ce qui peut être couvert dans un article d’introduction. L’excellente documentation est le premier endroit à se tourner si vous souhaitez étudier ses nombreuses autres options.
Nous allons examiner l’utilisation d’osquery de manière interactive.
Installer osquery
La plupart des distributions Linux n’incluent pas osquery dans leurs dépôts officiels. Cela ne pose pas de problème, nous pouvons télécharger les packages d’installation à partir de la page de téléchargement d’osquery.
Pour Ubuntu, téléchargez le package «.deb». Celui-ci sera probablement téléchargé dans votre répertoire «Téléchargements». Changez de répertoire dans le répertoire «Téléchargements», puis utilisez dpkg
commande pour installer le fichier «.deb». Remplacez le nom du fichier dans notre exemple par le nom de celui que vous téléchargez.
cd Downloads
sudo dpkg -i osquery_4.6.0-1.linux_amd64.deb
Pour Fedora, téléchargez le fichier «.rpm». Localisez le fichier sur votre disque dur et utilisez le rpm
package pour l’installer. Nous utilisons le -U
(option de mise à jour. Cela installe une application si elle n’est pas déjà installée sur votre système et la met à niveau si elle l’est.
sudo rpm -U osquery-4.6.0-1.linux.x86_64.rpm
Sur Manjaro, osquery est dans les référentiels par défaut. nous pouvons l’installer en utilisant pacman
.
sudo pacman -Sy osquery
Vous pouvez tester que osquery s’est installé correctement et connaître la version que vous utilisez en lançant osquery avec le --version
option. Notez qu’il y a un «i» à la fin de la commande. C’est « osqueryi » et non « osquery ». Le «i» signifie interactif.
osqueryi --version
Le shell interactif osquery
Pour démarrer osquery en mode interactif, utilisez le osqueryi
commander.
osqueryi
Un shell interactif osquery démarre et une invite «osquery>» apparaît.
C’est ici que vous tapez le SQL et commandes dot. Les commandes point sont des commandes que vous émettez pour interagir avec le shell osquery. À une ou deux exceptions près, les commandes point ne renvoient aucune information sur votre ordinateur. Ils tirent leur nom du point ou du point « . » qui apparaît au début de toutes les commandes point.
Vous pouvez utiliser la touche «Flèche vers le haut» pour faire défiler les commandes précédemment utilisées, et la complétion par tabulation est disponible pour les noms de table.
Pour obtenir une liste des commandes point et une description rapide de chacune d’elles, utilisez le .help
à l’invite «osquery>».
.help
Pour fermer la session osquery, vous pouvez utiliser soit .exit
ou .quit
.
.quit
Utilisation des commandes SQL
osquery présente les informations système sur lesquelles il peut générer des rapports sous forme de tables dans une base de données. Pour pouvoir interroger cette base de données, vous devez connaître les noms des tables et les champs qu’elles contiennent chacune. le .tables
La commande listera les tables pour vous.
.tables
Il y a beaucoup de tables. Vous pouvez faire défiler la liste vers l’avant et vers l’arrière et rechercher ceux qui vous intéressent. Disons que nous voulons en savoir plus sur le uptime
table. le .schema
La commande listera les noms de champ d’une table et le type de données que chaque champ contient.
.schema uptime
Nous en savons assez maintenant pour pouvoir émettre notre première instruction SQL. Nous allons sélectionner les données du days
, hours
, et minutes
colonnes du uptime
table. N’oubliez pas qu’il s’agit de SQL, utilisez donc un point-virgule « ;
»Pour mettre fin à votre commande.
select days, hours, minutes from uptime;
Si nous voulons voir toutes les colonnes, nous pouvons utiliser un astérisque « *
»Comme un raccourci représentant tous les noms de colonnes. Mais il existe une commande dot qui est encore plus rapide. Type .all
suivi du nom de la table pour obtenir le même résultat. (N’oubliez pas qu’il n’y a pas de point-virgule « ;
» au bout du point commandes.)
select * from uptime;
.all uptime
Sélection de données à partir de tables
La table des utilisateurs
Pour voir une liste de tous les noms d’utilisateur, nous pouvons interroger le users
table.
select username from users;
Vous pouvez trier les données par n’importe quelle colonne dans les résultats. Dans cet exemple, nous n’avons qu’une seule colonne mais nous pouvons toujours trier les données.
select username from users order by username;
Si nous voulons voir un sous-ensemble des noms d’utilisateur – ceux d’une longueur particulière, peut-être – nous pouvons ajouter plus de clauses à notre instruction SQL.
select username, directory from users where length(username)=4 order by username;
Peut-être que nous ne sommes intéressés que par un seul nom d’utilisateur.
select username, directory, shell from users where username="mary";
Le tableau des processus
Nous pouvons appliquer les mêmes principes aux données de n’importe quel tableau. Si nous voulons connaître les détails d’un gedit
processus, nous pouvons le rechercher comme ceci:
select pid, name, state, start_time from processes where name="gedit";
Le «S» dans le state
colonne signifie sommeil interruptible.
La table Log_in_users
Au lieu de regarder la liste des utilisateurs configurés comme nous l’avons fait auparavant, peut-être que nous sommes plus intéressés par les utilisateurs qui sont connectés en ce moment.
select user, host, time from logged_in_users;
Pour exclure les utilisateurs non humains, utilisez le « not like
»Clause SQL. le tty
la colonne contient les détails du tty de l’utilisateur ou d’un tilde « ~
”Si aucun tty n’est utilisé.
select user, host, time from logged_in_users where tty not like "~";
Nous pouvons voir que l’utilisateur avec le nom d’utilisateur «dave» est connecté deux fois.
Le «: 0» dans le host
La colonne indique l’écran et le clavier connectés à l’ordinateur. Donc, cet utilisateur doit être physiquement sur les lieux. L’autre session de connexion utilisant ce nom d’utilisateur provient d’une autre adresse IP.
Cela nécessite probablement une enquête. Comment peuvent-ils accéder à distance à l’ordinateur s’ils sont ici dans le bâtiment? L’une de ces sessions pourrait être frauduleuse.
La table os_version
Pour en savoir plus sur la version Linux, interrogez le os_version
table.
select name, major, minor, codename from os_version;
La table interface_addresses
le interface_addresses
table contient des informations sur vos interfaces réseau.
select interface, address from interface_addresses order by interface;
La table memory_info
le memory_info
Le tableau contient des informations sur la quantité de mémoire de votre ordinateur et sur la manière dont elle est utilisée.
select memory_total, memory_free, cached from memory_info;
La table des groupes
Pour voir rapidement les groupes configurés sur votre système, utilisez le .all
commande dot sur le groups
table.
.tous les groupes
Pour afficher les détails des groupes associés aux utilisateurs, filtrez les groupes avec un ID de groupe supérieur ou égal à 1000.
select * from groups where gid>=1000;
La table usb_devices
Si un périphérique de bus série universel n’est pas reconnu, vous pouvez consulter ce tableau pour voir si le système d’exploitation le détecte même.
select usb_address, usb_port, version, model from usb_devices;
La table deb_packages
le deb_packages
Le tableau contient des détails sur tous les progiciels «.deb» qui ont été installés sur votre ordinateur. Il y a aussi un rpm_packages
table pour Fedora et autres dérivés de Red Hat. Les autres systèmes de gestion de paquets ne sont pas signalés.
Il y a beaucoup de packages sur cette machine de test. Les résultats ont été limités à 10 enregistrements.
select name, version, source from deb_packages limit 10;
La table system_info
La table system_info contient de nombreuses informations. Nous allons simplement vérifier la marque de l’unité centrale (CPU) installée sur cet ordinateur.
select cpu_brand from system_info;
Le sommet de l’iceberg
osquery met les informations de plus de 150 tables à portée de main. Même si vous ne connaissez pas beaucoup SQL, vous trouverez qu’il est facile de maîtriser le peu dont vous avez besoin pour utiliser de manière productive cette excellente application.