Ist es möglich, mit pwnat und SSH eine Peer-to-Peer-SSH-Verbindung zwischen zwei Computern herzustellen, die sich hinter zwei separaten Firewalls / NATs befinden?
Wenn dies möglich ist, welche Schritte müssten unternommen werden, um diese Funktionalität auf einem Linux-Computer in einem NAT einzurichten, auf dem ein OpenSSH-Server ausgeführt wird, und wie würde sich ein Client hinter einem separaten NAT verbinden?
Wenn dies möglich ist, stellt dieses Setup ein erhebliches Sicherheitsrisiko dar? Konnte sich ein beliebiger SSH-Client mit dem Server verbinden, auf dem pwnat ausgeführt wird?
Antworten:
Ja. Angenommen, Ihr Netzwerk sieht folgendermaßen aus:
Sie möchten SSH von A nach B ausführen. Sie haben sshd auf B ausgeführt. es lauscht auf tcp: //127.0.0.1: 22.
pwnat on B lauscht jetzt auf udp: //0.0.0.0: 2022 und ist so konfiguriert, dass Verbindungen zu tcp: //127.0.0.1: 22 zugelassen werden. Es sendet auch periodische ICMP-Echoanforderungen an 3.3.3.3 (fest codierte IP).
pwnat on A hört jetzt auf tcp: //127.0.0.1: 3022.
pwnat on A sendet ein ICMP-Zeitüberschreitungspaket an 104.16.111.208, dessen Nutzlast mit den ausgehenden ICMP-Echoanforderungen von NAT B übereinstimmt. NAT B erkennt, dass die Nutzlast mit den ausgehenden ICMP-Echoanforderungen übereinstimmt, und leitet das ICMP-Zeitüberschreitungspaket an B weiter Der IP-Header für das ICMP-Zeitüberschreitungspaket enthält die IP-Adresse 151.101.193.69 von NAT A als Quelladresse.
pwnat on B sendet ein UDP-Paket an udp: //151.101.193.69: 2022 mit dem Quellport 2022. NAT B fügt einen Eintrag in seine Tabelle ein, sodass es in Zukunft alle von udp: //151.101.193.69 empfangenen UDP-Pakete weiterleitet : 2022 at udp: //104.16.111.208: 2022 to udp: //192.168.2.10: 2022. Beachten Sie, dass viele NATs einen anderen Port auf der externen Schnittstelle zuweisen. In diesem Fall funktioniert pwnat nicht .
pwnat on A sendet ein UDP-Paket an udp: //104.16.111.208: 2022 mit dem Quellport 2022. NAT A fügt einen Eintrag in seine Tabelle ein, sodass es in Zukunft alle von udp: //104.16.111.208 empfangenen UDP-Pakete weiterleitet : 2022 at udp: //151.101.193.69: 2022 to udp: //192.168.1.10: 2022.
NAT A empfängt das von B gesendete UDP-Paket, ordnet es seiner Tabelle zu und leitet es an A weiter. NAT B empfängt das von A gesendete UDP-Paket, ordnet es seiner Tabelle zu und leitet es an B weiter. A und B können jetzt kommunizieren frei über UDP.
pwnat on A, das auf tcp: //127.0.0.1: 3022 lauscht, akzeptiert die Verbindung von ssh. pwnat on A sendet eine Anfrage an pwnat on B (über UDP), um einen Tunnel nach tcp: //127.0.0.1: 22 zu öffnen. Da dies als zulässiges Host / Port-Paar aufgeführt war, als pwnat auf B gestartet wurde, wird die Verbindung hergestellt. Der Tunnel ist jetzt fertig:
Wenn pwnat keine Fehler aufweist, ist dies sicherheitstechnisch nicht anders, als sshd der Welt auf einem Server zur Verfügung zu stellen, der sich nicht hinter einem NAT befindet. Beim Blick durch den Quellcode scheint pwnat jedoch irgendwie zusammengehackt zu sein, und ich würde mich nicht darauf verlassen, dass es sicher ist. Das schlimmste Szenario wäre die Ausführung von willkürlichem Code auf A und B als Benutzer, der pwnat ausführt.
quelle
Pwnat scheint nicht authentifiziert zu sein, was ein großes Sicherheitsrisiko darstellt. Wenn Sie mindestens eine der beiden NAT / Firewalls steuern, richten Sie einfach die Portweiterleitung / -übersetzung ein, um ein viel sichereres Setup zu erzielen.
quelle