6 votes

Quel est le danger d'exécuter un logiciel non fiable en tant qu'utilisateur normal ?

Parfois, je dois utiliser des logiciels propriétaires auxquels je ne fais pas confiance ou même des logiciels libres pré-compilés dont je ne sais pas s'ils ont été compilés comme leurs sources le sont.

Imaginons que nous ayons installé une application propriétaire en /opt/software puis nous l'exécutons en tant qu'utilisateur normal (sans sudo, gksudo, etc.).

  • Je sais que lorsque nous exécutons un programme, il est capable de se connecter à Internet, de surveiller X, les frappes au clavier, de collecter les données de l'utilisateur, etc.
  • Il ne peut pas changer quoi que ce soit d'important dans le système ou infecter le système (à cause du système de permissions de Linux).
  • Il est possible pour le programme d'ajouter un plug-in/extension au navigateur d'un utilisateur (car les profils de navigateur sont disponibles dans le répertoire personnel de l'utilisateur).
  • Après avoir fermé le programme et redémarré, il ne peut plus rien faire. Faux parce que :
    • Le programme peut s'ajouter à un Shell/file/répertoire qui effectue le processus de démarrage automatique, de sorte qu'il s'exécutera à n'importe quel login.
  • Si nous considérons que le processus de démarrage automatique est propre, sans redémarrage, il y a une chance qu'un processus du programme soit encore actif.
  • Les programmes peuvent supprimer ou modifier n'importe quel fichier du répertoire personnel de l'utilisateur (ou tout autre fichier sur lequel un utilisateur a le droit d'écrire).

Alors, que devons-nous faire ?

  • Je pense que la seule façon sûre d'exécuter un programme propriétaire est de l'exécuter en tant qu'autre utilisateur.
  • Si l'exécution du programme en tant qu'autre utilisateur n'est pas possible, alors nous devrions changer la permission des fichiers de démarrage automatique afin que seul root puisse les modifier. Ensuite, après avoir fermé le programme, un redémarrage fera le travail.

Est-ce que j'ai raison ? Il y a quelque chose qui m'échappe ?

5voto

andybee Points 497

Exécuter un logiciel non fiable en tant que nouvel utilisateur est un bon début, mais cela peut ne pas être suffisant.

  • Un grand nombre de fichiers et de dispositifs que vous pouvez considérer comme sensibles sont lisibles par le monde entier. Même en tant qu'utilisateur non privilégié, vous pouvez extraire beaucoup d'informations d'un système (en général, vous pouvez lire /etc pour commencer).

  • Vous n'avez peut-être pas configuré votre propre matériel correctement. Par exemple, vous êtes-vous assuré que ce fichier "super-secret-passwords.txt" n'est pas lisible par tous ? Et qu'en est-il de ce vieux logiciel bogué qui s'exécute en tant que vous-même ou en tant que root - êtes-vous sûr qu'il n'écrit rien de sensible sur le disque ?

  • Code fonctionnant comme nobody peut aller sur internet et télécharger des tâches, exécuter du code sur votre système.

  • Parfois, un socket de votre système local (un socket de domaine unix) utilisé pour la communication entre processus peut ne pas être sécurisé correctement (parfois pour une bonne raison), et n'importe quel processus peut lire et écrire dessus.

En pratique, il y a des choses que vous pouvez faire.

Vous pouvez absolument vérifier que le programme ne démarre rien au démarrage. Cela sera fastidieux et vous devrez bien comprendre votre système. Il existe de nombreuses façons de démarrer automatiquement un service. (Note : si le programme s'est exécuté en tant que root, tout est à refaire car il a pu modifier le système init pour se cacher).

Les meilleurs conseils pour faire fonctionner un mauvais logiciel

  1. Ne l'exécutez pas.
    Si vous pouvez l'éviter, n'utilisez rien qui ne soit pas fiable. Assurez-vous au moins que vous faites un bon compromis. La complexité est l'ennemi de la sécurité. La seule ligne de code dont la sécurité est garantie est celle que vous n'exécutez jamais :)
  2. Exécutez le programme dans une machine virtuelle.
    La configuration des VM est assez simple (VirtualBox est idéal si vous ne souhaitez pas mettre en place une infrastructure de virtualisation). Cela signifie que vous aurez une machine qui ne contient aucune donnée sensible (il faudrait que vous l'ayez placée là) et que vous pouvez contrôler les ressources qu'elle utilise. Cela ne vous donne pas une protection complète bien sûr (il pourrait inonder votre serveur web de requêtes, se connecter à vos ampoules via telnet, etc., et les bogues qui permettent aux logiciels malveillants de s'échapper d'une machine virtuelle ne sont pas très courants, mais ils se produisent parfois).
  3. Exécutez le programme dans un conteneur.
    Offre de conteneurs (LXD, Docker) un peu de la sécurité pour l'exécution du code sur votre machine locale. Ils ne sont pas parfaits. Mais un conteneur non privilégié assure l'isolation du système de fichiers pour votre programme, ce qui n'est pas rien. Sécuriser correctement les conteneurs est un art et une science, mais cela devient rapidement plus facile.
  4. Demandez à quelqu'un d'autre d'exécuter le programme pour vous.
    Cela n'a qu'un rapport limité avec votre question, mais vous pouvez parfois éviter d'utiliser des logiciels anciens et terribles, ou des logiciels qui sont simplement complexes et difficiles à sécuriser correctement, en utilisant un service tiers. Le courrier électronique en est un bon exemple. Je ne me ferais pas confiance pour avoir la patience et le temps libre d'héberger et de maintenir mon propre serveur de messagerie. C'est beaucoup de travail de sécuriser ce genre de choses.
  5. Exécutez-le en tant qu'utilisateur distinct.
    En dernier recours, et si vous estimez que le jeu en vaut la chandelle, exécutez le programme avec un nouveau compte utilisateur spécialement créé à cet effet. Je fais cela avec les logiciels auxquels je fais confiance.

L'option 1 est la meilleure :)

Conseils généraux

  • Votre système d'exploitation est assez sûr. Il n'est pas complètement sûr, bien sûr, mais Ubuntu a des antécédents raisonnablement bons. Les autres logiciels que vous installez dessus ne le sont peut-être pas autant. Donc, exécutez vos logiciels sur de nombreuses machines séparées et isolées. Ainsi, un bogue dans un programme ne signifie pas qu'un autre programme, potentiellement plus sensible, devient exploitable.
  • Aller sur le web. Aujourd'hui, la plupart des logiciels pour utilisateurs finaux ont de bonnes alternatives sur le web. Sur ma machine, j'utilise à peu près Chrome et Emacs, et c'est tout. L'utilisation de services web a bien sûr ses propres implications en matière de sécurité.
  • Allez dans le nuage (pour les logiciels de serveur). Êtes-vous sûr de devoir gérer votre propre serveur de messagerie ? Un serveur Web ? De base de données ? Allez dans le nuage et laissez quelqu'un d'autre s'occuper de toutes ces tâches de sécurité fastidieuses pour vous.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X