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.