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

37

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 lors de la définition de ptrace = 0? Sécurité moindre? problèmes de débogage? d'autres que je n'ai pas pensé ???

PS pour quiconque lit ceci qui se demande ce que le bogue cause, les programmes Windows ne pourront pas s'ouvrir du tout, dans le Moniteur système, vous verrez de nombreuses instances du programme essayant de s'ouvrir, puis ils finiront tous par quitter et si vous exécutez le programme pour le terminal, vous obtiendrez une erreur vous indiquant que le nombre maximal d'instances de programme a été atteint.

TrailRider
la source
Voici une description liée à un message d'erreur contextuel PlayOnLinux qui annule l'installation de .Net 4.5 à moins que ptrace_scope ne soit défini sur 0: playonlinux.com/fr/…
pabouk

Réponses:

41

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


C'est quoi ce truc ptrace quand même?

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 noyau introduite pour la première fois autour d'Ubuntu 10.10. Ce n'est pas un bug et ne va donc pas être "corrigé".

  • En termes simples, la ptrace_scopevaleur par défaut 1empêchant un processus d’examiner et de modifier un autre processus à moins que le second processus (enfant) ne soit démarré par le premier processus (parent).

  • Cela peut causer des problèmes avec certains programmes sous Wine en raison de la façon dont ils wineserverfournissent les "Services Windows" à ces programmes.

Quels sont les risques dans la mise 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 l'utiliser pour vous / votre ordinateur; Par exemple, il peut se connecter à Firefox et enregistrer toutes vos URL / mots de passe, etc. Dans la 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 va, les 0paramètres sont en effet requis pour gdb, straceetc. pour attacher aux non-enfants , à moins de les exécuter 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 il ptrace_scopes'agit d'une valeur globale et, bien qu'elle soit définie 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, exécute votre programme Windows, puis la désactive (définie sur 1) à la sortie.
    • Ne permettez pas auptrace_scope monde d'écrire (666) comme le recommande le post du forum - cela représente un risque énorme pour la sécurité car maintenant, 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, consiste à accorder des fonctionnalités ptrace à Wineserver .

    • Dans un terminal:

      sudo apt-get installez libcap2-bin 
      sudo setcap cap_sys_ptrace = eip / usr / bin / wineserver
      sudo setcap cap_sys_ptrace = eip / usr / bin / wine-preloader
      
    • Exonère les WINESERVER et vin Preloader binaires de la restriction ptrace non-enfant, et leur permet de ptrace 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
ish
la source
Je pense que cela s'appelle un bogue parce que ptrace fonctionnait bien dans 10.10 après la correction de Wine pour le supporter. Il a fonctionné avec 10.10-11.10 mais a régressé en 12.04.
TrailRider
Merci pour accepter @TrailRider; Je faisais référence à votre déclaration selon laquelle "c'est un bogue dans le noyau " (ce qui n'est pas le cas); c’est certainement un bogue pour Wine, et devrait faire l’objet de changements :) Les choses changent dans le noyau parfois, généralement pour le mieux, et il appartient au logiciel qui est affecté de le réparer lui-même plutôt que de dire à Linus "yo man," va revenir toi-même ": P
ish
Je comprends ce que vous dites ici et je suis d’accord, j’ai seulement dit que c’était un bogue dans le noyau car plusieurs sites Web de support ainsi que Codeweavers l’appelaient un bogue du noyau. Voici la page des codeweavers. codeweavers.com/support/wiki/linux/faq/ubuntu1204
TrailRider
2
Je mettais la trace globale à 0, puis à 1 après quelques secondes de démarrage de l'application; setcap est BEAUCOUP plus sûr et n’est pas gênant de devoir faire tout le temps le sudo ... merci vm!
Aquarius Power
@izx: Merci pour cette réponse. Il serait intéressant d'ajouter des informations sur le terme "eip" (expliqué ici: andy-pearce.com/blog/posts/2013/Mar/file-capabilities-in-linux ). De plus, je l' ai suggéré de recommander cette méthode dans les reptyr docs, où l'auteur a répondu qu'il peut être un problème de sécurité: github.com/nelhage/reptyr/pull/27#issuecomment-29486673 - ce serait génial, si vous pourriez sur ça.
blueyed
4

Dans le ubuntuforums.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 (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 résoudre ce problème, certaines applications utilisent prctl () pour interdire spécifiquement cette connexion ptrace (par exemple, ssh-agent). Une solution plus générale consiste à autoriser uniquement ptrace directement d'un processus 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 qu'utilisateur 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 qu’il est moins sécurisé, mais le capot d’un ordinateur soumis à ce type d’attaques serait plutôt mince.

TrailRider
la source
1

MISE À JOUR 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 trouver une nouvelle solution viable.

Merci.

Danny Strickland
la source