Το Linux χρησιμοποιεί δαχτυλίδια προστασίας?
Δακτύλιες προστασίας
Αυτό επιτρέπει μια ολόκληρη ιεραρχία τμημάτων και δικαιωμάτων μεταξύ τους. Μπορεί να έχετε παρατηρήσει ότι μια κλήση διασταυρούμενου τμήματος ακούγεται ακριβώς όπως μια κλήση συστήματος. Εάν έχετε εξετάσει ποτέ το συγκρότημα Linux x86, ο τυπικός τρόπος για να κάνετε μια κλήση συστήματος είναι int 0x80, η οποία αυξάνει τη διακοπή 0x80 . Μια διακοπή σταματάει τον επεξεργαστή και πηγαίνει σε μια πύλη διακοπής, η οποία στη συνέχεια λειτουργεί το ίδιο με μια πύλη κλήσης – αλλάζει το επίπεδο προνομίων και σας αναπηδά σε κάποιο άλλο τομέα κώδικα .
Το Linux χρησιμοποιεί δαχτυλίδια προστασίας?
Αναφέραμε πώς ένα από τα σημαντικότερα καθήκοντα του λειτουργικού συστήματος είναι η εφαρμογή της ασφάλειας. Αυτό δεν επιτρέπεται σε μια εφαρμογή ή χρήστη να παρεμβαίνει σε οποιοδήποτε άλλο που εκτελείται στο σύστημα. Αυτό σημαίνει ότι οι εφαρμογές δεν θα πρέπει να μπορούν να αντικαταστήσουν τη μνήμη ή τα αρχεία του άλλου και μόνο να αποκτήσουν πρόσβαση σε πόρους του συστήματος όπως υπαγορεύονται από την πολιτική του συστήματος.
Ωστόσο, όταν μια εφαρμογή εκτελείται, έχει αποκλειστική χρήση του επεξεργαστή. Βλέπουμε πώς λειτουργεί αυτό όταν εξετάζουμε τις διαδικασίες στο επόμενο κεφάλαιο. Η εξασφάλιση ότι η εφαρμογή έχει πρόσβαση μόνο στη μνήμη που κατέχει εφαρμόζεται από το σύστημα εικονικής μνήμης, το οποίο εξετάζουμε στο κεφάλαιο μετά το επόμενο. Το βασικό σημείο είναι ότι το υλικό είναι υπεύθυνο για την επιβολή αυτών των κανόνων.
Η διασύνδεση κλήσης συστήματος που εξετάσαμε είναι η πύλη προς την εφαρμογή να πάρει τους πόρους του συστήματος. Αναγκάζοντας την αίτηση να ζητήσει πόρους μέσω μιας κλήσης συστήματος στον πυρήνα, ο πυρήνας μπορεί να επιβάλει κανόνες σχετικά με το τι είδους πρόσβαση μπορεί να παρέχεται. Για παράδειγμα, όταν μια εφαρμογή κάνει μια κλήση συστήματος open () για να ανοίξει ένα αρχείο στο δίσκο, θα ελέγξει τα δικαιώματα του χρήστη έναντι των δικαιωμάτων αρχείου και θα επιτρέψει ή αρνηθεί την πρόσβαση.
4 . 1 . 1 επίπεδα προνομίων
Η προστασία υλικού μπορεί συνήθως να θεωρηθεί ως ένα σύνολο ομόκεντρων δακτυλίων γύρω από ένα σύνολο βασικών εργασιών.
Επίπεδα προνομίων στο x86
Εικόνα 4 . 1 . 1 . 1 δαχτυλίδια
Στο εσωτερικό, οι περισσότεροι δακτύλιος είναι οι πιο προστατευμένες οδηγίες. Εκείνοι που μόνο ο πυρήνας πρέπει να επιτρέπεται να καλέσει. Για παράδειγμα, η εντολή HLT για να σταματήσει ο επεξεργαστής δεν θα πρέπει να επιτρέπεται να εκτελείται από μια εφαρμογή χρήστη, καθώς θα σταματούσε να εργάζεται ολόκληρος ο υπολογιστής. Ωστόσο, ο πυρήνας πρέπει να είναι σε θέση να καλέσει αυτήν την οδηγία όταν ο υπολογιστής είναι νόμιμα κλειστής. 1
Κάθε εσωτερικός δακτύλιος μπορεί να έχει πρόσβαση σε οποιεσδήποτε οδηγίες που προστατεύονται από ένα περαιτέρω δακτύλιο, αλλά δεν προστατεύονται από ένα περαιτέρω δακτύλιο. Όχι όλες οι αρχιτεκτονικές έχουν πολλαπλά επίπεδα δαχτυλιδιών όπως παραπάνω, αλλά οι περισσότεροι θα προβλέπουν τουλάχιστον έναν επίπεδο “πυρήνα” και “χρήστη”.
4 . 1 . 1 . 1 386 μοντέλο προστασίας
Το μοντέλο προστασίας 386 διαθέτει τέσσερα δακτυλίους, αν και τα περισσότερα λειτουργικά συστήματα (όπως το Linux και τα Windows) χρησιμοποιούν μόνο δύο από τους δακτυλίους για να διατηρήσουν τη συμβατότητα με άλλες αρχιτεκτονικές που δεν επιτρέπουν τόσα πολλά διακριτά επίπεδα προστασίας.
386 Διατηρεί τα προνόμια κάνοντας κάθε κομμάτι κώδικα εφαρμογής που εκτελείται στο σύστημα να έχει ένα μικρό περιγραφικό, που ονομάζεται a περιγραφέας κώδικα, που περιγράφει, μεταξύ άλλων, το επίπεδο προνομίων του. Κατά την εκτέλεση του κώδικα εφαρμογής κάνει ένα άλμα σε κάποιο άλλο κώδικα εκτός της περιοχής που περιγράφεται από τον περιγραφέα κώδικα, ελέγχεται το επίπεδο προνομίων του στόχου. Εάν είναι υψηλότερο από τον τρέχοντα κώδικα, το άλμα δεν απαγορεύεται από το υλικό (και η εφαρμογή θα συντρίψει).
4 . 1 . 1 . 2 Αύξηση προνόμιο
Οι εφαρμογές μπορούν να αυξήσουν το επίπεδο προνομίων τους μόνο με συγκεκριμένες κλήσεις που το επιτρέπουν, όπως η οδηγία για την εφαρμογή μιας κλήσης συστήματος. Αυτά συνήθως αναφέρονται ως πύλη κλήσεων Επειδή λειτουργούν ακριβώς ως φυσική πύλη. Μια μικρή είσοδος μέσω ενός κατά τα άλλα αδιαπέραστο τοίχο. Όταν ονομάζεται αυτή η εντολή, έχουμε δει πώς το υλικό σταματά πλήρως την εφαρμογή και τον έλεγχο των χεριών στον πυρήνα. Ο πυρήνας πρέπει να ενεργεί ως gatekeeper. Εξασφαλίζοντας ότι τίποτα άσχημο δεν έρχεται από την πύλη. Αυτό σημαίνει ότι πρέπει να ελέγξει προσεκτικά τα επιχειρήματα κλήσης του συστήματος για να βεβαιωθείτε ότι δεν θα ξεγελαστεί για να κάνει τίποτα που δεν πρέπει (αν μπορεί να είναι, αυτό είναι ένα σφάλμα ασφαλείας). Καθώς ο πυρήνας τρέχει στο εσώτερο δακτύλιο, έχει δικαιώματα για να κάνει οποιαδήποτε λειτουργία θέλει. Όταν τελειώσει, θα επιστρέψει τον έλεγχο πίσω στην εφαρμογή που θα εκτελείται και πάλι με το χαμηλότερο επίπεδο προνομίων του.
4 . 1 . 1 . 3 γρήγορες κλήσεις συστήματος
Ένα πρόβλημα με τις παγίδες όπως περιγράφεται παραπάνω είναι ότι είναι πολύ ακριβό για την εφαρμογή του επεξεργαστή. Υπάρχει πολλή κατάσταση που πρέπει να αποθηκευτεί πριν από το πλαίσιο μπορεί να αλλάξει. Οι σύγχρονοι επεξεργαστές έχουν συνειδητοποιήσει αυτό το γενικό κόστος και προσπαθούν να το μειώσουν.
Η κατανόηση του μηχανισμού κλήσεων-πύλης που περιγράφεται παραπάνω απαιτείται διερεύνηση του έξυπνου αλλά περίπλοκου συστήματος τμηματοποίησης που χρησιμοποιείται από τον επεξεργαστή. Ο αρχικός λόγος για την κατάτμηση ήταν να είναι σε θέση να χρησιμοποιήσει περισσότερα από τα 16 bit που είναι διαθέσιμα σε ένα μητρώο για μια διεύθυνση, όπως απεικονίζεται στο σχήμα 4 . 1 . 1 . 3 . 1, X86 Διευθυντής τμηματοποίησης.
Τμηματοποίηση επεκτείνοντας το χώρο διευθύνσεων ενός επεξεργαστή διαιρώντας τον σε κομμάτια. Ο επεξεργαστής διατηρεί ειδικά μητρώα τμήματος και οι διευθύνσεις καθορίζονται από έναν κατάλογο τμήματος και συνδυασμό μετατόπισης. Η τιμή του καταχωρητή τμήματος προστίθεται στο τμήμα μετατόπισης για να βρείτε μια τελική διεύθυνση.
Εικόνα 4 . 1 . 1 . 3 . 1 x86 Διευθυντής τμηματοποίησης
Όταν το x86 μετακόμισε σε καταχωρητές 32 bit, το σχήμα τμηματοποίησης παρέμεινε αλλά σε διαφορετική μορφή. Αντί να έχουν σταθερά μεγέθη τμήματος, τα τμήματα επιτρέπεται να έχουν οποιοδήποτε μέγεθος. Αυτό σημαίνει ότι ο επεξεργαστής πρέπει να παρακολουθεί όλα αυτά τα διαφορετικά τμήματα και τα μεγέθη του, τα οποία χρησιμοποιεί περιγραφείς. Οι περιγραφείς του τμήματος που διατίθενται σε όλους διατηρούνται στο παγκόσμιος πίνακας περιγραφών ή GDT για σύντομο. Κάθε διαδικασία έχει έναν αριθμό καταχωρητών που δείχνουν καταχωρήσεις στο GDT. Αυτά είναι τα τμήματα που μπορεί να έχει πρόσβαση η διαδικασία (υπάρχουν επίσης τοπικός Πίνακες περιγραφής, και όλα intera
Βασικά σημεία:
- Το Linux εφαρμόζει την ασφάλεια για την πρόληψη παρεμβολών μεταξύ εφαρμογών και χρηστών.
- Το υλικό επιβάλλει κανόνες σχετικά με τη μνήμη και την πρόσβαση των πόρων.
- Η διεπαφή κλήσης συστήματος λειτουργεί ως πύλη για εφαρμογές για πρόσβαση σε πόρους συστήματος.
- Τα επίπεδα προνομίων καθορίζουν την πρόσβαση σε ορισμένες οδηγίες και λειτουργίες.
- Το μοντέλο προστασίας 386 έχει τέσσερα δακτυλίους, αλλά τα περισσότερα λειτουργικά συστήματα χρησιμοποιούν μόνο δύο.
- Κάθε κωδικός εφαρμογής έχει έναν περιγραφέα κώδικα που ορίζει το επίπεδο προνομίων του.
- Οι εφαρμογές μπορούν να αυξήσουν το επίπεδο προνομίων τους μέσω συγκεκριμένων κλήσεων, όπως κλήσεις συστήματος.
- Ο πυρήνας λειτουργεί ως gatekeeper για να εξασφαλίσει την ασφάλεια των κλήσεων του συστήματος.
- Οι γρήγορες κλήσεις συστήματος στοχεύουν στη μείωση των γενικών εξόδων μεταγωγής περιβάλλοντος.
- Το σχήμα τμηματοποίησης X86 επεκτείνει τον χώρο διευθύνσεων του επεξεργαστή.
Ερωτήσεις:
- Ποιος είναι ο σκοπός της εφαρμογής της ασφάλειας σε ένα λειτουργικό σύστημα?
- Πώς επιβάλλει τους κανόνες πρόσβασης στη μνήμη του υλικού?
- Ποιος είναι ο ρόλος που παίζει η διασύνδεση του συστήματος στην πρόσβαση σε πόρους του συστήματος?
- Πώς χρησιμοποιούνται τα επίπεδα προνομίων στην προστασία υλικού?
- Πόσα δακτύλια έχει το μοντέλο προστασίας 386?
- Τι είναι ένας περιγραφέας κώδικα?
- Πώς μπορούν οι εφαρμογές να αυξήσουν το επίπεδο προνομίων τους?
- Ποιος είναι ο ρόλος του πυρήνα ως gatekeeper?
- Ποιος είναι ο στόχος των γρήγορων κλήσεων συστήματος?
- Γιατί εισήχθη η κατάτμηση στον επεξεργαστή x86?
- Πώς λειτουργεί το σύστημα τμηματοποίησης x86?
- Τι είναι οι περιγραφείς του τμήματος και πού αποθηκεύονται?
Δακτύλιες προστασίας
Αυτό επιτρέπει μια ολόκληρη ιεραρχία τμημάτων και δικαιωμάτων μεταξύ τους. Μπορεί να έχετε παρατηρήσει ότι μια κλήση διασταυρούμενου τμήματος ακούγεται ακριβώς όπως μια κλήση συστήματος. Εάν έχετε εξετάσει ποτέ το συγκρότημα Linux x86, ο τυπικός τρόπος για να κάνετε μια κλήση συστήματος είναι int 0x80, η οποία αυξάνει τη διακοπή 0x80 . Μια διακοπή σταματάει τον επεξεργαστή και πηγαίνει σε μια πύλη διακοπής, η οποία στη συνέχεια λειτουργεί το ίδιο με μια πύλη κλήσης – αλλάζει το επίπεδο προνομίων και σας αναπηδά σε κάποιο άλλο τομέα κώδικα .
Το Linux χρησιμοποιεί δαχτυλίδια προστασίας?
Αναφέραμε πώς ένα από τα σημαντικότερα καθήκοντα του λειτουργικού συστήματος είναι η εφαρμογή της ασφάλειας. Αυτό δεν επιτρέπεται σε μια εφαρμογή ή χρήστη να παρεμβαίνει σε οποιοδήποτε άλλο που εκτελείται στο σύστημα. Αυτό σημαίνει ότι οι εφαρμογές δεν θα πρέπει να μπορούν να αντικαταστήσουν τη μνήμη ή τα αρχεία του άλλου και μόνο να αποκτήσουν πρόσβαση σε πόρους του συστήματος όπως υπαγορεύονται από την πολιτική του συστήματος.
Ωστόσο, όταν μια εφαρμογή εκτελείται, έχει αποκλειστική χρήση του επεξεργαστή. Βλέπουμε πώς λειτουργεί αυτό όταν εξετάζουμε τις διαδικασίες στο επόμενο κεφάλαιο. Η εξασφάλιση ότι η εφαρμογή έχει πρόσβαση μόνο στη μνήμη που κατέχει εφαρμόζεται από το σύστημα εικονικής μνήμης, το οποίο εξετάζουμε στο κεφάλαιο μετά το επόμενο. Το βασικό σημείο είναι ότι το υλικό είναι υπεύθυνο για την επιβολή αυτών των κανόνων.
Η διασύνδεση κλήσης συστήματος που εξετάσαμε είναι η πύλη προς την εφαρμογή να πάρει τους πόρους του συστήματος. Αναγκάζοντας την αίτηση να ζητήσει πόρους μέσω μιας κλήσης συστήματος στον πυρήνα, ο πυρήνας μπορεί να επιβάλει κανόνες σχετικά με το τι είδους πρόσβαση μπορεί να παρέχεται. Για παράδειγμα, όταν μια εφαρμογή κάνει μια κλήση συστήματος open () για να ανοίξει ένα αρχείο στο δίσκο, θα ελέγξει τα δικαιώματα του χρήστη έναντι των δικαιωμάτων αρχείου και θα επιτρέψει ή αρνηθεί την πρόσβαση.
4 . 1 . 1 επίπεδα προνομίων
Η προστασία υλικού μπορεί συνήθως να θεωρηθεί ως ένα σύνολο ομόκεντρων δακτυλίων γύρω από ένα σύνολο βασικών εργασιών.
Επίπεδα προνομίων στο x86
Εικόνα 4 . 1 . 1 . 1 δαχτυλίδια
Στο εσωτερικό, οι περισσότεροι δακτύλιος είναι οι πιο προστατευμένες οδηγίες. Εκείνοι που μόνο ο πυρήνας πρέπει να επιτρέπεται να καλέσει. Για παράδειγμα, η εντολή HLT για να σταματήσει ο επεξεργαστής δεν θα πρέπει να επιτρέπεται να εκτελείται από μια εφαρμογή χρήστη, καθώς θα σταματούσε να εργάζεται ολόκληρος ο υπολογιστής. Ωστόσο, ο πυρήνας πρέπει να είναι σε θέση να καλέσει αυτήν την οδηγία όταν ο υπολογιστής είναι νόμιμα κλειστής. 1
Κάθε εσωτερικός δακτύλιος μπορεί να έχει πρόσβαση σε οποιεσδήποτε οδηγίες που προστατεύονται από ένα περαιτέρω δακτύλιο, αλλά δεν προστατεύονται από ένα περαιτέρω δακτύλιο. Όχι όλες οι αρχιτεκτονικές έχουν πολλαπλά επίπεδα δαχτυλιδιών όπως παραπάνω, αλλά οι περισσότεροι θα προβλέπουν τουλάχιστον έναν επίπεδο “πυρήνα” και “χρήστη”.
4 . 1 . 1 . 1 386 μοντέλο προστασίας
Το μοντέλο προστασίας 386 διαθέτει τέσσερα δακτυλίους, αν και τα περισσότερα λειτουργικά συστήματα (όπως το Linux και τα Windows) χρησιμοποιούν μόνο δύο από τους δακτυλίους για να διατηρήσουν τη συμβατότητα με άλλες αρχιτεκτονικές που επιτρέπουν τώρα τόσα πολλά διακριτά επίπεδα προστασίας.
386 Διατηρεί τα προνόμια κάνοντας κάθε κομμάτι κώδικα εφαρμογής που εκτελείται στο σύστημα να έχει ένα μικρό περιγραφικό, που ονομάζεται a περιγραφέας κώδικα, που περιγράφει, μεταξύ άλλων, το επίπεδο προνομίων του. Κατά την εκτέλεση του κώδικα εφαρμογής κάνει ένα άλμα σε κάποιο άλλο κώδικα εκτός της περιοχής που περιγράφεται από τον περιγραφέα κώδικα, ελέγχεται το επίπεδο προνομίων του στόχου. Εάν είναι υψηλότερο από τον τρέχοντα κώδικα, το άλμα δεν απαγορεύεται από το υλικό (και η εφαρμογή θα συντρίψει).
4 . 1 . 1 . 2 Αύξηση προνόμιο
Οι εφαρμογές μπορούν να αυξήσουν το επίπεδο προνομίων τους μόνο με συγκεκριμένες κλήσεις που το επιτρέπουν, όπως η οδηγία για την εφαρμογή μιας κλήσης συστήματος. Αυτά συνήθως αναφέρονται ως πύλη κλήσεων Επειδή λειτουργούν ακριβώς ως φυσική πύλη. Μια μικρή είσοδος μέσω ενός κατά τα άλλα αδιαπέραστο τοίχο. Όταν ονομάζεται αυτή η εντολή, έχουμε δει πώς το υλικό σταματά πλήρως την εφαρμογή και τον έλεγχο των χεριών στον πυρήνα. Ο πυρήνας πρέπει να ενεργεί ως gatekeeper. Εξασφαλίζοντας ότι τίποτα άσχημο δεν έρχεται από την πύλη. Αυτό σημαίνει ότι πρέπει να ελέγξει προσεκτικά τα επιχειρήματα κλήσης του συστήματος για να βεβαιωθείτε ότι δεν θα ξεγελαστεί για να κάνει τίποτα που δεν πρέπει (αν μπορεί να είναι, αυτό είναι ένα σφάλμα ασφαλείας). Καθώς ο πυρήνας τρέχει στο εσώτερο δακτύλιο, έχει δικαιώματα για να κάνει οποιαδήποτε λειτουργία θέλει. Όταν τελειώσει, θα επιστρέψει τον έλεγχο πίσω στην εφαρμογή που θα εκτελείται και πάλι με το χαμηλότερο επίπεδο προνομίων του.
4 . 1 . 1 . 3 γρήγορες κλήσεις συστήματος
Ένα πρόβλημα με τις παγίδες όπως περιγράφεται παραπάνω είναι ότι είναι πολύ ακριβό για την εφαρμογή του επεξεργαστή. Υπάρχει πολλή κατάσταση που πρέπει να αποθηκευτεί πριν από το πλαίσιο μπορεί να αλλάξει. Οι σύγχρονοι επεξεργαστές έχουν συνειδητοποιήσει αυτό το γενικό κόστος και προσπαθούν να το μειώσουν.
Η κατανόηση του μηχανισμού κλήσεων-πύλης που περιγράφεται παραπάνω απαιτείται διερεύνηση του έξυπνου αλλά περίπλοκου συστήματος τμηματοποίησης που χρησιμοποιείται από τον επεξεργαστή. Ο αρχικός λόγος για την κατάτμηση ήταν να είναι σε θέση να χρησιμοποιήσει περισσότερα από τα 16 bit που είναι διαθέσιμα σε ένα μητρώο για μια διεύθυνση, όπως απεικονίζεται στο σχήμα 4 . 1 . 1 . 3 . 1, X86 Διευθυντής τμηματοποίησης .
Τμηματοποίηση επεκτείνοντας το χώρο διευθύνσεων ενός επεξεργαστή διαιρώντας τον σε κομμάτια. Ο επεξεργαστής διατηρεί ειδικά μητρώα τμήματος και οι διευθύνσεις καθορίζονται από έναν κατάλογο τμήματος και συνδυασμό μετατόπισης. Η τιμή του καταχωρητή τμήματος προστίθεται στο τμήμα μετατόπισης για να βρείτε μια τελική διεύθυνση.
Εικόνα 4 . 1 . 1 . 3 . 1 x86 Διευθυντής τμηματοποίησης
Όταν το x86 μετακόμισε σε καταχωρητές 32 bit, το σχήμα τμηματοποίησης παρέμεινε αλλά σε διαφορετική μορφή. Αντί να έχουν σταθερά μεγέθη τμήματος, τα τμήματα επιτρέπεται να έχουν οποιοδήποτε μέγεθος. Αυτό σημαίνει ότι ο επεξεργαστής πρέπει να παρακολουθεί όλα αυτά τα διαφορετικά τμήματα και τα μεγέθη του, τα οποία χρησιμοποιεί περιγραφείς. Οι περιγραφείς του τμήματος που διατίθενται σε όλους διατηρούνται στο παγκόσμιος πίνακας περιγραφών ή GDT για σύντομο. Κάθε διαδικασία έχει έναν αριθμό καταχωρητών που δείχνουν καταχωρήσεις στο GDT. Αυτά είναι τα τμήματα που μπορεί να έχει πρόσβαση η διαδικασία (υπάρχουν επίσης τοπικός Πίνακες περιγραφής, και όλα αλληλεπιδρούν με τμήματα κατάστασης εργασίας, αλλά αυτό δεν είναι σημαντικό τώρα). Η συνολική κατάσταση απεικονίζεται στο σχήμα 4 . 1 . 1 . 3 . 2, x86 τμήματα .
X86 τμήματα σε δράση. Παρατηρήστε πώς περνάει μια “μακρινή κλήση” μέσω μιας πύλης κλήσης που ανακατευθύνει σε ένα τμήμα κώδικα που εκτελείται σε χαμηλότερο επίπεδο δακτυλίου. Ο μόνος τρόπος για να τροποποιήσετε τον επιλογέα κώδικα, που χρησιμοποιείται σιωπηρά για όλες τις διευθύνσεις κώδικα, είναι μέσω του μηχανισμού κλήσεων. Έτσι, ο μηχανισμός κλήσεων-πύλης εξασφαλίζει ότι για να επιλέξετε έναν νέο περιγραφέα τμήματος και, ως εκ τούτου.
Εικόνα 4 . 1 . 1 . 3 . 2 x86 τμήματα
Δεδομένου ότι το λειτουργικό σύστημα εκχωρεί τα καταχωρητικά τμήματα ως μέρος της κατάστασης της διαδικασίας, το υλικό του επεξεργαστή γνωρίζει ποια τμήματα της μνήμης μπορεί να έχει πρόσβαση σε τμήματα μνήμης και μπορεί να επιβάλει τα τμήματα της μνήμης ΠΡΟΣΤΑΣΙΑ για να διασφαλιστεί ότι η διαδικασία δεν αγγίζει τίποτα που δεν πρέπει. Εάν βγαίνει από τα όρια, λαμβάνετε ένα σφάλμα κατάτμησης, με τους οποίους οι περισσότεροι προγραμματιστές είναι εξοικειωμένοι με.
Η εικόνα γίνεται πιο ενδιαφέρουσα όταν η εκτέλεση του κώδικα πρέπει να κάνει κλήσεις σε κώδικα που βρίσκεται αλλο τμήμα. Όπως αναφέρθηκε στην Ενότητα 4 . 1 . 1 . 1, 386 μοντέλο προστασίας, το x86 το κάνει αυτό με δαχτυλίδια, Όπου ο δακτύλιος 0 είναι η υψηλότερη άδεια, ο δακτύλιος 3 είναι ο χαμηλότερος και οι εσωτερικοί δακτύλιοι μπορούν να έχουν πρόσβαση σε εξωτερικούς δακτυλίους αλλά όχι αντίστροφα.
Όπως αναφέρθηκε στην Ενότητα 4 . 1 . 1 . 2, Ανύψωση προνόμιο, όταν ο κώδικας Ring 3 θέλει να μεταβεί στον κωδικό Ring 0, τροποποιεί ουσιαστικά τον επιλογέα του τμήματος κώδικα για να δείξει ένα διαφορετικό τμήμα. Για να γίνει αυτό, πρέπει να χρησιμοποιήσει ένα ειδικό μακρινός Οδηγίες που εξασφαλίζει το υλικό μέσω της πύλης κλήσης. Δεν υπάρχει άλλος τρόπος για τη διαδικασία λειτουργίας να επιλέξει έναν νέο περιγραφέα κώδικα-τμήματος και επομένως ο επεξεργαστής θα ξεκινήσει την εκτέλεση κώδικα στο γνωστό μετατόπιση εντός του τμήματος δακτυλίου 0, ο οποίος είναι υπεύθυνος για τη διατήρηση της ακεραιότητας (ε.σολ. δεν διαβάζετε αυθαίρετο και ενδεχομένως κακόβουλο κώδικα και εκτελέστε τον. Φυσικά, οι κακοί επιτιθέμενοι θα αναζητούν πάντα τρόπους για να κάνουν τον κωδικό σας να κάνουν ό, τι δεν το σκοπεύατε!·.
Αυτό επιτρέπει μια ολόκληρη ιεραρχία τμημάτων και δικαιωμάτων μεταξύ τους. Μπορεί να έχετε παρατηρήσει ότι μια κλήση διασταυρούμενου τμήματος ακούγεται ακριβώς όπως μια κλήση συστήματος. Εάν έχετε εξετάσει ποτέ το συγκρότημα Linux x86, ο τυπικός τρόπος για να κάνετε μια κλήση συστήματος είναι int 0x80, η οποία αυξάνει τη διακοπή 0x80 . Μια διακοπή σταματάει τον επεξεργαστή και πηγαίνει σε μια πύλη διακοπής, η οποία στη συνέχεια λειτουργεί το ίδιο με μια πύλη κλήσης – αλλάζει το επίπεδο προνομίων και σας αναπηδά σε κάποιο άλλο τομέα κώδικα .
Το πρόβλημα με αυτό το σχήμα είναι ότι είναι αργός. Χρειάζεται πολλή προσπάθεια για να κάνετε όλο αυτό τον έλεγχο και πολλά μητρώα πρέπει να αποθηκευτούν για να μπείτε στον νέο κωδικό. Και στο δρόμο πίσω, όλα πρέπει να αποκατασταθούν ξανά.
Σε μια σύγχρονη τμηματοποίηση συστήματος X86 και το σύστημα δακτυλίου τεσσάρων επιπέδων δεν χρησιμοποιείται χάρη στην εικονική μνήμη, που συζητείται πλήρως στο κεφάλαιο 6, εικονική μνήμη . Το μόνο πράγμα που συμβαίνει πραγματικά με την εναλλαγή τμηματοποίησης είναι οι κλήσεις συστήματος, οι οποίες ουσιαστικά αλλάζουν από τη λειτουργία 3 (Χώρος χρηστών) στη λειτουργία 0 και μεταβείτε στον κωδικό χειριστή κλήσεων του συστήματος μέσα στον πυρήνα. Έτσι ο επεξεργαστής παρέχει επιπλέον Γρήγορη κλήση συστήματος Οι οδηγίες που ονομάζονται Sysenter (και το Sysexit για να επιστρέψουν), οι οποίες επιταχύνουν ολόκληρη τη διαδικασία σε μια κλήση int 0x80, αφαιρώντας τη γενική φύση μιας μακρινής κλήσης-δηλαδή η πιθανότητα μετάβασης σε οποιοδήποτε τμήμα σε οποιοδήποτε επίπεδο δακτυλίου-και περιορίζοντας την έκκληση να μεταβεί μόνο στον κώδικα 0 σε ένα συγκεκριμένο τμήμα και να offset, όπως αποθηκεύονται στα καταχωρητές-.
Επειδή η γενική φύση έχει αντικατασταθεί από τόσες προηγούμενες πληροφορίες, ολόκληρη η διαδικασία μπορεί να επιταχυνθεί και ως εκ τούτου έχουμε το προαναφερθέν Γρήγορη κλήση συστήματος. Το άλλο πράγμα που πρέπει να σημειωθεί είναι ότι το κράτος δεν διατηρείται όταν ο πυρήνας παίρνει τον έλεγχο. Ο πυρήνας πρέπει να είναι προσεκτικός για να μην καταστρέψει το κράτος, αλλά σημαίνει επίσης ότι είναι ελεύθερο να εξοικονομήσει μόνο μια μικρή κατάσταση που απαιτείται για να κάνει τη δουλειά, έτσι μπορεί να είναι πολύ πιο αποτελεσματική γι ‘αυτό. Αυτή είναι μια πολύ φιλοσοφία RISC και δείχνει πώς θολώνει η γραμμή μεταξύ των επεξεργαστών RISC και CISC.
Για περισσότερες πληροφορίες σχετικά με τον τρόπο εφαρμογής αυτού στον πυρήνα του Linux, ανατρέξτε στην ενότητα 8 . 1 . 1, βιβλιοθήκη πυρήνα .
4 . 2 Άλλοι τρόποι επικοινωνίας με τον πυρήνα
4 . 2 . 1 ioctl
4 . 3 συστήματα αρχείων
Σχετικά με το Proc, Sysfs, Debugfs κ.λπ
Δακτύλιες προστασίας
Δακτύλιος 0 είναι το πυρήνας τρόπος. Δακτύλιος 3 είναι το χρήστης τρόπος. Τα άλλα δαχτυλίδια δεν χρησιμοποιούνται συνήθως. Εικονικό κουτί φορτώνει τον πυρήνα της εικονικής μηχανής σε Δακτύλιος 1.
Λειτουργία πυρήνα vs Λειτουργία χρήστη Εκτέλεση
Σε λειτουργία πυρήνα, ο κώδικας εκτέλεσης έχει πλήρη και απεριόριστη πρόσβαση στο υποκείμενο υλικό. Μπορεί να εκτελέσει οποιαδήποτε εντολή CPU και να αναφέρει οποιαδήποτε διεύθυνση μνήμης. Στη λειτουργία χρήστη, ο κωδικός εκτέλεσης δεν έχει δυνατότητα άμεσης πρόσβασης στο υλικό ή στη μνήμη αναφοράς. Ο κωδικός που εκτελείται στη λειτουργία χρήστη πρέπει να μεταβιβάσει σε API συστήματος για πρόσβαση στο υλικό ή τη μνήμη.
Αυτές οι δύο λειτουργίες δεν είναι απλές ετικέτες. επιβάλλονται από το υλικό της CPU. Εάν η εκτέλεση κώδικα στη λειτουργία χρήστη προσπαθεί να κάνει κάτι έξω από την αρμοδιότητά του- όπως, ας πούμε, πρόσβαση σε μια προνομιακή οδηγία CPU ή να τροποποιήσει τη μνήμη στην οποία δεν έχει πρόσβαση- εκτοξεύεται μια παγιδευτή εξαίρεση. Αντί για ολόκληρο το σύστημά σας που συντρίβει, μόνο η συγκεκριμένη εφαρμογή καταρρέει. Αυτή είναι η τιμή της λειτουργίας χρήστη.
Αποτελέσματα που ταιριάζουν “”
Χωρίς αποτελέσματα που ταιριάζουν “”
Εισαγωγή στην αρχιτεκτονική Linux Core: Δαχτυλίδια προστασίας
Αυτό είναι το επόμενο άρθρο μας σχετικά με την Core Linux Architecture, στο προηγούμενο άρθρο μάθαμε για διαφορετικούς τρόπους επεξεργαστή, όπως τα προνόμια που επιτρέπεται στον κώδικα. Έτσι, εξετάσαμε τη λειτουργία Kernel και τη λειτουργία χρήστη και ουσιαστικά δακτυλίους προστασίας που θα κοιτάξουμε σήμερα στο επόμενο διάγραμμα. Μπορούμε να δούμε τα διαφορετικά δαχτυλίδια προστασίας.
Ας’προχωρήστε και ξεκινήστε
Δαχτυλίδια προστασίας σε x86:
Αφήνω’να συζητήσετε πρώτα τι είναι το x86? Και γιατί το χρειαζόμαστε?
Το X86 είναι μια πιο δημοφιλής αρχιτεκτονική επεξεργαστή για επιτραπέζιους υπολογιστές και κάτι όταν κοιτάζετε τα smartphones μπορείτε να δείτε αυτούς τους επεξεργαστές i.μι. Η πιο δημοφιλής αρχιτεκτονική επεξεργαστή για κινητές συσκευές, καθώς είναι πιο αποτελεσματική με τη χρήση της μπαταρίας του. Αλλά ως επιτραπέζιοι υπολογιστές Don’Δεν χρειάζομαι πραγματικά ότι έχει λίγη διαφορά. Ένα πράγμα που μπορείτε να δείτε το x στο x86 ουσιαστικά αυτό’απλά λέγοντας κάποιο αριθμό με 86 στο τέλος i.μι. x86 Έτσι, κάθε φορά που μπορείτε να δείτε μια οικογένεια επεξεργαστών θα δείτε πολλά διαφορετικά, ωστόσο θα τελειώνουν πάντα στο 86.
Έτσι πηγαίνουμε πιο βαθιά σε δαχτυλίδια προστασίας. Μπορούμε να εξετάσουμε τα δαχτυλίδια προστασίας ως γραφική αναπαράσταση των επιπέδων προνομίων της CPU που συζητήσαμε νωρίτερα. Στα επόμενα άρθρα, θα πάμε βαθιά στην αρχιτεκτονική της CPU και πώς λειτουργούν τα δακτύλιες προστασίας? είναι σαν να πηγαίνεις σε χαμηλό επίπεδο με αυτό.
Γνωρίζαμε ήδη ότι η CPU’μικρό “Λειτουργία πυρήνα” Αυτό ισούται με “Δακτύλιος 0” στο διάγραμμα και CPU’μικρό “Λειτουργία χρήστη” πρέπει να αντιμετωπίσει “Δακτύλιος 3”. Εδώ πρέπει να σκέφτεστε για το δαχτυλίδι 1 και 2. Ουσιαστικά σε ένα σύγχρονο λειτουργικό σύστημα’Το S συμπεριλαμβανομένου του Linux χρησιμοποιεί μόνο το Ring 0 και το Ring 3 σε αρχιτεκτονικές X86, λόγω του τρόπου με τον οποίο ονομάζεται κάτι που ονομάζεται α “Πίνακας σελίδων” εφαρμόζεται.
Αυτό είναι σαν να είναι σίγουρο γρήγορα και δεν υπάρχει κανείς ότι’είναι. Γι ‘αυτό χρησιμοποιούμε το Ring 0 και το Ring 3.
Ο πίνακας σελίδας είναι ένα αρχείο χαρτογράφησης μνήμης που χρησιμοποιείται από τα εικονικά συστήματα μνήμης σε ένα σύστημα υπολογιστή. Παρόλο που οι σύγχρονες αρχιτεκτονικές μπορούν να έχουν x86 που μπορούν να έχουν όλα αυτά τα δαχτυλίδια. Σε ορισμένο δακτύλιο περιβάλλοντος εικονικοποίησης, χρησιμοποιείται στην πραγματικότητα 1. Οτι’είναι στην πραγματικότητα ένα εικονικό κουτί ή εικονικό μηχάνημα. Βάζει το VM’S Κώδικα πυρήνα στην πραγματικότητα στο Ring 1 και ο πραγματικός κωδικός πυρήνα του υπογραμμισμένου μηχανήματος είναι στο Ring 0.
Αφήνω’ΠΗΓΑΙΝΕΤΕ ΚΑΙ ΔΕΙΤΕ ΠΟΙΟ ΓΝΩΡΙΖΟΥΜΕ ΠΟΥ ΕΙΝΑΙ – Εάν όλες οι διαδικασίες ξεκινήσουν στο δακτύλιο 3 όπως έχουμε ήδη μιλήσει, πώς εκτελούν τα προνόμια του δακτυλίου 0? Επειδή ο πυρήνας που ασχολείται με το υπογεγραμμένο λειτουργικό σύστημα λεπτό τρόπο λειτουργίας χρήστη ή εφαρμογή ή διαδικασία, πρέπει να εξετάσουμε μερικές φορές τις λειτουργίες συστήματος αρχείων ή τα πράγματα εισόδου-εξόδου. Αυτά είναι τα δαχτυλίδια που ουσιαστικά περιορίζονται στα προνόμια ή τα προνόμια του πυρήνα.
Πώς συμβαίνει λοιπόν? Όπως γνωρίζουμε τις λειτουργίες εισόδου-εξόδου, χειρισμός συστήματος αρχείων κ.λπ. Οτι’είναι κάτι που ονομάζεται διεπαφή κλήσης συστήματος και αυτό’είναι πραγματικά ένα άλλο μεσάζοντα μεταξύ του χώρου χρήστη που είναι εκείνα τα αντικείμενα που εκτελούν στο Ring 3 και το χώρο του πυρήνα που εκτελείται στο Ring 0.
Έτσι, οι διαδικασίες των χώρων χρήστη μπορούν ουσιαστικά να χρησιμοποιηθούν. Αυτή η διεπαφή, αυτό’S είδος πυρήνα API να έχει τον πυρήνα να επικαλεστεί μερικές από τις λειτουργίες του. Ας’Ελέγξτε τι είναι μια κλήση συστήματος.
Κλήση συστήματος: Είναι ένα αίτημα για πυρήνα από μια διαδικασία χρήστη για την εκτέλεση προνομιούχου δράσης i.μι. μια δράση πυρήνα.
Διακοπές: Είναι ένα σήμα που εκπέμπεται στην CPU που λέει ” Υπάρχει ένα γεγονός που χρειάζεται την άμεση προσοχή σας”.
Τι κάνει η διακοπή? Πώς είναι χρήσιμο? Μπορούν να ξεκινήσουν την κλήση συστήματος όπως διακόπτες με βάση το λογισμικό. Έτσι, ο κωδικός σε πιο σύγχρονες αρχιτεκτονικές CPU μπορεί να χρησιμοποιήσει μια άλλη διαδικασία έναρξης αντί της διακοπής. Αλλά η κύρια διαδικασία πίσω από όλα είναι η ίδια.
Το’είναι μια μικρή μικρή απόχρωση, αλλά μερικές φορές αυτές οι διακοπές είναι πιο εντατικές, πρέπει να είναι σίγουροι. Έτσι, τα πιο σύγχρονα συστήματα είδος αρχιτεκτονικής αντί για αυτές τις διακοπές μπορούν να έχουν άλλο. Έτσι, η υπογραμμική ιδέα είναι η ίδια.
Αφήνω’να μεταβείτε σε ένα παράδειγμα κλήσης συστήματος:
- Η διαδικασία χρήστη χρειάζεται μια δράση πυρήνα, ώστε να ξεκινά μια διακοπή.
- Η διακοπή ή η οδηγία βάζει τη CPU σε δακτύλιο 0 και περνάει τον έλεγχο στον πυρήνα.
- Ο πυρήνας καθορίζει εάν η διαδικασία χρήστη πρέπει να λάβει την κλήση συστήματος με βάση τα προνόμια.
- Εάν χορηγηθεί, ο πυρήνας θα εκτελέσει την κλήση του συστήματος.
- Μόλις τελειώσει, ο πυρήνας ξεκινά μια αλλαγή στο Ring 3.
- Ο πυρήνας δίνει πίσω τον έλεγχο στη διαδικασία χρήστη.
Επίσκεψη- Hostdens
Vishwajit Kale
Ο Vishwajit Kale έσκασε στη σκηνή ψηφιακού μάρκετινγκ το 2015 και είναι ο στρατηγός ψηφιακού μάρκετινγκ της Hostdens, μιας εταιρείας που στοχεύει στην παροχή αξιόπιστων λύσεων φιλοξενίας ιστοσελίδων. Το Vishwajit έχει εμπειρία στο ψηφιακό και περιεχόμενο μάρκετινγκ μαζί με το SEO. Είναι λάτρης της γραφής ιστολογίων τεχνολογίας, ταξιδιού και ανάγνωσης.
Vishwajit Kale
Ο Vishwajit Kale έσκασε στη σκηνή ψηφιακού μάρκετινγκ το 2015 και είναι ο στρατηγός ψηφιακού μάρκετινγκ της Hostdens, μιας εταιρείας που στοχεύει στην παροχή αξιόπιστων λύσεων φιλοξενίας ιστοσελίδων. Το Vishwajit έχει εμπειρία στο ψηφιακό και περιεχόμενο μάρκετινγκ μαζί με το SEO. Είναι λάτρης της γραφής ιστολογίων τεχνολογίας, ταξιδιού και ανάγνωσης.
Στρώματα λειτουργικού συστήματος
Τα λειτουργικά συστήματα μπορούν να αναλυθούν σε μια σειρά από διακριτά στρώματα, το καθένα με τα δικά του προνόμια. Αυτό το σύστημα είναι γνωστό ως δακτύλιο προστασίας. Το λειτουργικό σύστημα διαχειρίζεται έναν υπολογιστή’οι πόροι S, όπως ο χρόνος επεξεργασίας στη CPU και η πρόσβαση στη μνήμη. Οι υπολογιστές συχνά εκτελούν πολλαπλές διαδικασίες λογισμικού ταυτόχρονα και αυτές θα απαιτούν διαφορετικά επίπεδα πρόσβασης σε πόρους και υλικό.
Τα λειτουργικά συστήματα μπορούν να αναλυθούν σε μια σειρά από διακριτά στρώματα, το καθένα με τα δικά του προνόμια. Αυτό το σύστημα είναι γνωστό ως δακτύλιος προστασίας.
Τι είναι ένα δαχτυλίδι προστασίας?
Το λειτουργικό σύστημα διαχειρίζεται έναν υπολογιστή’οι πόροι S, όπως ο χρόνος επεξεργασίας στη CPU και η πρόσβαση στη μνήμη. Οι υπολογιστές συχνά εκτελούν πολλαπλές διαδικασίες λογισμικού ταυτόχρονα και αυτές θα απαιτούν διαφορετικά επίπεδα πρόσβασης σε πόρους και υλικό.
Οι διαδικασίες εκτελούνται σε στρώσεις “δαχτυλίδια”, όπου κάθε δακτύλιος έχει διαφορετικά δικαιώματα πρόσβασης σε πόρους. Ο κεντρικός δακτύλιος έχει τα υψηλότερα προνόμια και κάθε επόμενο στρώμα έχει μειωμένη πρόσβαση. Μια κοινή εφαρμογή ενός δακτυλίου προστασίας για τους επεξεργαστές X86 (ένας κοινός τύπος CPU) έχει τέσσερα δακτυλίους, αριθμημένα από 0 έως 3, όπως περιγράφεται παρακάτω.
Γιατί τα στρώματα?
Θέλω να κρατήσω
μάθηση?
Αυτό το περιεχόμενο έχει ληφθεί από
Το online μάθημα Raspberry Pi Foundation,
Κατανόηση συστημάτων υπολογιστών
Προβολή μαθημάτων
Το μοντέλο στρώματος προσφέρει δύο κύρια οφέλη. Πρώτον, προστατεύει από συντριβές του συστήματος. Τα σφάλματα σε υψηλότερους δακτυλίους (με λιγότερη πρόσβαση) μπορούν συνήθως να ανακτηθούν από. Αυτό οφείλεται στο γεγονός ότι μόνο ο δακτύλιος 0 έχει άμεση πρόσβαση στη μνήμη και CPU, οπότε αν μια διαδικασία που τρέχει στον εξωτερικό δακτύλιο συντρίβεται, μπορεί να επανεκκινηθεί χωρίς να χάσει δεδομένα ή να προκαλέσει σφάλμα στο CPU. Δεύτερον, προσφέρει αυξημένη ασφάλεια. Για να εκτελέσετε οδηγίες που απαιτούν περισσότερη πρόσβαση σε πόρους, η διαδικασία πρέπει να ζητήσει τα δικαιώματα από το λειτουργικό σύστημα. Το λειτουργικό σύστημα μπορεί στη συνέχεια να αποφασίσει εάν θα χορηγήσει το αίτημα ή θα το αρνηθεί. Αυτή η διαδικασία επιλογής βοηθά στην προστασία του συστήματός σας από ανεπιθύμητη ή κακόβουλη συμπεριφορά.
Τα μέρη του δακτυλίου προστασίας
Ring 0 (πιο προνομιούχα) και 3 (λιγότερο προνομιούχα)
Το Ring 0 είναι προσβάσιμο στο πυρήνας, που είναι ένα κεντρικό μέρος των περισσότερων λειτουργικών συστημάτων και μπορεί να έχει πρόσβαση σε όλα. Ο κωδικός που τρέχει εδώ λέγεται ότι τρέχει λειτουργία πυρήνα. Οι διαδικασίες που εκτελούνται σε λειτουργία πυρήνα μπορούν να επηρεάσουν ολόκληρο το σύστημα. Εάν κάτι αποτύχει εδώ, πιθανότατα θα οδηγήσει σε διακοπή λειτουργίας του συστήματος. Αυτός ο δακτύλιος έχει άμεση πρόσβαση στη CPU και στη μνήμη του συστήματος, οπότε οποιεσδήποτε οδηγίες που απαιτούν τη χρήση είτε θα εκτελεστούν εδώ.
Ο δακτύλιος 3, ο ελάχιστος προϋπολογισμένος δακτύλιος, είναι προσβάσιμος στις διαδικασίες χρήστη που εκτελούνται Λειτουργία χρήστη. Αυτό είναι όπου οι περισσότερες εφαρμογές που εκτελούνται στον υπολογιστή σας θα διαμένουν. Αυτός ο δακτύλιος δεν έχει άμεση πρόσβαση στη CPU ή τη μνήμη και, ως εκ τούτου.
Δαχτυλίδια 1 και 2
Τα δαχτυλίδια 1 και 2 έχουν ειδικά προνόμια που δακτυλογραφούν 3 (λειτουργία χρήστη) δεν το κάνει. Ο δακτύλιος 1 χρησιμοποιείται για την αλληλεπίδραση και το υλικό ελέγχου που είναι συνδεδεμένο με τον υπολογιστή σας. Η αναπαραγωγή ενός τραγουδιού μέσω ηχείων ή ακουστικών ή εμφανίζοντας βίντεο στην οθόνη σας, αποτελούν παραδείγματα οδηγιών που θα πρέπει να τρέξουν σε αυτό το δαχτυλίδι. Ο δακτύλιος 2 χρησιμοποιείται για οδηγίες που πρέπει να αλληλεπιδρούν με την αποθήκευση του συστήματος, τη φόρτωση ή την αποθήκευση αρχείων. Αυτά τα είδη δικαιωμάτων καλούνται εισαγωγή και παραγωγή, καθώς περιλαμβάνουν τη μετακίνηση δεδομένων μέσα ή έξω από τη μνήμη εργασίας (RAM). Η φόρτωση ενός εγγράφου λέξεων από την αποθήκευση, για παράδειγμα, θα ήταν στο Ring 2. Η προβολή και η επεξεργασία του εγγράφου θα πέσει στο Ring 3, το επίπεδο εφαρμογής.
Συζήτηση
- Σκεφτείτε μια διαδικασία που θα μπορούσε να εκτελεστεί στον υπολογιστή σας, όπως ένα πρόγραμμα αριθμομηχανής ή να παίξετε ένα παιχνίδι. Τι είδους οδηγίες θα συμμετείχαν και τι δαχτυλίδια θα χρησιμοποιούσαν?
- Τι νομίζετε ότι θα συμβεί εάν όλοι οι κώδικες έτρεχαν στο δαχτυλίδι 0?