Next: Μελλοντικές κατευθύνσεις
Up: Χρήση του ArrayTracer μέσω
Previous: Σύστημα Διεπαφής με το
Το θέμα της ασφάλειας είναι σημαντικό αφού από τη στιγμή που
γίνεται η εγκατάσταση ενός εξυπηρετητή (Web Server) ανοίγεται ένα
παράθυρο στο τοπικό μας δίκτυο, από όπου οποιοσδήποτε χρήστης μπορεί
να διεισδύσει. Αποτελεί κοινή διαπίστωση ότι προγράμματα λογισμικού
που περιέχουν λογικά σφάλματα δημιουργούν προβλήματα
ασφάλειας. Επιπλέον ισχύει ότι τα μεγάλα σε μέγεθος προγράμματα
περιέχουν περισσότερα τέτοιου είδους σφάλματα και οι εξυπηρετητές
είναι προγράμματα μεγάλου μεγέθους. Τέλος οι εξυπηρετητές επιτρέπουν
την εκτέλεση διαφόρων CGI προγραμμάτων τα οποία επίσης μπορεί να
περιέχουν σφάλματα που οδηγούν σε προβλήματα ασφάλειας. Γενικά τα
προβλήματα που μπορεί να δημιουργηθούν είναι,
- Απόρητα έγγραφα να διαρρεύσουν σε μη επιτρεπτούς
χρήστες.
- Απόρητες πληροφορίες, όπως αριθμοί πιστωτικών καρτών,
να διαρρεύσουν σε μη επιτρεπτούς
χρήστες.
- Διαρροή πληροφοριών για το σύστημα στο οποίο έχει εγκατασταθεί ο
εξυπηρετητής, σε χρήστες που δεν έχουν δικαιώματα εισόδου στο σύστημα
- Σφάλματα που επιτρέπουν την εκτέλεση εντολών στο
μηχάνημα που έχει εγκατασταθεί ο εξυπηρετητής, επιτρέποντας
την βλάβη ή και καταστροφή του συστήματος
Για τον περιορισμό της δημιουργίας προβλημάτων ασφάλειας στο
σύστημα όπου έχει εγκατασταθεί ο εξυπηρετητής ακολουθήσαμε ορισμένες
βασικές αρχές προσαρμοσμένες στις λειτουργίες του δικού μας
εξυπηρετητή.
- Το μέγεθος και οι λειτουργίες που παρέχονται από τον
εξυπηρετητή στους χρήστες είναι περιορισμένα έτσι ώστε να μην
εισάγονται τυχόν σφάλματα που δεν είναι εύκολο να
ανακαλυφθούν.
- Μια σειρά από αρχεία όπου αποθηκεύεται πληροφορία,
σχετική με τη χρήση του εξυπηρετητή από τους χρήστες (
access_log, error_log, agent_log, referer_log)
ελέγχονται συχνά για τυχόν προσπάθειες παραβίασης του
συστήματος, πχ. rm, setenv, μεγάλου μεγέθους ορίσματα σε
προγράμματα CGI.
- Δεν επιτρέπεται η αυτόματη παροχή λίστας περιεχομένων
των υποκαταλόγων ενός τμήματος του συστήματος αρχείων. Ο λόγος
είναι γιατί όσο περισσότερη πληροφορία παρέχεται για το
σύστημα, τόσο πιο ανασφαλές είναι αυτό ενάντια σε πιθανούς
εισβολείς.
- Δεν επιτρέπεται η επέκταση του δέντρου κειμένων
(document tree), με τη χρήση συμβολικών συνδέσμων
(symbolic links), διότι είναι πιθανό κάποιος να
προσπαθήσει να δημιουργήσει ένα σύνδεσμο σε ευαίσθητες
περιοχές του συστήματος, πχ /etc.
- Δεν επιτρέπεται η εκτέλεση προγραμμάτων από περιφερειακά
κείμενα που συμπεριλαμβάνονται στον εξυπηρετητή (server
side includes).
Στα CGI προγράμματα του εξυπηρετητή μας έχουμε ακολουθήσει τις
πιο κάτω βασικές αρχές που περιορίζουν την δημιουργία
προβλημάτων ασφάλειας.
- Εκτός του διαχειριστή του εξυπηρετητή, κανείς άλλος
δεν προσθέτει εκτελέσιμα CGI προγράμματα.
- Το μέγεθος τους είναι μικρό και η πολυπλοκότητα τους
μηδενική.
- Επιστρέφουν μόνο πληροφορία για την επιτυχή ή όχι
εκτέλεση και το λόγο αποτυχίας, αν αυτός δεν παρέχει
πληροφορίες σχετικά με το σύστημα που έχει εγκατασταθεί ο
εξυπηρετητής.
- Εχουν υλοποιηθεί σε C γλώσσα και όχι σε κάποια
script language, έτσι ώστε το περιεχόμενο του εκτελέσιμου
προγράμματος να μην προδίνει τον τρόπο λειτουργίας
του. Επιπλέον προγράμματα σε script language πολύ εύκολα
μπορεί να χρησιμοποιηθούν για την εκτέλεση εντολών στο
κέλυφος. Ακόμη το μέγεθος τους είναι μεγάλο με αποτέλεσμα να
είναι πιο πιθανό να περιέχουν κάποιο λογικό σφάλμα.
- Σε αρκετές περιπτώσεις τα CGI προγράμματα που
χρησιμοποιεί ο εξυπηρετητής μας, εκτελούν κάποιες εντολές στο
κέλυφος. Τότε τα ορίσματα που
παρέχονται στο script ελέγχονται. Ακόμη καθορίζεται το
πλήρες μονοπάτι των προγραμμάτων που πρόκειται να εκτελεστούν
από το κέλυφος.
- Τα ορίσματα τα οποία προέρχονται από φόρμες που
συμπληρώνει ο χρήστης δεν υποθέτουμε ότι έχουν ένα μέγιστο
μέγεθος. Μια τέτοια υπόθεση θα μπορούσε πιθανότατα να οδηγήσει
σε κάποιο αρχείο
πυρήνα που δίνει πληροφορίες σε ένα πιθανό εισβολέα.
Παρόλη την τήρηση αυτών των βασικών αρχών, η φύση του
όλου συστήματος διεπαφής εισάγει ένα σημαντικό πρόβλημα
ασφάλειας.
Αυτό είναι η δυνατότητα που έχει ο χρήστης να εκτελέσει το
εργαλείο μας με αρχεία εισόδου καθορισμένα από αυτόν. Συνεπώς
η μεταφορά τους στην περιοχή του εξυπηρετητή και η χρήση τους
από το εργαλείο μας είναι προβληματική. Για το λόγο αυτό οι
χρήστες πρέπει απαραίτητα να διαθέτουν ένα λογαριασμό (
Ταυτότητα Χρήστη, Λέξη Κλειδί) που
χρησιμοποιείται για αναγνώριση (User Authentication) των
χρηστών και για τοn
περιορισμό χρήσης του εργαλείου από χρήστες που χαίρουν της
εμπιστοσύνης μας (trusted users).
Αυτός ο περιορισμός δεν είναι δυνατόν να αποφευχθεί και
δυστυχώς δεν μας εξασφαλίζει πλήρως, καθώς η κωδικοποίηση της
λέξης κλειδιού καθορίζει το πόσο εύκολα κάποιος μη επιτρεπτός
θα καταφέρει να χρησιμοποιήσει το εργαλείο, χωρίς την
απαραίτητη άδεια. Υπάρχουν διάφοροι τρόποι κωδικοποίησης που
μέχρι στιγμής δεν έχουν χρησιμοποιηθεί. Ετσι στηριζόμαστε στο
ότι πρέπει κάποιος πιθανός εισβολέας να "κλέψει" το σωστό
πακέτο από το δίκτυο, που περιέχει τη λέξη κλειδί και να
γνωρίζει τον τρόπο αποκωδικοποίησης της βασικής μεθόδου
κωδικοποίησης που χρησιμοποιούμε.
Το μοναδικό πρόβλημα που ανιχνεύθηκε σε σχέση με την ασφάλεια
του χρήστη είναι στη διαδικασία μεταφοράς των αρχείων
του. Ετσι για τη μεταφορά πρέπει να καθορίσει ο χρήστης το
password του, ώστε τα αρχεία του να μεταφερθούν με
ftp στην περιοχή του εξυπηρετητή. Αν όμως ο χρήστης του
ArrayTracer τοποθετήσει τα αρχεία του σε μια περιοχή που
μπορεί να μεταφερθούν με ανώνυμο τρόπο anonymous ftp,
τότε το password του δεν χρειάζεται να αποκαλυφθεί. Αυτή
άλλωστε είναι και η ιδέα που προέκυψε κατά τη σχεδίαση του
συστήματος διεπαφής.
zaras@ics.forth.gr