Suchen Sie nach lokalen Prozessen, die TCP-Verbindungen starten

Suchen Sie nach lokalen Prozessen, die TCP-Verbindungen starten

Mit tcpdump sehe ich viele SYN-Pakete ... und die Quell-IP ist Localhost.

Ich möchte herausfinden, welche Prozesse versuchen, eine Verbindung herzustellen.

Beachten Sie, dass die Verbindungen nicht den Status „HERGESTELLT“ erreichen. Es scheint sich um zufällige Port-Scans zu handeln.

Antwort1

Ich war vor kurzem unter Linux in der gleichen Situation (der Übeltäter war adb). Mein Ansatz bestand darin, das Audit-System zum Protokollieren der connect()Systemaufrufe zu verwenden.

sudo auditctl -a exit,always  -F arch=b64  -S connect -k who-connects

Um das Audit-System anzuweisen, alle Systemaufrufe zu protokollieren connect()(hier die 64-Bit-Variante, Sie können eine weitere für die 32-Bit-Varianten hinzufügen, wenn Sie ein Multi-Arch-System mit sowohl 32- als auch 64-Bit-Anwendungen verwenden)

Späterer Lauf:

sudo ausearch -i -k who-connects

Um zu sehen, welche Verbindungen hergestellt wurden.

Es wäre immer noch möglich, TCP-Verbindungen herzustellen, ohne die Socket-API zu verwenden. Beispielsweise durch die Implementierung eines TCP-Stacks im Benutzerbereich und die Verwendung von APIs auf niedrigerer Ebene zum Senden von Paketen. Dies wäre jedoch nicht üblich (insbesondere bei der Loopback-Schnittstelle).

Antwort2

Vorausgesetzt, Sie haben SystemTap installiert

probe begin {
    printf("ok\n");
}
probe syscall.connect {
    # connect however may fail or flail around in a EINPROGRESS state;
    # this log only indicates that a connect was attempted
    if (uaddr_af == "AF_INET" || uaddr_af == "AF_INET6")
        printf("%s[%d]: %s\n", execname(), pid(), argstr);
}
probe syscall.connect.return {
    printf(" -> %s[%d]: %s\n", execname(), pid(), retstr);
}

Gespeichert als whomakeconnect.stpzeigt connectAnrufe an, wenn es mit stap„Als“ ausgeführt wird.root

# stap-prep
... fix anything reported, it requires debug kernels ...
# stap whomakeconnect.stp

Antwort3

Sie können den Befehl netstat verwenden. Er zeigt den Status des Pakets an. Sie müssen jedoch die Ausgabe abfangen, da sie nur zum Sendezeitpunkt angezeigt wird. Es ist nicht wie ein TCP-Abhörsocket. Deshalb können Sie versuchen, sie mit dem Befehl watch abzufangen. Ich nehme an, dass die Verbindung über IPv4 erfolgt.

watch -n 0.1 'netstat -4pn | grep -F "SYN_SENT"'

Nestat-Flaggen

p-Flag: Prozess-ID/-Name

n-Flag: numerische Ausgabe (keine DNS-Auflösung)

4 Flag: IPv4-Sockets anzeigen

Der Befehl „watch“ bewirkt, dass der Befehl „netstat“ in Abständen von 0,1 Sekunden wiederholt ausgeführt wird.

verwandte Informationen