web-dev-qa-db-fra.com

Qu'est-ce que la solution de contournement 'ptrace_scope' pour les programmes Wine et existe-t-il des risques?

Pour exécuter certains programmes Windows dans WINE, vous avez besoin de cette solution de contournement:

echo 0|Sudo tee /proc/sys/kernel/yama/ptrace_scope

Selon les sites Web d'assistance, cela est dû à un bogue dans le noyau Ubuntu empêchant ptrace et WINE de bien jouer ensemble.

En utilisant la commande ci-dessus, vous réglez ptrace sur 0. D'après les recherches que j'ai effectuées (ne me demandez pas quels sites Web, j'en ai l'air nombreux), ptrace concerne les interactions entre les programmes. Le réglage 0 est plus permissif que le 1.

Je dois supposer qu'il y avait une bonne raison pour qu'Ubuntu veuille le ptrace = 1, donc cela me ramène à la forme abrégée de la question.

Existe-t-il des risques pour définir ptrace = 0? Sécurité moindre? problèmes de débogage? d'autres que je n'ai pas pensé ???

P.S. pour tous ceux qui lisent ceci qui se demande ce que le bogue cause, les programmes Windows ne pourront pas s'ouvrir du tout, dans le Moniteur système, de nombreuses instances du programme tentant de s'ouvrir, elles finiront par s'arrêter toutes et si vous exécutez le programme Au terminal, vous obtiendrez une erreur vous indiquant que le nombre maximal d’instances de programme a été atteint.

37
TrailRider

Réponse courte: pas encore de danger pratique, mais poursuivez votre lecture pour une meilleure solution ...


Qu'est-ce que c'est ptrace ?

Ceci est dû à un bogue dans le noyau Ubuntu qui empêche ptrace et WINE de bien jouer ensemble.

  • Non, la protection ptrace est une mesure de sécurité délibérée du noya introduite pour la première fois autour de Ubuntu 10.10. Ce n'est pas un bogue , et ne va donc pas être "corrigé".

  • En termes simples, la valeur par défaut de ptrace_scope de 1 empêche un processus d’examiner et de modifier un autre processus , sauf si le deuxième processus (enfant) a été lancé par le premier processus (parent).

  • Cela peut entraîner des problèmes avec certains programmes sous Wine en raison de la façon dont wineserver fournit "Services Windows" à ces programmes.

Quels sont les risques liés à la définition de ptrace_scope à 0?

  • Cela restaure l'ancien comportement dans lequel un processus peut "suivre" un autre processus, même en l'absence de relation parent-enfant.

  • En théorie, un programme malveillant peut utiliser ceci pour vous/votre ordinateur; par exemple. il peut se connecter à Firefox et enregistrer toutes vos URL/mots de passe, etc. En pratique, cela est extrêmement improbable si vous n'installez pas aveuglément des debs binaires à partir de sites aléatoires, etc.

  • En ce qui concerne le débogage, les paramètres 0 sont en fait nécessaires pour que gdb, strace, etc. soient liés aux non-enfants sauf si vous les exécutez avec des privilèges élevés (Sudo).

Quels sont les problèmes avec la solution de contournement?

  • La solution de contournement est quelque peu problématique, car ptrace_scope est une valeur globale et, même s'il est défini sur 0, tous les processus de votre système sont exemptés de la restriction non-enfant.
  • Si vous utilisez la solution de contournement, insérez-la dans un simple script bash qui l'active, lance votre programme Windows, puis désactive (définit sur 1) à la sortie.
    • NE PAS configurer ptrace_scope en écriture (666) comme le recommande le forum, ce qui constitue un risque énorme pour la sécurité, car tout processus peut le changer à volonté. !

Y a-t-il une meilleure solution?

  • Une meilleure solution, plus sécurisée et ne nécessitant pas de modifications répétitives ptrace_scope est à octroie les capacités ptrace de Wineserver .

    • Dans un terminal:

       Sudo apt-get install libcap2-bin 
       Sudo setcap cap_sys_ptrace = eip /usr/bin/wineserver[.____. Garden Setcap cap_sys_ptrace = eip /usr/bin/wineserver[.____. .]
    • Cela exempte les fichiers binaires wineserver et wine-preloader de la restriction ptrace non-enfant et leur permet de ptracer tout processus.

    • Cela ne doit être fait qu'une seule fois et est plus sûr, car ces fichiers binaires proviennent généralement d'une source fiable - les référentiels officiels ou le PPA officiel de Wine, de sorte qu'ils ne seront pas des logiciels malveillants.

Si vous utilisez Crossover

Installez libcap2:

Sudo apt-get install libcap2-bin; 

Ensuite, ajoutez une exception pour Crossover:

Sudo setcap cap_sys_ptrace = eip /opt/cxoffice/bin/wineserver;
Sudo setcap cap_sys_ptrace = eip /opt/cxoffice/bin/wine-preloader;

Enfin, ajoutez ses bibliothèques à ld.so.conf (ou vous obtiendrez une "erreur lors du chargement de bibliothèques partagées: libwine.so.1: impossible d’ouvrir un fichier objet partagé: aucun fichier ou répertoire de ce type"):

echo/opt/cxoffice/lib/| Sudo tee /etc/ld.so.conf.d/crossover.conf
Sudo/sbin/ldconfig
40
ish

Dans le buntuforums.org j'ai eu une réponse avec le lien suivant

https://wiki.ubuntu.com/SecurityTeam/Roadmap/KernelHardening#ptrace_Protection

voici la pâte du lien (avec mon emphase ajoutée)

À mesure que la popularité de Linux augmentera, elle deviendra une cible croissante pour les logiciels malveillants. Une faiblesse particulièrement troublante des interfaces de processus Linux est qu’un seul utilisateur peut examiner la mémoire et l’état de fonctionnement de n’importe lequel de ses processus. Par exemple, si une application (par exemple, Firefox) était compromise, il serait possible pour un attaquant de se connecter à d'autres processus en cours d'exécution (par exemple, gpg-agent) pour extraire des informations d'identification supplémentaires et continuer à étendre la portée de leur attaque.

Ce n'est pas un problème théorique. Le détournement de session SSH et même l’injection de code arbitraire sont tout à fait possibles si ptrace est autorisé normalement .

Pour une solution, certaines applications utilisent prctl () pour interdire spécifiquement cette liaison ptrace (par exemple, ssh-agent). Une solution plus générale consiste à n'autoriser que ptrace directement d'un parent à un processus enfant (c'est-à-dire que gdb direct et strace fonctionnent toujours), ou en tant qu'utilisateur root (p.ex. gdb BIN PID et strace -p PID fonctionnent toujours en tant que root).

Ce comportement est contrôlé via la valeur sysctl de/proc/sys/kernel/yama/ptrace_scope. La valeur par défaut est "1" pour bloquer ptrace non-enfant. Une valeur de "0" restaure le comportement antérieur plus permissif, ce qui peut être plus approprié pour certains systèmes de développement et serveurs dotés uniquement de comptes d'administrateur. L'utilisation de "Sudo" peut également octroyer temporairement des autorisations ptrace via la fonctionnalité CAP_SYS_PTRACE, bien que cette méthode autorise la traçage de tout processus.

Donc, je suppose que la réponse courte serait que le système est moins sécurisé, mais le capot d’un ordinateur soumis à ce type d’attaques serait plutôt mince.

4
TrailRider

UPDATE Les instructions ci-dessus:

Sudo setcap cap_sys_ptrace=eip /opt/cxoffice/bin/wineserver;
Sudo setcap cap_sys_ptrace=eip /opt/cxoffice/bin/wine-preloader;

ne fonctionne pas à partir du 15/09/2018 sur Ubuntu 18.04.1 et PlayOnLinux v.4.2.12 avec la dernière version stable Wine, v.3.0.1, libcap2 était déjà installée.

Le message d'erreur dans Gnome Terminal est le suivant:

Failed to set capabilities on file `/usr/bin/wineserver' (Invalid argument)
The value of the capability argument is not permitted for a file. Or the file is not a regular (non-symlink) file

Je ne sais pas ce que cela signifie… mais je pensais que tout le monde pourrait l'interpréter et peut-être avoir une nouvelle solution viable.

Merci.

1
Danny Strickland