Κακόβουλο λογισμικό SGX: πώς οι κακοί εκμεταλλεύονται τη νέα τεχνολογία της Intel για σκοπούς άλλους από αυτούς για τους οποίους σχεδιάστηκε

Όπως γνωρίζετε, ο κώδικας που εκτελείται στο θύλακα είναι σοβαρά περιορισμένος στη λειτουργικότητά του. Δεν μπορεί να πραγματοποιήσει κλήσεις συστήματος. Δεν μπορεί να εκτελέσει λειτουργίες I/O. Δεν γνωρίζει τη βασική διεύθυνση του τμήματος κώδικα της εφαρμογής κεντρικού υπολογιστή. Δεν μπορεί να κάνει jmp ή να καλέσει τον κωδικό της εφαρμογής κεντρικού υπολογιστή. Δεν έχει ιδέα για τη δομή του χώρου διευθύνσεων που διέπει την εφαρμογή κεντρικού υπολογιστή (για παράδειγμα, ποιες σελίδες αντιστοιχίζονται ή τι είδους δεδομένα βρίσκονται σε αυτές τις σελίδες). Δεν μπορεί να ζητήσει από το λειτουργικό σύστημα να αντιστοιχίσει ένα κομμάτι της μνήμης της εφαρμογής κεντρικού υπολογιστή σε αυτό (για παράδειγμα, μέσω του /proc/pid/maps). Οι αφελείς προσπάθειες για τυφλή ανάγνωση μιας αυθαίρετης περιοχής μνήμης μιας εφαρμογής κεντρικού υπολογιστή, για να μην αναφέρουμε τις προσπάθειες εγγραφής, αργά ή γρήγορα (πιθανότατα η πρώτη) θα οδηγήσουν στον αναγκαστικό τερματισμό του προγράμματος θύλακας. Αυτό συμβαίνει κάθε φορά που η περιοχή εικονικού χώρου διευθύνσεων που ζητείται από το θύλακα δεν είναι προσβάσιμη στην εφαρμογή κεντρικού υπολογιστή.

Λαμβάνοντας υπόψη τέτοιες σκληρές πραγματικότητες, θα μπορέσει ένας συντάκτης ιών να χρησιμοποιήσει θύλακες SGX για να επιτύχει τους κακόβουλους στόχους του;

– Παραβίαση για διερεύνηση διευθύνσεων για να δούμε αν μπορούν να διαβαστούν
– Παραβίαση για έλεγχο διευθύνσεων για δυνατότητα εγγραφής
– Παραβίαση για ανακατεύθυνση της ροής ελέγχου
– Τι δίνουν στον κακοποιό τα τρία hacks που αναφέρονται παραπάνω;
– Πώς ο κακός χρησιμοποιεί αυτά τα hacks για να δημιουργήσει ranzowari

Κακόβουλο λογισμικό SGX: πώς οι κακοί εκμεταλλεύονται τη νέα τεχνολογία της Intel για σκοπούς άλλους από αυτούς για τους οποίους σχεδιάστηκε

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

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

Θα σας δείξουμε μερικά hacks που χρησιμοποιούν οι εισβολείς για να ξεπεράσουν τους περιορισμούς που περιγράφονται παραπάνω για να εκμεταλλευτούν το SGX για δικούς τους κακόβουλους σκοπούς: επιθέσεις ROP. Είτε για την εκτέλεση αυθαίρετου κώδικα μεταμφιεσμένο ως διαδικασία εφαρμογής κεντρικού υπολογιστή (παρόμοιο με το process hollowing, το οποίο χρησιμοποιείται συχνά από κακόβουλο λογισμικό), είτε για να συγκαλύψει ένα έτοιμο κακόβουλο λογισμικό (για να σώσει το κακόβουλο λογισμικό του από καταδίωξη από antivirus και άλλους αμυντικούς μηχανισμούς).

Hack για ανίχνευση διευθύνσεων για να δούμε αν μπορούν να διαβαστούν

Δεδομένου ότι ο θύλακας δεν γνωρίζει ποιες περιοχές του εικονικού χώρου διευθύνσεων είναι προσβάσιμες στην εφαρμογή κεντρικού υπολογιστή και δεδομένου ότι ο θύλακας αναγκάζεται να τερματιστεί όταν επιχειρεί να διαβάσει μια μη προσβάσιμη διεύθυνση, ο εισβολέας αντιμετωπίζει το καθήκον να βρει έναν τρόπο για να ελαττώσει- σαρώστε με ανεκτικότητα τον χώρο διευθύνσεων. Βρείτε έναν τρόπο να χαρτογραφήσετε τις διαθέσιμες εικονικές διευθύνσεις. Ο κακός λύνει αυτό το πρόβλημα κάνοντας κακή χρήση της τεχνολογίας TSX της Intel. Χρησιμοποιεί μία από τις παρενέργειες του TSX: εάν η λειτουργία πρόσβασης στη μνήμη τοποθετηθεί σε μια συναλλαγή TSX, τότε οι εξαιρέσεις που προκύπτουν από την πρόσβαση σε μη έγκυρες διευθύνσεις καταργούνται από το TSX χωρίς να φτάσουν στο λειτουργικό σύστημα. Εάν γίνει προσπάθεια πρόσβασης σε μια μη έγκυρη διεύθυνση μνήμης, μόνο η τρέχουσα συναλλαγή ματαιώνεται και όχι ολόκληρο το πρόγραμμα θύλακας. Οτι. Το TSX επιτρέπει σε έναν θύλακα να έχει πρόσβαση με ασφάλεια σε οποιαδήποτε διεύθυνση μέσα από μια συναλλαγή - χωρίς τον κίνδυνο κατάρρευσης.

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

αν η καθορισμένη διεύθυνση δεν είναι διαθέσιμη εφαρμογή κεντρικού υπολογιστή, το TSX καταργεί την εξαίρεση που προέκυψε (το λειτουργικό σύστημα δεν ειδοποιείται) και ματαιώνει τη συναλλαγή. Ένας κωδικός σφάλματος επιστρέφεται στον κωδικό θύλακα, ώστε να μπορεί να αντιδράσει στο γεγονός ότι η συναλλαγή έχει ακυρωθεί. Αυτοί οι κωδικοί σφάλματος υποδεικνύουν ότι η εν λόγω διεύθυνση δεν είναι διαθέσιμη στην εφαρμογή κεντρικού υπολογιστή.

Κακόβουλο λογισμικό SGX: πώς οι κακοί εκμεταλλεύονται τη νέα τεχνολογία της Intel για σκοπούς άλλους από αυτούς για τους οποίους σχεδιάστηκε

Κακόβουλο λογισμικό SGX: πώς οι κακοί εκμεταλλεύονται τη νέα τεχνολογία της Intel για σκοπούς άλλους από αυτούς για τους οποίους σχεδιάστηκε

Αυτός ο χειρισμός του TSX από το εσωτερικό του θύλακα έχει ένα ωραίο χαρακτηριστικό για τον κακό: δεδομένου ότι οι περισσότεροι μετρητές απόδοσης υλικού δεν ενημερώνονται τη στιγμή που εκτελείται ο κώδικας του θύλακα, είναι αδύνατο να παρακολουθήσετε τις συναλλαγές TSX που εκτελούνται μέσα στον θύλακα. Έτσι, ο κακόβουλος χειρισμός του TSX παραμένει εντελώς αόρατος στο λειτουργικό σύστημα.

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

Ο κακός χρησιμοποιεί το hack που περιγράφεται παραπάνω για να αναζητήσει τον κώδικα της εφαρμογής κεντρικού υπολογιστή για gadget κατάλληλα για τη δημιουργία μιας αλυσίδας ROP. Ταυτόχρονα, δεν χρειάζεται να ερευνά κάθε διεύθυνση. Αρκεί να διερευνήσετε μία διεύθυνση από κάθε σελίδα του εικονικού χώρου διευθύνσεων. Η ανίχνευση και των 16 gigabyte της μνήμης διαρκεί περίπου 45 λεπτά (σε Intel i7-6700K). Ως αποτέλεσμα, ο κακός λαμβάνει μια λίστα με εκτελέσιμες σελίδες που είναι κατάλληλες για την κατασκευή μιας αλυσίδας ROP.

Hack για ανίχνευση διευθύνσεων για δυνατότητα εγγραφής

Για να πραγματοποιήσει μια έγκλειστη έκδοση μιας επίθεσης ROP, ένας εισβολέας πρέπει να μπορεί να αναζητήσει εγγράψιμες αχρησιμοποίητες περιοχές μνήμης της εφαρμογής κεντρικού υπολογιστή. Ο εισβολέας χρησιμοποιεί αυτές τις θέσεις μνήμης για να εισάγει ένα ψεύτικο πλαίσιο στοίβας και για να εισάγει ένα ωφέλιμο φορτίο (κώδικας κελύφους). Η ουσία είναι ότι ένας κακόβουλος θύλακας δεν είναι σε θέση να απαιτήσει από την εφαρμογή κεντρικού υπολογιστή να εκχωρήσει μνήμη για τον εαυτό της, αλλά αντίθετα μπορεί να κάνει κακή χρήση της μνήμης που έχει ήδη εκχωρηθεί από την εφαρμογή κεντρικού υπολογιστή. Αν, βέβαια, καταφέρει να βρει τέτοιες περιοχές χωρίς να καταρρεύσει ο θύλακας.

Ο κακός πραγματοποιεί αυτήν την αναζήτηση εκμεταλλευόμενος μια άλλη παρενέργεια του TSX. Αρχικά, όπως και στην προηγούμενη περίπτωση, εξετάζει τη διεύθυνση για την ύπαρξή της και στη συνέχεια ελέγχει εάν η σελίδα που αντιστοιχεί σε αυτήν τη διεύθυνση είναι εγγράψιμη. Για να το κάνει αυτό, ο κακός χρησιμοποιεί το ακόλουθο hack: τοποθετεί μια συνάρτηση εγγραφής σε μια συναλλαγή TSX και αφού ολοκληρωθεί, αλλά πριν ολοκληρωθεί, ακυρώνει αναγκαστικά τη συναλλαγή (ρητη ματαίωση).

Βλέποντας τον κωδικό επιστροφής από μια συναλλαγή TSX, ο εισβολέας καταλαβαίνει εάν είναι εγγράψιμος. Εάν πρόκειται για "σαφή έκτρωση", ο κακός καταλαβαίνει ότι η ηχογράφηση θα ήταν επιτυχής αν την είχε ολοκληρώσει. Εάν η σελίδα είναι μόνο για ανάγνωση, τότε η συναλλαγή τελειώνει με ένα σφάλμα διαφορετικό από τη "ρητη ματαίωση".

Κακόβουλο λογισμικό SGX: πώς οι κακοί εκμεταλλεύονται τη νέα τεχνολογία της Intel για σκοπούς άλλους από αυτούς για τους οποίους σχεδιάστηκε

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

Παραβίαση για ανακατεύθυνση της ροής ελέγχου

Όταν εκτελείτε μια επίθεση ROP από έναν θύλακα - σε αντίθεση με τις παραδοσιακές επιθέσεις ROP - ο εισβολέας μπορεί να αποκτήσει τον έλεγχο του καταχωρητή RIP χωρίς να εκμεταλλευτεί τυχόν σφάλματα στο πρόγραμμα που δέχεται επίθεση (υπερχείλιση buffer ή κάτι τέτοιο). Ένας εισβολέας μπορεί να αντικαταστήσει απευθείας την τιμή του καταχωρητή RIP που είναι αποθηκευμένος στη στοίβα. Συγκεκριμένα, μπορεί να αντικαταστήσει την τιμή αυτού του μητρώου με τη δική του αλυσίδα ROP.

Ωστόσο, εάν η αλυσίδα ROP είναι μεγάλη, τότε η αντικατάσταση ενός μεγάλου κομματιού της στοίβας της εφαρμογής κεντρικού υπολογιστή μπορεί να οδηγήσει σε καταστροφή δεδομένων και απροσδόκητη συμπεριφορά προγράμματος. Ο κακός, που επιδιώκει να πραγματοποιήσει κρυφά την επίθεσή του, δεν είναι ικανοποιημένος με αυτή την κατάσταση πραγμάτων. Επομένως, δημιουργεί ένα ψεύτικο πλαίσιο προσωρινής στοίβας για τον εαυτό του και αποθηκεύει την αλυσίδα ROP του σε αυτό. Το πλαίσιο ψεύτικης στοίβας τοποθετείται σε μια τυχαία εγγράψιμη θέση μνήμης, αφήνοντας ανέπαφη την πραγματική στοίβα.

Κακόβουλο λογισμικό SGX: πώς οι κακοί εκμεταλλεύονται τη νέα τεχνολογία της Intel για σκοπούς άλλους από αυτούς για τους οποίους σχεδιάστηκε

Τι δίνουν στον κακό τα τρία hacks που αναφέρονται παραπάνω;

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

Κακόβουλο λογισμικό SGX: πώς οι κακοί εκμεταλλεύονται τη νέα τεχνολογία της Intel για σκοπούς άλλους από αυτούς για τους οποίους σχεδιάστηκε

(2) Στη συνέχεια από hack για ανίχνευση διευθύνσεων για δυνατότητα εγγραφής, – ένας κακόβουλος θύλακας προσδιορίζει περιοχές στη μνήμη της εφαρμογής κεντρικού υπολογιστή που είναι κατάλληλες για έγχυση ωφέλιμου φορτίου.

Κακόβουλο λογισμικό SGX: πώς οι κακοί εκμεταλλεύονται τη νέα τεχνολογία της Intel για σκοπούς άλλους από αυτούς για τους οποίους σχεδιάστηκε

(3) Στη συνέχεια, ο θύλακας δημιουργεί μια αλυσίδα ROP από τα gadget που ανακαλύφθηκαν στο βήμα (1) και εγχέει αυτήν την αλυσίδα στη στοίβα εφαρμογών κεντρικού υπολογιστή.

Κακόβουλο λογισμικό SGX: πώς οι κακοί εκμεταλλεύονται τη νέα τεχνολογία της Intel για σκοπούς άλλους από αυτούς για τους οποίους σχεδιάστηκε

(4) Τέλος, όταν η εφαρμογή κεντρικού υπολογιστή συναντήσει την αλυσίδα ROP που δημιουργήθηκε στο προηγούμενο βήμα, το κακόβουλο ωφέλιμο φορτίο αρχίζει να εκτελείται - με τα προνόμια της εφαρμογής κεντρικού υπολογιστή και τη δυνατότητα πραγματοποίησης κλήσεων συστήματος.

Πώς ένας κακός χρησιμοποιεί αυτά τα hacks για να δημιουργήσει ranzowari

Αφού η εφαρμογή κεντρικού υπολογιστή μεταφέρει τον έλεγχο στον θύλακα μέσω ενός από τα ECALL (χωρίς να υποπτεύεται ότι αυτός ο θύλακας είναι κακόβουλος), ο κακόβουλος θύλακας αναζητά ελεύθερο χώρο στη μνήμη της εφαρμογής κεντρικού υπολογιστή για την έγχυση κώδικα (λαμβάνοντας ως ελεύθερους χώρους αυτές τις ακολουθίες κελιών που γέμιζε με μηδενικά). Στη συνέχεια μέσω hack για ανίχνευση διευθύνσεων για να δούμε αν μπορούν να διαβαστούν, – ο θύλακας αναζητά εκτελέσιμες σελίδες στην εφαρμογή κεντρικού υπολογιστή και δημιουργεί μια αλυσίδα ROP που δημιουργεί ένα νέο αρχείο με το όνομα "RANSOM" στον τρέχοντα κατάλογο (σε μια πραγματική επίθεση, ο θύλακας κρυπτογραφεί τα υπάρχοντα αρχεία χρήστη) και εμφανίζει ένα μήνυμα λύτρων. Την ίδια στιγμή, η εφαρμογή υποδοχής πιστεύει αφελώς ότι ο θύλακας απλώς προσθέτει δύο αριθμούς. Πώς φαίνεται αυτό στον κώδικα;

Για ευκολία αντίληψης, ας εισαγάγουμε μερικά μνημονικά μέσα από τους ορισμούς:

Κακόβουλο λογισμικό SGX: πώς οι κακοί εκμεταλλεύονται τη νέα τεχνολογία της Intel για σκοπούς άλλους από αυτούς για τους οποίους σχεδιάστηκε

Αποθηκεύουμε τις αρχικές τιμές των καταχωρητών RSP και RBP για να επαναφέρουμε την κανονική λειτουργία της εφαρμογής κεντρικού υπολογιστή μετά την εκτέλεση του ωφέλιμου φορτίου:

Κακόβουλο λογισμικό SGX: πώς οι κακοί εκμεταλλεύονται τη νέα τεχνολογία της Intel για σκοπούς άλλους από αυτούς για τους οποίους σχεδιάστηκε

Αναζητούμε ένα κατάλληλο πλαίσιο στοίβας (δείτε τον κώδικα από την ενότητα "hack for redirecting control flow").

Εύρεση κατάλληλων gadget ROP:

Κακόβουλο λογισμικό SGX: πώς οι κακοί εκμεταλλεύονται τη νέα τεχνολογία της Intel για σκοπούς άλλους από αυτούς για τους οποίους σχεδιάστηκε

Εύρεση θέσης για την έγχυση του ωφέλιμου φορτίου:

Κακόβουλο λογισμικό SGX: πώς οι κακοί εκμεταλλεύονται τη νέα τεχνολογία της Intel για σκοπούς άλλους από αυτούς για τους οποίους σχεδιάστηκε

Κατασκευάζουμε μια αλυσίδα ROP:

Κακόβουλο λογισμικό SGX: πώς οι κακοί εκμεταλλεύονται τη νέα τεχνολογία της Intel για σκοπούς άλλους από αυτούς για τους οποίους σχεδιάστηκε

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

Πηγή: www.habr.com

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