17.4 Κατανοώντας τους Χαρακτηρισμούς MAC

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

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

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

Για παράδειγμα, θέτοντας τον χαρακτηρισμό biba/low σε ένα αρχείο αυτός αντιπροσωπεύει έναν χαρακτηρισμό που διατηρείται από το άρθρωμα πολιτικής ασφάλειας Biba με την τιμή «low».

Μερικά αρθρώματα πολιτικής που υποστηρίζουν την δυνατότητα χαρακτηρισμού του FreeBSD προσφέρουν εξ'ορισμού τρία συγκεκριμένα είδη χαρακτηρισμού. Αυτοί είναι οι low, high και equal. Αν και επιβάλλουν τον έλεγχο πρόσβασης με διαφορετικό τρόπο σε κάθε άρθρωμα πολιτικής, μπορείτε να είστε σίγουροι ότι ο χαρακτηρισμός low θα είναι η χαμηλότερη ρύθμιση, ο χαρακτηρισμός equal θα ρυθμίσει το υποκείμενο ή αντικείμενο ώστε να είναι απενεργοποιημένο ή ανεπηρέαστο και ο χαρακτηρισμός high θα επιβάλει την υψηλότερη ρύθμιση που είναι διαθέσιμη στα αρθρώματα πολιτικής Biba και MLS.

Σε περιβάλλοντα συστημάτων αρχείων μοναδικού χαρακτηρισμού μόνο ενός είδους χαρακτηρισμός μπορεί να χρησιμοποιείται στα αντικειενα. Έτσι θα επιβάλλεται ένα σύνολο αδειών πρόσβασης σε ολόκληρο το σύστημα και για πολλά περιβάλλοντα αυτό ίσως είναι αρκετό. Υπάρχουν ορισμένες περιπτώσεις που πολλαπλοί χαρακτηρισμοί μπορούν να τεθούν σε αντικείμενα ή υποκείμενα του συστήματος αρχείων. Για αυτές τις περιπτώσεις η ρύθμιση multilabel μπορεί να περαστεί στο tunefs(8).

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

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

Περίμενε, αυτό μοιάζει με το DAC! Νόμιζα ότι το MAC έδινε τον έλεγχο αυστηρά στον διαχειριστή. Το παραπάνω εξακολουθεί να ισχύει σε κάποιο βαθμό αφού o χρήστης root είναι αυτός που έχει τον έλεγχο και που ρυθμίζει τις πολιτικές ώστε οι χρήστες να τοποθετούνται στις κατάλληλες κατηγορίες/επίπεδα πρόσβασης. Δυστυχώς πολλά αρθρώματα πολιτικής μπορούν να περιορίσουν επίσης τον χρήστη root. Ο βασικός έλεγχος πάνω στα αντικείμενα λοιπόν θα απελευθερωθεί στην ομάδα, αλλά ο χρήστης root μπορεί να ανακαλέσει ή τροποποιήσει τις ρυθμίσεις σε οποιαδήποτε περίπτωση. Αυτό είναι το μοντέλο ιεραρχικής εξουσιοδότησης που καλύπτουν οι πολιτικές όπως το Biba και το MLS.

17.4.1 Η Ρύθμιση των Χαρακτηρισμών

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

Όλες οι ρυθμίσεις μπορούν να γίνουν χρησιμοποιώντας τα βοηθητικά προγράμματα setfmac(8) και setpmac(8). Οι εντολή setfmac χρησιμοποιείται για να τεθούν χαρακτηρισμοί MAC σε αντικείμενα του συστήματος ενώ οι εντολή setpmac χρησιμοποιείται για να τεθούν χαρακτηρισμοί σε υποκείμενα του συστήματος. Παρακολουθήστε:

# setfmac biba/high test

Εάν δεν προκύψουν σφάλματα από την παραπάνω εντολή, θα εμφανίσει ξανά η προτροπή του κελύφους. Οι μόνες φορές που αυτές οι εντολές θα θορυβήσουν είναι όταν συμβεί κάποιο σφάλμα· παρόμοια δηλαδή με τις εντολές chmod(1) και chown(8). Σε κάποιες περιπτώσεις το σφάλμα θα είναι ένα Permission Denied και συνήθως θα ληφθεί όταν τίθεται ή τροποποιείται ένας χαρακτηρισμός σε ένα αντικείμενο που είναι περιορισμένης πρόσβασης.[1] Ο διαχειριστής του συστήματος μπορεί να χρησιμοποιήσει τις ακόλουθες εντολές για να υπερβεί αυτούς τους περιορισμούς:

# setfmac biba/high test
Permission denied
# setpmac biba/low setfmac biba/high test
# getfmac test
test: biba/high

Όπως είδαμε παραπάνω, η setpmac μπορεί να χρησιμοποιήθεί για να παραμεριστούν οι ρυθμίσεις του αρθρώματος πολιτικής θέτοντας έναν διαφορετικό χαρακτηρισμό στη καλούμενη διεργασία. Η εντολή getpmac χρησιμοποιείται συνήθως με διεργασίες που ήδη τρέχουν, π.χ. sendmail: αν και αντί μιας νέας εντολής δέχεται ένα αναγνωριστικό μιας ήδη υπάρχουσας διεργασίας η λογική είναι παρόμοια. Εάν χρήστες επιχειρήσυον να τροποποιήσουν ένα αρχείο στο οποίο δεν έχουν πρόσβαση, βάση των κανόνων των φορτωμένων αρθρωμάτων πολιτικής, ο σφάλμα Operation not permitted θα εμφανιστεί από τη συνάρτηση mac_set_link.

17.4.1.1 Συνήθεις Τύποι Χαρακτηρισμών

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

  • Ο χαρακτηρισμός low θεωρείται η χαμηλότερη ρύθμιση που μπορεί να έχει ένα αντικείμενο ή ένα υποκείμενο. Θέτοντας τον σε αντικείμενα ή υποκείμενα θα εμποδίσει την προβαση τους σε αντικείμενα ή υποκείμενα που έχουν υψηλό χαρακτηρισμό.

  • Ο χαρακτηρισμός equal θα πρέπει να τίθεται μόνο σε αντικείμενα που θεωρούνται ότι εξαιρούνται από την πολιτική.

  • Ο χαρακτηρισμός high απονέμει σε ένα αντικείμενο ή υποκείμενο την υψηλότερη δυνατή ρύθμιση.

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

17.4.1.1.1 Advanced Label Configuration

Numeric grade labels are used for comparison:compartment+compartment; thus the following:

biba/10:2+3+6(5:2+3-20:2+3+4+5+6)

May be interpreted as:

«Biba Policy Label»/«Grade 10» :«Compartments 2, 3 and 6»: («grade 5 ...»)

In this example, the first grade would be considered the «effective grade» with «effective compartments», the second grade is the low grade and the last one is the high grade. In most configurations these settings will not be used; indeed, they offered for more advanced configurations.

When applied to system objects, they will only have a current grade/compartments as opposed to system subjects as they reflect the range of available rights in the system, and network interfaces, where they are used for access control.

The grade and compartments in a subject and object pair are used to construct a relationship referred to as «dominance», in which a subject dominates an object, the object dominates the subject, neither dominates the other, or both dominate each other. The «both dominate» case occurs when the two labels are equal. Due to the information flow nature of Biba, you have rights to a set of compartments, «need to know», that might correspond to projects, but objects also have a set of compartments. Users may have to subset their rights using su or setpmac in order to access objects in a compartment from which they are not restricted.

17.4.1.2 Users and Label Settings

Users themselves are required to have labels so that their files and processes may properly interact with the security policy defined on the system. This is configured through the login.conf file by use of login classes. Every policy module that uses labels will implement the user class setting.

An example entry containing every policy module setting is displayed below:

default:\
	:copyright=/etc/COPYRIGHT:\
	:welcome=/etc/motd:\
	:setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\
	:path=~/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:\
	:manpath=/usr/share/man /usr/local/man:\
	:nologin=/usr/sbin/nologin:\
	:cputime=1h30m:\
	:datasize=8M:\
	:vmemoryuse=100M:\
	:stacksize=2M:\
	:memorylocked=4M:\
	:memoryuse=8M:\
	:filesize=8M:\
	:coredumpsize=8M:\
	:openfiles=24:\
	:maxproc=32:\
	:priority=0:\
	:requirehome:\
	:passwordtime=91d:\
	:umask=022:\
	:ignoretime@:\
	:label=partition/13,mls/5,biba/10(5-15),lomac/10[2]:

The label option is used to set the user class default label which will be enforced by MAC. Users will never be permitted to modify this value, thus it can be considered not optional in the user case. In a real configuration, however, the administrator will never wish to enable every policy module. It is recommended that the rest of this chapter be reviewed before any of this configuration is implemented.

Σημείωση: Users may change their label after the initial login; however, this change is subject constraints of the policy. The example above tells the Biba policy that a process's minimum integrity is 5, its maximum is 15, but the default effective label is 10. The process will run at 10 until it chooses to change label, perhaps due to the user using the setpmac command, which will be constrained by Biba to the range set at login.

In all cases, after a change to login.conf, the login class capability database must be rebuilt using cap_mkdb and this will be reflected throughout every forthcoming example or discussion.

It is useful to note that many sites may have a particularly large number of users requiring several different user classes. In depth planning is required as this may get extremely difficult to manage.

Future versions of FreeBSD will include a new way to deal with mapping users to labels; however, this will not be available until some time after FreeBSD 5.3.

17.4.1.3 Network Interfaces and Label Settings

Labels may also be set on network interfaces to help control the flow of data across the network. In all cases they function in the same way the policies function with respect to objects. Users at high settings in biba, for example, will not be permitted to access network interfaces with a label of low.

The maclabel may be passed to ifconfig when setting the MAC label on network interfaces. For example:

# ifconfig bge0 maclabel biba/equal

will set the MAC label of biba/equal on the bge(4) interface. When using a setting similar to biba/high(low-high) the entire label should be quoted; otherwise an error will be returned.

Each policy module which supports labeling has a tunable which may be used to disable the MAC label on network interfaces. Setting the label to equal will have a similar effect. Review the output from sysctl, the policy manual pages, or even the information found later in this chapter for those tunables.

17.4.2 Singlelabel or Multilabel?

By default the system will use the singlelabel option. But what does this mean to the administrator? There are several differences which, in their own right, offer pros and cons to the flexibility in the systems security model.

The singlelabel only permits for one label, for instance biba/high to be used for each subject or object. It provides for lower administration overhead but decreases the flexibility of policies which support labeling. Many administrators may want to use the multilabel option in their security policy.

The multilabel option will permit each subject or object to have its own independent MAC label in place of the standard singlelabel option which will allow only one label throughout the partition. The multilabel and single label options are only required for the policies which implement the labeling feature, including the Biba, Lomac, MLS and SEBSD policies.

In many cases, the multilabel may not need to be set at all. Consider the following situation and security model:

If any of the non-labeling policies are to be used, then the multilabel option would never be required. These include the seeotheruids, portacl and partition policies.

It should also be noted that using multilabel with a partition and establishing a security model based on multilabel functionality could open the doors for higher administrative overhead as everything in the file system would have a label. This includes directories, files, and even device nodes.

The following command will set multilabel on the file systems to have multiple labels. This may only be done in single user mode:

# tunefs -l enable /

This is not a requirement for the swap file system.

Σημείωση: Some users have experienced problems with setting the multilabel flag on the root partition. If this is the case, please review the Τμήμα 17.17 of this chapter.

Σημειώσεις

[1]

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

Αυτό το κείμενο, και άλλα κείμενα, μπορεί να βρεθεί στο ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Για ερωτήσεις σχετικά με το FreeBSD, διαβάστε την τεκμηρίωση πριν να επικοινωνήσετε με την <questions@FreeBSD.org>.
Για ερωτήσεις σχετικά με αυτή την τεκμηρίωση, στείλτε e-mail στην <doc@FreeBSD.org>.