Linux-Auditing kann helfen. Zumindest werden Benutzer und Prozesse lokalisiert, die Datagramm-Netzwerkverbindungen herstellen. UDP-Pakete sind Datagramme.
Installieren Sie zunächst das auditdFramework auf Ihrer Plattform und stellen Sie sicher, dass auditctl -letwas zurückgegeben wird, auch wenn darin angegeben ist, dass keine Regeln definiert sind.
Fügen Sie dann eine Regel hinzu, um den Systemaufruf zu beobachten, socket()und markieren Sie ihn, um ihn später leichter zu finden ( -k). Ich muss davon ausgehen, dass Sie auf einer 64-Bit-Architektur sind, aber Sie können b32anstelle der ersetzen, b64wenn Sie nicht sind.
auditctl -a exit,always -F arch=b64 -F a0=2 -F a1\&=2 -S socket -k SOCKET
Sie müssen Manpages und Header-Dateien durchsehen, um dies zu erstellen, aber was es erfasst, ist im Wesentlichen dieser Systemaufruf:, socket(PF_INET, SOCK_DGRAM|X, Y)bei dem der dritte Parameter nicht spezifiziert ist, aber häufig Null. PF_INETist 2 und SOCK_DGRAMist 2. TCP-Verbindungen würden verwenden, SOCK_STREAMdie gesetzt würden a1=1. ( SOCK_DGRAMIm zweiten Parameter kann ODER mit SOCK_NONBLOCKoder angegeben werden SOCK_CLOEXEC, daher der &=Vergleich.) Dies -k SOCKETist unser Schlüsselwort, das wir später bei der Suche nach Prüfpfaden verwenden möchten. Es kann alles sein, aber ich halte es gerne einfach.
Lassen Sie einige Momente verstreichen und überprüfen Sie die Audit-Trails. Optional können Sie ein paar Pakete erzwingen, indem Sie einen Host über das Internet anpingen. Dadurch wird eine DNS-Suche durchgeführt, die UDP verwendet und unsere Überwachungswarnung auslösen sollte.
ausearch -i -ts today -k SOCKET
Die Ausgabe ähnelt dem folgenden Abschnitt. Ich kürze es ab, um die wichtigen Teile hervorzuheben
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
In der obigen Ausgabe können wir sehen, dass der pingBefehl das Öffnen des Sockets verursachte. Ich könnte dann strace -p 14510den Prozess ausführen , wenn er noch läuft. Die ppid(übergeordnete Prozess-ID) wird auch aufgeführt, wenn es sich um ein Skript handelt, das das Problemkind häufig hervorbringt.
Wenn Sie viel UDP-Verkehr haben, wird dies nicht gut genug sein und Sie müssen auf OProfile oder SystemTap zurückgreifen , die beide derzeit außerhalb meines Fachwissens liegen.
Dies sollte helfen, die Situation im Allgemeinen einzugrenzen.
Wenn Sie fertig sind, entfernen Sie die Überwachungsregel, indem Sie dieselbe Zeile verwenden, mit der Sie sie erstellt haben, und ersetzen Sie sie nur -adurch -d.
auditctl -d exit,always -F arch=b64 -F a0=2 -F a1\&=2 -S socket -k SOCKET