DTrace键记录器

时间:2011-09-09 01:05:00

标签: macos keylistener dtrace

我试过看看我是否可以让Brendan Gregg的sshkeysnoop.d在Mac OS X上运行,但我遇到了麻烦。有可能让这个工作吗?如果是这样,怎么样?

我得到的错误是:

dtrace: failed to compile script ./sshkeysnoop.d: line 40: probe description syscall::exec:return does not match any probes

是否可以使用DTrace在Mac OS X上进行任何其他类型的密钥记录?

3 个答案:

答案 0 :(得分:1)

OS X没有syscall :: exec DTrace探针。它确实有一个syscall :: execve。同样,它没有syscall :: open64,它也在此脚本中使用。但是,即使用exec替换exec并删除open64,脚本也无法正常运行。

答案 1 :(得分:1)

您可以采取一些措施来调整此类脚本。首先,您可以询问dtrace它有哪些探测点:

$ sudo dtrace -l -f 'syscall::exec*'
   ID   PROVIDER            MODULE                          FUNCTION NAME
18442    syscall                                              execve entry
18443    syscall                                              execve return

其次,您可以跟踪单个进程上的所有系统调用,以查看正在进行的操作。

$ sudo dtruss ssh somewhere 2>dtrussout
Password: (type something here)

如果你仔细查看dtrussout,就可以看到

read_nocancel(0x5, "a\0", 0x1)       = 1 0
read_nocancel(0x5, "s\0", 0x1)       = 1 0
read_nocancel(0x5, "d\0", 0x1)       = 1 0
read_nocancel(0x5, "f\0", 0x1)       = 1 0
read_nocancel(0x5, "\n\0", 0x1)      = 1 0

有了这些知识,就可以很容易地调整脚本。

$ diff sshkeysnoop.d{.orig,}
40c40
< syscall::exec:return, syscall::exece:return
---
> syscall::execve:return
51c51
< syscall::open:entry, syscall::open64:entry
---
> syscall::open:entry
58c58
< syscall::open:return, syscall::open64:return
---
> syscall::open:return
68c68
< syscall::read:entry
---
> syscall::read_nocancel:entry
75c75
< syscall::read:return
---
> syscall::read_nocancel:return

答案 2 :(得分:0)

还要确保使用all选项加载

kldload dtraceall

而不仅仅是

kldload dtrace

或者系统调用不会被加载。