L'audit Linux peut aider. Il permettra au moins de localiser les utilisateurs et les processus établissant des connexions réseau datagrammes. Les paquets UDP sont des datagrammes.
Commencez par installer le auditd
framework sur votre plate-forme et assurez-vous qu’il auditctl -l
renvoie quelque chose, même s’il indique qu’aucune règle n’est définie.
Ensuite, ajoutez une règle pour regarder l'appel système socket()
et marquez-la pour faciliter la recherche plus tard ( -k
). Je dois supposer que vous utilisez une architecture 64 bits, mais vous pouvez le remplacer b32
par un autre b64
si vous ne l'êtes pas.
auditctl -a exit,always -F arch=b64 -F a0=2 -F a1\&=2 -S socket -k SOCKET
Vous devez choisir parmi les pages de manuel et les fichiers d’entête pour le construire, mais cela capture essentiellement l’appel système suivant:, socket(PF_INET, SOCK_DGRAM|X, Y)
où le troisième paramètre est non spécifié mais souvent nul. PF_INET
est 2 et SOCK_DGRAM
est 2. Les connexions TCP utiliseraient SOCK_STREAM
ce qui définirait a1=1
. ( SOCK_DGRAM
dans le deuxième paramètre, OR peut être associé à SOCK_NONBLOCK
ou SOCK_CLOEXEC
, d’où la &=
comparaison). C'est -k SOCKET
le mot clé que nous souhaitons utiliser lors de la recherche ultérieure de pistes d'audit. Cela peut être n'importe quoi, mais j'aime rester simple.
Laissez passer quelques instants et passez en revue les pistes d'audit. Vous pouvez éventuellement forcer deux ou trois paquets en envoyant une requête ping à un hôte sur le réseau, ce qui provoquera une recherche DNS, qui utilise UDP, ce qui devrait déclencher notre alerte d'audit.
ausearch -i -ts today -k SOCKET
Et une sortie similaire à la section ci-dessous apparaîtra. Je l'abrévie pour mettre en évidence les parties 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
Dans la sortie ci-dessus, nous pouvons voir que la ping
commande a provoqué l'ouverture du socket. Je pourrais alors exécuter strace -p 14510
le processus s'il fonctionnait toujours. Le ppid
code (ID de processus parent) est également indiqué dans le cas où il s'agirait d'un script qui engendrerait beaucoup l'enfant problématique.
Maintenant, si vous avez beaucoup de trafic UDP, cela ne sera pas suffisant et vous devrez recourir à OProfile ou SystemTap , deux domaines qui dépassent actuellement mon expertise.
Cela devrait aider à préciser les choses dans le cas général.
Lorsque vous avez terminé, supprimez la règle d'audit en utilisant la même ligne que celle utilisée pour la créer, remplacez uniquement -a
par -d
.
auditctl -d exit,always -F arch=b64 -F a0=2 -F a1\&=2 -S socket -k SOCKET