Die Geschichte von Forschung und Entwicklung in 3 Teilen. Teil 1 - Forschung.
Es gibt viele Buchen - noch mehr Vorteile.
Erklärung des Problems
Während der Durchführung von Pentests und RedTeam-Kampagnen ist es nicht immer möglich, die regulären Mittel von Kunden wie VPN, RDP, Citrix usw. zu verwenden. als Fix für den Zugang zum internen Netzwerk. Irgendwo funktioniert ein Vollzeit-VPN gemäß MFA und ein Eisen-Token wird als zweiter Faktor verwendet, irgendwo wird es streng überwacht und unser VPN-Eintrag wird sofort sichtbar, wie sie sagen - mit allen Konsequenzen, aber irgendwo gibt es einfach keine solchen Mittel.
In solchen Fällen müssen ständig die sogenannten "Reverse Tunnels" durchgeführt werden - Verbindungen vom internen Netzwerk zu einer externen Ressource oder dem Server, den wir steuern. In einem solchen Tunnel können wir bereits mit den internen Ressourcen der Kunden arbeiten.
Es gibt verschiedene Arten solcher Umkehrtunnel. Der bekannteste von ihnen ist natürlich Meterpreter. SSH-Tunnel mit Reverse-Port-Weiterleitung sind auch bei den Hacker-Massen sehr gefragt. Es gibt viele Reverse-Tunneling-Tools, von denen viele gut untersucht und beschrieben sind.
Natürlich stehen Entwickler von Schutzlösungen ihrerseits nicht bereit und erkennen solche Aktionen aktiv.
Beispielsweise werden MSF-Sitzungen von modernen IPS von Cisco oder Positive Tech erfolgreich erkannt, und der umgekehrte SSH-Tunnel kann von fast jeder kleinen normalen Firewall erkannt werden.
Um in einer guten RedTeam-Kampagne unbemerkt zu bleiben, müssen wir daher einen Reverse-Tunnel mit nicht standardmäßigen Mitteln bauen und uns so genau wie möglich an den realen Modus des Netzwerks anpassen.
Versuchen wir, etwas Ähnliches zu finden oder zu erfinden.
Bevor Sie etwas erfinden, müssen Sie verstehen, welches Ergebnis wir erzielen möchten und welche Funktionen unsere Entwicklung erfüllen sollte. Was sind die Anforderungen an den Tunnel, damit wir im Maximum-Stealth-Modus arbeiten können?
Es ist klar, dass solche Anforderungen für jeden Fall sehr unterschiedlich sein können, aber aus Erfahrung können wir die wichtigsten unterscheiden:
- Arbeit unter OS Windows-7-10. Da die meisten Unternehmensnetzwerke Windows verwenden;
- Der Client stellt über SSL eine Verbindung zum Server her, um dummes Abhören mit ips zu verhindern.
- Beim Herstellen einer Verbindung muss der Client den Betrieb über einen Proxy-Server mit Berechtigung unterstützen, z Viele Unternehmen greifen über einen Proxy auf das Internet zu. Tatsächlich weiß der Client-Computer möglicherweise nicht einmal etwas darüber, und der Proxy wird in einem transparenten Modus verwendet. Aber wir müssen solche Funktionalität legen;
- Der Client-Teil sollte präzise und portabel sein.
Es ist klar, dass Sie für die Arbeit im Netzwerk des Kunden auf dem Client-Computer OpenVPN installieren und einen vollwertigen Tunnel zu Ihrem Server erstellen können (da openvpn-Clients über Proxys arbeiten können). Aber erstens funktioniert das nicht immer, da wir dort möglicherweise keine lokalen Administratoren sind, und zweitens macht es so viel Lärm, dass ein anständiges SIEM oder HIPS sofort „auf uns klopfen“. Im Idealfall sollte unser Client ein sogenannter Inline-Befehl sein, wie z. B. viele Bash-Shells, und beispielsweise über die Befehlszeile ausgeführt werden, wenn Befehle über ein Wortmakro ausgeführt werden. - Unser Tunnel muss Multithread-fähig sein und viele Verbindungen gleichzeitig unterstützen.
- Die Client-Server-Verbindung muss über eine Berechtigung verfügen, damit der Tunnel nur für unseren Client und nicht für alle Personen eingerichtet wird, die unter der angegebenen Adresse und dem angegebenen Port zu unserem Server kommen. Idealerweise sollte für Benutzer von Drittanbietern eine Zielseite mit Siegeln oder professionellen Themen im Zusammenhang mit der Quelldomäne geöffnet werden.
Wenn der Kunde beispielsweise eine medizinische Organisation ist, sollte für den Administrator für Informationssicherheit, der beschlossen hat, die vom Klinikmitarbeiter verwendete Ressource zu überprüfen, eine Seite mit pharmazeutischen Produkten, eine Wikipedia mit einer Beschreibung der Diagnose oder ein Blog von Dr. Komarovsky usw. geöffnet werden.
Analyse vorhandener Tools
Bevor Sie Ihr Fahrrad erfinden, müssen Sie vorhandene Fahrräder analysieren und verstehen, ob wir es wirklich brauchen, und wahrscheinlich haben wir nicht nur über die Notwendigkeit eines solchen funktionellen Fahrrads nachgedacht.
Das Googeln im Internet (wir scheinen mit Google einverstanden zu sein) sowie das Durchsuchen des Githubs nach den Schlüsselwörtern „Reverse Socks“ ergaben nicht viele Ergebnisse. Grundsätzlich kommt es darauf an, SSH-Tunnel mit Reverse-Port-Weiterleitung und allem, was damit verbunden ist, zu bauen. Neben SSH-Tunneln können verschiedene Lösungen unterschieden werden:
github.com/klsecservices/rpivotEine langjährige Implementierung des Reverse Tunnels von den Jungs von Kaspersky Lab. Durch den Namen ist klar, wofür dieses Skript gedacht ist. Der in Python 2.7 implementierte Tunnel wird im Klartextmodus ausgeführt (wie es jetzt üblich ist - Hallo an ILV).
github.com/tonyseek/rsocksEine andere Python-Implementierung ist ebenfalls im Klartext, es gibt jedoch mehr Optionen. Es ist als Modul geschrieben und es gibt eine API zur Integration der Lösung in Ihre Projekte.
github.com/llkat/rsockstungithub.com/mis-team/rsockstunDer erste Link ist die erste Version der Implementierung von Reverse Sox auf dem Golang (vom Entwickler nicht unterstützt).
Der zweite Link ist bereits unsere Überarbeitung mit zusätzlichen Chips, auch auf dem Golang. In unserer Version haben wir SSL implementiert, einen Proxy mit NTLM-Autorisierung, Client-Autorisierung, eine Zielseite mit einem falschen Kennwort (oder vielmehr eine Weiterleitung zu einer Zielseite) und einen Multithread-Modus (d. H. Mehrere Personen können gleichzeitig mit dem Tunnel arbeiten) bearbeitet. , ein Client-Ping-System, ob es lebt oder nicht.
github.com/jun7th/tsocksReverse Sox-Implementierung von unseren „chinesischen Freunden“ in Python. Dort für die Faulen und "Unsterblichen" liegt der fertige Binar (exe), der von den Chinesen zusammengestellt und gebrauchsfertig ist. Hier weiß nur der chinesische Gott, dass dieses Binar mehr als die Hauptfunktionalität bieten kann. Verwenden Sie es also auf eigene Gefahr und Gefahr.
github.com/securesocketfunneling/ssfEin interessantes C ++ - Projekt zur Implementierung von Reverse Socks und mehr. Zusätzlich zum Reverse-Tunnel kann eine Portweiterleitung durchgeführt, eine Befehlsshell erstellt usw. werden.
Msf meterpreterHier, wie sie sagen, kein Kommentar. Alle mehr oder weniger gut ausgebildeten Hacker sind mit dieser Sache sehr vertraut und wissen, wie leicht sie von Schutzausrüstung erkannt werden kann.
Alle oben genannten Tools arbeiten mit einer ähnlichen Technologie: Auf einem Computer im Netzwerk wird ein vorbereitetes ausführbares Binärmodul gestartet, das eine Verbindung zu einem externen Server herstellt. Der Server startet den SOCKS4 / 5-Server, der Verbindungen akzeptiert und diese in den Client übersetzt.
Der Nachteil aller oben genannten Tools besteht darin, dass entweder Python oder Golang auf dem Client-Computer erforderlich ist (haben Sie Python häufig auf Computern installiert, z. B. Unternehmensleitern oder Büroangestellten?), Oder Sie müssen eine vormontierte Binärdatei auf diesen Computer ziehen (tatsächlich Python und das Skript in einer Flasche) und führen Sie dieses Binar bereits dort aus. Das Herunterladen von exe mit dem anschließenden Start ist auch die Signatur für ein lokales Antivirenprogramm oder HIPS.
Im Allgemeinen bietet sich die Schlussfolgerung an - wir brauchen eine Lösung für Powershell. Jetzt fliegen Tomaten auf uns zu - sie sagen Powershell - es ist alles zusammengeschlagen, es wird überwacht, blockiert usw. usw. In der Tat - nicht überall. Wir erklären verantwortungsbewusst. Übrigens gibt es viele Möglichkeiten, die Sperren zu umgehen (hier wieder der modische Satz über Hallo an die ILV :)), angefangen von der dummen Umbenennung von Powershell.exe -> cmdd.exe bis hin zu Powerdll usw.
Fangen Sie an zu erfinden
Es ist klar, dass wir zunächst in Google nachsehen und ... zu diesem Thema nichts finden (wenn jemand etwas gefunden hat - werfen Sie Links in Kommentare). Es gibt nur eine
Implementierung von Socks5 auf Powershell, aber dies ist die übliche "direkte" Sox, die eine Reihe von Nachteilen hat (wir werden später darüber sprechen). Sie können es natürlich mit einem Handgriff in eine Umkehrung verwandeln, aber es wird nur ein Sox mit einem einzigen Faden sein, was nicht genau das ist, was wir brauchen.
Wir haben also nichts fertig gefunden, also müssen wir unser Fahrrad noch erfinden. Als Basis für unser Fahrrad nehmen wir die
Entwicklung von Reverse-Socken auf dem Golang und implementieren den Kunden dafür auf Powershell.
RSocksTunWie funktioniert rsockstun?
Im Zentrum der Arbeit von RsocksTun (im Folgenden als rs bezeichnet) stehen zwei Softwarekomponenten - Yamux und Socks5 Server. Der Socks5-Server ist ein normaler lokaler Socks5-Server, der auf dem Client ausgeführt wird. Und Multiplexing-Verbindungen dazu (erinnern Sie sich an Multithreading?) Wird mit yamux (
einem weiteren Multiplexer ) bereitgestellt. Mit diesem Schema können Sie mehrere Client-Socks5-Server ausführen und externe Verbindungen an diese verteilen, indem Sie sie über eine einzige TCP-Verbindung (fast wie im Meterpreter) vom Client an den Server weiterleiten und so den Multithread-Modus realisieren, ohne den wir im internen einfach nicht vollständig arbeiten können Netzwerk.
Das Wesentliche von yamux ist, dass es eine zusätzliche Netzwerkebene von Streams einführt und diese als 12-Byte-Header für jedes Paket realisiert. (Hier verwenden wir absichtlich das Wort "Stream", keinen Stream, um den Leser nicht mit dem Programm-Thread "Thread" zu verwechseln - dieses Konzept werden wir auch in diesem Artikel verwenden). Der Yamux-Header enthält die Stream-Nummer, Flags zum Setzen / Beenden des Streams, die Anzahl der übertragenen Bytes und die Größe des Übertragungsfensters.

Zusätzlich zur Installation / Vervollständigung des Streams implementiert yamux einen Keepalive-Mechanismus, mit dem Sie den Zustand des installierten Kommunikationskanals überwachen können. Der Mechanismus für Keeplive-Nachrichten wird beim Erstellen einer Yamux-Sitzung konfiguriert. Tatsächlich gibt es in den Einstellungen nur zwei Parameter: Aktivieren / Deaktivieren und die Häufigkeit des Sendens von Paketen in Sekunden. Der Yamux-Server kann Keepalive-Nachrichten senden, der Yamux-Client auch. Nach Erhalt einer Keepalive-Nachricht ist die Gegenstelle verpflichtet, darauf zu antworten, indem sie genau dieselbe Nachrichtenkennung (tatsächlich eine Nummer) sendet, die sie erhalten hat. Im Allgemeinen ist Keepalive der gleiche Ping, nur für Yamux.
Die gesamte Multiplexer-Operationstechnik ist im Detail: Pakettypen, Installations- und Terminierungsflags, Datenübertragungsmechanismus ist in
der Yamux-
Spezifikation beschrieben .
Fazit zum ersten Teil
Im ersten Teil des Artikels haben wir einige Tools zum Organisieren von Rückwärts-Tunneln kennengelernt, ihre Vor- und Nachteile untersucht, den Funktionsmechanismus des Yamux-Multiplexers untersucht und die grundlegenden Anforderungen für das neu erstellte Powershell-Modul beschrieben. Im nächsten Teil werden wir das Modul selbst praktisch von Grund auf neu entwickeln. Fortsetzung folgt. Nicht wechseln :)