niemand hat geschrieben: 24.05.2024 16:54:46
ICMP hat Ports?.
Nein, natürlich nicht.
Aber, der Daemon muß auf Netzwerkpakete im Allgemeinen lauschen. Ob der auf ICMP, UDP oder TCP lauscht, ist da erstmal egal. Der Unterschied zwischen den einzelnen Netzwerkpaketen ist ohnehin gering. Bei einem UDP- oder TCP-Paket steht halt im Datenheader die Portnummer drin, bei einem ICMP-Paket steht der ICMP-Typ da drin. Zwischen UDP und TCP besteht auch nur der Unterschied, daß UDP zustandslos ist, wenn es zu Paketverlusten kommt, muß sich die Anwendung darum kümmern, bei TCP kümmert sich der Kernel darum und entlastet so die Anwendung.
Die Sicherheitslücke bei Netzwerkpaketen besteht hauptsächlich darin, die Daten im Netzwerkpaket falsch zu interpretieren. Wenn z.B. die Portnummer eines TCP-Pakets beim Transport durch das Netz verstümmelt wird, und dort z.B. 22 statt 80 drinsteht, dann wird das Paket an den SSH-Daemon gereicht statt an den HTTP-Daemon, der sich um die mit 80 nummerierten Pakete zu kümmern sollte. Daß dabei völlig unsinnige Daten am SSH-Daemon ankommen, ist wohl logisch. Wenn das einen Pufferüberlauf auslöst, kann man das zum Einschmuggeln von Schadcode nutzen. Wird sowas allgemein bekannt, kann man eine betroffenen Daemon gezielt mit manipulierten, also absiochtlich falschen Daten, angreifen.
Ein Daemon muß also in der Lage sein, die Daten im Datenpaket zu verifizieren und ggfls. einfach zu verwerfen, völlig unabhängig von Tranportprotokoll und Portnummer.
Es macht also keinen Unterschied, ob der Knockdaemon wartet, bis ICMP-Pakete eintrudeln oder ob er wartet, bis UDP-Pakete eintrudeln. In beiden Fällen muß er das gleiche tun, nämlich die Daten lesen, entscheiden, ob es ein korrektes Datenpaket ist, dann entscheiden, ob damit eine Aktion verbunden ist, wie öffnen Port 22 für Quell-IP, und wenn alles erfüllt ist, diese Aktion ausführen.
Ich kenne mich mit UDP nicht aus – ich dachte bislang, dass dort wie bei TCP in Fall eines tatsächlich nicht offenen Ports der letzte Host vor dem Ziel ein „connection refused“ zurückschickt, und anderenfalls nicht.
Der letzte Rechner kann das Paket auch verwerfen (DROP). Dann gtibt es gar keine Antwort, nicht mal "connection refused", egal ob UDP, TCP oder ICMP.