web-dev-qa-db-fra.com

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 open source précompilés que je ne sais pas s'ils ont été compilés comme leur source.

Disons que nous avons installé une application propriétaire dans / 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, d'appuyer sur des touches, de collecter des données utilisateur, etc.
  • Il ne peut rien changer d'important dans le système ou infecter le système (à cause du système d'autorisations 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 de base 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 répertoire Shell/fichier/qui effectue le processus de démarrage automatique, il s'exécutera donc à chaque connexion.
  • Si nous considérons que le processus de démarrage automatique est propre, sans redémarrer, il y a une chance qu'un processus du programme soit toujours actif.
  • Les programmes peuvent supprimer ou modifier n'importe quel fichier du répertoire de base de l'utilisateur (ou tout autre fichier sur lequel un utilisateur est autorisé à écrire).

Alors, que devons-nous faire?

  • Je pense que le seul moyen sûr 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, nous devons modifier l'autorisation de démarrage automatique des fichiers afin que seul root puisse les modifier. puis après avoir fermé le programme, un redémarrage fera le travail.

Ai-je raison? Y a-t-il quelque chose qui me manque?

6
Ravexina

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

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

  • Vous n'avez peut-être pas configuré correctement vos propres fichiers. Par exemple, vous êtes-vous absolument assuré que ce fichier "super-secret-passwords.txt" n'est pas lisible par tout le monde? Et qu'en est-il de ce vieux logiciel buggé fonctionnant en tant que vous-même ou root - êtes-vous sûr qu'il n'écrit rien de sensible sur le disque?

  • Le 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 sur votre système local (un socket de domaine Unix) utilisé pour la communication inter-processus peut ne pas être sécurisé correctement (parfois pour une bonne raison), et tout processus peut y lire et écrire.

Pratiquement, il y a des choses que vous pouvez faire.

Vous pouvez absolument vérifier que le programme ne démarre rien au démarrage. Ce sera fastidieux et vous devez bien comprendre votre système. Il existe de nombreuses façons de démarrer un service automatiquement. (Remarque: si le programme s'est exécuté en tant que root, tous les paris sont désactivés car il aurait pu modifier le système init pour se cacher)

Les meilleurs conseils pour exécuter des logiciels terribles

  1. Ne l'exécutez pas.
    Si vous pouvez l'éviter du tout, ne dirigez rien en quoi vous ne pouvez pas faire confiance. Assurez-vous au moins de faire un bon compromis. La complexité est l'ennemi de la sécurité. La seule ligne de code dont la sécurité est garantie est la ligne que vous n'exécutez jamais. :)
  2. Exécutez le programme sur une machine virtuelle.
    La configuration des machines virtuelles est assez facile (VirtualBox est idéal si vous ne souhaitez pas configurer d'infrastructure de virtualisation). Cela signifie que vous aurez une machine qui ne contient pas de données sensibles (vous auriez besoin de les y mettre) et vous pouvez contrôler les ressources qu'elle utilise. Bien sûr, cela ne vous donne pas une protection complète (cela pourrait faire des choses comme inonder votre serveur Web de demandes, vous connecter à vos ampoules via telnet, etc.)
  3. Exécutez le programme dans un conteneur.
    Les conteneurs (LXD, Docker) offrent une certaine sécurité pour exécuter du code sur votre machine locale. Ils ne sont pas parfaits. Mais un conteneur non privilégié fournit une isolation du système de fichiers pour votre programme, ce qui est quelque chose. 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'est que légèrement pertinent pour votre question, mais vous pouvez parfois éviter d'exécuter des logiciels anciens et terribles, ou des logiciels 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 pour héberger et entretenir mon propre serveur de messagerie. Il faut beaucoup de travail pour sécuriser des choses comme celle-ci.
  5. Exécutez-le en tant qu'utilisateur distinct.
    En dernier recours, et si vous pensez que le compromis en vaut la peine, exécutez le programme avec un nouveau compte utilisateur spécialement créé à cet effet. Je le fais avec un logiciel en qui j'ai confiance.

L'option 1 est la meilleure. :)

Conseil général

  • Votre système d'exploitation est assez sécurisé. Pas complètement sûr bien sûr, mais Ubuntu a un bilan assez bon. Les autres logiciels que vous installez peuvent ne pas être aussi efficaces. Alors, exécutez votre logiciel sur de nombreuses machines séparées et isolées. Cela garantira qu'un bogue dans un programme ne signifie pas qu'un autre programme, potentiellement plus sensible, deviendra exploitable.
  • Allez sur le Web. Aujourd'hui, la plupart des logiciels destinés aux utilisateurs finaux proposent de bonnes alternatives sur le Web. Sur ma machine, je lance à peu près Chrome et Emacs, et c'est tout. L'utilisation des services Web a bien sûr ses propres implications en matière de sécurité.
  • Accédez au cloud (pour le logiciel serveur). Voulez-vous vraiment exécuter votre propre serveur de messagerie? Serveur Web? Base de données? Accédez au cloud et laissez quelqu'un d'autre faire tout ce travail de sécurité fastidieux pour vous.
5
Stefano Palazzo