2016-11-29 4 views
1

Ich fragte mich, was syscalls von echo (der Befehl, nicht die integrierte Shell) gemacht werden, so entschied ich mich, es über Dtrace zu schnüffeln. Speziell habe ich dtruss verwendet.Warum kann ich keine Syscalls von `/ bin/echo` verfolgen?

sudo dtruss /bin/echo 'cat' 
dtrace: failed to execute /bin/echo: unknown error 

In der Tat:

Bedenken Sie, dass die folgenden Werke (von sed alle syscalls gemacht Tracing): die folgende

sudo dtruss /usr/local/bin/sed 's/a/e/' <<< 'cat' 
SYSCALL(args)  = return 
thread_selfid(0x0, 0x0, 0x0)   = 470642 0 
# and many more… 

Aber wenn ich das gleiche mit echo versuchen, erhalte ich dort sind viele Befehle, mit denen ich diesen Fehler bekomme. Die Gemeinsamkeit ist, dass diese Befehle alle in /bin oder /usr/bin waren.

Brendan's blog legt nahe, dass es möglich ist, dtruss auf Befehle zu verwenden, wie ls (sein Beispiel ist sudo dtruss ls -l hfsslower.d, wo hfsslower.d eine normale Textdatei ist). Der Blogbeitrag wurde 2011 zu Mac OS X geschrieben. Aber ich bin mir bewusst, dass OS X seitdem verschiedene Sicherheitsverbesserungen hatte.

Könnte es sein, dass ich irgendwie in OS X-Sicherheit stoße? Ich benutze OS X 10.12 Sierra.

Antwort

2

Ich hätte versucht, die Fehlermeldung zu suchen.

Looks like it is indeed System Integrity Protection.

Sie können DTrace nicht mehr an "eingeschränkte" Prozesse auf Ihrem Mac anhängen. Und mit «eingeschränkt» meine ich jedes einzelne eingebaute Dienstprogramm, jeden Daemon oder jede Anwendung.

Meine Interpretation des Artikels ist:

  • csrutil enable --without dtrace nicht ausreichend ist DTrace integrierten in ausführbaren Dateien anhängen
  • Sie stattdessen brauchen, ist ein voll zu tun csrutil disable (diese SIP erlischt vollständig, was ist Overkill und schafft eine Lücke in Ihrer Sicherheit, scheint aber die einzige Lösung zu sein)
Verwandte Themen