Γράψιμο του διακομιστή μεσολάβησης Reverse socks5 στο powershell. Μέρος 1

Μια ιστορία για την έρευνα και την ανάπτυξη σε 3 μέρη. Το Μέρος 1 είναι διερευνητικό.
Υπάρχουν πολλές οξιές - ακόμη περισσότερα οφέλη.

Δήλωση προβλήματος

Κατά τη διάρκεια των pentest και των καμπανιών RedTeam, δεν είναι πάντα δυνατή η χρήση των τυπικών εργαλείων του Πελάτη, όπως VPN, RDP, Citrix κ.λπ. ως άγκυρα για την είσοδο στο εσωτερικό δίκτυο. Σε ορισμένα μέρη, ένα τυπικό VPN λειτουργεί χρησιμοποιώντας MFA και ένα διακριτικό υλικού χρησιμοποιείται ως δεύτερος παράγοντας, σε άλλα παρακολουθείται βάναυσα και η σύνδεσή μας στο VPN γίνεται αμέσως ορατή, όπως λένε, με ό,τι συνεπάγεται, αλλά σε άλλα υπάρχουν απλά κανένα τέτοιο μέσο.

Σε τέτοιες περιπτώσεις, πρέπει συνεχώς να κάνουμε τα λεγόμενα "reverse tunnels" - συνδέσεις από το εσωτερικό δίκτυο σε έναν εξωτερικό πόρο ή έναν διακομιστή που ελέγχουμε. Μέσα σε ένα τέτοιο τούνελ, μπορούμε ήδη να εργαστούμε με τους εσωτερικούς πόρους των πελατών.

Υπάρχουν διάφορες ποικιλίες αυτών των σηράγγων επιστροφής. Το πιο διάσημο από αυτά είναι, φυσικά, το Meterpreter. Οι σήραγγες SSH με ανάστροφη προώθηση θυρών έχουν επίσης μεγάλη ζήτηση μεταξύ των μαζών των χάκερ. Υπάρχουν πολλά μέσα για την υλοποίηση της αντίστροφης σήραγγας και πολλά από αυτά έχουν μελετηθεί και περιγράφονται καλά.
Φυσικά, από την πλευρά τους, οι προγραμματιστές λύσεων ασφαλείας δεν μένουν στην άκρη και εντοπίζουν ενεργά τέτοιες ενέργειες.
Για παράδειγμα, οι συνεδρίες των ΓΧΣ εντοπίζονται επιτυχώς από το σύγχρονο IPS της Cisco ή της Positive Tech και μια αντίστροφη σήραγγα SSH μπορεί να ανιχνευθεί από σχεδόν οποιοδήποτε κανονικό τείχος προστασίας.

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

Ας προσπαθήσουμε να βρούμε ή να επινοήσουμε κάτι παρόμοιο.

Πριν εφεύρουμε οτιδήποτε, πρέπει να καταλάβουμε ποιο αποτέλεσμα θέλουμε να επιτύχουμε, ποιες λειτουργίες πρέπει να επιτελεί η ανάπτυξή μας. Ποιες θα είναι οι απαιτήσεις για το τούνελ ώστε να μπορούμε να δουλεύουμε σε μέγιστο stealth mode;

Είναι σαφές ότι για κάθε περίπτωση τέτοιες απαιτήσεις μπορεί να διαφέρουν πολύ, αλλά με βάση την εργασιακή εμπειρία, μπορούν να εντοπιστούν οι κυριότερες:

  • εργασία σε λειτουργικό σύστημα Windows-7-10. Δεδομένου ότι τα περισσότερα εταιρικά δίκτυα χρησιμοποιούν Windows.
  • ο πελάτης συνδέεται με τον διακομιστή μέσω SSL για να αποφύγει την ανόητη ακρόαση με χρήση ips.
  • Κατά τη σύνδεση, ο πελάτης πρέπει να υποστηρίζει την εργασία μέσω διακομιστή μεσολάβησης με εξουσιοδότηση, επειδή Σε πολλές εταιρείες, η πρόσβαση στο Διαδίκτυο γίνεται μέσω διακομιστή μεσολάβησης. Στην πραγματικότητα, ο υπολογιστής-πελάτης ενδέχεται να μην γνωρίζει τίποτα γι 'αυτό και ο διακομιστής μεσολάβησης χρησιμοποιείται σε διαφανή λειτουργία. Αλλά πρέπει να παρέχουμε τέτοια λειτουργικότητα.
  • το τμήμα πελάτη πρέπει να είναι συνοπτικό και φορητό.
    Είναι σαφές ότι για να εργαστείτε εντός του δικτύου του Πελάτη, μπορείτε να εγκαταστήσετε το OpenVPN στον υπολογιστή-πελάτη και να δημιουργήσετε μια πλήρη σήραγγα στον διακομιστή σας (ευτυχώς, οι πελάτες openvpn μπορούν να λειτουργήσουν μέσω διακομιστή μεσολάβησης). Αλλά, πρώτον, αυτό δεν θα λειτουργεί πάντα, αφού μπορεί να μην είμαστε τοπικοί διαχειριστές εκεί και, δεύτερον, θα κάνει τόσο πολύ θόρυβο που ένα αξιοπρεπές SIEM ή HIPS θα μας «κλέβει» αμέσως. Στην ιδανική περίπτωση, ο πελάτης μας θα πρέπει να είναι μια λεγόμενη εντολή inline, όπως για παράδειγμα πολλά κελύφη bash υλοποιούνται και εκκινούνται μέσω της γραμμής εντολών, για παράδειγμα, κατά την εκτέλεση εντολών από μια μακροεντολή λέξης.
  • Η σήραγγα μας πρέπει να είναι πολλαπλών νημάτων και να υποστηρίζει πολλές συνδέσεις ταυτόχρονα.
  • η σύνδεση πελάτη-διακομιστή πρέπει να έχει κάποιο είδος εξουσιοδότησης, ώστε η σήραγγα να είναι εγκατεστημένη μόνο για τον πελάτη μας και όχι για όλους όσους έρχονται στον διακομιστή μας στην καθορισμένη διεύθυνση και θύρα. Στην ιδανική περίπτωση, μια σελίδα προορισμού με γάτες ή επαγγελματικά θέματα που σχετίζονται με τον αρχικό τομέα θα πρέπει να ανοίγει για "τρίτους χρήστες".
    Για παράδειγμα, εάν ο Πελάτης είναι ιατρικός οργανισμός, τότε για έναν διαχειριστή ασφάλειας πληροφοριών που αποφασίζει να ελέγξει τον πόρο στον οποίο είχε πρόσβαση ένας υπάλληλος κλινικής, μια σελίδα με φαρμακευτικά προϊόντα, τη Wikipedia με περιγραφή της διάγνωσης ή το ιστολόγιο του Dr. Komarovsky κ.λπ. πρέπει να ανοίξει.

Ανάλυση υφιστάμενων εργαλείων

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

Το γκουγκλάρισμα στο Διαδίκτυο (φαίνουμε να γκουγκλάρουμε κανονικά), καθώς και η αναζήτηση στο Github με τη χρήση των λέξεων-κλειδιών «αντίστροφες κάλτσες» δεν έδωσε πολλά αποτελέσματα. Βασικά, όλα καταλήγουν στην κατασκευή σηράγγων ssh με ανάστροφη προώθηση θυρών και οτιδήποτε σχετίζεται με αυτό. Εκτός από τις σήραγγες SSH, υπάρχουν διάφορες λύσεις:

github.com/klsecservices/rpivot
Μια μακροχρόνια εφαρμογή ενός αντίστροφου τούνελ από τα παιδιά στο Kaspersky Lab. Το όνομα καθιστά σαφές σε τι προορίζεται αυτό το σενάριο. Εφαρμόζεται στην Python 2.7, το τούνελ λειτουργεί σε λειτουργία καθαρού κειμένου (όπως είναι της μόδας να λέμε τώρα - γεια RKN)

github.com/tonyseek/rsocks
Άλλη μια υλοποίηση σε Python, επίσης σε καθαρό κείμενο, αλλά με περισσότερες δυνατότητες. Είναι γραμμένο ως λειτουργική μονάδα και διαθέτει API για την ενσωμάτωση της λύσης στα έργα σας.

github.com/llkat/rsocstun
github.com/mis-team/rsocstun
Ο πρώτος σύνδεσμος είναι η αρχική έκδοση της εφαρμογής αντίστροφης sox στο Golang (δεν υποστηρίζεται από τον προγραμματιστή).
Ο δεύτερος σύνδεσμος είναι η αναθεώρησή μας με πρόσθετες λειτουργίες, επίσης στο Golang. Στην έκδοσή μας, εφαρμόσαμε SSL, εργασία μέσω διακομιστή μεσολάβησης με εξουσιοδότηση NTLM, εξουσιοδότηση στον πελάτη, σελίδα προορισμού σε περίπτωση λανθασμένου κωδικού πρόσβασης (ή μάλλον ανακατεύθυνση στη σελίδα προορισμού), λειτουργία πολλαπλών νημάτων (δηλαδή πολλά άτομα μπορεί να δουλεύει ταυτόχρονα με το τούνελ), ένα σύστημα ping του πελάτη για να διαπιστωθεί αν είναι ζωντανός ή όχι.

github.com/jun7th/tsocks
Εφαρμογή του reverse sox από τους «Κινέζους φίλους» μας στην Python. Εκεί, για τεμπέληδες και «αθάνατους», υπάρχει ένα έτοιμο δυαδικό (exe), συναρμολογημένο από τους Κινέζους και έτοιμο για χρήση. Εδώ, μόνο ο Κινέζος Θεός ξέρει τι άλλο μπορεί να περιέχει αυτό το δυαδικό αρχείο εκτός από την κύρια λειτουργικότητα, επομένως χρησιμοποιήστε το με δικό σας κίνδυνο και κίνδυνο.

github.com/securesocketfunneling/ssf
Ένα αρκετά ενδιαφέρον έργο σε C++ για την υλοποίηση του reverse sox και όχι μόνο. Εκτός από την αντίστροφη σήραγγα, μπορεί να κάνει προώθηση θυρών, να δημιουργήσει ένα κέλυφος εντολών κ.λπ.

Μετρητής των ΓΧΣ
Εδώ, όπως λένε, κανένα σχόλιο. Όλοι οι ακόμη περισσότερο ή λιγότερο μορφωμένοι χάκερ είναι πολύ εξοικειωμένοι με αυτό το πράγμα και καταλαβαίνουν πόσο εύκολα μπορεί να εντοπιστεί από τα εργαλεία ασφαλείας.

Όλα τα εργαλεία που περιγράφονται παραπάνω λειτουργούν χρησιμοποιώντας παρόμοια τεχνολογία: εκκινείται μια προετοιμασμένη εκτελέσιμη δυαδική μονάδα σε ένα μηχάνημα εντός του δικτύου, το οποίο δημιουργεί μια σύνδεση με έναν εξωτερικό διακομιστή. Ο διακομιστής εκτελεί έναν διακομιστή SOCKS4/5 που δέχεται συνδέσεις και τις αναμεταδίδει στον πελάτη.

Το μειονέκτημα όλων των παραπάνω εργαλείων είναι ότι είτε η Python είτε η Golang πρέπει να εγκατασταθούν στο μηχάνημα πελάτη (έχετε δει συχνά Python εγκατεστημένη σε μηχανήματα, για παράδειγμα, διευθυντή εταιρείας ή υπαλλήλων γραφείου;), ή ένα προσυναρμολογημένο δυαδικό (στην πραγματικότητα python) πρέπει να συρθεί σε αυτό το μηχάνημα και το σενάριο σε ένα μπουκάλι) και να εκτελέσετε αυτό το δυαδικό αρχείο ήδη εκεί. Και η λήψη ενός exe και στη συνέχεια η εκκίνησή του είναι επίσης μια υπογραφή για ένα τοπικό πρόγραμμα προστασίας από ιούς ή HIPS.

Σε γενικές γραμμές, το συμπέρασμα υποδηλώνει από μόνο του - χρειαζόμαστε μια λύση powershell. Τώρα οι ντομάτες θα πετάξουν κατά πάνω μας - λένε ότι το powershell έχει ήδη καταρρεύσει, παρακολουθείται, μπλοκάρεται κ.λπ. και ούτω καθεξής. Στην πραγματικότητα, όχι παντού. Δηλώνουμε υπεύθυνα. Παρεμπιπτόντως, υπάρχουν πολλοί τρόποι για να παρακάμψετε τον αποκλεισμό (εδώ και πάλι υπάρχει μια μοντέρνα φράση για το hello RKN 🙂), ξεκινώντας από την ανόητη μετονομασία του powershell.exe -> cmdd.exe και τελειώνοντας με powerdll κ.λπ.

Ας αρχίσουμε να εφευρίσκουμε

Είναι σαφές ότι πρώτα θα ψάξουμε στο Google και… δεν θα βρούμε τίποτα για αυτό το θέμα (αν κάποιος το έχει βρει, δημοσιεύστε συνδέσμους στα σχόλια). Υπάρχει μόνο εφαρμογή Socks5 στο powershell, αλλά αυτό είναι ένα συνηθισμένο "άμεσο" sox, το οποίο έχει μια σειρά από τα δικά του μειονεκτήματα (θα μιλήσουμε για αυτά αργότερα). Μπορείτε, φυσικά, με μια ελαφριά κίνηση του χεριού σας, να το μετατρέψετε στο ανάποδο, αλλά αυτό θα είναι μόνο μονόκλωστο sox, το οποίο δεν είναι ακριβώς αυτό που χρειαζόμαστε για εμάς.

Επομένως, δεν βρήκαμε τίποτα έτοιμο, επομένως θα πρέπει να επανεφεύρουμε τον τροχό μας. Θα πάρουμε ως βάση για το ποδήλατό μας την ανάπτυξή μας reverse sox στο Golang και υλοποιούμε έναν πελάτη για αυτό στο powershell.

RSocksTun
Πώς λειτουργεί λοιπόν το rsocstun;

Η λειτουργία του RsocksTun (εφεξής rs) βασίζεται σε δύο στοιχεία λογισμικού - τον διακομιστή Yamux και τον διακομιστή Socks5. Ο διακομιστής Socks5 είναι ένας κανονικός τοπικός socks5, τρέχει στον πελάτη. Και η πολυπλεξία των συνδέσεων σε αυτό (θυμάστε το multithreading;) παρέχεται χρησιμοποιώντας yamux (άλλος ένας πολυπλέκτης). Αυτό το σχήμα σάς επιτρέπει να εκκινήσετε αρκετούς διακομιστές client socks5 και να διανείμετε εξωτερικές συνδέσεις σε αυτούς, προωθώντας τις μέσω μίας μόνο σύνδεσης TCP (σχεδόν όπως στον μετρητή) από πελάτη σε διακομιστή, εφαρμόζοντας έτσι μια λειτουργία πολλαπλών νημάτων, χωρίς την οποία απλά δεν θα είμαστε σε θέση να εργαστεί πλήρως στα εσωτερικά δίκτυα.

Η ουσία του πώς λειτουργεί το yamux είναι ότι εισάγει ένα πρόσθετο επίπεδο δικτύου ροών, υλοποιώντας το με τη μορφή κεφαλίδας 12 byte για κάθε πακέτο. (Εδώ χρησιμοποιούμε σκόπιμα τη λέξη "ροή" αντί για νήμα, ώστε να μην συγχέουμε τον αναγνώστη με ένα "νήμα" ροής προγράμματος - θα χρησιμοποιήσουμε επίσης αυτήν την έννοια σε αυτό το άρθρο). Η κεφαλίδα yamux περιέχει τον αριθμό ροής, σημαίες για την εγκατάσταση/τερματισμό της ροής, τον αριθμό των byte που μεταφέρθηκαν και το μέγεθος του παραθύρου μεταφοράς.

Γράψιμο του διακομιστή μεσολάβησης Reverse socks5 στο powershell. Μέρος 1

Εκτός από την εγκατάσταση/τερματισμό μιας ροής, η yamux εφαρμόζει έναν μηχανισμό διατήρησης που σας επιτρέπει να παρακολουθείτε την απόδοση του καθιερωμένου καναλιού επικοινωνίας. Η λειτουργία του μηχανισμού μηνυμάτων keeplive διαμορφώνεται κατά τη δημιουργία μιας περιόδου λειτουργίας Yamux. Στην πραγματικότητα, από τις ρυθμίσεις υπάρχουν μόνο δύο παράμετροι: ενεργοποίηση/απενεργοποίηση και συχνότητα αποστολής πακέτων σε δευτερόλεπτα. Τα μηνύματα Keepalive μπορούν να σταλούν από διακομιστή yamux ή πελάτη yamux. Κατά τη λήψη ενός μηνύματος διατήρησης, το απομακρυσμένο μέρος πρέπει να απαντήσει σε αυτό στέλνοντας ακριβώς το ίδιο αναγνωριστικό μηνύματος (στην πραγματικότητα έναν αριθμό) που έλαβε. Γενικά το keepalive είναι το ίδιο ping, μόνο για το yamux.

Ολόκληρη η τεχνική λειτουργίας του πολυπλέκτη: τύποι πακέτων, σημαίες εγκατάστασης και τερματισμού σύνδεσης και ο μηχανισμός μεταφοράς δεδομένων περιγράφονται λεπτομερώς στο Προδιαγραφές στο yamux.

Συμπέρασμα στο πρώτο μέρος

Έτσι, στο πρώτο μέρος του άρθρου, γνωρίσαμε ορισμένα εργαλεία για την οργάνωση αντίστροφων σηράγγων, εξετάσαμε τα πλεονεκτήματα και τα μειονεκτήματά τους, μελετήσαμε τον μηχανισμό λειτουργίας του πολυπλέκτη Yamux και περιγράψαμε τις βασικές απαιτήσεις για τη νέα μονάδα powershell. Στο επόμενο μέρος θα αναπτύξουμε την ίδια την ενότητα, πρακτικά από την αρχή. Συνεχίζεται. Μην αλλάζετε :)

Πηγή: www.habr.com

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