it-swarm.com.de

Warum ist TCP sicherer als UDP?

Beim Lesen von MS SDL-Präsentationen habe ich eine Empfehlung gefunden, UDP in Anwendungen durch TCP zu ersetzen, weil TCP ist sicherer als UDP. Beide sind jedoch nur Transportschichten) , nichts mehr.

Warum ist TCP sicherer als UDP?

58
sluge

Um Daten über TCP an eine Anwendung zu senden, müssen Sie zunächst eine Verbindung herstellen. Bis die Verbindung hergestellt ist, gelangen Pakete nur zur Betriebssystemschicht, nicht zur Anwendung. Um eine Verbindung herzustellen, müssen Sie Pakete an das initiierende Ende zurückerhalten. Wenn Sie eine IP-Adresse fälschen möchten, die sich nicht in Ihrem eigenen Netzwerk befindet, und eine TCP -Verbindung) herstellen möchten, müssen Sie in der Lage sein, die Pakete abzufangen, die von der anderen Seite gesendet wurden "zwischen" dem Endpunkt und wo die Pakete an die gefälschte IP-Adresse normalerweise gehen würden, oder machen Sie einige andere clevere Routing-Tricks.)

UDP hat keine Verbindung, daher können Sie ein Paket mit einer beliebigen IP-Adresse fälschen und es sollte zur Anwendung gelangen. Sie erhalten immer noch keine Pakete zurück, es sei denn, Sie sind natürlich am richtigen "Ort". Ob dies wichtig ist oder nicht, hängt von der Sicherheit ab, die Sie in die Anwendung gestellt haben. Wenn Sie bestimmten IP-Adressen in der Anwendung mehr vertrauen als anderen, kann dies ein Problem sein.

In diesem Sinne ist TCP ist "sicherer" als UDP. Je nach Anwendung kann dies für die Sicherheit relevant sein oder nicht. An und für sich ist es kein guter Grund, UDP zu ersetzen mit TCP, da zwischen den beiden Protokollen andere Kompromisse bestehen.

79
Steve Sether

Normales UDP behält nicht den Status bei, hat Handshakes usw. Dies bedeutet, dass ein Angreifer leicht ein gefälschtes Paket senden kann, es sei denn, es gibt Schutzmaßnahmen auf anderen Ebenen.

Zum Senden des gefälschten TCP -Pakets) muss der Angreifer hingegen die Sequenznummer und den Client-Port einer hergestellten Verbindung erraten.

27
domen

TCP ist nicht sicherer als UDP, es ist "zuverlässiger", da es statusbehaftet ist und die Bestätigung jedes Segments erfordert. UDP ist zustandslos und sendet nur Segmente, ohne zu wissen, ob der Client sie erhält oder nicht.

Weder haben sie maßgeschneiderte Sicherheitsmerkmale, die andere nicht haben, Unterschiede sind nur geringfügig auf die unterschiedlichen Anforderungen jedes Protokolls zurückzuführen, noch sind wahrgenommene Sicherheitsvorteile eher mehlige Nebenprodukte der Protokolle als ein absichtliches Sicherheitsmerkmal.

BEARBEITEN: UDP und TCP haben bestimmte Verwendungszwecke, keine dieser Verwendungszwecke bezieht sich auf die Sicherheit.

Beide Protokolle basieren auf anderen Protokollen, um die Sicherheit zu gewährleisten. Obwohl TCP möglicherweise eine etwas kleinere Angriffsfläche hat, ist dies wirklich unwichtig, um zu gewährleisten, dass Sie entweder ein sicherheitsorientiertes Protokoll benötigen. Protokoll wie DTLS oder googles QUIC.

Die Entscheidung für die Implementierung von TCP für einen Anwendungsfall, der besser für UDP geeignet ist, anstatt UDP korrekt zu sichern (TCP würde in den meisten Anwendungsfällen auch eine Sicherung erfordern) wäre wie die Verwendung eines 9-Eisen zum Putten weil du denkst, dass ein 9er Eisen eine bessere Waffe wäre, um dich in einem Kampf zu verteidigen ... wenn du eine Waffe in der Tasche hast.

22
TheJulyPlot

Ist TCP sicherer als UDP?

Ja, aber wir müssen uns sehr klar darüber sein, wovon wir sprechen, wenn wir über "Sicherheit" sprechen, und diese Aussage nicht auf Protokolle der oberen Schicht verallgemeinern.

Derzeit wird Sicherheit häufig mit der Triade [~ # ~] cia [~ # ~] assoziiert:

  • C Vertraulichkeit.
  • I Integrität.
  • A Verfügbarkeit.

Die Version 4 des IP-Protokolls, die heute noch am häufigsten verwendet wird, ist ein sehr altes Tier, das in den 70er und 80er Jahren entwickelt wurde.

Zu dieser Zeit war Vertraulichkeit nicht wirklich ein Thema, und es ging wirklich darum, Integrität und Verfügbarkeit zu erreichen (das Arpanet-Netzwerk, der Vorfahr des Internets, aus dem das IP-Protokoll hervorging, wurde entwickelt, um eine Kontinuität des Dienstes auch im Internet zu gewährleisten im Falle eines Atomkrieges, nicht um Transitdaten zu schützen).

In dieser Optik wurden zwei Transportprotokolle über die IP-Schicht entwickelt: TCP und UDP.

TCP wurde entwickelt, um sowohl die Eigenschaften Integrität als auch Verfügbarkeit sicherzustellen. Es umfasst die damals fortschrittlichen Techniken wie einen Drei-Wege-Handshake, die Aushandlung von Parametern, die Behandlung verschiedener Verbindungsstatus, die transparente Neuordnung von Paketen, Bestätigungsfenster und Wiederholungsmechanismen. Dies gibt dem Absender eine gute Garantie dafür, dass die von ihm gesendeten Daten vollständig und unverfälscht empfangen wurden (dh keine fehlenden, geänderten oder ungeordneten Teile).

Erinnern Sie jedoch daran, dass das Ziel dieses Protokolls eine technische Katastrophe war und keine böswillige Manipulation der Daten während der Übertragung. Ein solches Problem war zu diesem Zeitpunkt völlig außer Reichweite.

UDP hingegen wurde als schnelles Protokoll konzipiert. Es hat keine der oben genannten Funktionen und daher auch keine ihrer Gemeinkosten. Insbesondere wenn der Absender einige Daten über UDP sendet, können die empfangenen Daten unvollständig, ungeordnet oder überhaupt nicht empfangen sein: Das UDP-Protokoll selbst bietet keinen Mechanismus, um dies weder auf der Sender- noch auf der Empfängerseite zu verhindern oder zu erkennen.

Auf diese Weise ist TCP) tatsächlich sicherer als UDP, wenn Sie sich auf die Datenintegrität und Verfügbarkeitseigenschaften der Sicherheit konzentrieren.

Ist ein Anwendungsprotokoll auf TCP) sicherer als ein auf UDP?

Sicherlich nicht.

Dies bedeutet nur, dass Benutzer, die ein auf UDP basierendes Anwendungsprotokoll entwickeln, mehr Arbeit haben, da sie möglicherweise in ihren Anwendungsprotokollumgehungen die im UDP-Protokoll fehlenden Funktionen implementieren müssen. Sie müssen berücksichtigen, dass gesendete Daten möglicherweise nicht unbedingt empfangen werden, dass empfangene Daten möglicherweise nicht in der richtigen Reihenfolge vorliegen usw. Dies sind alles bekannte Probleme.

OpenVPN unterstützt beispielsweise TCP hauptsächlich aus Gründen der Kompatibilität mit restriktiven Firewalls), wird standardmäßig ausgeführt und läuft am besten über UDP. Ein Wechsel zu TCP ist möglich, wird aber möglich) Erhöhen Sie die Sicherheit in keiner Weise, da der Unterschied zwischen den beiden Transportschichtprotokollen UDP und TCP vollständig von OpenVPN selbst behandelt wird. Wenn Sie es auf TCP nur umschalten) Fügen Sie dem OpenVPN-Protokoll den Overhead TCP] hinzu, wodurch die Leistung verringert wird.

Ist TCP besser als UDP?

Nein, dies ist ausschließlich eine Wahl für das Anwendungsprotokolldesign.

UDP ist ein roheres Protokoll. Bei korrekter und sorgfältiger Verwendung erzielt es kann bessere Leistungen als TCP zum Preis einer schwierigeren Entwicklung und Wartung des Anwendungsprotokolls).

  • Wenn die Anwendung nicht zeitkritisch ist, stellt sich TCP] als natürliche Wahl heraus, da das Rad nicht neu erfunden werden muss.
  • Wenn die Anwendung zeitkritisch ist, muss eine Diskussion darüber stattfinden, welche Auswahl mit dem Nachteil getroffen werden soll: a Potenzial Leistungseinbußen mit TCP gegen a sicherlich komplexere Anwendung mit UDP.

Die meisten Protokolle sind nicht zeitkritisch und daher TCP ist das am häufigsten verwendete Protokoll. Wenn Sie eine Webseite laden oder eine E-Mail erhalten, gibt es keinen Unterschied, ob Sie sie 10 Millisekunden früher oder später erhalten .

Zwei klassische Beispiele für Protokolle, die UDP verwenden, sind neben dem zuvor genannten OpenVPN Media Streaming und DNS.

Beim Media-Streaming ist es Ihnen egal, ob ein Videobild oder einige Millisekunden Video oder Audio fehlen, solange das Video oder Audio reibungslos und synchron wiedergegeben wird. In diesem Fall möchten Sie keine sich wiederholenden Pausen einleiten, da TCP ein fehlendes Paket erkannt und den Absender gebeten hat, den Inhalt des letzten Bestätigungsfensters erneut zu senden.

Bei DNS sind Anfragen und Antworten normalerweise sehr kurz und Sie möchten, dass die Namensauflösung so schnell wie möglich erfolgt (beachten Sie, dass längere und weniger zeitkritische Antworten wie DNS-Zonenübertragungen normalerweise immer noch auf TCP erfolgen). Es ist schneller, die Namensauflösungsanforderung an den DNS-Server zu senden, wenn die Anforderung oder ihre Antwort nur wenige Male verloren geht, als für jede Anforderung einen vollständigen Drei-Wege-Handshake zu verarbeiten.

Was ist mit Vertraulichkeit und böswilligem Schnüffeln/Manipulieren (und IPv6)?

Alles, was uns bisher wichtig war, war im Geiste dieses alten IPv4 das Gleichgewicht zwischen Übertragungsgeschwindigkeit und Datenintegrität + Verfügbarkeit. Wenn wir darüber hinaus noch Vertraulichkeit hinzufügen möchten, können wir dies tun, dies muss jedoch auf Anwendungsebene erfolgen, da IPv4, wie bereits erwähnt, nicht von Vertraulichkeitsproblemen betroffen ist.

Eine moderne, vollwertige Sicherheitsimplementierung kann auf Anwendungsebene implementiert werden und entweder auf TCP oder UDP (oder beide) Protokollen basieren, ohne dass dies Auswirkungen auf die Sicherheit des Anwendungsprotokolls selbst hat (siehe Beispiel) von OpenVPN oben).

Wie eingangs erwähnt, stammt IPv4 jedoch tatsächlich aus einem anderen Computerzeitalter. Es erhielt einen Nachfolger mit dem Namen if IPv6, das IPSec auf IP-Ebene nativ unterstützt und somit modernere Sicherheitsdienste bereitstellt unten Transportprotokolle wie UDP und TCP.

Dies ermöglicht die Delegierung der Datenverschlüsselung während der Übertragung von der Anwendung an die Netzwerkschicht und ermöglicht es sowohl UDP als auch TCP), genau die gleichen Sicherheitsgarantien bereitzustellen. In den meisten Szenarien wird jedoch die UDP-Leistung gesteigert durch IPSec-Overhead ausgeglichen, daher bin ich mir nicht sicher, ob die Verwendung von UDP von Vorteil wäre TCP solange IPv6 IPSec verwendet wird).

14
WhiteWinterWolf

Nicht wirklich.

Keines der Protokolle verfügt über integrierte Funktionen, die Vertraulichkeit gewährleisten sollen. Jegliche Sicherheit soll von den Protokollschichten oben (oder nten ) bereitgestellt werden.

TCP ist ein komplexeres Protokoll als UDP, was das Parodieren etwas erschwert, aber diese Komplikationen sind selten ein ernstes Hindernis.

Wenn Leute sagen, dass TCP "zuverlässiger" als UDP ist, beziehen sie sich nicht auf Sicherheit. TCP ist zuverlässiger, weil es sicherstellt, dass alle Segmente sind In der Reihenfolge empfangen und verlorene Segmente werden erneut übertragen. UDP garantiert dies nicht. Wenn die Verbindung schlecht ist, können UDP-Segmente spurlos verloren gehen oder in der falschen Reihenfolge eintreffen. Wie mit diesem Problem umgegangen werden kann, hängt von der Anwendung ab.

10
Philipp

TCP ist "verbindungsbasiert", dh es verfügt über eine integrierte Zuverlässigkeit in Form von Sequenznummern. So sende ich Ihnen beispielsweise ein Bild über TCP, aber 1/4 der Pakete werden verworfen. Da wir ein verbindungsbasiertes Protokoll mit Sequenznummern haben, weiß Ihr Computer, dass Sie es sind Fehlen diese Daten und fordern Sie diese Daten von mir an, um Datenintegrität zu gewährleisten. Dies ist langsamer, aber viel sicherer. Um TCP/IP-Pakete zu fälschen, müssen Sie diese Sequenznummer abfangen und ein bösartiges Paket senden. Ohne einen Mann in der Mitte ist das fast unmöglich!

UDP ist ein "Connetionless" -Protokoll, dh es sendet nur die Daten und vergisst sie. Es gibt keine Zuverlässigkeit oder Integrität der Daten, aber für einige Anwendungen ist sie schneller und effizienter.

7
Joshua Faust

In der Praxis ist TCP ist einfacher zu überwachen in einem Firewall-Netzwerk: Der Datenverkehr in Bezug auf extern und intern hergestellte Verbindungen und damit Client- und Serverrollen kann klar unterschieden werden Sie können beispielsweise trivial sicherstellen, dass Hosts in einem geschützten Netzwerk auf einen externen Webserver zugreifen können, jedoch nicht als Webserver für externe Clients fungieren können. Bei UDP-Diensten (z. B. DNS) können Sie solche Richtlinien durchsetzen erfordert viel mehr Intelligenz und Rätselraten, da Sie Informationen über und unter der Transportschicht berücksichtigen müssen.

4
rackandboneman

TCP ist nicht "sicherer" als UDP:

  • TCP hat per se keine Verschlüsselungsfunktion ;
  • Die TCP-Paketübertragung ist zuverlässig, Sie können sie jedoch auch über UDP emulieren.

UDP ist nur eine dünne Schicht über den IP-Paketen, während TCP über komplexe - und standardmäßige - zusätzliche Mechanismen verfügt, die Teil der Betriebssysteme sind.

Ein Blick auf das QUIC-Projekt lohnt sich, um mehr über TCP/UDP-Unterschiede zu erfahren und zu erfahren, warum Google anstelle von TCP eine eigene gesicherte HTTP/2-Transportschicht über UDP erstellt hat.

Zitieren wir https://www.chromium.org/quic :

Zu den wichtigsten Vorteilen von QUIC gegenüber TCP + TLS + HTTP2 gehören:

  • Latenz beim Verbindungsaufbau
  • Verbesserte Überlastungskontrolle
  • Multiplexing ohne Head-of-Line-Blockierung
  • Vorwärtsfehlerkorrektur
  • Verbindungsmigration
3
Arnaud Bouchez

Lassen Sie uns für jeden ein paar Vor-/Nachteile aus Sicherheitsgründen festlegen und sehen:

UDP

  • (+) Relativ schwer zu scannende offene UDP-Ports, und es gibt keinen versteckten Scan (halbe Verbindung in TCP durch Senden von SYN).
  • (-) Netzwerkgeräte (z. B. Stateful Firewalls, NAT) haben Schwierigkeiten, UDP-Verbindungen zu steuern, da es keine FLAGS gibt, auf die sie sich verlassen können.
  • (-) Reflektierte Angriffe sind aufgrund fehlender Verbindung häufiger.
  • (-) Das Spoofing von IP ist einfach und wird bei DoS-Angriffen verwendet.

TCP

  • (-) Stealthy Scan kann offene TCP - Ports erkennen (SYN nur senden, um offene Ports zu erkennen)
  • (+) Netzwerkgeräte (z. B. Stateful Firewalls) können problemlos TCP -Verbindungen) verfolgen und steuern.
  • (+) Das Fälschen von Paketen ist nicht einfach, da die richtige Sequenznummer und Bestätigungsnummer angegeben werden muss.
  • (+) Aufgrund des anfänglichen Handshakes ist es nicht so einfach wie UDP, die IP zu fälschen.
1
Shaboti

Derzeit ist TCP ist nicht sicherer als UDP. TCP ist zuverlässiger als UDP, da TCP Fehler erkennen und erneut übertragen kann) Pakete.

Wenn Sie eine sichere Datenübertragung wünschen, sollten Sie eine Formatverschlüsselung wie TLS oder IPSec verwenden.

0
morris hoodye

TCP hat ein Konzept für eine Verbindung, UDP nicht. Das Verbindungskonzept ist jedoch aus Sicherheitsgründen sowohl eine Stärke als auch eine Schwäche. Die Hauptsicherheitsstärke der Verbindung besteht darin, dass sie standardisiert ist. Der Anwendungsentwickler, die Netzwerkausrüstung und die Firewalls können sich alle auf eine feste Methode verlassen, um die Verbindung herzustellen, die Paketfragmentierung zu handhaben, erneut zu übertragen und so weiter. Darüber hinaus erleichtert das Verbindungskonzept das Erstellen zusätzlicher Sicherheitsebenen, z. B. SSL.

Eine TCP -Verbindung bietet jedoch nicht viel Schutz vor einem Angriff, der direkt auf die Transportschicht abzielt, z. B. einem SYN-Flood-Angriff. Mit UDP können Sie theoretisch jedes einzelne Paket authentifizieren, um einige davon zu verringern Risiken.

Daher würde ich argumentieren, dass UDP „theoretisch“ sicherer als TCP ist. Wir leben jedoch in einer Welt, in der Sicherheit nicht perfekt ist, sodass theoretische Stärke etwas bedeutungslos ist. In der realen Welt ist es möglich, Beispiele in beide Richtungen zu finden - wobei ein Protokoll auf eine Weise fehlgeschlagen ist, für die das andere nicht anfällig gewesen wäre.

Zusammenfassend glaube ich nicht, dass es eine Antwort darauf gibt, welches Protokoll „sicherer“ ist. Sie müssen Ihre Frage dahingehend qualifizieren, welche Bedrohungen Sie befürchten und wie viel und wie lange Sie bereit sind, sie zu mindern. Wenn es nur um Bedrohungen geht und Sie unendlich viel Zeit und Geld haben, gilt meine theoretische Antwort.

0
David Trott