La auditoría de Linux puede ayudar. Al menos localizará a los usuarios y procesos que realizan conexiones de red de datagramas. Los paquetes UDP son datagramas.
Primero, instale el auditd
marco en su plataforma y asegúrese de que auditctl -l
devuelva algo, incluso si dice que no hay reglas definidas.
Luego, agregue una regla para ver la llamada del sistema socket()
y etiquétela para encontrarla más tarde ( -k
). Necesito suponer que está en una arquitectura de 64 bits, pero puede sustituirla b32
en lugar de la b64
que no está.
auditctl -a exit,always -F arch=b64 -F a0=2 -F a1\&=2 -S socket -k SOCKET
Tiene que elegir entre las páginas man y los archivos de encabezado para construir esto, pero lo que captura es esencialmente esta llamada al sistema: socket(PF_INET, SOCK_DGRAM|X, Y)
donde el tercer parámetro no está especificado pero con frecuencia es cero. PF_INET
es 2 y SOCK_DGRAM
es 2. Se usarían conexiones TCP SOCK_STREAM
que establecerían a1=1
. ( SOCK_DGRAM
en el segundo parámetro se puede ORar con SOCK_NONBLOCK
o SOCK_CLOEXEC
, de ahí la &=
comparación). Esta -k SOCKET
es nuestra palabra clave que queremos usar al buscar pistas de auditoría más adelante. Puede ser cualquier cosa, pero me gusta que sea simple.
Deje pasar unos momentos y revise las pistas de auditoría. Opcionalmente, puede forzar un par de paquetes haciendo ping a un host en la red, lo que provocará una búsqueda de DNS, que utiliza UDP, que debería disparar nuestra alerta de auditoría.
ausearch -i -ts today -k SOCKET
Y aparecerá una salida similar a la siguiente sección. Lo estoy abreviando para resaltar las partes importantes
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
En el resultado anterior, podemos ver que el ping
comando provocó que se abriera el socket. Entonces podría ejecutar strace -p 14510
el proceso, si todavía se estaba ejecutando. El ppid
(ID de proceso principal) también aparece en caso de que sea un script que genera mucho el problema secundario.
Ahora, si tiene mucho tráfico UDP, esto no será lo suficientemente bueno y tendrá que recurrir a OProfile o SystemTap , que actualmente están más allá de mi experiencia.
Esto debería ayudar a reducir las cosas en el caso general.
Cuando haya terminado, elimine la regla de auditoría utilizando la misma línea que usó para crearla, solo sustitúyala -a
por -d
.
auditctl -d exit,always -F arch=b64 -F a0=2 -F a1\&=2 -S socket -k SOCKET