Κεντρική Σελίδα | Κεφάλαιο 1 | Κεφάλαιο 2 | Κεφάλαιο 3 | Κεφάλαιο 4 | Κεφάλαιο 5 | Κεφάλαιο 6


6.1 Ασφάλεια στο UNIX

6.1.1 Ιστορία της Ασφάλειας του Unix

Όταν μιλάμε για την ασφάλεια του Unix θα πρέπει να έχουμε λάβει υπόψη μας ότι το Unix δεν είχε σχεδιαστεί από την αρχή να είναι ασφαλές. Σχεδιάστηκε έτσι ώστε να έχει τα απαραίτητα χαρακτηριστικά που να το κάνουν λειτουργικό.

Το Unix είναι ένα πολυ-χρηστικό (multi-user) και πολυ-διεργασιακό (multi-tasking) λειτουργικό σύστημα. Πολυ-χρηστικό σημαίνει ότι το λειτουργικό σύστημα επιτρέπει σε πολλούς διαφορετικούς χρήστες να χρησιμοποιούν το ίδιο υπολογιστικό σύστημα την ίδια στιγμή. Πολυ-διεργασιακό σημαίνει ότι ο κάθε ένας από αυτούς τους χρήστες μπορεί να τρέχει ταυτόχρονα πολλά διαφορετικά προγράμματα.

Μία από τις πιο κοινές διεργασίες τέτοιων λειτουργικών συστημάτων είναι η αποτροπή των παρεμβολών μεταξύ των διαφόρων χρηστών. Χωρίς μία τέτοιου είδους προστασία κάποιος χρήστης θα μπορούσε να επηρεάσει τον τρόπο λειτουργίας προγραμμάτων άλλων χρηστών με αποτέλεσμα το σβήσιμο αρχείων ή χειρότερα το "ρίξιμο" (crush-halt) της μηχανής. Για την αποφυγή τέτοιων καταστροφών το Unix είχε πάντα ενσωματωμένη κάποια μορφή ασφάλειας στη φιλοσοφία σχεδίασής του.

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

6.1.2 Χρήστες και Passwords

Κάθε άτομο που χρησιμοποιεί ένα Unix σύστημα πρέπει απαραίτητα να έχει λογαριασμό (account) σε αυτό το σύστημα. Οι λογαριασμοί αναγνωρίζονται από ένα μοναδικό όνομα-χρήστη (username). Παραδοσιακά κάθε λογαριασμός έχει επιπλέον ένα μυστικό κωδικό (password) που σχετίζεται άμεσα με αυτόν και αποτρέπει την παράνομη χρήση του. Ένας χρήστης πρέπει να γνωρίζει απαραίτητα τόσο το username όσο και το password του για να αποκτήσει πρόσβαση στο Unix σύστημα.

Το username είναι ένα στοιχείο με το οποίο το σύστημα παίρνει την ταυτότητά μας ενώ το password είναι το αποδεικτικό στοιχείο αυτής. Τα κανονικά usernames έχουν από έναν έως και οκτώ χαρακτήρες. Σε έναν υπολογιστή που έχει για λειτουργικό το Unix τα usernames διαφορετικών χρηστών πρέπει να είναι διαφορετικά ενώ τα passwords, τα οποία επίσης αποτελούνται από έναν έως οκτώ χαρακτήρες, αν και πρέπει να είναι διαφορετικά μπορεί και να είναι ίδια κάτι που σημαίνει ωστόσο ότι και οι δύο χρήστες που έχουν τον ίδιο κωδικό έχουν κάνει λάθος και μάλιστα το ίδιο, στην επιλογή του.

Όταν ένας χρήστης θελήσει να μπει σε ένα σύστημα, αυτό του ζητάει το username και το password του. Το Unix χρησιμοποιεί το αρχείο /etc/passwd όπου κρατάει στοιχεία για κάθε χρήστη που υπάρχει στο σύστημα. Το /etc/passwd περιέχει το username, το πραγματικό όνομα, πληροφορίες αναγνώρισης όπως επίσης και βασικές πληροφορίες για το λογαριασμό του κάθε χρήστη. Τα πεδία που υπάρχουν σε κάθε γραμμή του αρχείου αυτού είναι το username, το κρυπτογραφημένο password του χρήστη, ο προσωπικός αριθμός αναγνώρισής του (UID), το group στο οποίο ανήκει ο χρήστης (GID), το πραγματικό όνομα του χρήστη, το home directory του και το shell του. Για παράδειγμα:

poco:dfgjfdhg/?hhg:156:100:Pole Cosis:/home3/popos:/bin/csh

Τα passwords αναπαρίστανται συνήθως με ένα ειδικό κρυπτογραφημένο format και μπορεί ακόμα και να μην είναι αποθηκευμένα σε αυτό το αρχείο αλλά σε ένα άλλο που λέγεται shadow και είναι ορατό μόνο από τον υπερ-χρήστη (superuser ή root).

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

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

6.1.3 "Καλοί" και "Κακοί" Κωδικοί

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

Καλά passwords είναι αυτά που είναι δύσκολο να μαντέψει κανείς. Η συνταγή για την επιλογή ενός καλού κωδικού είναι :

Κακά passwords είναι εκείνα που αποτελούνται από:

6.1.4 Το Σύστημα Αρχείων του Unix (UNIX Filesystem)

To filesystem του Unix είναι αυτό που ελέγχει τον τρόπο με τον οποίο η πληροφορία που βρίσκεται σε αρχεία (files)και καταλόγους (directories) αποθηκεύεται στο σκληρό δίσκο και σε άλλες δευτερεύουσες μονάδες αποθήκευσης. Ελέγχει επιπλέον ποιοι χρήστες έχουν πρόσβαση, σε ποια αντικείμενα και πώς. Για αυτούς τους λόγους το σύστημα αρχείων είναι ένα από τα πιο σημαντικά εργαλεία στην υλοποίηση της ασφάλειας του Unix.

Αρχεία

Κάθε τι στο Unix αναπαρίσταται και εκπροσωπείται από κάποιο αρχείο είτε είναι κάποιο απλό αρχείο κειμένου είτε είναι κάποια συσκευή, διαδικασία ή δικτυακή σύνδεση.

Κατάλογοι

Οι κατάλογοι είναι ειδικά αρχεία του συστήματος αρχείων. Ο κατάλογος δεν είναι τίποτα περισσότερο από μια απλή λίστα ονομάτων και inode αριθμών (inode:για κάθε αντικείμενο του συστήματος αρχείων το Unix αποθηκεύει διαχειριστική πληροφορία στη δομή αυτή που υπάρχει στον δίσκο και δεν έχει όνομα αλλά μόνο αριθμό). Κάθε φυσιολογικός κατάλογος έχει πάντα δύο αρχεία. Το πρώτο είναι το ". " το οποίο σχετίζεται με το inode του ίδιου του καταλόγου και το ". . " το οποίο σχετίζεται με τον αμέσως πιο πάνω κατάλογο στη δομή των καταλόγων.

Ασφάλεια - Άδειες Χρήσης Αρχείων, Καταλόγων (File & Directory Permissions)

H ασφάλεια αρχείων μας δίνει τη δυνατότητα να καθορίσουμε τι ακριβώς επιτρέπεται να κάνει κάποιος με τα αρχεία μας, δηλαδή αν μπορεί να τα διαβάσει, να τα αντιγράψει, να τα σβήσει ακόμα και να τα εκτελέσει. Αναλυτικά έχουμε τις τρεις παρακάτω επιλογές : read (r), write (w), execute (x).

Χαρακτήρας

Άδεια

Εξήγηση

r

Read—Διάβασμα

Μπορούμε να ανοίξουμε ένα αρχείο και να δούμε τα περιεχόμενά του

w

Write—Γράψιμο

Μπορούμε να αντιγράψουμε, να σβήσουμε ή να αλλάξουμε τα περιεχόμενα του αρχείου

x

Execute—Εκτέλεση

Εάν το αρχείο είναι εκτελέσιμο τότε μπορούμε να το εκτελέσουμε πληκτρολογώντας το όνομά του

O αντίστοιχος πίνακας για τους καταλόγους είναι:

Περιεχόμενα

Άδεια

Εξήγηση

r

Read—Διάβασμα

Μπορούμε να δούμε ποια αρχεία βρίσκονται στον κατάλογο

w

Write—Γράψιμο

Μπορούμε να προσθέσουμε, να αφαιρέσουμε και να αλλάξουμε όνομα σε αρχεία του καταλόγου

x

Execute—Εκτέλεση

Μπορούμε να δούμε τους ιδιοκτήτες, τα μήκη και άλλα στοιχεία σχετικά με τα αρχεία που υπάρχουν σε ένα κατάλογο ή να πάμε σε αυτόν τον κατάλογο και να ανοίξουμε κάποια αρχεία σε αυτόν

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

6.1.5 Λίστες Ελέγχου Πρόσβασης (Access Control Lists - ACLs)

Μερικές εκδόσεις του Unix υποστηρίζουν τις λίστες ελέγχου πρόσβασης ή ACLs. Αυτές παρέχονται συνήθως ως επέκταση των κανονικών αδειών χρήσης αρχείων που υπάρχουν στο Unix. Με τις ACLs μπορούμε να καθορίσουμε επιπλέον χαρακτηριστικά και δικαιώματα πρόσβασης για κάθε αρχείο και κατάλογο για πολλούς ξεχωριστούς χρήστες και επίσης να προσδώσουμε διαφορετικές άδειες σε μέλη διαφορετικών group. Αποτελούν ένα πολύ δυνατό χαρακτηριστικό του συστήματος και παρέχονται από τις εκδόσεις AIX και HP-UX του Unix ενώ υπάρχει πρόβλεψη να συμπεριληφθούν και σε μελλοντικές εκδόσεις των Solaris και Linux.

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

6.1.5 Περαιτέρω Πληροφορίες

Στο βιβλίο "Practical Unix & Internet Security" του Garfinkel & Spafford (O' REILLYTM) υπάρχουν επίπροσθετες λετπομέρειες για την ασφάλεια στο UNIX και γενικότερα.


6.2 Ασφάλεια στο World Wide Web

6.2.1 Εισαγωγή

Το World Wide Web είναι ένα σύστημα ανταλλαγής πληροφοριών μέσα από το Internet. Είναι κατασκευασμένο από ειδικά προγράμματα που καλούνται Web servers, που διαχειρίζονται και διανέμουν τις πληροφορίες στο Διαδίκτυο, και από τους Web browsers που βοηθούν τους χρήστες να αποκτούν πρόσβαση στις πληροφορίες που είναι αποθηκευμένες στους Web servers και να τις προβάλουν στην οθόνη του χρήστη.

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

Άλλη μία χρήση του Web περιλαμβάνει την ενσωμάτωση προγραμμάτων στις ηλεκτρονικές σελίδες του. Τα προγράμματα αυτά δημιουργούνται με το πρωτόκολλο Common Gateway Interface (CGI). Τα CGI scripts μπορούν να είναι εξαιρετικά απλά, όπως για παράδειγμα ένας μετρητής που αυξάνει κάθε φορά που κάποιος επισκέπτεται την σελίδα ή μπορούν να είναι και αρκετά πολύπλοκα, όπως για παράδειγμα η αγορά προϊόντων και η χρηματικές συναλλαγές μέσα από το Web.

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

Όπως καταλαβαίνουμε, το World Wide Web είναι μια από της πιο χρησιμοποιούμενες και διασκεδαστικές εφαρμογές του Internet. Παρ' όλα αυτά, θέτει σημαντικά προβλήματα ασφαλείας, τα οποία παραθέτονται παρακάτω:

  1. Ένας εισβολέας μπορεί να εκμεταλλευτεί ατέλειες (bugs) του Web server ή των CGI scripts για να αποκτήσει μη εγκεκριμένη πρόσβαση σε αρχεία του server ή ακόμα να αποκτήσει το έλεγχο ολόκληρου του υπολογιστή.
  2. Εμπιστευτικές πληροφορίες που βρίσκονται αποθηκευμένες στον Web server μπορεί να διανεμηθούν σε μη εγκεκριμένα άτομα.
  3. Εμπιστευτικές πληροφορίες που ανταλλάσσονται μεταξύ του Web server και του browser μπορεί να υποπέσουν σε υποκλοπή.
  4. Ατέλειες του Web browser μπορούν να επιτρέψουν σε ένα ανέντιμο Web server να αποκτήσει απόρρητες πληροφορίες από τον Web client.
  5. Λόγω της ύπαρξης πατενταρισμένων τεχνολογιών, πολλοί οργανισμοί αγοράζουν λογισμικό με ειδικές άδειες, γεγονός που δημιουργεί εκ νέου προβλήματα.

Καθένα από τα παραπάνω απαιτεί ιδιαίτερη αντιμετώπιση. Δυστυχώς, κάποιες από τις λύσεις που εφαρμόζονται είναι αλληλοσυγκρουόμενες. Για παράδειγμα, για ελαχιστοποιηθεί ο κίνδυνος της παρακολούθησης της επικοινωνίας πολλοί οργανισμοί αγοράζουν ασφαλής Web servers, που βασίζονται σε πληθώρα κρυπτογραφικών πρωτοκόλλων. Αλλά τέτοιοι Web servers απαιτούν ψηφιακά υπογεγραμμένα πιστοποιητικά για να λειτουργήσουν και τα πιστοποιητικά αυτά πρέπει να ανανεώνονται τακτικά. Συνεπώς, τέτοιοι οργανισμοί είναι ευάλωτοι σε επιθέσεις denial of service.

6.2.2 Λειτουργώντας έναν Ασφαλή Web Server

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

Δεν υπάρχει λογισμικό που να μην περικλείει κινδύνους η χρήση του. Οι Web servers είναι από την φύση τους πολύ πολύπλοκα και εξειδικευμένα προγράμματα. Εξάλλου, πολλοί οργανισμοί χρησιμοποιούν Web servers των οποίων ο πηγαίος κώδικας είναι ελεύθερα διαθέσιμος στο Internet. Μολονότι αυτό επιτρέπει την εξερεύνηση και επιθεώρηση του προγράμματος, δίνει την δυνατότητα σε κάποιο που έχει τις απαραίτητες γνώσεις να ανακαλύψει ατέλειες που κάνουν ευάλωτο τον Web server.

Η ικανότητα των Web server να ενσωματώνουν CGI scripts περιπλέκει σημαντικά την εφαρμογή της ασφάλειας. Τα CGI scripts προσθέτουν νέα χαρακτηριστικά και δυνατότητες σε έναν Web server, όμως το τίμημα είναι η παρουσίαση νέων προβλήματα ασφαλείας. Για παράδειγμα, ένας Web server μπορεί να έχει ρυθμιστεί έτσι ώστε να έχει πρόσβαση σε αρχεία ενός συγκεκριμένού καταλόγου, αλλά ένας χρήστης να εγκαταστήσει ηθελημένα ή όχι ένα CGI script που να επιτρέπει την ανάγνωση κάθε αρχείου στον υπολογιστή. Οι περισσότεροι χρήστες δεν έχουν εμπειρία στην σύνταξη ασφαλών CGI scripts και συνεπώς υπάρχει ισχυρή πιθανότητα να περιέχουν αδυναμίες δίνοντας το ελεύθερο σε εισβολείς να εκτελέσουν οποιαδήποτε εντολή στο σύστημα του Web server

Στο εμπόριο και στο Διαδίκτυο υπάρχουν πολλά λειτουργικά συστήματα. Μερικά από αυτά είναι πιο ασφαλή να χρησιμοποιηθούν σαν πλατφόρμες για Web servers από άλλα. Εξαιτίας της πληθώρας των γλωσσών προγραμματισμού, της πλούσιας ποικιλίας εργαλείων και την ικανότητα σύνδεσης πολλών χρηστών την ίδια στιγμή, από οποιοδήποτε απομακρυσμένο σημείο του Διαδικτύου, το λειτουργικό σύστημα UNIX είναι άσχημη επιλογή για τέτοιο σκοπό. Η εμπειρία έχει δείξει ότι το πιο σίγουρο σύστημα για Web server είναι ένας υπολογιστής που τρέχει μόνο τον Web server και καμία άλλη εφαρμογή, δεν υποστηρίζει τις απομακρυσμένες συνδέσεις και δεν έχει έτοιμη για χρήση scripting language. Με αυτό το σκεπτικό συστήματα όπως τα MS-WINDOWS και τα MACINTOSH είναι πιο κατάλληλα, αλλά δεν πρέπει να ξεχνάμε πόσο λίγα εργαλεία και ευκολίες προσφέρουν. Επιπλέον, το UNIX είναι πιο γρήγορο λειτουργικό από το MacOS και είναι διαθέσιμο για πλατφόρμες που είναι επίσης πιο γρήγορες από MS-WINDOWS υπολογιστές. Τέλος, πάντα πρέπει να έχουμε υπόψη μας το προσωπικό που είναι υπεύθυνο για τον server και το λογισμικό. Ένα UNIX σύστημα που διαχειρίζεται ένας έμπειρος θα είναι πιο ασφαλές από ένα MS-WINDOWS σύστημα που διαχειρίζεται ένας αρχάριος.

Για την κατασκευή ενός ασφαλούς Web server σε οποιαδήποτε πλατφόρμα, τα εξής θέματα πρέπει να ληφθούν υπόψη:

Παρακάτω θα μελετήσουμε μερικές τεχνικές για την επιτυχημένη αντιμετώπιση αυτών των θεμάτων. Για ευκολότερη κατανόηση, θα αναφερθούμε σε παραδείγματα από τον Apache Web Server.

Το UID του Server

Οι περισσότεροι Web servers είναι σχεδιασμένοι για να ξεκινούν από τον superuser (root). Αυτό είναι αναγκαίο για να μπορεί ο server να χρησιμοποιεί την πόρτα 80 για τις εισερχόμενες αιτήσεις εξυπηρέτησης, την τυποποιημένη HTTP πόρτα, και να μπορεί να γράφει στα log αρχεία. Έπειτα περιμένει για εισερχόμενες αιτήσεις και μόλις παραλάβει μία, τότε δημιουργεί μία θυγατρική διεργασία που θα αναλάβει την αίτηση, ενώ η γονική διεργασία επιστρέφει στην παρακολούθηση της πόρτας 80. Η θυγατρική διεργασία αλλάζει το UID της στο όνομα χρήστη που καθορίζεται σε ρυθμιστικό αρχείο. Όλες οι ενέργειες που εκτελούνται προς απάντηση της αίτησης, όπως η εκτέλεση CGI scripts, πραγματοποιούνται κάτω από την δικαιοδοσία του απλού χρήστη που ορίζεται στο ρυθμιστικό αρχείο.

Το όνομα χρήστη κάτω από το οποίο τρέχουν οι θυγατρικές διεργασίες δεν πρέπει να είναι αυτό του root, γιατί έτσι δημιουργείται μεγάλη τρύπα ασφαλείας. Για παράδειγμα κάθε CGI script που εκτελείται από την θυγατρική διεργασία με root UID έχει απεριόριστη πρόσβαση στο σύστημα αρχείων του server. Αντίθετα θα πρέπει να χρησιμοποιείται όνομα χρήστη που δεν έχει ιδιαίτερες δυνατότητες όσο αναφορά την διαχείριση του server.

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

  1. Ο server δεν θα μπορεί να ανοίγει την πόρτα 80. Θα πρέπει να χρησιμοποιεί άλλη πόρτα όπως η 8000 ή η 8080.
  2. Τα ρυθμιστικά αρχεία της συμπεριφοράς τους server (τα οποία διαβάζει ο server κάθε φορά που ξεκινά) θα πρέπει να είναι αναγνώσιμα από τον UID κάτω από το οποίο τρέχει ο server. Επίσης οι άδειες προσπέλασης των log αρχείων θα πρέπει να τροποποιηθούν ώστε ο χρήστης κάτω από τον οποίο τρέχει ο server να μπορεί να τα διαβάσει και να γράψει σε αυτά. Έτσι κάποιο CGI script, αφού τρέχει με το ίδιο UID που τρέχει τον server, μπορεί να τροποποιήσει ή και να σβήσει τα παραπάνω αρχεία.

Η Δομή των Καταλόγων του Server

Οι Web servers είναι πολύπλοκα προγράμματα που χρησιμοποιούν πολλά αρχεία σε πολλούς καταλόγους. Τα περιεχόμενα μερικών από αυτούς τους καταλόγους πρέπει να είναι διαθέσιμα σε χρήστες όλου του Διαδικτύου, ενώ τα περιεχόμενα άλλων πρέπει να είναι αναγνώσιμα μόνο στους χρήστες του υπολογιστή που βρίσκεται ο server ή μόνο στον superuser αυτού του υπολογιστή.

Ο Apache server διαθέτει έξι καταλόγους:

Κατάλογος

Σκοπός

cgi-bin

Περιέχει CGI scripts.

conf

Περιέχει τα ρυθμιστικά αρχεία του server.

htdocs

Περιέχει ηλεκτρονικά έγγραφα.

icons

Περιέχει εικονίδια που υπάρχουν στα ηλεκτρονικά έγγραφα.

logs

Περιέχει αρχεία που καταγράφουν τις δραστηριότητες του server.

support

Περιέχει συμπληρωματικά προγράμματα για τον server.

Η πιο απλή προσέγγιση για τις άδειες προσπέλασης των καταλόγων τους server είναι η δημιουργία ενός χρήστη www και της ομάδας www, που θα χρησιμοποιούνται από τον διαχειριστή του Web server για την διαχείριση αυτού.

drwxr-xr-x 5 www www 1024 Aug 8 00:01 cgi-bin/

drwxr-x--- 2 www www 1024 Jun 11 17:21 conf/

-rwx------ 1 www www 109674 May 8 23:58 httpd

drwxrwxr-x 2 www www 1024 Aug 8 00:01 htdocs/

drwxrwxr-x 2 www www 1024 Jun 3 21:15 icons/

drwxr-x--- 2 www www 1024 May 4 22:23 logs/

Στην ομάδα www θα ανήκουν όλοι οι χρήστες που συντάσσουν HTML σελίδες, ενώ ο χρήστης www θα αντιπροσωπεύει τον διαχειριστή του Web server. Οι άδειες προσπέλασης στους καταλόγους ρυθμίζονται έτσι ώστε μόνο ο χρήστης www να μπορεί να τροποποιήσει τα ρυθμιστικά αρχεία και τα log αρχεία. Οι κατάλογοι conf και logs δεν πρέπει να είναι αναγνώσιμοι από όλους και εξαρτάται από το πόση εμπιστοσύνη υπάρχει στους χρήστες της ομάδας www για το αν θα είναι αναγνώσιμοι και από την ομάδα www. Ο κατάλογος cgi-bin και τα περιεχόμενα του πρέπει να μπορούν να εκτελούνται και να διαβάζονται από όλους του χρήστες, αλλά όχι και να τροποποιούνται από όλους. Κανονικά μόνο ο www θα πρέπει να έχει δικαίωμα τροποποίησης του καταλόγου cgi-bin, ενώ το κατά πόσο οι χρήστες της ομάδας www θα μπορούν να τροποποιούν αυτόν τον κατάλογο εξαρτάται και πάλι από την εμπιστοσύνη που υπάρχει σε αυτούς.

Οι κατάλογοι htdocs και icons (και τα περιεχόμενα τους) έχουν άλλες απαιτήσεις. Όλα τα αρχεία που διανέμει στο Internet ο Web server βρίσκονται σε αυτούς τους καταλόγους. Επίσης η ομάδα www πρέπει να έχουν πρόσβαση γραφής, ανάγνωσης και εκτέλεσης σε αυτούς τους καταλόγους. Γι' αυτό, οι κατάλογοι πρέπει να γίνουν αναγνώσιμοι από όλο τον κόσμο και τροποποιήσιμοι, αναγνώσιμοι και εκτελέσιμοι από την ομάδα www.

Η παραπάνω πρακτική, όσον αναφορά τις άδειες προσπέλασης των καταλόγων htdocs και icons, κρύβει κινδύνους. Η πρόσβαση των απομακρυσμένων χρηστών σε απαγορευμένα έγγραφα περιορίζεται μέσω των IP διευθύνσεων και με την παροχή μυστικών κωδικών. Έτσι, όμως, δεν μπορούν να προστατευτούν από τοπικούς μη εγκεκριμένους χρήστες, καθ' ότι είναι αναγνώσιμα από όλον τον κόσμο. Μία λύση σε αυτό το πρόβλημα είναι η ρύθμιση του server να τρέχει με ένα όνομα χρήστη που να ανήκει στην ομάδα www (π.χ. httpd). Ο server και πάλι θα έχει πρόσβαση ανάγνωσης στους καταλόγους αυτούς και δεν χρειάζεται πλέον να είναι αναγνώσιμοι από όλο το κόσμο.

drwxr-x--- 5 www www 1024 Aug 8 00:01 cgi-bin/

drwxrwx--- 2 www www 1024 Aug 8 00:01 htdocs/

drwxrwx--- 2 www www 1024 Jun 3 21:15 icons/

Σε αυτήν την περίπτωση, προσοχή πρέπει να δοθεί στο να μην είναι οι κατάλογοι conf και logs και τα περιεχόμενα τους αναγνώσιμοι και τροποποιήσιμοι από τους χρήστες τις ομάδας www, γιατί οι θυγατρικές διεργασίες του server θα έχουν ανεπιθύμητη πρόσβαση σε σημαντικά για την λειτουργία τους server αρχεία. Ένα CGI πρόγραμμα μπορεί να εκμεταλλευτεί αυτήν την αδυναμία και να προκαλέσει σοβαρά προβλήματα.

Μία άλλη προσέγγιση, που απαλλάσσει από όλους τους παραπάνω πονοκεφάλους είναι η ακόλουθη:

drwxr-x--- 5 root www 1024 Aug 8 00:01 cgi-bin/

drwx------ 2 root www 1024 Jun 11 17:21 conf/

-rwx------ 1 root www 109674 May 8 23:58 httpd

drwxrwx--- 2 root www 1024 Aug 8 00:01 htdocs/

drwxrwx--- 2 root www 1024 Jun 3 21:15 icons/

drwx------ 2 root www 1024 May 4 22:23 logs/

Το μοντέλο αυτό είναι ιδιαίτερα χρήσιμο όταν ο superuser και ο διαχειριστής του Web server είναι το ίδιο πρόσωπο. Ο χρήστης httpd ανήκει στην ομάδα www. Οι κατάλογοι conf και logs μπορούν να τροποποιηθούν και να αναγνωστούν μόνο από τον superuser και η πρόσβαση στους καταλόγους htdocs και icons περιορίζεται μόνο στους χρήστες της ομάδας www (συμπεριλαμβανομένου και του httpd). Ο κατάλογος cgi-bin είναι εκτελέσιμος και αναγνώσιμος μόνο από την ομάδα www (συνεπώς και από τον httpd), αλλά τροποποιήσιμος μόνο από τον superuser. Τέλος το εκτελέσιμο αρχείο httpd, μπορεί να εκτελείται και να τροποποιείται μόνο από τον superuser γεγονός που αυξάνει την ασφάλεια του συστήματος.

Τα Ρυθμιστικά Αρχεία (Configuration Files)

Μιλώντας πάντα για τον Apache server, τα αρχεία του conf καταλόγου είναι:

Αρχείο

Σκοπός

access.conf

Ελέγχει την πρόσβαση στα αρχεία του server.

httpd.conf

Αρχείο ρύθμισης των γενικών ιδιοτήτων του server.

mime.types

Καθορίζει την σχέση μεταξύ των επεκτάσεων των αρχείων και των ΜΙΜΕ τύπων.

srm.conf

(Server Resource Map). Περιέχει επιπλέον πληροφορίες ρύθμισης για τον server.

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

-rw------- 5 root root 954 Aug 8 00:01 access.conf

-rw------- 2 root root 2840 Jun 11 17:21 httpd.conf

-rw------- 1 root root 3290 May 8 23:58 mime.types

-rw------- 5 root root 4106 Aug 8 00:01 srm.conf

Ρυθμίσεις που Πρέπει να Αποφευχθούν

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

Automatic Directory Listing

Οι περισσότεροι Web servers θα παρουσιάζουν σε λίστα τα περιεχόμενα ενός καταλόγου εάν δεν υπάρχει αρχείο με το όνομα index.html στον κατάλογο αυτόν. Αυτή η δυνατότητα μπορεί να προκαλέσει προβλήματα ασφαλείας, καθώς δίνει την ευκαιρία σε όλους να μάθουν για τα αρχεία του συστήματος.

Symbolic-link Following

Μερικοί Web servers επιτρέπουν στους χρήστες να περικλείουν συμβολικούς συνδέσμους (symbolic links) που οδηγούν έξω από τον htdocs κατάλογο. Κάτι τέτοιο επιτρέπει σε κάποιον που συντάσσει HTML σελίδες και έχει πρόσβαση να στον htdocs κατάλογο να κάνει εμπιστευτικά αρχεία που βρίσκονται σε καταλόγους του υπόλοιπου συστήματος διαθέσιμα σε όλο το κόσμο. Είναι κατανοητό πως αυτή η ρύθμιση είναι καλύτερα να παραμείνει απενεργοποιημένη.

Server-side Includes

Οι Server-side Includes (SSI) είναι εντολές που ενσωματώνονται σε ένα HTML έγγραφο και επεξεργάζονται από τον server πριν το έγγραφο αποσταλεί στον client που το ζήτησε. Χρησιμοποιούνται για να συμπεριλάβουν ένα άλλο έγγραφο στο αρχικό ή για την εκτέλεση ενός προγράμματος και παρουσίαση του αποτελέσματος. Οι SSI θέτουν σε κίνδυνο την ακεραιότητα του συστήματος, γιατί κανείς δεν μπορεί να γνωρίζει τι θα ζητήσουν από τον server. Στους περισσότερους Web servers είναι κανονικά απενεργοποιημένες, ενώ σε άλλους (π.χ. Apache server) επιτρέπεται η μερική ενεργοποίηση τους σε συγκεκριμένους καταλόγους.

User-maintained Directories

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

Γράφοντας Aσφαλή CGI Scripts

Τα περισσότερα "παραθυράκια" στην ασφάλεια ενός συστήματος δεν είναι σκόπιμα. Συνήθως οφείλονται σε άτομα που δεν έχουν την απαιτούμενη εμπειρία να γράψουν ασφαλή CGI scripts. Όσο περισσότεροι είναι οι χρήστες που έχουν την δυνατότητα να γράψουν scripts, τόσο μεγαλύτερη είναι η πιθανότητα ότι ένα από αυτά τα scripts θα περιέχει ένα σημαντικό λάθος. Γι' αυτό το λόγο κανένα script δεν πρέπει να εγκαθίσταται στον server, εάν δεν το έχει ελέγξει πρώτα κάποιος ειδικός.

Προβλήματα της HTML γλώσσας

Η γλώσσα HTML μπορεί να περιορίζει το μήκος των πεδίων σε καθορισμένο αριθμό χαρακτήρων, να εμπεριέχει κρυφά δεδομένα και να καθορίζει μεταβλητές που πρέπει να παρέχονται στα CGI scripts. Παρ' όλα αυτά, δεν πρέπει τα CGI scripts να εξαρτούνται από αυτούς τους περιορισμούς, μια και οποιοδήποτε CGI script μπορεί να εκτελεστεί άμεσα μέσω της URL του. Οι επιτιθέμενοι δεν είναι υποχρεωμένοι να προσπελάσουν το script μέσω της παρεχόμενης HTML φόρμας. Τα ακόλουθα παραδείγματα επιδεικνύουν

Web Browsers

Ένας από τους λόγους γιατί είναι εξαιρετικά εύκολα να δημιουργηθεί ένα μη ασφαλές CGI script, είναι το γεγονός ότι είναι δύσκολο να δοκιμαστούν όλα τα scripts σε συνδυασμό με την πληθώρα των HTTP clients (Web browsers) που είναι διαθέσιμοι. Οι αντιδράσεις των clients στην ίδια απροσδόκητη κατάσταση διαφέρουν. Ένα παράδειγμα είναι η εισαγωγή ειδικών χαρακτήρων στο πεδίο μιας φόρμας. Ενώ μερικοί clients θα τους λάβουν σαν χαρακτήρες διαφυγής και δεν θα τους προωθήσουν στο script, άλλοι θα πράξουν ακριβώς το αντίθετο. Σε περίπτωση που ο προγραμματιστής του script δεν έχει προβλέψει για τιμές που περιέχουν χαρακτήρες διαφυγής, τότε η συμπεριφορά του script θα είναι απρόβλεπτη.

Άλλες Γλώσσες Προγραμματισμού

Πολλές γλώσσες προγραμματισμού, συμπεριλαμβανομένων των C, ksh, sh, csh και Perl, παρέχουν τα μέσα για δημιουργία διεργασιών. Αυτές οι δυνατότητες πρέπει να αποφεύγονται κατά την σύνταξη CGI scripts. Εάν είναι αναγκαίο να δημιουργηθεί μια διεργασία, πρέπει να αποφευχθεί να περαστούν στην διεργασία ακολουθίες χαρακτήρων που παράχθηκαν από το χρήστη. Εάν πάλι είναι αναγκαίο να περαστούν στην διεργασία δεδομένα του χρήστη, προσοχή πρέπει να δοθεί να μην περιέχονται χαρακτήρες όπως οι ` $ | ; > * < &.

Όσον αναφορά την σύνταξη scripts που επιτρέπει στους χρήστες να στέλνουν μηνύματα ηλεκτρονικού ταχυδρομείου, πρέπει να προτιμάται το πρόγραμμα /usr/lib/sendmail από τα bin/mailx και /usr/ucb/mail.

Συμβουλές

Web Server και FTP Server

Συνηθίζεται από πολλά sites η χρήση κοινού υπολογιστή για Web server και FTP server. Σε αυτές τις περιπτώσεις κάποιοι κατάλογοι χρησιμοποιούνται για αποθήκευση δεδομένων που είναι προσπελάσιμα τόσο μέσω anonymous FTP όσο και μέσω World Wide Web. Έτσι, ένα αρχείο μπορεί να έχει δύο URLs που αναφέρονται σε αυτό, όπως για παράδειγμα

http://any.server.com/myHomeDirectory/myFile.html και

ftp:// any.server.com/myHomeDirectory/myFile.html

Η κοινή χρήση καταλόγων από τα πρωτόκολλα HTTP και FTP, θέτει αρκετά θέματα ασφαλείας:

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

Firewalls

Ένα firewall μπορεί να χρησιμοποιηθεί για να ενισχύσει την ασφάλεια ενός site. Η πιο συνηθισμένη χρήση ενός firewall είναι η δημιουργία ενός "εσωτερικού site", στο οποίο ανήκει και ο Web server. Σε αυτήν την κατασκευή ο Web server είναι διαθέσιμος μόνο στους υπολογιστές του "εσωτερικού site".

Μια άλλη μέθοδος, είναι η τοποθέτηση του Web server έξω από το "εσωτερικό site", ώστε να είναι διαθέσιμος στους χρήστες του Διαδικτύου. Από άποψη ασφάλειας του οργανισμού, το ασφαλέστερο μέρος για τον Web server είναι έξω από το "εσωτερικό site", γιατί σε περίπτωση κατάληψης του δεν θα κινδυνεύει το εσωτερικό τοπικό δίκτυο. Επίσης, δεν συνιστάται η εγκατάσταση του Web server στον μηχανή του firewall, μια και μία πιθανή δυσλειτουργία του server θα καταστρέψει όλο το δίκτυο του οργανισμού.

Διάγνωση Εισβολής

Για τα UNIX συστήματα, υπάρχει το πρόγραμμα Tripwire που ελέγχει περιοδικά το σύστημα και ανιχνεύει εάν έχουν τροποποιηθεί αρχεία ή προγράμματα του συστήματος. Επίσης, τα αρχεία λάθους (error log files) και τα αρχεία πρόσβασης (access log files) του server πρέπει να ελέγχονται σε τακτά χρονικά διαστήματα για ύποπτες ενέργειες. Η παρουσία εντολών, όπως οι "rm", "login", "/bin/sh" και "perl", στα access log files, καθώς και η παρουσία πολύ μεγάλων γραμμών URL, πρέπει να θεωρούνται επικίνδυνες. Επίσης πρέπει να γίνεται έλεγχος για επανειλημμένες ανεπιτυχής προσπάθειες για πρόσβαση ενός προστατευμένου εγγράφου.

Άλλα Μέτρα Ασφαλείας

Η χρήση του υπολογιστή πρέπει να περιοριστεί μόνο για Web server. Κάτι τέτοιο θα κάνει πιο δύσκολη την κατάληψη του μηχανήματος, αλλά και αν γίνει, ο εισβολέας δεν θα μπορεί να κάνει επιπλέον ζημιά στο δίκτυο. Στην περίπτωση ενός αφιερωμένου υπολογιστή για Web server, οι παρακάτω επιλογές πρέπει να ληφθούν υπόψη:

Μία άλλη φιλοσοφία στην εγκατάσταση του Web server είναι η τοποθέτηση όλων των αρχείων του σε μια ξεχωριστή δομή καταλόγων, με χρήση της εντολής chroot. Όλο το υπόλοιπο σύστημα αρχείων παραμένει κρυφό από τον Web server, ο οποίος δεν γνωρίζει καν την ύπαρξη του, γεγονός που περιορίζει μία πιθανή επίθεση στους καταλόγους του server.

6.2.3 Προστατεύοντας Εμπιστευτικά Αρχεία

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

Υπάρχουν τρεις τρόποι περιορισμού της πρόσβασης:

Περιορισμός πρόσβασης σύμφωνα με τις IP διευθύνσεις, subnets, ή τα domain names.

Έγγραφα και κατάλογοι προστατεύονται με τέτοιον τρόπο ώστε μόνο οι browsers που συνδέονται από συγκεκριμένες IP διευθύνσεις, IP subnets, ή domains έχουν πρόσβαση σε αυτά.

Περιορισμός πρόσβασης σύμφωνα με ονόματα χρηστών και κωδικών.

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

Κρυπτογράφηση με χρήση ασύμμετρης κρυπτογραφίας.

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

Καθένας από τις παραπάνω τεχνικές έχει πλεονεκτήματα και μειονεκτήματα. Ο περιορισμός μέσω των IP διευθύνσεων έχει αποτελέσματα σε περιπτώσεις απλών χρηστών, αλλά όχι απέναντι σε αποφασισμένους hackers. Με τον κατάλληλο εξοπλισμό και λογισμικό, ένας hacker μπορεί να αλλάξει την IP διεύθυνση του (IP spoofing) και να φαίνεται ότι συνδέεται από κάπου άλλου. Επίσης, δεν υπάρχει εγγύηση ότι το άτομο που επικοινωνεί με τον server βρίσκεται σε εγκεκριμένο υπολογιστή. Ο απομακρυσμένος υπολογιστής μπορεί να έχει καταληφθεί και να χρησιμοποιείται σαν βιτρίνα. Ένα άλλο είδος επίθεσης στο οποίο είναι ευάλωτη η τεχνική αυτή είναι το DNS spoofing. Για μέγιστη ασφάλεια, η τεχνική αυτή πρέπει να συνδυάζεται με έλεγχο της ταυτότητας του χρήστη.

Ο περιορισμός μέσω μυστικών κωδικών παρουσιάζει τα δικά του προβλήματα. Οι κωδικοί που επιλέγουν οι χρήστες δεν είναι πάντοτε ασφαλής. Πολύ συχνά χρησιμοποιούνται φανερούς κωδικού, όπως το όνομα του χρήστη, τα γενέθλια τους, το τηλέφωνο τους ή το όνομα του κατοικίδιου τους. Τέτοιοι κωδικοί μπορούν εύκολα να προβλεφτούν και οι Web servers, σε αντίθεση με τα UNIX συστήματα, δεν απαγορεύουν τις επανειλημμένες αποτυχημένες προσπάθειες εισαγωγής τους σωστού κωδικού. Ένας hacker μπορεί να εφαρμόσει πρόγραμμα πρόβλεψης κωδικών (password guessing program) και να μαντέψει τον σωστό κωδικό.

Άλλο πρόβλημα με τους κωδικούς είναι ότι είναι ευάλωτοι σε υποκλοπή καθώς διασχίζουν το δίκτυο. Επειδή δεν είναι ισχυρά κρυπτογραφημένοι, ένας hacker μπορεί με τον κατάλληλο hardware και software, να τους καταγράψει και να τους χρησιμοποιήσει μελλοντικά. Επιπλέον, ο browser στέλνει τον κωδικό στον server κάθε φορά που ζητά κάποιο εμπιστευτικό έγγραφο, πράγμα που διευκολύνει έναν που παρακολουθεί την επικοινωνία να υποκλέψει την ευαίσθητη πληροφορία.

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

Αρχεία Ρύθμισης Πρόσβασης του Apache Server

Ο Apache server διαθέτει δύο αρχεία για τον έλεγχο της πρόσβασης: το "access.conf" και το ".htaccess". Το πρώτο επιτρέπει την συνολική διαχείριση των περιορισμών και βρίσκεται στον κατάλογο conf του server. Με το δεύτερο πραγματοποιείται η ανά κατάλογο διαχείριση των περιορισμών. Το όνομα ".htaccess" μπορεί να τροποποιηθεί στο αρχείο srm.conf.

Το αν θα χρησιμοποιηθεί ένα κεντρικό αρχείο για την ρύθμιση της πρόσβασης στον server (access.conf) ή πολλά κατανεμημένα αρχεία εξαρτάται από τον Web διαχειριστή. Πάντως, υπάρχουν αρκετά πλεονεκτήματα στην χρήση του κεντρικού αρχείου, τη στιγμή που το μόνο θετικό που προσφέρει η ανά κατάλογο διαχείριση είναι η ρύθμιση των καταλόγων χωρίς να είναι απαραίτητη η επανεκκίνηση του server.

Κατ' αρχήν, τα κατανεμημένα αρχεία δεν προσφέρουν ένα κεντρικό μέρος όπου καθορίζεται η πολιτική του οργανισμού. Δεύτερον, παρ' όλο που τα αρχεία .htaccess είναι κρυφά, δεν είναι δύσκολο να διαγραφούν ή να τροποποιηθούν αφού ανήκουν σε κατάλογους που μπορεί να μην έχουν ιδιαίτερη προστασία. Τρίτον, σε πολλούς servers υπάρχει ένα bug που επιτρέπει την διανομή του αρχείου, σαν να ήταν ένα οποιοδήποτε άλλο HTML αρχείο, μέσω ενός κανονικού URL. Είναι αυτονόητο, πως αυτό το χαρακτηριστικό είναι τελείως ανεπιθύμητο. Τέλος, σε περίπτωση αλλαγής ή αναβάθμισης του server είναι πολύ ευκολότερο να ενημερωθεί ένα αρχείο από δεκάδες, ίσως και εκατοντάδες, μικρών διασκορπισμένων αρχείων.

6.2.4 Αποφεύγοντας τους Κινδύνους της Παρακολούθησης

Η παρακολούθηση της επικοινωνίας από καλά οργανωμένους hackers, επηρεάζει όλα τα πρωτόκολλα του Internet, αλλά περισσότερο την υπηρεσία World Wide Web, όπου ευαίσθητα κείμενα και άλλα είδη πληροφορίας, όπως αριθμοί πιστωτικών καρτών, μεταδίδονται στο δίκτυο. Ένας τρόπος για να καταπολεμηθεί αυτό το πρόβλημα είναι η κρυπτογράφηση των πληροφοριών, ώστε να είναι κατανοητή μόνο στον προοριζόμενο παραλήπτη.

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

  1. Link Encryption: Οι τηλεφωνικές γραμμές που χρησιμοποιούνται για την μεταφορά των IP πακέτων μπορούν να κρυπτογραφηθούν, με την βοήθεια ειδικών routers. Όλη η πληροφορία κρυπτογραφείται αυτόματα και γρήγορα, ενώ για την αποκρυπτογράφηση της απαιτείται η κατοχή παρόμοιου hardware από την αντίστοιχη πλευρά. Το μειονέκτημα της είναι ότι είναι πολύ ακριβή.
  2. Document Encryption: Τα έγγραφα που τοποθετούνται στον Web server κρυπτογραφούνται με ένα σύστημα όπως το PGP. Σαν μέθοδος είναι δύσκολη στην εφαρμογή καθ' ότι όλα τα έγγραφα χρειάζεται να κρυπτογραφηθούν πριν τοποθετηθούν στον server. Παρ' όλα αυτά, παρέχει αποτελεσματική προστασία.
  3. Protocol Encryption: Το πρωτόκολλο HTTP μπορεί να ασφαλιστεί με διάφορες προεκτάσεις. Τα δύο επικρατέστερα νέα πρωτόκολλα είναι τα SSL και S/HTTP. Όταν χρησιμοποιείται κάποιο πρωτόκολλο κρυπτογράφησης, η ασφάλεια εξαρτάται από τα εξής ζητήματα: (α) το πόσο ισχυρός είναι ο αλγόριθμος κρυπτογράφησης, (β) το μήκος του κλειδιού κρυπτογράφησης, (γ) το πόσο μυστικό είναι το κλειδί κρυπτογράφησης, (δ) το πόσο αξιόπιστο είναι το πρόγραμμα του Web server και (ε) το πόσο αξιόπιστο είναι το πρόγραμμα του Web client.

Παρακολούθηση μέσω των Log Αρχείων

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

Ο Apache server διατηρεί τα ακόλουθα αρχεία:

access_log

Περιέχει λίστα με όλες τις αιτήσεις εξυπηρέτησης δέχεται ο server. Κάθε καταχώρηση στην λίστα αποτελείται από τα εξής στοιχεία: το όνομα του απομακρυσμένου υπολογιστή, το όνομα του χρήστη (εάν είναι διαθέσιμο), την ώρα που ξεκίνησε η μεταφορά, η HTTP εντολή που εκτελέστηκε (GET για μεταφορά αρχείων, POST για επεξεργασία φορμών και HEAD για τις MIME επικεφαλίδες), τον κώδικα κατάστασης (status code) που επιστρέφθηκε και τέλος ο αριθμός των bytes που μεταφέρθηκε.

agent_log

Περιέχει λίστα με τα προγράμματα που χρησιμοποιήθηκαν για την πρόσβαση του server.

error_log

Περιέχει λίστα με όλα τα λάθη που συμβαίνουν στον server, είτε παράγονται από τον ίδιο, είτε από τα CGI scripts.

refer_log

Περιέχει καταχωρήσεις που αποτελούνται από τo URL που είχε επισκεφτεί πρωτύτερα ο χρήστης και το URL που ζήτησε από τον server.

Οι πληροφορίες στο refer_log αρχείο μπορούν να συνδυαστούν με πληροφορίες στο access_log αρχείο για να καθοριστούν τα ονόματα των χρηστών ή τουλάχιστον οι υπολογιστές τους. Επίσης, το access_log αρχείο περιέχει το πλήρες URL που ζητήθηκε και ανάλογα ποια HTTP εντολή εκτελέστηκε (GET ή POST) μπορεί να περιέχει και επιπλέον πληροφορίες. Για τις Web φόρμες που χρησιμοποιούν την μέθοδο GET αντί της POST, όλα τα δεδομένα της φόρμας συμπεριλαμβάνονται στο URL και συνεπώς καταλήγουν στο access_log αρχείο. Έτσι, πιθανοί κωδικοί που εισάγονται σε τέτοιες φόρμες μπορούν εύκολα να γίνουν γνωστοί από το access_log.

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

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

6.2.5 Από την μεριά των Web Browsers

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

Εκτελώντας Κώδικα από το Διαδίκτυο

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

Επιπλέον μέτρα που πρέπει να πάρουμε είναι:

Ιδιαίτερη αναφορά θα κάνουμε σε ειδικές μορφές κώδικα.

Java

Η Java είναι μια γλώσσα που αναπτύχθηκε από την Sun Microsystems. Τα Java scripts βρίσκονται μεταγλωττισμένα στον server. Τα HTML έγγραφα αναφέρονται στα Java applets με το tag <APPLET>. Οι browsers που τα υποστηρίζουν, τα κατεβάζουν όταν ζητηθεί από την HTML σελίδα και τα εκτελούν.

Τα Java applets επειδή εκτελούνται στην μεριά του browser, μεταφέρουν τους κινδύνους της ασφάλειας από τον server στον client. Κατά καιρούς έχουν ανακαλυφθεί αρκετά "παραθυράκια" στην ασφάλεια που παρέχει η γλώσσα, άλλα σημαντικά και άλλα λιγότερο σημαντικά, τα οποία στην τελευταία επανέκδοση έχουν καλυφθεί. Παραμένουν όμως μερικές αδυναμίες στον σχεδιασμό της γλώσσας. Βέβαια, η γλώσσα βρίσκεται υπό διαρκή έλεγχο και οι νέες κριτικές αναμένονται.

JavaScript

Η JavaScript είναι μια συλλογή από επεκτάσεις στην HTML γλώσσα και έχει σχεδιασθεί από την Netscape Corporation. Κυρίως χρησιμοποιείται για να ελέγχει τον browser, για παράδειγμα το άνοιγμα και κλείσιμο παραθύρων, η διαχείριση φορμών, οι ρυθμίσεις του browser και τέλος η εκτέλεση Java applets. Μολονότι η σύνταξη της JavaScript είναι παρόμοια με της Java, διαφέρουν σε πολλά σημεία.

Σε αντίθεση με τις "τρύπες" της Java, οι οποίες μπορούν να προκαλέσουν την αλλαγή των δεδομένων στο σκληρό δίσκο του χρήστη, οι "τρύπες" της JavaScript έχουν να κάνουν με την παραβίαση του απόρρητου του χρήστη. Τα περισσότερα bugs που έχουν αναφερθεί, όπως η υποκλοπή της e-mail διευθύνσεως του χρήστη, την υποκλοπή των αρχείων του σκληρού δίσκου και την καταγραφή των ενεργειών του χρήστη, έχουν καλυφθεί, νέα εμφανίζονται καθημερινά. Η JavaScript πρέπει να θεωρείται ανασφαλής και συνιστάται η απενεργοποίηση της. Το τελευταίο bug αναφέρθηκε τον Φεβρουάριο του 1998.

ActiveX

ActiveX είναι μια τεχνολογία που έχει αναπτυχθεί από την Microsoft Corporation για την διανομή λογισμικού από το Internet. Όπως και τα Java applets, έτσι και τα ActiveX controls, μπορούν να εμπεριέχονται σε μια HTML σελίδα. Σε αντίθεση με την Java που είναι ανεξάρτητη της υποκείμενης πλατφόρμας, τα ActiveX controls μεταγλωττίζονται ξεχωριστά για κάθε πλατφόρμα και λειτουργικό σύστημα.

Τα ActiveX controls υπογράφονται ψηφιακά από τον συγγραφέα τους, με τέτοιον τρόπο ώστε τα η υπογραφή δεν μπορεί να αλλοιωθεί ή να αποκηρυχθεί. Οι ψηφιακές υπογραφές πιστοποιούνται από CAs άξιες εμπιστοσύνης (π.χ. VeriSign) και τα ActiveX controls αποκτούν την μορφή μικρών πακέτων λογισμικού. Πριν ο browser κατεβάσει κάποιο ActiveX, ελέγχει να δει εάν είναι υπογεγραμμένο και πιστοποιημένο. Εάν δεν είναι, προειδοποιεί τον χρήστη ότι ίσως να μην ασφαλές. Ο χρήστης πρέπει να αποφεύγει να κατεβάζει τέτοια ActiveX controls στον υπολογιστή του.

Η διαδικασία της πιστοποίησης επιβεβαιώνουν ότι το ActiveX control δεν μπορεί να διανέμεται ανώνυμα και ότι δεν έχει τροποποιηθεί από τρίτον. Παρ' όλα αυτά, η διαδικασία της πιστοποίησης δεν επιβεβαιώνει ότι η εκτέλεση ενός control δεν θα έχει παρενέργειες. Αν και το πιθανότερο είναι ότι δεν θα συμβεί κάτι τέτοιο, δεν αποκλείεται να περιέχεται λάθος στον κώδικα του.

Μεγάλη προσοχή πρέπει να δίνεται σε ActiveX controls που δεν είναι υπογεγραμμένα ή πιστοποιημένα. Πολλοί αρχάριοι χρήστες δεν ενεργοποιούν την επιλογή "High Security" στον Microsoft Internet Explorer (ο μόνος που υποστηρίζει τα ActiveX προς το παρών), με συνέπεια να γίνονται δεκτά όλα τα controls υπογεγραμμένα ή όχι. Τέτοια αφέλεια μπορεί να οδηγήσει σε ολική καταστροφή του υπολογιστή μας ή σε παραβίαση των προσωπικών μας αρχείων. Το μεγαλύτερο, όμως, πρόβλημα με τα ActiveX είναι το γεγονός ότι δεν μπορεί να ανιχνευθεί η λειτουργία τους. Μπορούν να μεταδίδουν εμπιστευτικές πληροφορίες πίσω στο δίκτυο, να φυτεύουν στον Explorer έναν ίο και να μην υποπέσουν στην αντίληψη μας αμέσως. Ακόμα και η καταστροφή ανιχνευθεί αμέσως, ο Explorer δεν προσφέρει πληροφορίες για τα ActiveX που είχαν κατέβει από τον δίκτυο.

Cookies

Τα cookies είναι ένας μηχανισμός που αναπτύχθηκε από την Netscape Corporation για να καλύψει την stateless φύση του HTTP πρωτοκόλλου. Κανονικά, όποτε ένας browser ζητά από έναν Web server ένα URL, η αίτηση επεξεργάζεται από τον server ανεξάρτητα από τις προηγούμενες αιτήσεις του client. Για παράδειγμα, πολύ πιθανόν να έχει ξανά ζητηθεί το συγκεκριμένο URL. Μολονότι αυτό κάνει τον server πιο αποτελεσματικό, δεν επιτρέπει την δημιουργία αντικειμένων, όπως οι κάρτες αγορών, που απαιτούν ο server να θυμάται τις ενέργειες του χρήστη για ένα μεγάλο χρονικό διάστημα.

Τα cookies λύνουν αυτό το πρόβλημα. Ένα cookie είναι μια συλλογή από πληροφορίες, που περιλαμβάνουν ένα session identifier, και στέλνει ο server στον browser την πρώτη φορά που συνδέεται. Από εκεί και πέρα, ο browser επιστρέφει ένα αντίγραφο του cookie κάθε φορά που συνδέεται, δημιουργώντας έτσι την ψευδαίσθηση ενός "session".

Τα cookies μπορούν να χρησιμοποιηθούν με τέτοιο τρόπο ώστε να παραβιάσουν το απόρρητο των χρηστών. Κάθε φορά που ο browser επισκέπτεται έναν server αφήνει πίσω του ένα σωρό πληροφορίες, όπως την IP διεύθυνση του υπολογιστή μας, το λειτουργικό σύστημα, τον κατασκευαστή του browser και τα URL που ζητήθηκαν καθώς και αυτά που είχαν επισκεφτεί πριν. Χωρίς τα cookies θα ήταν αδύνατο να συνδυαστούν οι πληροφορίες των log αρχείων για να δημιουργηθεί ένα μονοπάτι με όλους τους Web server που έχουμε επισκεφτεί. Υπάρχουν, για παράδειγμα, διαφημιστικές εταιρίες που συλλέγουν cookies χρηστών που έχουν επισκεφτεί τις σελίδες των sites που περιέχουν τις διαφημίσεις τους. Κάθε site χρησιμοποιεί το δικό τα δικά του cookies και ο συνδυασμός όλων των cookies επιτρέπει την σύνταξη ενός προφίλ του κάθε χρήστη.

Πολλά άλλα sites χρησιμοποιούν τα cookies για να πιστοποιούν την ταυτότητα των χρηστών που συνδέονται στους Web servers τους. Κάθε φορά που συνδέεται ο χρήστης με τον server το username του και το password του περιέχεται στο cookie, διευκολύνοντας και αυτοματοποιώντας την διαδικασία. Κάποιος τρίτος που παρακολουθεί την επικοινωνία και είναι σε θέση να κλέψει το μεταδιδόμενο cookie, μπορεί το χρησιμοποιήσει για να αποκτήσει πρόσβαση σε εμπιστευτικά αρχεία (replay attack).

6.2.6 Περαιτέρω Πληροφορίες

Όλα τα παραπάνω είναι βασισμένα στο F.A.Q. που βρίσκεται στην εξής ηλεκτρονική σελίδα:

The WWW Security FAQ -- http://www.w3.org/Security/Faq/


6.3 Ασφάλεια στα X Windows

6.3.1 Εισαγωγή

Τα X Windows είναι πολύ διαδεδομένα ανάμεσα στους χρήστες διαφορετικών λειτουργικών συστημάτων. Το client/server μοντέλο διαχείρισης εφαρμογών που χρησιμοποιούν επιτρέπει τη δυναμική και ευέλικτη χρήση των ηλεκτρονικών υπολογιστών. Εάν ωστόσο τα X Windows δεν τύχουν σωστής διαχείρισης μπορούν να δημιουργήσουν σοβαρά προβλήματα ασφάλειας.

6.3.2 Λειτουργία των X Windows

Ίσως να φαίνεται λίγο παράξενο το ότι ένα γραφικό περιβάλλον αλληλεπίδρασης μπορεί να δημιουργήσει κάποιο σοβαρό πρόβλημα στην ασφάλεια. Για να κατανοήσουμε πώς αυτό γίνεται ας δούμε πώς ακριβώς δουλεύουν τα X Windows.

Τα X Windows είναι στην πραγματικότητα και στο χαμηλότερο επίπεδό τους ένα πρωτόκολλο επικοινωνίας το οποίο λέγεται "X" πρωτόκολλο. Αυτό το πρωτόκολλο χρησιμοποιείται σε έναν υπολογιστή ή σε ένα δίκτυο υπολογιστών. Δεν είναι "δεμένο" στο λειτουργικό σύστημα και για αυτό είναι διαθέσιμο σε πολλές διαφορετικές πλατφόρμες. Τα X Windows ενεργοποιούν ένα client/server δικτυακό μοντέλο επικοινωνίας. Αυτό το μοντέλο επιτρέπει σε ένα χρήστη να τρέχει ένα πρόγραμμα σε μια τοποθεσία αλλά να το ελέγχει από κάποια άλλη.

Αντίθετα προς τη κλασσική σύμβαση λειτουργίας των client/server εφαρμογών, ο χρήστης δουλεύει άμεσα στον X server ο οποίος του προσφέρει την οθόνη, το πληκτρολόγιο και το mouse. Αναφερόμαστε σε αυτό σαν τον server διότι αυτό γεννάει τις εισόδους και διαχειρίζεται τις εξόδους των clients. X clients είναι εφαρμογές όπως οι xterm, emacs και xclock (λαμβάνουν και επεξεργάζονται εισόδους και παράγουν εξόδους).

Τις περισσότερες φορές οι ο server και clients τρέχουν στον ίδιο υπολογιστή (host). Ωστόσο το X πρωτόκολλο είναι πολύ ευέλικτο και επιτρέπει πολλές διαφορετικές διαμορφώσεις. Στην πραγματικότητα ένα "X" τερματικό είναι μια οθόνη χωρίς καμιά υπολογιστική δυνατότητα. Το μόνο πράγμα που μπορεί να κάνει είναι να επεξεργάζεται μηνύματα του "X" πρωτοκόλλου τα οποία έρχονται από clients που τρέχουν σε άλλα συστήματα. Ακόμα και αν ο server τρέχει σε κάποιον υπολογιστή-host ένας client μπορεί να θελήσει να τρέξει σε κάποιον απομακρυσμένο host ακόμα και αν αυτός βρίσκεται σε κάποια άλλη χώρα.

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

6.3.3 Απροστάτευτα X Windows

Μερικά παραδείγματα επικοινωνίας μεταξύ του X server και του X client περιλαμβάνουν τα ακόλουθα:

Κάθε client που έχει πρόσβαση στον server μπορεί να αποκτήσει πρόσβαση στις X επικοινωνίες και να τις τροποποιήσει. Αυτό μπορεί να περιλαμβάνει τα ακόλουθα:

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

6.3.4 Λύσεις Ασφάλειας

Υπάρχουν δύο διαφορετικές προσεγγίσεις όσον αφορά την ασφάλιση των X servers.

    1. Host Authentication - επιτρέπει την αποδοχή μιας σύνδεσης βασιζόμενη στην προέλευσή της (IP διεύθυνση του υπολογιστή που ζητάει τη σύνδεση). Όταν πλέον ο χρήστης πάρει πρόσβαση στον X server τότε αυτός είναι ανοικτός σε συνδέσεις από οποιονδήποτε υπολογιστή. Το πρόγραμμα που λέγεται xhost διαχειρίζεται, σε επίπεδο host-by-host, το ποιοι hosts μπορούν να εμφανίζουν clients στον X server. Αυτό επιτυγχάνεται με τη διατήρηση μιας λίστας από hosts στους οποίους παρέχεται ή όχι πρόσβαση. Η απλή αυτή μορφή πιστοποίησης αποτελεί τόσο το πλεονέκτημα όσο και το μειονέκτημά της. Βέβαια οι περισσότεροι hosts υποστηρίζουν πολλαπλούς χρήστες και έτσι είναι αδύνατο να καθορισθεί το ποιοι χρήστες σε έναν συγκεκριμένο host έχουν δικαίωμα πρόσβασης.
    2. Token Authentication - η δεύτερη προσέγγιση είναι η πιστοποίηση κάθε client η οποία βασίζεται στο token που αυτός προσφέρει. Χρησιμοποιώντας ένα πρόγραμμα που ονομάζεται xauth, κάθε client παραλαμβάνει ένα "magic cookie" το οποίο είναι μια τυχαία τιμή που πρέπει να προσφέρει στον X server για να του επιτραπεί η πρόσβαση.

Το πρόγραμμα xhost έχει μεγαλύτερη προτεραιότητα από το token authentication.


6.4 Ασφάλεια στην Java

6.4.1 Εισαγωγή

Η γλώσσα προγραμματισμού Java είναι ένα πρόσφατο προϊόν της Sun Microsystems Inc.. Ξεκίνησε σαν μέρος ενός μεγαλύτερου σχεδίου που αφορούσε την ανάπτυξη λογισμικού για καταναλωτικά ηλεκτρονικά. Πρόκειται για μικρές, αξιόπιστες, φορητές, πραγματικού χρόνου συσκευές που στην αρχή βασιζόντουσαν στην C++. Αρκετά προβλήματα όμως παρουσιάστηκαν και η γλώσσα C++ δεν μπόρεσε να εφαρμοστεί τελικά. Χρειάστηκε να αναπτυχθεί μία νέα γλώσσα: η Java. Η Java, στην τελική της μορφή, βρήκε περαιτέρω εφαρμογή στην επίλυση μερικών προβλημάτων του σημερινού προγραμματισμού, όπως animation, την αλληλεπίδραση πραγματικού χρόνου (real-time interaction) και την εξερεύνηση του Web (Web browsing).

Ας πάρουμε το World Wide Web για παράδειγμα. Οι Web browsers περιορίζονται σε ότι μπορεί να προσφέρει η HTML γλώσσα: σελίδες δυο διαστάσεων με κείμενο, φωτογραφίες ή γραφικά και συνδέσμους (links). Κάποια μορφή επεκτασιμότητας προσέφερε η JavaScript από την Netscape Corporation, αλλά οι σελίδες παραμένουν βαρετές, στατικές και χαζές σε περιεχόμενο. Οι Web browsers δεν διαθέτουν ακόμα την ιδιότητα της αλληλεπίδρασης πραγματικού χρόνου. Χρησιμοποιώντας την Java γλώσσα, η Sun κατασκεύασε τον νέο World Wide Web browser, τον HotJava. Πλέον, η σχέση μεταξύ server και client αλλάζει. Ο νέος browser εκμεταλλεύεται την υπολογιστική δύναμη του client και αντί να κατεβάζει απλές στατικές σελίδες κειμένου και εικόνων, ο HotJava κατεβάζει μικρά προγράμματα σε Java που τρέχουν στον client. Ο browser είναι γρήγορος, ευέλικτος, πολύπλευρος και εύκολα προσαρμόσιμος.

Από την ημέρα της δημοσιοποίηση της τον Μάιο του 1995, η Java έχει εξαπλωθεί σε όλο το Internet. Η Java έχει κιόλας λύσει τα περισσότερα προβλήματα στο μοντέλο client/server και έχει προάγει την χρήση του World Wide Web. Παρ' όλα αυτά, επειδή η Java έχει σχεδιαστεί για να χρησιμοποιείται σε ανοικτά, δικτυωμένα περιβάλλοντα, έχει βαθιές συνέπειες στην ασφάλεια ενός συστήματος υπολογιστών. Επίσης, η δυνατότητα της να διανέμει αυτόματα εκτελέσιμα αρχεία μέσω του Internet επηρεάζει, με την σειρά της, την ασφάλεια των δικτύων. Τα εκτελέσιμα αρχεία από το Internet συχνά κρύβουν παγίδες και δύσκολα μπορεί να είναι κανείς σίγουρος ότι ο κώδικας είναι ελεύθερος από ιούς.

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

6.4.2 Τι είναι Java

Η Java είναι δύο πράγματα: (α) γλώσσα προγραμματισμού και (β) πλατφόρμα.

Η Java σαν Γλώσσα Προγραμματισμού

Η Java χαρακτηρίζεται από τα εξής: απλή, αντικειμενοστραφής, συμβατή με δικτυακά πρωτόκολλα, ουδέτερη της υποκείμενης αρχιτεκτονικής, φορητή ασφαλής, υψηλής απόδοσης, δυναμική, σταθερή, interpreted και multithreaded. Στις ακόλουθες παραγράφους θα αναλύσουμε καθεμία από αυτές τις έννοιες.

Απλή

Στόχος της ομάδας της Sun που ανέπτυξε την Java, ήταν μια γλώσσα εύκολη στην χρήση, που δεν απαιτεί πολλή εξάσκηση και εκπαίδευση. Οι περισσότεροι προγραμματιστές στις μέρες μας δουλεύουν είτε με την C είτε με την C++. Έτσι, μολονότι η C++ δεν ήταν η κατάλληλη για το αρχικό σχέδιο, η Java σχεδιάστηκε βάσει της C++, με σκοπό να γίνεί όσο το δυνατόν περισσότερο κατανοητή.

Η Java παραλείπει πολλά από τα σπανίως χρησιμοποιούμενα και δυσκολονόητα χαρακτηριστικά της C++, που δεν ωφελούν και πολύ την ευελιξία της γλώσσας. Προστέθηκαν διεργασίες, όπως η αυτόματη συλλογή των "σκουπιδιών" (automatic garbage collection), διευκολύνοντας τον προγραμματισμό σε Java. Μια κοινή πηγή πολυπλοκότητας της C++ και της C είναι η διαχείριση της μνήμης. Με την καινούργια διεργασία της αυτόματης συλλογής "σκουπιδιών", που συνιστάται από την περιοδική αποδέσμευση της μνήμης που δεν χρησιμοποιείται, μεγάλο μέρος από την δουλεία των προγραμματιστών αυτοματοποιείται και μειώνονται τα bugs.

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

Αντικειμενοστραφής

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

Οι γλώσσες αντικειμενοστραφή προγραμματισμού είναι γλώσσες υψηλού επιπέδου, αφαιρετικές, αποτελεσματικές, γρήγορες και χρησιμοποιούνται για την δημιουργία μεγάλων και σημαντικών εφαρμογών. Οι αντικειμενοστραφής ευκολίες της Java είναι ίδιες με αυτές της C++, με επεκτάσεις από την Objectine C.

Συμβατή με Δίκτυα

Η Java έχει μια μεγάλη βιβλιοθήκη από ρουτίνες για την επιτυχημένη συνεργασία με τα πρωτόκολλα HTTP και FTP. Κατ 'αυτόν τον τρόπο, οι δικτυακές συνδέσεις δημιουργούνται ευκολότερα από ότι με την C ή την C++. Τα προγράμματα σε Java μπορούν να έχουν πρόσβαση μέσω δικτύου σε αντικείμενα , με την ίδια άνεση που ένας χρήστης προσπελάζει ένα τοπικό σύστημα αρχείων.

Σταθερή

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

Η μεγαλύτερη διαφορά μεταξύ Java και C/C++ είναι το γεγονός ότι η Java έχει ένα μοντέλο δεικτών που εξαφανίζει την πιθανότητα της επαναχρησιμοποίησης της μνήμης και την καταστροφή των δεδομένων. Αντί για αριθμητικούς δείκτες (pointer arithmetic), η Java έχει πραγματικούς πίνακες (true arrays). Οι προγραμματιστές της Java δεν έχουν να φοβηθούν την ακούσια (ή μη) τροποποίηση της μνήμης, γιατί δεν υπάρχουν δείκτες (pointers). Εξάλλου, τα προγράμματα σε Java δεν μπορούν να αποκοτήσουν μη εγκεκριμένη πρόσβαση στην μνήμη.

Ασφαλής

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

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

Ουδέτερη της Υποκείμενης Αρχιτεκτονικής

 

 


Η Java έχει σχεδιαστεί για να υποστηρίζει δικτυακές εφαρμογές. Ένα δίκτυο, όμως, αποτελείται από ποικιλία διαφορετικών συστημάτων, με διαφορετικές
CPU και λειτουργικά συστήματα. Για να μπορούν οι Java εφαρμογές να εκτελούνται παντού στο δίκτυο, το πρόγραμμα Java πρέπει να περάσει από δύο διαδικασίες ώστε να καταλήξει σε εκτελέσιμη μορφή. Πρώτα ο μεταγλωττιστής, μετατρέπει τον πηγαίο κώδικα του προγράμματος σε μία ενδιάμεση γλώσσα που καλείται Java bytecodes. Τα Java bytecodes είναι ανεξάρτητα της πλατφόρμας και με χρήση του ερμηνευτή (interpreter) κάθε bytecode εντολή μετατρέπεται σε κατάλληλη δυαδική μορφή για να τρέξει στον εκάστοτε υπολογιστή. Η μεταγλώττιση (compilation) συμβαίνει μόνο μια φορά για κάθε Java πρόγραμμα, η ερμηνεία (interpretation) γίνεται κάθε φορά που το πρόγραμμα εκτελείται. Το παρακάτω σχήμα επιδεικνύει πως λειτουργεί αυτή η φιλοσοφία.

Τα Java bytecodes μπορούμε να τα φανταστούμε σαν την γλώσσα μηχανής για την Java Virtual Machine (JVM). Κάθε Java ερμηνευτής (π.χ. ένας Web browser που μπορεί να τρέχει applets) είναι μια λογισμική εφαρμογή του της Java Virtual Machine. Η JVM αναλαμβάνει να μετατρέψει τα bytecodes σε κατάλληλη εκτελέσιμη μορφή, ανάλογα με το υποκείμενο software και hardware.

Η τεχνική που περιγράφηκε παραπάνω καλείται "write once, run anywhere". Το Java πρόγραμμα μεταγλωττίζεται μία φορά σε Java bytecodes με τον μεταγλωττιστή της Java. Έπειτα, τα bytecodes μπορούν να τρέξουν σε οποιαδήποτε μηχανή που έχει μία εφηρμοσμένη JVM (ο ερμηνευτής).

 

Φορητή

Το γεγονός ότι είναι ανεξάρτητη της υποκείμενης πλατφόρμας αποτελεί μεγάλο μέρος του ότι είναι φορητή, άλλα υπάρχουν και άλλα σημεία που χαρακτηρίζουν την φορητότητα της.

Σε αντίθεση με την C/C++ δεν υπάρχουν καθόλου χαρακτηριστικά που εξαρτούνται από την CPU του υπολογιστή. Έτσι, τα μεγέθη των πρωταρχικών τύπων δεδομένων είναι καθορισμένα και η συμπεριφορά τους είναι παντού η ίδια. Για παράδειγμα, "int" σημαίνει πάντα έναν 32 bit ακέραιο και "float" πάντα αντιπροσωπεύει έναν 32 bit floating αριθμό.

Interpreted

Τα Java bytecodes μεταφράζονται σε πραγματικό χρόνο σε εντολές μηχανής που εξαρτώνται από την εκάστοτε πλατφόρμα, και δεν αποθηκεύονται πουθενά. Η διαδικασία είναι γρήγορη και πιο αποτελεσματική. Μαζί με τα bytecodes μεταφέρονται πληροφορίες που μπορούν να χρησιμοποιηθούν κατά την εκτέλεση και παρέχουν την βάση για τους ελέγχους που πραγματοποιεί ο συνδετής (linker). Επίσης τα προγράμματα γίνονται πιο επιδεκτικά σε debugging διαδικασίες.

Υψηλής Απόδοσης

Η διαδικασία παραγωγής των εντολών μηχανής είναι απλή και γρήγορη. Ο κώδικας που προκύπτει είναι αποτελεσματικός. Ο μεταγλωττιστής από την μεριά του εφαρμόζει αυτόματη κατανομή των καταχωρητών (automatic register allocation) όταν παράγει τα bytecodes. Η τελική μορφή του κώδικα (εκτελέσιμη δυαδική μορφή) είναι μικρή σε μέγεθος και ταχύτατη στην εκτέλεση.

Multithreaded

Τα προγράμματα σε Java έχουν την δυνατότητα να αντιμετωπίζουν πολλές καταστάσεις – διαδικασίες ταυτόχρονα. Σε αντίθεση, η C και C++ είναι single-threaded γλώσσες. Τα πλεονεκτήματα του multithreading είναι η καλύτερη πραγματικού χρόνου συμπεριφορά και η καλύτερη αλληλεπιδραστική ανταπόκριση.

Δυναμική

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

Applets και Applications

Υπάρχουν δύο είδη προγραμμάτων στην Java: τα applets και οι applications.

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

Η Java Πλατφόρμα

Πλατφόρμα είναι το hardware ή software περιβάλλον όπου τρέχει ένα πρόγραμμα. Η Java πλατφόρμα διαφέρει από τις άλλες πλατφόρμες, γιατί είναι μία software-only πλατφόρμα που τρέχει πάνω από άλλες hardware πλατφόρμες. Οι υπόλοιπες πλατφόρμες περιγράφονται σαν συνδυασμός hardware και software.

Η Java πλατφόρμα έχει δύο στοιχεία: την Java Virtual Machine (JVM) και το Java Application Programming Interface (Java API).

 


Τα προγράμματα σε Java, λόγω της συμβατότητας τους με όλα είδη υπολογιστών, μπορεί να είναι λίγο πιο αργά σε εκτέλεση από ότι τα προγράμματα σε τοπική γλώσσα μηχανής. Η χρήση, όμως, just-in-time-compilers εξαλείφει και αυτό το πρόβλημα. Παρακάτω βλέπουμε το ολοκληρωμένο μοντέλο της Java πλατφόρμας.




6.4.3 Ασφάλεια στην Java

Το μοντέλο Sandbox

Το μοντέλο ασφαλείας στην Java επιτρέπει σε ένα χρήστη να εισάγει και να τρέξει applets από το Web ή από το εσωτερικό δίκτυο, χωρίς την δημιουργία υπερβολικού ρίσκου για την ακεραιτότητα της μηχανής του χρήστη. Οι ενέργειες του applet είναι περιορισμένες σε ένα θεωρητικό "κουτί", που καλείται "sandbox". Το sandbox καταλαμβάνει μια περιοχή του Web browser που αφιερώνεται στο applet. Το applet μπορεί να κάνει ότι θέλει μέσα στα όρια του sandbox, άλλα δεν μπορεί να διαβάσει ή να τροποποιήσει δεδομένα έξω από το sandbox. Το μοντέλο sandbox χρησιμοποιείται για την εκτέλεση μη έμπιστου κώδικα σε ένα ασφαλές περιβάλλον, ώστε εάν ο χρήστης κατεβάσει ένα "εχθρικό" applet, να μην μπορεί να καταστρέψει το σύστημα.

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

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

Χτίζοντας το Sandbox

Τα όρια και τα χαρακτηριστικά του sandbox καθορίζονται από τρία διαφορετικά συστήματα που λειτουργούν σε συνεργασία.

Class Loader

Όταν ένα applet πρόκειται να εισαχθεί από το δίκτυο, ο Web browser καλεί τον applet class loader. Ο class loader αναλαμβάνει να κατεβάσει τον εκτελέσιμο κώδικα από το δίκτυο και έπειτα εφαρμόζει την ιεραρχία του name space. Ο όρος "name space" περιγράφει το κομμάτι της JVM που έχει πρόσβαση ένα applet. Ο class loader αποτρέπει τα applet από την απόκτηση μη εγκεκριμένης πρόσβασης σε περισσότερο προνομιούχα μέρη του συστήματος και πιο συγκεκριμένα της μνήμης.

Τα applets που κατεβαίνουν από το Διαδίκτυο δεν μπορούν να δημιουργήσουν τους δικούς τους class loaders.

Verifier

Πριν την εκτέλεση ενός νεοφερμένου applet, ο class loader ξεκινά τον verifier. Ο verifier ελέγχει εάν το applet συμμορφώνεται με τους κανόνες της Java γλώσσας και ότι δεν παραβιάζονται οι περιορισμοί του name space. Επίσης, ο verifier ελέγχει για παραβιάσεις της διαχείρισης μνήμης, όπως η υπερχείλιση του stack και η χρήση παράνομων τύπων δεδομένων, που θα επέτρεπαν σε ένα "εχθρικό" applet να καταστρέψει τα δεδομένα της μνήμης ή να αντικαταστήσει κομμάτια μνήμης.

Αυτό που στην ουσία επιτελεί ο verifier είναι η διαχείριση της μνήμης και εξάλειψη των πιθανοτήτων επικάλυψης δεδομένων της. Η μη έγκυρη πρόσβαση στα δεδομένα της μνήμης ή της πρόσβασης των δεδομένων των αντικειμένων είναι αδύνατη. Όπως προείπαμε, αντί για αριθμητικούς δείκτες (pointer arithmetic), η Java έχει πραγματικούς πίνακες (true arrays), περιορίζοντας την δράση των ιών.

Security Manager

Ο security manager εφαρμόζει τα όρια γύρω από το sandbox. Οποτεδήποτε ένα applet προσπαθεί να πραγματοποιήσει μία ενέργεια που θα μπορούσε να καταστρέψει την μηχανή του χρήστη ή να διαβάσει απαγορευμένα δεδομένα, η JVM πρώτα ρωτά τον security manager εάν η συγκεκριμένη ενέργεια μπορεί να γίνει με ασφάλεια. Εάν ο security manager εγκρίνει την ενέργεια, για παράδειγμα όταν ένα applet από τον σκληρό δίσκο του υπολογιστή προσπαθεί να διαβάσει κάποιο αρχείο ή όταν ένα μη έμπιστο applet προσπαθεί να συνδεθεί με τον server του, η JVM θα εκτελέσει την ζητούμενη ενέργεια. Διαφορετικά, η JVM αρνείται να προχωρήσει στην εκτέλεση και γράφει ένα μήνυμα λάθους στην Java console.

Ο security manager δεν θα επιτρέψει σε ένα μη έμπιστο applet να διαβάσει ή να γράψει σε ένα αρχείο, να σβήσει ένα αρχείο, να πάρει πληροφορίες για ένα αρχείο, να εκτελέσει εντολές του συστήματος ή άλλα προγράμματα, να φορτώσει μια βιβλιοθήκη στην μνήμη ή να εγκαθιδρύσει σύνδεση με οποιαδήποτε μηχανή εκτός από τον server από τον οποίο προήλθε το applet.

Μια Java εφαρμογή ή ένας Web browser μπορεί να έχει μόνο έναν security manager, σιγουρεύοντας την εφαρμογή μίας και μόνης πολιτικής. Ο security manager φορτώνεται κατά την εκκίνηση του Web browser ή της Java εφαρμογής και δεν μπορεί να επεκταθεί, να παραληφθεί ή να αντικατασταθεί. Τέλος, ένα applet δεν μπορεί να δημιουργήσει τον δικό του security manager.

Στο παρακάτω σχήμα βλέπουμε μια αναπαράσταση του μοντέλου ασφαλείας της Java.

Χαρακτηριστικά της Γλώσσας

Η Java έχει αρκετά χαρακτηριστικά που προστατεύουν την ασφάλεια και την ακεραιότητα του συστήματος και που αποτρέπουν μερικές συνηθισμένες επιθέσεις. Τα Java προγράμματα δεν μπορούν να ορίζουν τους δικούς τους δείκτες στην μνήμη του συστήματος, ούτε έχουν απευθείας πρόσβαση στην φυσική μνήμη. Η γλώσσα ελέγχει όλες τις ενέργειες του applet ώστε να μην μπορεί να του επιτρέπεται να δημιουργήσει τους δικούς του class loader ή security managers. Έχει, επιπλέον, ειδικούς ελέγχους για κακομεταχείριση δεικτών και μνήμης.

Διαθέσιμη για Έρευνες

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

6.4.4 Επεκτείνοντας την Ασφάλεια στην Java

Υπογεγραμμένα JAR Αρχεία

Όλα τα δικτυωμένα συστήματα είναι ευάλωτα στις επιθέσεις man-in-the-middle. Για την καταπολέμηση τέτοιων επιθέσεων είναι απαραίτητη η υπογραφή της ανταλλασσόμενης πληροφορίας με τρόπο που να διασφαλίζεται η ακεραιότητα των δεδομένων και να μπορεί να επιβεβαιωθεί η ταυτότητα του αποστολέα πέρα από κάθε αμφιβολία. Ακολουθώντας αυτήν την φιλοσοφία, τα applets υπογράφονται με σκοπό την εμπιστοσύνη στο λογισμικό που διανέμεται ελεύθερα στο Διαδίκτυο.

Για την υπογραφή ενός applet, ο συγγραφέας του πρώτα δένει σε ένα ενιαίο πακέτο όλα τον Java κώδικα και τα συσχετιζόμενα αρχεία του applet, δημιουργώντας ένα Java Archive ή JAR. Ο συγγραφέας του applet, έπειτα, υπογραφεί το JAR και παράγει την υπογραφή αυτού που βασίζεται στα περιεχόμενα του. Χρησιμοποιείται ασύμμετρη κρυπτογραφία σε συνδυασμό με πιστοποιητικά για την μεταφορά της δημόσιας κλείδας. Οι αλγόριθμοι που εφαρμόζονται είναι οι MD5, DSA και ο SHA-1. Η μορφή του πιστοποιητικού ακολουθεί το πρωτόκολλο Χ.509.

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

Ευέλικτες Πολιτικές

Καθ' ότι οι ψηφιακές υπογραφές παρέχουν την απαραίτητη πιστοποίηση της ταυτότητας του αποστολέα του applet, είναι δυνατόν να εφαρμόζονται πιο ελαστικές και ευέλικτες πολιτικές ασφαλείας. Τα applets που προέρχονται από servers που εμπιστεύεται ο χρήστης, μπορούν να αντιμετωπίζονται με λιγότερους περιορισμούς.



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

Το μοντέλο της ασφάλειας αλλάζει ως εξής:



Επιπλέον, είναι δυνατόν ο
security manager να επιβάλλει διαφορετικά επίπεδα ασφαλείας, βασιζόμενος με το πόσο μπορεί να εμπιστευτεί τον εκδότη ενός applet ή ακόμα και το Internet σαν σύνολο.

Auditing

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

Κρυπτογράφηση

Τα υπογεγραμμένα applets παρέχουν την υπηρεσία της πιστοποίησης της ταυτότητας και την ακεραιότητα των δεδομένων. Είναι απαραίτητο, όμως, να διασφαλιστεί και το απόρρητο της συναλλαγής. Αυτό επιτυγχάνεται με την χρήση κρυπτογράφησης για την απόκρυψη της διακινούμενης πληροφορίας. Επί του παρόντος, αναπτύσσονται εργαλεία για την κρυπτογράφηση των Java αρχείων.

6.4.5 Ατέλειες

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

6.4.6 Περαιτέρω Πληροφορίες

Επιπλέον πληροφορίες για το μοντέλο ασφάλειας της Java και για την ίδια την γλώσσα, είναι διαθέσιμες στις παρακάτω ηλεκτρονικές σελίδες:

Java Security Resources -- http://pantheon.yale.edu/~dff/java.html

Java Security -- http://java.sun.com/sfaq/

Secure Internet Programming: Java Security: From HotJava to Netscape and Beyond http://www.cs.princeton.edu/sip/pub/secure96.html

Frequently Asked Questions - Applet Security -- http://swissnet.ai.mit.edu/~jbank/javapaper/javapaper.html

Java(tm) Technology Home Page -- http://java.sun.com/

Java White Papers -- http://java.sun.com/docs/white/


Κεντρική Σελίδα | Κεφάλαιο 1 | Κεφάλαιο 2 | Κεφάλαιο 3 | Κεφάλαιο 4 | Κεφάλαιο 5 | Κεφάλαιο 6