28 votes

Maintenant qu'El Capitan est "sans racine", y a-t-il un moyen de faire fonctionner dtrace ?

J'ai trouvé que dtrace est un outil inestimable pour le débogage et le dépannage de toutes sortes de problèmes, sans parler des deux douzaines de dtrace toolkit scripts expédiés. par Apple dans le cadre d'El Capitan.

Sur El Cap, cependant, l'exécution de dtrace entraîne généralement une série d'erreurs sans fin, rendant dtrace pratiquement inutile.

25voto

Mykroft Points 4292

La protection de l'intégrité du système dans la version 10.11 peut être désactivée, mais ce n'est pas une décision à prendre à la légère.

Vous pouvez désactiver entièrement SIP en procédant comme suit :

  1. Redémarrez votre Mac
  2. Maintenir R pendant le redémarrage
  3. De la Utilitaires menu, exécuter Terminal
  4. Entrez la commande suivante

    csrutil disable

Vous pouvez également réactiver le SIP tout en permettant à l'utilisateur d'accéder aux services suivants dtrace pour fonctionner en exécutant également ce qui suit :

csrutil enable --without dtrace

Notez que si vous le faites, vous obtiendrez l'avertissement suivant :

Il s'agit d'une configuration non prise en charge, susceptible de se briser à l'avenir et de laisser votre machine dans un état inconnu.

Une fois que vous avez redémarré, dtrace fonctionnera comme il le faisait dans Yosemite.

0 votes

Bravo, j'ai manqué ce message en répondant à l'autre fil :-) Je vais rebrancher la vidéo de la session de Rich et blog : derflounder.wordpress.com/2015/10/01/

6 votes

Ce n'est pas tout à fait vrai. Avec DTrace activé via csrutil, vous pouvez invoquer DTrace du noyau - mais seulement sur les binaires qui n'ont pas l'indicateur restricted entitlements. Vous ne pouvez pas enlever l'indicateur "restricted entitlements", même en tant que Root, avec le SIP désactivé. Cela signifie qu'avec DTrace activé, vous pouvez DTracer uniquement les binaires non-système. Cependant, si un binaire non-système utilise une librairie partagée installée dans les dossiers système (ce que font beaucoup de programmes), vous ne pouvez pas non plus le DTracer. Ainsi, la seule façon de faire fonctionner dtrace 'comme il le faisait dans Yosemite' est de faire une copie de tous vos dossiers système, et de la chrooter.

0 votes

@J.J que fait exactement --without-dtrace ? Comment fonctionnerait-il si tous les binaires ont toujours le drapeau "restricted entitlements" activé ? Savez-vous si --without-dtrace laisse une faille de sécurité ? Merci

6voto

C.W. Points 161

Copiez le binaire dans un répertoire qui n'est pas "restreint", par exemple, /tmp

csrutil disable ne fonctionne pas pour dtruss dans une certaine mesure. Mais comme l'a dit @J.J chroot travaux, cela m'a inspiré.

Je ne sais toujours pas pourquoi cela fonctionne. Cela peut avoir quelque chose à voir avec les "répertoires protégés", je suppose.

Voici le test :

CC@~ $ csrutil status
System Integrity Protection status: disabled.
CC@~ $ sudo dtruss /bin/echo
dtrace: failed to execute /bin/echo: dtrace cannot control executables signed with restricted entitlements
CC@~ $ cp /bin/echo /tmp
CC@~ $ sudo dtruss /tmp/echo

SYSCALL(args)        = return
thread_selfid(0x0, 0x0, 0x0)         = 46811 0
csops(0x0, 0x0, 0x7FFF51B6CA20)      = 0 0
issetugid(0x0, 0x0, 0x7FFF51B6CA20)      = 0 0
shared_region_check_np(0x7FFF51B6A918, 0x0, 0x7FFF51B6CA20)      = 0 0
stat64("/usr/lib/dtrace/libdtrace_dyld.dylib\0", 0x7FFF51B6BEA8, 0x7FFF51B6CA20      = 0 0

0 votes

Avez-vous une liste de "répertoires restreints" ? Ou est-ce dans le système de fichiers ?

2voto

Jordan Points 571

Dans certains cas, vous ne pouvez pas démarrer en mode de récupération pour modifier le mode SIP (par exemple, lorsque vous utilisez une instance Mac d'un fournisseur de services en nuage).

Dans ces cas, vous pouvez toujours utiliser partiellement dtrace. Vous pouvez toujours tracer les exécutables non système. Et si vous voulez tracer des exécutables système (c'est-à-dire /bin/ls ), vous pourriez les copier et supprimer la signature de code :

# trying to trace 'ls' fails if SIP is enabled
$ sudo dtruss ls -R /Applications
dtrace: system integrity protection is on, some features will not be available
dtrace: failed to execute ls: (os/kern) failure

# workaround: make a copy and remove codesigning
$ cd ~
$ cp /bin/ls .
$ sudo codesign --remove-signature ./ls
$ codesign -dv ./ls #verify
./ls: code object is not signed at all

# now we can trace syscalls made by "ls"
$ sudo dtruss -t open_nocancel ~/ls -R /Applications/
...
open_nocancel("/Applications\0", 0x1100004, 0x0)                 = 4 0
...

source : https://poweruser.blog/using-dtrace-with-sip-enabled-3826a352e64b

0 votes

Cela ne semble pas fonctionner sur les binaires basés sur ARM. Qu'est-ce que votre otool -h ./ls dire ?

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X