L'audit Linux peut être utile. Il permettra au moins de localiser les utilisateurs et les processus qui établissent des connexions réseau par datagramme. Les paquets UDP sont des datagrammes.
Tout d'abord, installez le auditd
sur votre plateforme et assurez-vous que auditctl -l
renvoie quelque chose, même si elle indique qu'aucune règle n'est définie.
Ensuite, ajoutez une règle pour surveiller l'appel système socket()
et l'étiqueter pour le retrouver plus facilement par la suite ( -k
). Je dois supposer que vous utilisez une architecture 64 bits, mais vous pouvez substituer b32
à la place du 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 parcourir les pages de manuel et les fichiers d'en-tête pour le construire, mais ce qu'il capture est essentiellement cet appel système : socket(PF_INET, SOCK_DGRAM|X, Y)
où le troisième paramètre n'est pas spécifié mais est souvent égal à zéro. PF_INET
est de 2 et SOCK_DGRAM
Les connexions TCP utilisent SOCK_STREAM
qui fixerait a1=1
. ( SOCK_DGRAM
dans le deuxième paramètre peut être ORed avec SOCK_NONBLOCK
ou SOCK_CLOEXEC
, d'où la &=
comparaison). Les -k SOCKET
est le mot-clé que nous voulons utiliser lors des recherches ultérieures dans les pistes d'audit. Il peut s'agir de n'importe quoi, mais je préfère rester simple.
Laissez passer quelques instants et examinez les pistes d'audit. En option, vous pouvez forcer quelques paquets en envoyant un ping à un hôte sur le net, ce qui provoquera une recherche DNS, qui utilise UDP, ce qui devrait déclencher notre alerte d'audit.
ausearch -i -ts today -k SOCKET
Un résultat similaire à celui de la section ci-dessous s'affiche. Je l'abrège 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 le résultat ci-dessus, nous pouvons voir que la fonction ping
a provoqué l'ouverture du socket. Je peux alors exécuter strace -p 14510
sur le processus, s'il est toujours en cours. Le processus ppid
(ID du processus parent) est également listé au cas où il s'agirait d'un script qui génère souvent l'enfant à problèmes.
Maintenant, si vous avez beaucoup de trafic UDP, cela ne sera pas suffisant et vous devrez avoir recours à Profil OP ou SystemTap Ces deux aspects dépassent actuellement mes compétences.
Cela devrait permettre de réduire le nombre de cas généraux.
Lorsque vous avez terminé, supprimez la règle d'audit en utilisant la même ligne que celle que vous avez utilisée pour la créer, mais remplacez-la par la suivante -a
con -d
.
auditctl -d exit,always -F arch=b64 -F a0=2 -F a1\&=2 -S socket -k SOCKET