
Ende-zu-Ende-Verschlüsselung für Multi-Hop-TTY-Sitzungen oder Portshells + TCP/UDP-Portweiterleitung
Dieses Projekt – ebenso wie sein Schwesterprojekt crash – gehört zu meinem Anti-Zensur-Werkzeugsatz, mit dem sich voll funktionsfähige verschlüsselte Shells und TCP/UDP-Weiterleitungen in feindlichen Zensurumgebungen einrichten lassen. Es ist auch für die Forensik nützlich, um Daten von Geräten über UART oder adb auszulesen, wenn keine anderen Mittel verfügbar sind.
DNS-Lookup und SSH-Sitzung über eine UART-Verbindung zu einem Pi weitergeleitet
PSC ermöglicht die Ende-zu-Ende-Verschlüsselung von Shell-Sitzungen, ein- oder mehrfach hüpfend, unabhängig vom zugrunde liegenden Transport, solange dieser zuverlässig ist und Base64-codierte Daten ohne Änderung/Filterung senden/empfangen kann. Zusammen mit der e2e-PTY, die Sie erhalten (z. B. innerhalb einer Port-Shell), können Sie TCP- und UDP-Verbindungen weiterleiten, ähnlich wie bei OpenSSHs -L-Parameter. Dies funktioniert transparent und ohne die Notwendigkeit einer lokal am Startpunkt zugewiesenen IP-Adresse. Dadurch können Forensiker und Pen-Tester beispielsweise Netzwerkverbindungen herstellen über:
adb shell-Sitzungen, wenn der OEM-adbd kein TCP-Forwarding unterstütztStellen Sie sich vor, Sie hätten eine unsichtbare ppp-Sitzung innerhalb Ihrer Shell-Sitzung, ohne dass der entfernte Peer tatsächlich ppp unterstützt.
Es läuft auf Linux, Android, OSX, Windows, FreeBSD, NetBSD und (möglicherweise) OpenBSD.
PSC enthält auch SOCKS4- und SOCKS5-Proxy-Unterstützung, um tatsächliche Web-Browsing-Sitzungen über Port-Shells oder Modem-Einwahl aus der Ferne zu ermöglichen.
Bearbeiten Sie die Makefile, um Ihre Pre-Shared-Keys widerzuspiegeln, wie am Anfang der Makefile definiert.
Dann geben Sie einfach make auf Linux und OSX ein.
Auf BSD müssen Sie GNU make installieren und stattdessen gmake aufrufen.
Auf Windows müssen Sie cygwin installieren und die entsprechenden Pakete gcc, gcc-g++, make und git auswählen.
Auf Linux verwendet PSC Unix98-Pseudoterminals, auf anderen Systemen POSIX-PTYs, was für Sie transparent sein sollte. Ich habe vor Urzeiten aus einem bestimmten Grund mal 4.4BSD-PTY- und SunOS-Unterstützung hinzugefügt, daher könnte es sogar mit Solaris bauen.
stolz gesponsert von:
Einfach und klar. Führen Sie auf Ihrem lokalen Rechner pscl aus und übergeben Sie alle TCP- oder UDP-Ports, die Sie vom entfernten Standort an eine bestimmte Adresse weiterleiten möchten. Beispiel:
linux:~ > ./pscl -T 1234:[192.168.0.254]:22 -U 1234:[8.8.8.8]:53
PortShellCrypter [pscl] v0.60 (C) 2006-2020 stealth -- github.com/stealth/psc
pscl: set up local TCP port 1234 to proxy to 192.168.0.254:22 @ remote.
pscl: set up local UDP port 1234 to proxy to 8.8.8.8:53 @ remote.
pscl: Waiting for [pscr] session to appear ...
linux:~ >
[ UART / SSH / ... login to remote side ... ]
Führen Sie auf dem entfernten Standort (dem letzten Hop) mit der Shell-Sitzung – egal ob in einer Port-Shell, SSH, Konsolenlogin usw. – pscr aus:
linux:~ > ./pscr
PortShellCrypter [pscr] v0.60 (C) 2006-2020 stealth -- github.com/stealth/psc
pscl: Seen STARTTLS sequence, enabling crypto.
linux:~ >
Sobald Sie pscr ausführen, etablieren beide Enden einen Krypto-Handshake und legen ein zusätzliches Protokoll über Ihre bestehende Sitzung, das für Sie transparent ist. Sie können dann auf Ihrem lokalen Rechner eine Verbindung zu 127.0.0.1:1234 herstellen, um 192.168.0.254:22 über TCP oder den 8.8.8.8-Resolver über UDP zu erreichen. Dies funktioniert auch mit [IPv6]-Adressen, wenn der entfernte Standort IPv6-Konnektivität hat. Tatsächlich können Sie es sogar verwenden, um IPv4-Software auf IPv6 zu übertragen, da Sie sich lokal immer mit 127.0.0.1 verbinden.
Sie können mehrere -T- und -U-Parameter übergeben. Wenn Sie den Überblick verloren haben, ob Ihre Sitzung bereits e2e-verschlüsselt ist, können Sie ein SIGUSR1 an den lokalen pscl-Prozess senden, und er wird es Ihnen mitteilen.
PSC ist auch nützlich, wenn Sie tor von einer entfernten SSH-Shell aus verwenden möchten, wobei Sie den socks5- und den DNS-Port an die 127.0.0.1-Adresse der entfernten Hosts weiterleiten können. Da SSH keine UDP-Pakete weiterleitet, würden Sie normalerweise zwei socat-Verbinder oder ähnliches verwenden, um über den tor-Knoten aufzulösen. PSC hat den Vorteil, dass die UDP-Datagramm-Grenzen eingehalten werden, während socat über SSH -L Datagramm-Grenzen brechen und fehlerhafte DNS-Anfragen erzeugen kann.
Die Sitzung wird mit aes_256_ctr eines PSK, den Sie in der Makefile wählen, verschlüsselt. Dieses Krypto-Schema ist formbar, aber das Hinzufügen von AAD- oder OAD-Daten bläht die Paketgröße auf, wobei jedes Byte zählt, da bei interaktiven Sitzungen und aufgrund der Base64-Codierung jedes getippte Zeichen bereits viel mehr Daten verursacht.
UART-Sitzungen können über screen verwendet werden, aber beispielsweise nicht über minicom, da minicom unsichtbare Fenster mit Statuszeilen erstellt und wie ein Filter wirkt, der das PSC-Protokoll zerstört. PSC versucht, Filterung zu erkennen und kann mit einem gewissen Maß an Datenverfälschung umgehen, aber in manchen Situationen ist keine Wiederherstellung möglich. Ähnliches gilt für tmux. Sie sollten vermeiden, PSC-PTY-Handler zu stapeln, die ihre eingehenden Daten zu stark manipulieren/verarbeiten.
Die Umgebungsvariable SHELL muss sowohl für pscl als auch für pscr gesetzt sein, damit PSC weiß, welche Shell auf der PTY ausgeführt werden soll. SHELL ist in den meisten Umgebungen standardmäßig gesetzt, falls nicht, muss PSC wie SHELL=/bin/bash pscl usw. ausgeführt werden.
pscl unterstützt auch die Weiterleitung von TCP-Verbindungen über SOCKS4 (-4 port) und SOCKS5 (-5 port). Dies richtet port als SOCKS-Port für TCP-Verbindungen ein, sodass Sie beispielsweise während eines Pen-Tests aus einer Port-Shell-Sitzung heraus in entfernten Netzwerken surfen können, ohne eine andere Verbindung öffnen zu müssen. Wenn Sie -N an pscl übergeben, wird die DNS-Namensauflösung auf der entfernten Seite aktiviert, sodass Sie es auch mit Chrome verwenden können. Aber Vorsicht: Es gibt ein Datenschutzproblem mit Browsern, die beim Start eine Folge von DNS-Namen auflösen, die nicht unter Ihrer Kontrolle stehen. Wenn Ihre entfernte Seite außerdem eine fehlerhafte DNS-Konfiguration hat, kann Ihre tippende Shell für mehrere Sekunden blockieren, wenn DNS-Antwortpakete fehlen. Es gibt keine guten asynchronen Resolver-Funktionen, die einbettbar und portabel sind, daher musste ich mich auf getaddrinfo() im einzelnen Thread verlassen, um den Preis möglicher Blockaden für mehrere Sekunden bei DNS-Problemen. Deshalb muss die Namensauflösung explizit aktiviert werden. pscr versucht jedoch, dieses potenzielle Problem mit DNS-Lookup-Caches zu minimieren, sodass es in den meisten Situationen problemlos funktionieren sollte.
Wenn Sie -X IP-Adresse übergeben (muss das erste Argument sein), können Sie Ihren lokalen Proxy an eine andere Adresse als 127.0.0.1 binden, sodass Sie den Proxy in Ihrem lokalen Netzwerk teilen können.