Linux-Auditing kann helfen. Zumindest werden Benutzer und Prozesse lokalisiert, die Datagramm-Netzwerkverbindungen herstellen. UDP-Pakete sind Datagramme.
Installieren Sie zunächst das auditd
Framework auf Ihrer Plattform und stellen Sie sicher, dass auditctl -l
etwas 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 b32
anstelle der ersetzen, b64
wenn 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_INET
ist 2 und SOCK_DGRAM
ist 2. TCP-Verbindungen würden verwenden, SOCK_STREAM
die gesetzt würden a1=1
. ( SOCK_DGRAM
Im zweiten Parameter kann ODER mit SOCK_NONBLOCK
oder angegeben werden SOCK_CLOEXEC
, daher der &=
Vergleich.) Dies -k SOCKET
ist 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 ping
Befehl das Öffnen des Sockets verursachte. Ich könnte dann strace -p 14510
den 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 -a
durch -d
.
auditctl -d exit,always -F arch=b64 -F a0=2 -F a1\&=2 -S socket -k SOCKET