Y a-t-il une solution de rechange pour: "dtrace ne peut pas contrôler les exécutables signés avec des droits restreints"?

il semble que dans OS X 10.11 El Capitan, dtruss et dtrace ne peuvent plus faire ce qu'ils sont censés faire. C'est l'erreur que j'obtiens quand j'essaie d'exécuter sudo dtruss curl ... :

dtrace: n'a pas exécuté curl: dtrace ne peut pas contrôler les exécutables signés avec des droits restreints

j'ai rencontré des gens remarquant ce problème, mais jusqu'à présent aucune solution.

y a-t-il un moyen de corriger cette ou de contourner cela?

46
demandé sur Flimm 2015-11-02 14:20:57

6 réponses

pour ceux qui veulent DTrace système expédié binaire après csrutil disable , copy il à un répertoire qui n'est pas "restreint", par exemple, /tmp

CC@~ $ csrutil status
System Integrity Protection status: disabled.
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"151900920"", 0x7FFF51B6BEA8, 0x7FFF51B6CA20      = 0 0

voir le commentaire de @J. J: https://apple.stackexchange.com/questions/208762/now-that-el-capitan-is-rootless-is-there-any-way-to-get-dtrace-working/224731#224731

22
répondu Charles 2017-04-13 12:45:06

une fois que vous csrutil enable --without dtrace , il y a une alternative à la copie du binaire: exécuter le binaire dans une fenêtre de Terminal et tracer le processus de Terminal lui-même dans une autre fenêtre de Terminal.

dans la première fenêtre de terminal, trouver son PID:

$ echo $$
1154

dans la deuxième fenêtre du terminal, commencez la trace:

$ sudo dtruss -p 1154 -f

retour, dans la première fenêtre de terminal, lancer le processus que vous voulez tracer:

$ ls

À ce stade, vous devriez voir la trace dans la deuxième fenêtre. Ignorez les entrées pour le PID que vous tracez (e.g., 1154), et le reste est pour le processus (et ses descendants) qui vous intéresse.

1154/0x1499:  sigprocmask(0x3, 0x7FFF53E5C608, 0x0)      = 0x0 0
1154/0x1499:  sigprocmask(0x1, 0x7FFF53E5C614, 0x7FFF53E5C610)       = 0x0 0
3100/0xa9f3:  getpid(0x7FFF82A35344, 0x7FFF82A35334, 0x2000)         = 3100 0
3100/0xa9f3:  sigprocmask(0x3, 0x10BE32EF8, 0x0)         = 0x0 0
21
répondu Raghu Dodda 2016-04-21 05:34:24

comme le remarque Andrew , c'est à cause de Protection De L'intégrité du système , aussi connu comme "sans racine".

vous pouvez le désactiver complètement ou partiellement (activez juste dtrace avec quelques limitations).

désactiver Complètement SIP

bien que non recommandé par Apple, vous pouvez désactiver entièrement le système Protection de l'intégrité sur Vous Mac. Voici comment:

  1. démarrez votre Mac en mode Récupération: redémarrez-le et maintenez cmd+R jusqu'à ce qu'une barre de progression apparaisse.
  2. aller au menu Utilitaires. Choisissez Terminal là.
  3. entrer cette commande pour désactiver la protection de L'intégrité du système:

$ csrutil disable

il vous demandera de redémarrer - le faire et vous êtes libre de SIP!

partiellement désactivable SIP

heureusement, SIP n'est pas monolithique: il est construit à partir de nombreux différents modules, nous pouvons désactiver/activer séparément.

répétez les étapes 1 et 2 de la section "désactiver complètement SIP" ci-dessus. Maintenant dans le Terminal entrer ces commandes:

$ csrutil clear # restore the default configuration first
$ csrutil enable --without dtrace # disable dtrace restrictions *only*

redémarrez et profitez de votre OS à nouveau.

DTrace commence à fonctionner mais vous êtes toujours incapable de fixer dtrace à processus restreints

Instructions source: http://internals.exposés/blog/dtrace-vs-sip.html

10
répondu Alexander Ushakov 2015-11-07 15:40:12

ressemble à SIP complètement désactivant bloque encore dtruss pour les processus restreints:

$ /usr/bin/csrutil status
System Integrity Protection status: disabled.
$ sudo dtruss /bin/echo "blah"
dtrace: failed to execute /bin/echo: dtrace cannot control executables signed with restricted entitlements
$ sw_vers 
ProductName:    Mac OS X
ProductVersion: 10.11.2
BuildVersion:   15C50
4
répondu David 2016-01-15 23:02:56

je voudrais poster ceci comme un commentaire mais je ne suis pas autorisé.

Désactivation de la SIP est pas nécessaire. Il suffit de copier le binaire à un autre endroit et il fonctionne très bien:

$ sudo dtruss ping google.com
dtrace: system integrity protection is on, some features will not be available

dtrace: failed to execute ping: dtrace cannot control executables signed with restricted entitlements
$ sudo cp $(which ping) .
$ sudo dtruss ./ping google.com
dtrace: system integrity protection is on, some features will not be available

SYSCALL(args)        = return
PING google.com (172.217.10.78): 56 data bytes
^C
$ csrutil status
System Integrity Protection status: enabled.

pour les binaires qui peuvent encore fonctionner normalement après avoir été copiés, c'est la meilleure option car elle capture toute la durée de vie du processus et ne nécessite aucune protection désactivante.

3
répondu Jonathan Lynch 2017-10-11 13:24:37

Voir ma réponse sur les question "Comment pouvez obtenir dtrace pour exécuter le tracé de commande avec les privilèges root?" [SIC.]

DTrace can processus snoop qui sont déjà en cours. Ainsi, lancer un processus de fond qui attend 1sec pour que DTrace démarre (désolé pour l'état de la course), et snoop le PID de ce processus.

sudo true && \
(sleep 1; ps) & \
sudo dtrace -n 'syscall:::entry /pid == / {@[probefunc] = count();}' $! \
&& kill $!

explication complète dans la réponse liée.

1
répondu Birchlabs 2017-06-25 19:12:08