2016-11-29 12 views
1

나는 syscall이 echo (명령이 아닌 쉘 내장)으로 만들어 졌는지 궁금해서 dtrace를 통해 snoop하기로 결정했다. 특히 dtruss을 사용했습니다.왜`/ bin/echo`가 작성한 syscall을 추적 할 수 없습니까?

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

하지만 echo와 같은를하려고하면, 나는 다음과 같은 얻을 : 사실

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

을 :

는 다음 작품 ( sed에 의해 만들어진 모든 시스템 콜을 추적하는) 것을 고려가 많은 명령이 오류가 발생합니다. 공통점은 명령이 모두 /bin 또는 /usr/bin 인 것입니다.

Brendan's blog은 (hfsslower.d는 일반 텍스트 파일입니다 자신의 예는, sudo dtruss ls -l hfsslower.d이다) 등 ls 같은 명령에 dtruss를 사용하는 것이 가능하다는 것을 시사한다. 블로그 게시물은 Mac OS X와 ​​관련하여 2011 년에 작성되었습니다. 그러나 OS X에는 그 이후로 다양한 보안 기능이 향상되었음을 알고 있습니다.

일종의 OS X 보안이 부각 될 수 있습니까? OS X 10.12 Sierra를 사용하고 있습니다.

답변

2

오류 메시지를 검색해야했습니다.

Looks like it is indeed System Integrity Protection.

더 이상 Mac의 "제한된"프로세스에 DTrace를 연결할 수 없습니다. 그리고«제한»이란 모든 내장 된 유틸리티, 데몬 또는 응용 프로그램을 의미합니다.

기사의 나의 해석은 다음과 같습니다

  • csrutil enable --without dtrace입니다하지 DTrace를에 내장 된 실행 파일을 첨부하기에 충분
  • 당신이 대신해야 할
  • 전체 csrutil disable (이 완전히 SIP를 해제하는 잔인하고 보안에 차이가 있지만 유일한 해결책 인 것 같습니다.)