Аудит Linux может помочь. Он будет по крайней мере определять местонахождение пользователей и процессов, осуществляющих сетевые подключения дейтаграмм. UDP-пакеты - это дейтаграммы.
Сначала установите auditd
фреймворк на свою платформу и убедитесь, что он auditctl -l
что- то возвращает, даже если он говорит, что правила не определены.
Затем добавьте правило для наблюдения за системным вызовом socket()
и отметьте его для более легкого поиска позже ( -k
). Я должен предположить, что вы используете 64-битную архитектуру, но вы можете заменить b32
ее, b64
если нет.
auditctl -a exit,always -F arch=b64 -F a0=2 -F a1\&=2 -S socket -k SOCKET
Вы должны выбрать man-страницы и заголовочные файлы, чтобы построить это, но то, что он захватывает, по сути, это системный вызов: socket(PF_INET, SOCK_DGRAM|X, Y)
где третий параметр не указан, но часто равен нулю. PF_INET
равно 2 и SOCK_DGRAM
равно 2. TCP-соединения будут использовать, SOCK_STREAM
который будет установлен a1=1
. ( SOCK_DGRAM
во втором параметре может быть ORed с помощью SOCK_NONBLOCK
или SOCK_CLOEXEC
, следовательно, &=
сравнения.) Это -k SOCKET
наше ключевое слово, которое мы хотим использовать при последующем поиске журналов аудита. Это может быть что угодно, но мне нравится, чтобы все было просто.
Пусть пройдет несколько минут и просмотрите контрольные записи. При желании вы можете форсировать пару пакетов, выполняя команду ping для хоста в сети, что приведет к поиску DNS, который использует UDP, что должно отключить наше предупреждение аудита.
ausearch -i -ts today -k SOCKET
И вывод, похожий на раздел ниже, появится. Я сокращаю это, чтобы выделить важные части
type=SYSCALL ... arch=x86_64 syscall=socket success=yes exit=1 a0=2 a1=2 ... pid=14510 ... auid=zlagtime uid=zlagtime ... euid=zlagtime ... comm=ping exe=/usr/bin/ping key=SOCKET
В приведенном выше выводе мы видим, что ping
команда вызвала открытие сокета. Я мог бы тогда запустить strace -p 14510
процесс, если он все еще работал. ppid
(Идентификатор родительского процесса) также перечислен в случае это сценарий , который нерестится проблема ребенок много.
Теперь, если у вас много UDP-трафика, этого будет недостаточно, и вам придется прибегнуть к OProfile или SystemTap , которые в настоящее время находятся за пределами моего опыта.
Это должно помочь сузить положение в общем случае.
Когда вы закончите, удалите правило аудита, используя ту же строку, которую вы использовали для его создания, только замените -a
на -d
.
auditctl -d exit,always -F arch=b64 -F a0=2 -F a1\&=2 -S socket -k SOCKET