Аудит 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
Для створення цього вам доведеться вибирати підручні сторінки та файли заголовків, але те, що воно захоплює, це по суті цей системний виклик:, 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
нашому ключовому слові ми хочемо використовувати при пошуку аудиту пізніше. Це може бути будь-що, але мені подобається робити це просто.
Пропустіть кілька хвилин і перегляньте аудиторські сліди. Необов’язково, ви можете змусити пару пакетів, вивівши хост у мережу, що спричинить пошук 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