Software Sandboxing: Τα βασικά στοιχεία
Πρωτότυπος τίτλος: "Software sandboxing: The basics (2025)" (από mococa)
Το άρθρο εξετάζει τις θεμελιώδεις αρχές του sandboxing λογισμικού, προτείνοντας τη χρήση του μοντέλου Actor και των file descriptors ως «ικανότητες» (capabilities) για την απομόνωση διεργασιών. Αντί για παραδοσιακές μεθόδους που βασίζονται σε δικαιώματα υπερχρήστη, προκρίνεται η διακριτική απόρριψη προνομίων και ο περιορισμός της πρόσβασης σε πόρους μέσω προγραμματιστικών διεπαφών.
Η ανάγκη για σύγχρονο Sandboxing
Το sandboxing παραμένει ένα πεδίο με κατακερματισμένη γνώση, χωρίς έναν ενιαίο «χάρτη» για τους προγραμματιστές. Η παραδοσιακή προσέγγιση που βασίζεται στα δικαιώματα του συστήματος αρχείων (UNIX permissions) δεν επαρκεί για τις ανάγκες των σύγχρονων εφαρμογών, οι οποίες απαιτούν πιο λεπτομερή έλεγχο. Η σύγχρονη τάση απομακρύνεται από τη χρήση suid binaries και άλλων τεχνικών που απαιτούν δικαιώματα υπερχρήστη, προωθώντας την αρχή του ελάχιστου προνομίου.
Το Μοντέλο Actor και η Απομόνωση
Η χρήση του μοντέλου Actor επιτρέπει τον διαχωρισμό μιας εφαρμογής σε ανεξάρτητες διεργασίες που δεν μοιράζονται μνήμη. Στο πλαίσιο του Emilua, αυτό μεταφράζεται σε τρεις βασικές λειτουργίες: δημιουργία actor (spawn_vm), αποστολή μηνύματος (send) και λήψη μηνύματος (receive). Αυτή η προσέγγιση επιτρέπει την ασφαλή επικοινωνία μέσω UNIX domain sockets, όπου η μεταφορά file descriptors λειτουργεί ως μηχανισμός ανάθεσης δικαιωμάτων.
File Descriptors ως Capabilities
Στα συστήματα UNIX, οι έλεγχοι πρόσβασης πραγματοποιούνται κατά τη δημιουργία ενός file descriptor και όχι κατά τη χρήση του. Αυτή η ιδιαιτερότητα επιτρέπει τη χρήση τους ως «ικανότητες» (capabilities). Εφόσον μια διεργασία δεν έχει πρόσβαση σε ονόματα πόρων (π.χ. διαδρομές αρχείων), η μόνη της οδός για αλληλεπίδραση είναι μέσω των file descriptors που της έχουν παραχωρηθεί ρητά. Είναι κρίσιμο, ωστόσο, να αποφεύγονται τα ioctls, καθώς αποτελούν συχνά πηγή αστοχιών ασφαλείας.
Η προσέγγιση του Capsicum
Το FreeBSD Capsicum αποτελεί το χρυσό πρότυπο για την υλοποίηση αυτών των εννοιών. Μέσω της συνάρτησης cap_enter, μια διεργασία μπορεί να απενεργοποιήσει πλήρως την «περιβάλλουσα εξουσία» (ambient authority). Μετά την κλήση αυτή, η διεργασία δεν μπορεί να ανοίξει νέα αρχεία ή να συνδεθεί σε δίκτυα, παρά μόνο να χρησιμοποιήσει τους πόρους που της έχουν ήδη παραχωρηθεί, καθιστώντας το sandboxing μια εγγενή ιδιότητα της εκτέλεσης του κώδικα.