audctl: имя системного вызова неизвестно: сокет

Моя оригинальная проблема описана здесь: https://serverfault.com/questions/958571/what-these-dns-queries-means. Речь идет о UDP-пакетах, происхождение которых я не могу определить. Для решения этой проблемы я последовал совету пользователя @AB, а именно здесь: https://serverfault.com/questions/192893/how-i-can-identify-which-process-is-making-udp-traffic-on-linux/193088. Согласно этому совету я установил auditdвидимо с успехом

auditctl -l
No rules

Но когда я бегу auditctlКоманда, я получаю ошибку:

auditctl -a exit,always -F arch=b32 -F a0=2 -F a1\&=2 -S socket -k SOCKET
Syscall name unknown: socket

Можете ли вы помочь мне в моем вопросе?

1 ответ

Некоторые архитектуры, в основном 32-разрядные Intel x86, не использовали отдельные системные вызовы для операций с сокетами - вместо этого у них была единственная точка входа мультиплексированного socketcall(2).

Поэтому, когда программа называется socket(...) libc переведет это на socketcall(SYS_SOCKET, ...),

Отдельные системные вызовы сокетов, включая socket(2), были добавлены в ядро ​​4.3.0 - но ваш audctl слишком стар, чтобы знать об этом (его собственный список системных вызовов обновлялся только в auddd v2.5.0), и, аналогично, ваш libc, вероятно, слишком стар, чтобы использовать отдельные системные вызовы (эта поддержка была добавлена ​​в glibc v2.23).

Чтобы соответствовать вызовам socket(), вам, вероятно, понадобится -S socketcall -F a0=1 -F a1=2 ..., поскольку 0-й аргумент на самом деле является вызываемой функцией (SYS_SOCKET=1), а реальные аргументы начинаются с a1.

Другие вопросы по тегам