Προγραμματισμός

Η αρχιτεκτονική ασφαλείας της Java

Η στήλη "Under The Hood" αυτού του μήνα είναι η πρώτη σειρά τεσσάρων μερών σχετικά με το μοντέλο ασφαλείας της Java. Τα τέσσερα άρθρα θα επικεντρωθούν στην υποδομή ασφαλείας ενσωματωμένη στην εικονική μηχανή Java (JVM) και στη βιβλιοθήκη java.lang. Αυτό το πρώτο άρθρο παρέχει μια επισκόπηση του μοντέλου ασφαλείας και περιγράφει τα χαρακτηριστικά ασφαλείας της JVM.

Γιατί ασφάλεια;

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

Το μοντέλο ασφαλείας της Java επικεντρώνεται στην προστασία των χρηστών από εχθρικά προγράμματα που λαμβάνονται από μη αξιόπιστες πηγές σε ένα δίκτυο. Για την επίτευξη αυτού του στόχου, η Java παρέχει ένα προσαρμόσιμο "sandbox" στο οποίο εκτελούνται τα προγράμματα Java. Ένα πρόγραμμα Java πρέπει να παίζει μόνο μέσα στο περιβάλλον δοκιμών του. Μπορεί να κάνει οτιδήποτε εντός των ορίων του sandbox του, αλλά δεν μπορεί να κάνει καμία ενέργεια εκτός αυτών των ορίων. Το sandbox για μη αξιόπιστες μικροεφαρμογές Java, για παράδειγμα, απαγορεύει πολλές δραστηριότητες, όπως:

  • Ανάγνωση ή εγγραφή στον τοπικό δίσκο
  • Πραγματοποίηση σύνδεσης δικτύου με οποιονδήποτε κεντρικό υπολογιστή, εκτός από τον κεντρικό υπολογιστή από τον οποίο προήλθε η μικροεφαρμογή
  • Δημιουργία νέας διαδικασίας
  • Φόρτωση μιας νέας δυναμικής βιβλιοθήκης και απευθείας κλήση μιας εγγενούς μεθόδου

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

Το sandbox ορίστηκε

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

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

Το sandbox είναι διάχυτο

Εάν έχετε ένα σωστά σκεπτικιστικό μυαλό, θα πρέπει να είστε πεπεισμένοι ότι ένα sandbox δεν έχει διαρροές προτού το εμπιστευτείτε για να σας προστατεύσει. Για να βεβαιωθείτε ότι το sandbox δεν έχει διαρροές, το μοντέλο ασφαλείας της Java περιλαμβάνει κάθε πτυχή της αρχιτεκτονικής του. Εάν υπήρχαν περιοχές στην αρχιτεκτονική της Java στις οποίες η ασφάλεια ήταν αδύναμη, ένας κακόβουλος προγραμματιστής ("cracker") θα μπορούσε ενδεχομένως να εκμεταλλευτεί αυτές τις περιοχές για να "περιπλανηθούν" στο sandbox. Για να κατανοήσετε το sandbox, επομένως, πρέπει να εξετάσετε διάφορα μέρη της αρχιτεκτονικής της Java και να κατανοήσετε πώς λειτουργούν μαζί.

Τα θεμελιώδη στοιχεία που είναι υπεύθυνα για το sandbox της Java είναι:

  • Χαρακτηριστικά ασφαλείας ενσωματωμένα στην εικονική μηχανή Java (και στη γλώσσα)
  • Η αρχιτεκτονική του φορτωτή κατηγορίας
  • Ο επαληθευτής αρχείων τάξης
  • Ο διαχειριστής ασφαλείας και το Java API