it-swarm.com.de

Ist es theoretisch möglich, Backdoors an Ports höher als 65535 bereitzustellen?

Angenommen, Sie könnten das Betriebssystem/die Firmware/das Gerät für Server/Client so ändern, dass Ports über 65535 gesendet und abgehört werden. Könnte es möglich sein, eine Hintertür einzurichten und beispielsweise Port 70000 abzuhören?

Ich denke, die eigentliche Frage lautet:

Wenn Sie den TCP/IP-Stack lokal auf dem Computer neu erstellen, funktioniert das Gesamtkonzept nicht, da RFC 793 - Transmission Control Protocol Standard funktioniert wie unten in einigen Antworten erwähnt? Es ist unmöglich, auf einen Dienst zuzugreifen, der an einem Port ausgeführt wird, der höher als 65535 ist.

Es wurde so viel darüber gesprochen, dass Hardware und Geräte Hintertüren erstellt haben, auf die nur die Regierung Zugriff zur Überwachung hat, und ich war nur neugierig, ob dies möglicherweise eine der Möglichkeiten war, dies zu tun und zu vermeiden, entdeckt und gefunden zu werden?

76
Jason

Nein, das Feld für die Portnummer in einem TCP - Header ist technisch auf 2 Byte begrenzt. (Geben Sie 2^16=65536 mögliche Ports)

Wenn Sie das Protokoll ändern, indem Sie mehr Bits für höhere Ports reservieren, verletzen Sie die Spezifikation für TCP-Segmente und werden von einem Client nicht verstanden. Mit anderen Worten, Sie sprechen nicht mehr TCP und der Begriff "Port" wie in "TCP-Quell-/Zielport" würde nicht gelten. Die gleiche Einschränkung besteht für UDP-Ports.

Eine Hintertür könnte jedoch stattdessen über ein anderes Protokoll als TCP oder UDP) kommunizieren, um die Kommunikation zu verdecken. Beispielsweise ist icmpsh eine umgekehrte Shell Dies verwendet nur ICMP. Letztendlich können Sie auch Ihr eigenes benutzerdefiniertes Transportschichtprotokoll mit Raw-Sockets implementieren, das eine eigene Vorstellung von Ports mit einem größeren Bereich als 0-65535 haben kann.

198
Arminius
28
J.A.K.

Wenn Sie den TCP/IP-Stack lokal auf dem Computer neu erstellen, funktioniert das Gesamtkonzept dann nicht, da der RFC 793 - Transmission Control Protocol Standard wie in einigen Antworten unten beschrieben funktioniert? Es ist unmöglich, auf einen Dienst zuzugreifen, der an einem Port ausgeführt wird, der höher als 65535 ist.

Es gibt keine TCP/UDP-Dienste an Ports höher als 65535. Wenn Portnummern über 2 unterstützt werden16-1, dann ist es nicht mehr TCP (oder UDP) .

Kannst du etwas anderes das ...? Sicher. Und könnte es TCP sehr ähnlich sein? Bis zur Abwärtskompatibilität? Ja zu beiden Fragen.

Es wurde so viel darüber gesprochen, dass Hardware und Geräte Hintertüren erstellt haben, dass auch nur die Regierung Zugriff auf die Überwachung hat, und ich war nur neugierig, ob dies möglicherweise eine der Möglichkeiten war, dies zu tun und zu vermeiden, entdeckt und gefunden zu werden?

Wenn ich ein solches Gerät entwickelt hätte, würde es sich auf ein Protokoll stützen, das so häufig ist, dass es unauffällig ist. Ein unbekanntes/illegales Protokollpaket, nach dem zusätzlicher Datenverkehr entsteht, wäre ziemlich verdächtig.

Verstecke dich in (fast) Sichtweite

Ein solches Gerät könnte beispielsweise einige Bytes in der Nutzlast untersuchen. Sie wären normalerweise nicht korrelierte Werte; Ich könnte dann Pakete an das Ziel senden, oder wenn es sich um einen Router ohne eigene IP-Adresse handelt, an einen zufälligen, möglicherweise sogar nicht vorhandenen Host darüber hinaus das Ziel, das sich als (sagen wir) tarnt ) eine HTTPS-Anfrage oder ein SSH-Anmeldeversuch.

Wenn Sie ein Paket sehen, das Sie nicht kennen, werden Sie möglicherweise misstrauisch. Aber auch wenn Sie in den Protokollen so etwas gesehen haben

SSH: failed attempt for user maintenance
SSH: failed attempt for user maintenance
SSH: failed attempt for user maintenance

sie würden sich keine Sorgen machen, besonders wenn Sie nein Benutzer "Wartung" hätten. Sie würden vielleicht annehmen, dass irgendwo jemand einen Angriff auf ein Gerät mit einem Standardbenutzer von "Wartung" entdeckt hat (zum Teufel, wenn ich eine Regierung wäre, könnte ich vermarkten ein solches Gerät verwundbar machen , und nicht beheben, zum alleinigen Zweck, solche Verbindungen auf völlig anderen Geräten zu rechtfertigen. Was würden Sie als Erstes tun, wenn Sie solche Versuche sehen? Entweder nichts ("harmlose Bruteforce. Idiot"), Google und Achselzucken ("Oh, jemand denkt, ich habe einen CheapRouter 2000. Idiot", möglicherweise schreiben Sie eine Firewall-Regel, um die IP zu blockieren - außer dass die Pakete immer noch ankommen to die Netzwerkkarte).

Und was tatsächlich passiert ist, dass die böse Firmware im Router, der Netzwerkkarte, dem Motherboard oder was Sie haben, erkennt das Paket und eine Antwort zurücksendet. Dies könnte durch Fälschen von Antwortpaketen geschehen, die die "echten" überschreiben.

Das einzige Symptom für etwas sehr Schlimmes wäre, wenn Sie beispielsweise den eingehenden und ausgehenden Verkehr von einem bösen Router vergleichen:

Host mit SSH-Server:

--> SSH SYN --> ROUTER --> SSH SYN --> Host
<-- SSH S+A --- ROUTER <-- SSH S+A <-- Host
--> SSH ACK --> ROUTER --> SSH ACK --> Host
...
--> LOGIN ----> ROUTER --> LOGIN ----> Host
<-- FAIL2------ ROUTER <-- FAIL1 <---- Host    packets are different!

Host ohne SSH-Server:

--> SSH SYN --> ROUTER --> SSH SYN --> Host
<-- SSH S+A --- ROUTER <-- SSH RST <-- Host    wait, WTF?
--> SSH ACK --> ROUTER                 Host
...
--> LOGIN ----> ROUTER                 Host
<-- FAIL2------ ROUTER                 Host

Wenn Sie an einem Kabel links oder rechts vom gefährdeten Gerät schnüffeln, werden Sie sofort feststellen, dass nichts falsch ist.

Die andere verdächtige Sache wäre dann, dass der Absender anscheinend die Erweiterung TCP Fast Open verwendet. Beachten Sie, dass Sie zusätzliche Daten im SYN auch ohne TCP/FO senden können. Diese werden von Geräten, die beide Nicht-FO und nicht gefährdet sind, einfach ignoriert.

25
LSerni

Wie bereits erwähnt, werden Portnummern mit einer vorzeichenlosen 16-Bit-Ganzzahl dargestellt und dürfen nicht über 65535 liegen.

Es besteht jedoch die Möglichkeit, unterschiedliche Protokolle zu verwenden (nicht TCP oder UDP). Im IP-Header befindet sich ein 8-Bit-Feld namens "Protokollnummer", das angibt, welches Transportprotokoll darin verwendet wird Paket.

Die Tabelle der Transportprotokolle finden Sie hier: http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml

Einige Protokolle aus dieser Liste sind weit verbreitet (z. B. TCP oder UDP), andere seltener (DCCP oder UDPLite). Einige Protokollnummern werden noch nicht verwendet, andere sind veraltet (ARGUS, EMCON).

Backdoor kann also nicht verwendete Protokollnummern verwenden, um Daten an seinen Server zu senden. Natürlich ist diese Technik schwierig zu implementieren (benötigt Zugriff auf Rawsocket oder Implementierung von Backdoor als OS-Kernelmodul).

5
Sauron

(tcp headers

Quelle: https://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#TCPIPREPETITION

Dieses wirklich umfangreiche Dokument zeigt deutlich, wie Bits im Internet über TCP zugewiesen werden. Es zeigt die Quell- und Zielports nebeneinander.

Sie haben also einen 32-Bit-Quellport erstellt? NOPE wird am Ziel behandelt, sobald es die Internetbytes 3 & 4 (die niedrigere Ordnung) Ihres Quellports berührt.

Der Zielport löscht die Sequenznummer aus und alles wird weiter unten in der Zeile gedrückt.

Jetzt, da die Sequenznummer zerschlagen wurde, erwartet das Ziel diese Sequenznummer nicht mehr und lässt sie fallen, als wäre es ein gefälschtes Paket.

Selbst wenn es diesen Punkt überschritten hat, wird die Bestätigungsnummer durch die Sequenznummer zerschlagen, und da diese Nummer jetzt für das Internet ungültig ist, wird sie niemals bestätigt.

2
cybernard

Ich habe ein paar Tage darüber nachgedacht, und ich denke, die Antwort könnte tatsächlich ja sein, aber auf seltsame Weise .

Wie viele andere Antworten gezeigt haben, TCP sagt, dass die Portnummern 16 Bit sind. Diese 16 1s und 0s. Dies hat eine Grenze von 65535 wiederholbaren Ports. Für den Rest des Beispiels Ich würde 4 Bits verwenden, weil ich faul bin.

Mit 4 Bits kann ich also 15 Ports darstellen.

Ihre Theater-Hintertür müsste sich darauf verlassen, wie sie mit fehlerhaften Paketen umgeht TCP Pakete. Also (denken Sie an 4 statt 16 Bit). Lassen Sie uns etwas Verkehr auf Port 17 senden.

Der Header würde als 10001 fehlerhaft sein. Ihr TCP -Stack könnte angeben, dass Sie, wenn Sie einen fehlerhaften Header erhalten, einen anderen Logikpfad einschlagen und Daten an den Port der "ganz rechts" vier anhängen Bits. In diesem Fall Port 1 oder 0001. Der eigentliche Trick ist, dass TCP verwendet nur die Bitanzahl. Es ist nicht wie bei XML, wo es einen [Port] 10001 [/ Port] gibt Sie benötigen eine Möglichkeit, um den Überlauf Ihres Port-Headers zu erkennen. SYN befindet sich direkt neben dem Port, sodass Sie dies tun können. Eine SYN von genau "1073741823" bedeutet, dass Ihr Zielport um eins größer ist.

Dieser andere Logikpfad könnte dann für die gesamte Zeit aktiv bleiben, in der die Verbindung an Port 1 aktiv ist.

Auf diese Weise könnten Sie eine TCP Hintertür irgendwo haben, die fehlerhafte Pakete akzeptiert und etwas Besonderes damit gemacht hat. Das eigentliche Problem ist, dass nichts als Ihr spezielles TCP = Stack könnte sie verstehen. Router, Smart Switches, sogar theoretisch einige NIC Karten würden das Paket verwerfen, weil es fehlerhaft ist. Es gibt fast keine Möglichkeit zu sagen, ob ein Paket es schaffen würde mit diesem fehlerhaften Header zum Ziel.

Wenn Sie jedoch zwei Geräte mit dem Wonky TCP -Stack) an einen "dummen" Switch oder Hub anschließen. Theoretisch könnten Sie dies zum Laufen bringen, dies wäre jedoch nicht im TCP spec.

2
coteyr

Dies wäre möglich, aber Sie könnten keine Protokolle wie UDP und TCP] verwenden, da der maximale Port 65535 beträgt.

Sie müssten Ihr eigenes Protokoll zusätzlich zum IP-Protokoll implementieren.

Dies kann mit Rohsteckdosen möglich sein.

Es wurde so viel darüber gesprochen, dass Hardware und Geräte Hintertüren erstellt haben, dass auch nur die Regierung Zugriff auf die Überwachung hat, und ich war nur neugierig, ob dies möglicherweise eine der Möglichkeiten war, dies zu tun und zu vermeiden, entdeckt und gefunden zu werden?

Ich denke nicht, dass dies dazu beitragen würde, die Verbindung verstohlener zu machen, da Sie immer noch Pakete im Netzwerk sehen können.

2
ChrisK

Jeder erklärte es mit einem TCP/IP-Paket: Das Portfeld ist nur 16 Bit lang.

Aber wie steht es mit dem Linux-Kernel-Quellcode und wie geht er mit dem Port um? Überall im Linux-Kernel wird der TCP/IP-Port immer als "kurz" oder 16 Bit umgewandelt. Und wenn es in x86 Assembly kompiliert wird, wird die 16-Bit-Version der Anweisungen für die Verarbeitung der 16-Bit-Daten verwendet.

Und wenn Sie sich über IPv6 wundern, dann ist es dasselbe wie IPv4 - alles über TCP und UDP).

https://stackoverflow.com/questions/186829/how-do-ports-work-with-ipv6

Aber natürlich können Sie eine seltsame Kommunikation wie die Verwendung von ZWEI Servern für die Kommunikation einrichten - jeder hat individuelle 16-Bit-Ports. Wenn Sie diese kombinieren, haben Sie einen virtuellen 32-Bit-Port. Aber nur Sie auf der ganzen Welt wissen, wie man mit den beiden Servern spricht - z. B. indem Sie die Daten in zwei Hälften teilen und zwischen den beiden Servern aufteilen, um sie auf der Clientseite wieder zu rekonstruieren.

Es schien wirklich länger als 16 Bit fast unmöglich zu sein.

2
Peter Teoh