Я пытаюсь написать один скрипт bpftrace, который захватывает строки, передаваемые процессом postfix, и saslauthd для части аутентификации. Цель состоит в том, чтобы обнаружить компромиссный счет моей компании. Команда strace дает хорошие результаты:
strace -p PID -s 100 -e 'read'
read(7, "\0\20", 2) = 2
read(7, "xxxxxxxxxx", 10) = 10
read(7, "\0\t", 2) = 2
read(7, "YYYYYYYYY", 9) = 9
read(7, "\0\4", 2) = 2
read(7, "smtp", 4) = 4
Я могу восстановить логин / пароль и определить, работает ли bruteforce.
но я пытаюсь получить те же результаты с bpftrace с:
$ bpftrace -e 'kprobe:sys_read /comm=="saslauthd"/ {printf("%<%s>\n",str(arg1,arg2));}'
<>
<login>
<>
<>
<>
<smtp>
В этом случае я могу прочитать некоторые строки syscall sys_read, но не все. Я не понимаю, почему мой bpftrace не дает такой же результат. Я также думаю о нулевом символе и о том, почему я использую str (arg1, arg2) , чтобы форсировать размер массива. Я также пытался использовать трассировку, и это тот же результат.
Может быть, кто-то может помочь мне понять, где моя ошибка? Так что любой вклад будет оценен