Σχεδιάζεται η μεταφορά του μηχανισμού απομόνωσης δέσμευσης στο Linux

Πρόσφατα ο συγγραφέας της βιβλιοθήκης προτύπων Cosmopolitan C και η πλατφόρμα Redbean που ανακοινώθηκε μέσω α ανακοίνωσε, την εφαρμογή του μηχανισμού απομόνωσης pledge() για Linux.

Ήταν που αναπτύχθηκε αρχικά από το έργο OpenBSD y σας επιτρέπει να απαγορεύσετε επιλεκτικά ότι η οι εφαρμογές έχουν πρόσβαση σε αχρησιμοποίητες κλήσεις συστήματος (δημιουργείται ένα είδος λευκής λίστας κλήσεων συστήματος για την εφαρμογή και άλλες κλήσεις απαγορεύονται). Σε αντίθεση με τους μηχανισμούς ελέγχου πρόσβασης syscall που είναι διαθέσιμοι στο Linux, όπως το seccomp, ο μηχανισμός δέσμευσης έχει σχεδιαστεί από την αρχή ώστε να είναι όσο το δυνατόν πιο φιλικός προς τον χρήστη.

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

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

Για παράδειγμα, οι κλάσεις που προσφέρονται είναι stdio (είσοδος/έξοδος), rpath (αρχεία μόνο για ανάγνωση), wpath (εγγραφή αρχείων), cpath (δημιουργία αρχείων), tmppath (εργασία με προσωρινά αρχεία), inet (δίκτυο υποδοχών), unix (υποδοχές unix ), dns (ανάλυση DNS), getpw (πρόσβαση ανάγνωσης στη βάση δεδομένων χρηστών), ioctl (κλήση ioctl), proc (έλεγχος διαδικασίας), exec (διεργασίες εκκίνησης) και id (έλεγχος αδειών).

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

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

Το Pledge είναι σαν το απαγορευμένο φρούτο που όλοι επιθυμούμε όταν το αφεντικό λέει ότι πρέπει να χρησιμοποιήσουμε πράγματα όπως το Linux. Γιατί έχει σημασία αυτό; Είναι επειδή το pledge() κάνει πραγματικά κατανοητή την ασφάλεια. Το Linux δεν είχε ποτέ πραγματικά ένα επίπεδο ασφάλειας που να μπορούν να κατανοήσουν οι απλοί θνητοί.

Οι προγραμματιστές θύρας υπόσχεσης Linux πήραν το σύνθημα από το FreeBSD και αντί να κάνουν αλλαγές στον κώδικα, ετοίμασαν ένα πρόσθετο βοηθητικό πρόγραμμα από το pledge.com που σας επιτρέπει να εφαρμόζετε περιορισμούς χωρίς να αλλάξετε τον κωδικό της εφαρμογής. Για παράδειγμα, για να εκτελέσετε το βοηθητικό πρόγραμμα curl με πρόσβαση μόνο στις κλάσεις κλήσεων συστήματος stdio, rpath, inet και threadstdio, απλώς εκτελέστε το "./pledge.com -p 'stdio rpath inet thread' curl http://example.com » .

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

Υπήρξαν μερικοί προγραμματιστές στο παρελθόν που το έχουν δοκιμάσει. Δεν πρόκειται να αναφέρω ονόματα, γιατί τα περισσότερα από αυτά τα έργα δεν ολοκληρώθηκαν ποτέ. Όσον αφορά το SECOMP, τα διαδικτυακά σεμινάρια εξηγούν μόνο πώς να μπαίνουν στη λίστα επιτρεπόμενων κλήσεων συστήματος, έτσι οι περισσότεροι άνθρωποι χάνουν το ενδιαφέρον τους πριν καταλάβουν πώς να φιλτράρουν τα επιχειρήματα. Τα έργα που προχώρησαν είχαν επίσης παραλείψεις όπως η δυνατότητα αλλαγής των setuid/setgid/sticky bits. Επομένως, καμία από τις τρέχουσες εναλλακτικές δεν πρέπει να χρησιμοποιηθεί. Νομίζω ότι αυτή η προσπάθεια μας φέρνει πολύ πιο κοντά στο να έχουμε pledge() από ποτέ.

Η υλοποίηση δεν απαιτεί αλλαγές στον πυρήνα: οι περιορισμοί του βοηθητικού προγράμματος μεταφράζονται σε κανόνες SECCOMP BPF και υποβάλλονται σε επεξεργασία χρησιμοποιώντας τον εγγενή μηχανισμό απομόνωσης κλήσεων συστήματος του Linux. Για παράδειγμα, η κλήση της υπόσχεσης ("stdio rpath", 0) θα μετατραπεί σε φίλτρο BPF

Τέλος, εάν ενδιαφέρεστε να μάθετε περισσότερα σχετικά, μπορείτε να συμβουλευτείτε τις λεπτομέρειες Στον ακόλουθο σύνδεσμο.


Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

  1. Υπεύθυνος για τα δεδομένα: Miguel Ángel Gatón
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.