Eine Geschichte ĂŒber Forschung und Entwicklung in 3 Teilen. Teil 1 â Forschung.
Viele Buchstaben â noch mehr Nutzen.
Aufgabenstellung
Bei Penetrationstests und RedTeam-Kampagnen ist es nicht immer möglich, die Standardtools der Kunden wie VPN, RDP, Citrix usw. zur Verbindung mit dem internen Netzwerk zu nutzen. Manchmal funktioniert der standardmĂ€Ăige VPN ĂŒber MFA, wobei ein physischer Token als zweiter Faktor verwendet wird, manchmal wird er stark ĂŒberwacht, und unser Zugang ĂŒber VPN wird sofort sichtbar, wie man so sagt â mit allen Konsequenzen, und manchmal gibt es solche Tools einfach nicht.
In solchen FĂ€llen mĂŒssen wir stĂ€ndig sogenannte âReverse Tunnelsâ erstellen â Verbindungen vom internen Netzwerk zu externen Ressourcen oder zu einem von uns kontrollierten Server. Innerhalb eines solchen Tunnels können wir dann mit den internen Ressourcen der Kunden arbeiten.
Es gibt mehrere Arten solcher Reverse Tunnels. Der bekannteste ist natĂŒrlich Meterpreter. Auch SSH-Tunnel mit Port-Forwarding erfreuen sich in der Hackerszene groĂer Beliebtheit. Es gibt viele Möglichkeiten, Reverse-Tunneling durchzufĂŒhren, und viele davon sind gut erforscht und dokumentiert.
NatĂŒrlich stehen die Entwickler von Sicherheitslösungen nicht untĂ€tig daneben und erkennen solche AktivitĂ€ten aktiv.
Zum Beispiel werden MSF-Sitzungen erfolgreich von modernen IPS-Systemen von Cisco oder Positive Tech erkannt, und ein umgekehrter SSH-Tunnel kann praktisch von jeder halbwegs normalen Firewall erkannt werden.
Daher mĂŒssen wir, um in einer guten RedTeam-Kampagne unentdeckt zu bleiben, Reverse-Tunnels mit unkonventionellen Mitteln bauen und uns so nah wie möglich an den realen Betriebsmodus des Netzwerks anpassen.
Lass uns versuchen, etwas Ăhnliches zu finden oder zu erfinden.
Bevor wir etwas erfinden, mĂŒssen wir verstehen, welches Ergebnis wir erzielen wollen und welche Funktionen unsere Entwicklung erfĂŒllen sollte. Welche Anforderungen werden an den Tunnel gestellt, damit wir im Modus maximaler Geheimhaltung arbeiten können?
Es ist klar, dass sich diese Anforderungen je nach Fall stark unterscheiden können, aber aus der Berufserfahrung lassen sich einige grundlegende herausfiltern:
- Betrieb auf Windows 7-10, da in den meisten Unternehmensnetzwerken genau Windows verwendet wird.
- Der Client verbindet sich ĂŒber SSL mit dem Server, um das bloĂe Lauschen durch IPS zu vermeiden;
- Bei der Verbindung muss der Client die FunktionalitĂ€t ĂŒber einen Proxy-Server mit Authentifizierung unterstĂŒtzen, da in vielen Unternehmen der Internetzugang ĂŒber einen Proxy erfolgt. TatsĂ€chlich kann es sein, dass die Client-Maschine davon nichts weiĂ und der Proxy im transparenten Modus verwendet wird. Aber diese FunktionalitĂ€t mĂŒssen wir einbauen;
- Der Client-Teil sollte prÀgnant und portabel sein;
Es ist klar, dass fĂŒr den Betrieb innerhalb des Netzwerks des Auftraggebers auf der Client-Maschine OpenVPN installiert werden kann, um einen vollwertigen Tunnel zu unserem Server aufzubauen (zumal OpenVPN-Clients auch ĂŒber Proxys arbeiten können). Aber erstens wird das nicht immer möglich sein, da wir möglicherweise keine lokalen Admins sind, und zweitens wird dies so viel LĂ€rm machen, dass ein ordentlicher SIEM oder HIPS sofort âAlarm schlĂ€gtâ. Idealerweise sollte unser Client eine sogenannte Inline-Lösung sein, wie sie viele Bash-Shells implementieren, und ĂŒber die Befehlszeile gestartet werden, zum Beispiel bei der AusfĂŒhrung von Befehlen aus einem Word-Makro. - Unser Tunnel sollte mehrstrĂ€ngig sein und mehrere Verbindungen gleichzeitig unterstĂŒtzen;
- Die Verbindung zwischen Client und Server sollte eine Art Authentifizierung haben, damit der Tunnel nur fĂŒr unseren Client eingerichtet wird und nicht fĂŒr alle, die auf den angegebenen Server mit Adresse und Port zugreifen. Idealerweise sollte fĂŒr âexterne Benutzerâ eine Landing-Page mit Katzen oder professionell thematisierten Inhalten, die mit der ursprĂŒnglichen Domain verbunden sind, geöffnet werden.
Wenn beispielsweise der Auftraggeber eine medizinische Organisation ist, sollte fĂŒr den Informationssicherheitsadministrator, der die Ressource ĂŒberprĂŒfen möchte, auf die ein Mitarbeiter der Klinik zugegriffen hat, eine Seite mit pharmazeutischen Waren, Wikipedia mit einer Beschreibung der Diagnose oder der Blog von Dr. Komarowski usw. geöffnet werden.
Analyse der bestehenden Werkzeuge
Bevor wir unser eigenes Fahrrad erfinden, ist es notwendig, eine Analyse der bestehenden FahrrĂ€der durchzufĂŒhren und zu verstehen, ob wir tatsĂ€chlich Bedarf haben und wahrscheinlich nicht die Einzigen sind, die an einem solchen funktionalen Fahrrad gedacht haben.
Google-Suchen im Internet (wir goggle wohl ganz normal), sowie die Suche auf GitHub mit den SchlĂŒsselwörtern âreverse socksâ haben nicht wirklich viele Ergebnisse geliefert. Im Wesentlichen geht es vor allem um den Aufbau von SSH-Tunneln mit rĂŒckwĂ€rts gerichteter Portweiterleitung und allem, was damit zusammenhĂ€ngt. Neben SSH-Tunneln lassen sich einige Lösungen hervorheben:
Eine Ă€ltere Implementierung des RĂŒcktunnel von den Jungs aus dem Kaspersky-Labor. Der Name macht klar, wofĂŒr dieses Skript gedacht ist. Implementiert in Python 2.7, funktioniert der Tunnel im Klartextmodus (wie man heutzutage gerne sagt â hallo RKN)
Eine weitere Implementierung in Python, ebenfalls im Klartext, aber mit gröĂeren Möglichkeiten. Als Modul geschrieben und es gibt eine API zur Integration der Lösung in eigene Projekte.
Der erste Link â die ursprĂŒngliche Version der Implementation von Reverse Socks in Golang (wird vom Entwickler nicht unterstĂŒtzt).
Der zweite Link â unsere Ăberarbeitung mit zusĂ€tzlichen Funktionen, ebenfalls in Golang. In unserer Version haben wir SSL implementiert, die Arbeit ĂŒber einen Proxy mit NTLM-Authentifizierung, die Client-Authentifizierung, eine Landing-Page bei falschem Passwort (genauer gesagt â Weiterleitung zur Landing-Page), einen Multithread-Modus (d.h. mehrere Personen können gleichzeitig mit dem Tunnel arbeiten), ein Ping-System des Clients, um zu ĂŒberprĂŒfen, ob er noch lebt oder nicht.
Die Implementierung von Reverse Socks von unseren âchinesischen Freundenâ in Python. Dort gibt es auch fĂŒr die Faulen und âUnsterblichenâ bereits eine fertige BinĂ€rdatei (exe), die von den Chinesen kompiliert wurde und bereit zur Verwendung ist. Hier weiĂ nur der chinesische Gott, was in dieser BinĂ€rdatei noch sein kann, auĂer der HauptfunktionalitĂ€t, also nutzen Sie dies auf eigenes Risiko.
Ein ziemlich interessantes Projekt in C++ zur Implementierung von Reverse Socks und mehr. Neben dem RĂŒcktunnel kann es Ports weiterleiten, eine Befehlszeile erstellen usw.
MSF meterpreter
Hier, wie man sagt, ohne Kommentare. Alle halbwegs gebildeten Hacker wissen gut ĂŒber dieses Ding Bescheid und verstehen, wie leicht es von SchutzmaĂnahmen entdeckt wird.
Alle oben beschriebenen Werkzeuge arbeiten nach einer Ă€hnlichen Technologie: Auf dem Computer innerhalb des Netzwerks wird ein zuvor vorbereiteter ausfĂŒhrbarer BinĂ€rmodul gestartet, der eine Verbindung zu einem externen Server herstellt. Auf dem Server wird ein SOCKS4/5-Server gestartet, der Verbindungen akzeptiert und diese an den Client weiterleitet.
Der Nachteil aller oben genannten Werkzeuge ist, dass entweder Python oder Golang auf dem Client-Computer installiert sein muss (wie oft haben Sie zum Beispiel Python auf den Computern von Unternehmensdirektoren oder BĂŒroangestellten gesehen?), oder dass man ein bereits kompiliertes Binary (tatsĂ€chlich Python und das Skript in einer Flasche) auf diesen Computer bringen und dieses Binary dort ausfĂŒhren muss. Das Herunterladen einer exe-Datei und deren anschlieĂendes AusfĂŒhren ist ein weiteres Signal fĂŒr die lokale Antiviren-Software oder HIPS.
Im Allgemeinen ergibt sich die Schlussfolgerung von selbst â wir benötigen eine Lösung in PowerShell. Jetzt wird man uns mit Tomaten bewerfen â ist PowerShell nicht schon ausgelutscht, wird ĂŒberwacht, blockiert usw. TatsĂ€chlich ist das nicht ĂŒberall der Fall. Wir behaupten das verantwortungsvoll. Ăbrigens gibt es unzĂ€hlige Möglichkeiten, die Blockaden zu umgehen (hier kommt wieder die schicke Phrase ĂŒber den Hallo RKNP đ), angefangen bei der einfachen Umbenennung von powershell.exe in cmdd.exe bis hin zu powerdll usw.
Wir fangen an zu erfinden.
Es ist klar, dass wir zuerst bei Google nachsehen werden und⊠genau nichts zu diesem Thema finden (wenn jemand etwas gefunden hat â postet Links in die Kommentare). Es gibt nur von Socks5 in PowerShell, aber das ist ein gewöhnlicher âdirekterâ Sock, der eine Reihe von Nachteilen hat (darĂŒber werden wir spĂ€ter sprechen). NatĂŒrlich kann man ihn mit einem einfachen Handgriff in einen umgekehrten verwandeln, aber das wird nur ein einstrĂ€ngiger Sock, was fĂŒr uns nicht ganz das Richtige ist.
Das heiĂt, wir haben nichts Fertiges gefunden, also mĂŒssen wir trotzdem unser eigenes Rad erfinden. Die Grundlage fĂŒr unser Rad werden wir eines umgekehrten Socks in Golang nehmen und den Client dafĂŒr in PowerShell realisieren.
RSocksTun
Wie funktioniert also rsockstun?
Die Funktionsweise von RsocksTun (im Folgenden rs genannt) beruht auf zwei Software-Komponenten â Yamux und Socks5-Server. Der Socks5-Server ist ein gewöhnlicher lokaler Socks5, der auf dem Client gestartet wird. Die Multiplexierung der Verbindungen zu ihm (erinnern Sie sich an die MultithreadfĂ€higkeit?) wird durch Yamux gewĂ€hrleistet (). Dieses Schema ermöglicht das Starten mehrerer Client-Socks5-Server und die Verteilung externer Verbindungen zu ihnen, indem diese ĂŒber eine einzige TCP-Verbindung (fast wie bei meterpreter) vom Client zum Server geleitet werden, wodurch ein Mehrbenutzermodus realisiert wird, ohne den wir in einem internen Netzwerk nicht einwandfrei arbeiten können.
Die Funktionsweise von yamux besteht darin, dass es eine zusĂ€tzliche Netzwerkschicht von Streams einfĂŒhrt, die in Form eines 12-Byte-Headers fĂŒr jedes Paket realisiert wird. (Hier verwenden wir absichtlich das Wort âStreamâ und nicht âThreadâ, um den Leser nicht mit dem Software-Thread-Begriff zu verwirren â dieses Konzept werden wir ebenfalls in diesem Artikel verwenden). Im Header von yamux sind die Stream-Nummer, Flags zur Eröffnung/Beendigung des Streams, die Anzahl der ĂŒbertragenen Bytes und die GröĂe des Ăbertragungsfensters enthalten.

Neben der Eröffnung/Beendigung von Streams implementiert yamux auch einen Keepalive-Mechanismus, der es ermöglicht, die FunktionsfĂ€higkeit des etablierten Kommunikationskanals zu ĂŒberwachen. Die Funktionsweise der Keepalive-Nachrichten wird beim Erstellen einer Yamux-Sitzung konfiguriert. TatsĂ€chlich gibt es nur zwei Parameter: aktivieren/deaktivieren und die HĂ€ufigkeit der Paketsendungen in Sekunden. Keepalive-Nachrichten können sowohl vom yamux-Server als auch vom yamux-Client gesendet werden. Bei Erhalt einer Keepalive-Nachricht muss die entfernte Seite mit der genau gleichen Message-ID (tatsĂ€chlich einer Zahl) antworten, die sie empfangen hat. Im Allgemeinen ist Keepalive dasselbe wie ein Ping, nur fĂŒr yamux.
Die Technik der Funktionsweise des Multiplexers: Packettypen, Flags zur Einrichtung und Beendigung von Verbindungen sowie der Mechanismus der DatenĂŒbertragung ist ausfĂŒhrlich beschrieben in yamux.
Abschluss des ersten Teils
In Teil 1 des Artikels haben wir uns mit einigen Werkzeugen zur Organisation von Reverse-Tunneln vertraut gemacht, ihre Vor- und Nachteile betrachtet, den Mechanismus der Funktionsweise des Yamux-Multiplexers untersucht und die grundlegenden Anforderungen an das neu zu erstellende PowerShell-Modul beschrieben. Im nĂ€chsten Teil werden wir mit der Entwicklung des Moduls praktisch von Grund auf beginnen. Fortsetzung folgt. Bleiben Sie dran đ
Quelle: habr.com
