Η βάση δεδομένων στεγάζει και περιέχει δεδομένα τα οποία επεξεργάζονται το σύνολο των εφαρμογών στο πληροφοριακό περιβάλλον ενός Οργανισμού, γι’ αυτό και οφείλουμε να εστιάσουμε την προσοχή μας προκειμένου να διασφαλίσουμε αποτελεσματικά τις εφαρμογές. Όλοι μας λίγο πολύ έχουμε βιώσει τις τεράστιες αλλαγές που έχουν σημειωθεί τα τελευταία 20 χρόνια στο χώρο των ηλεκτρονικών υπολογιστών και πιο συγκεκριμένα στην εξέλιξη του λογισμικού και των εφαρμογών που «τρέχουν» σε αυτούς. Οι ραγδαίες αυτές εξελίξεις έχουν ως απώτερο στόχο φυσικά την αύξηση της παραγωγικότητας.
Πολλοί ίσως θυμούνται ακόμη «DOS» εφαρμογές, οι οποίες τις περισσότερες φορές δημιουργούσαν περισσότερα προβλήματα από αυτά τα οποία υποστήριζαν ότι μπορούσαν να λύσουν. Ήταν αργές, ασταθείς και τελικά έδιναν την αίσθηση στους χρήστες πως καλά θα έπρατταν αν δεν εγκατέλειπαν τις χειροκίνητες διαδικασίες, τις οποίες μέχρι πρότινος χρησιμοποιούσαν για να φέρουν εις πέρας τις εργασίες τους.
Από τότε ως σήμερα, μεγάλη απόσταση έχει διανυθεί έχοντας πλέον φτάσει στο σημείο να βιώνουμε καθημερινά – τόσο στον τόπο εργασίας μας, όσο και στην προσωπική μας ζωή και ψυχαγωγία – τον αντίκτυπο των τεχνολογικών «buzz words» της εποχής μας, όπως είναι η υπηρεσιοστρεφής αρχιτεκτονική ή οι αρχιτεκτονικές πολλαπλών επιπέδων ή ακόμη η δημιουργία «Frameworks» που υπόσχονται την ανάπτυξη εφαρμογών γρηγορότερων, αποδοτικότερων, ασφαλέστερων, αλλά και φιλικότερων προς το χρήστη. Παράλληλα όμως, αυτό το οποίο ίσως να ξεχνάμε όντας πιασμένοι μέσα στη δίνη της ραγδαίας ανάπτυξης που σημειώνεται τα τελευταία χρόνια στο χώρο του λογισμικού, είναι πως τόσο η έλλειψη όσο και αντίστροφα, η επιτυχία των σημερινών αλλά και των μελλοντικών εφαρμογών, μεταξύ άλλων οφείλεται σε τεράστιο βαθμό στην ανάπτυξη ενός συγκεκριμένου μέρους (ή τμήματος) που εμπεριέχεται σε μία εφαρμογή. Αυτό το τμήμα δεν είναι άλλο από τη βάση δεδομένων, η οποία ανεξαρτήτως της συγκεκριμένης μορφής και φύσης της, αποτελεί αναπόσπαστο τμήμα της αρχιτεκτονικής κάθε είδους εφαρμογής (Σχήμα 1).
Οι βάσεις δεδομένων είναι υπεύθυνες να στεγάζουν επί μακρόν, να κάνουν άμεσα διαθέσιμο αλλά και για να εγγυούνται την εγκυρότητα (τουλάχιστον σε μεγάλο μέρος) του σημαντικότερου αγαθού του σύγχρονου πληροφοριακού περιβάλλοντος, την πληροφορία. Στη σημερινή εποχή έχει λεχθεί πολλές φορές – και ίσως όχι άδικα -πως όποιος ελέγχει την πληροφορία και τη ροή της έχει και το ανταγωνιστικό πλεονέκτημα. Δεν είναι παράλογο λοιπόν να ισχυριστούμε πως η μη εξουσιοδοτημένη ή μη ελεγχόμενη πρόσβαση στη βάση, μπορεί να έχει επιζήμια αποτελέσματα για τον εκάστοτε Οργανισμό. Πηγαίνοντας ένα βήμα ακόμη πιο πέρα, επανεξετάζοντας την τελευταία δήλωση, η δημιουργία και η ύπαρξη προτύπων ασφαλείας όπως για παράδειγμα το ISO27001, καθώς και το πιο πρόσφατο PCI/DSS, τα οποία μιλούν για τη διατήρηση της ασφάλειας των πληροφοριακών συστημάτων, οφείλουμε να παρατηρήσουμε πως τελικά αναφέρονται και στοχεύουν στην προστασία της ίδιας της πληροφορίας. Θα πρέπει λοιπόν να συνειδητοποιήσουμε έμπρακτα πως προκειμένου να διασφαλίσουμε αποτελεσματικά τις εφαρμογές και τα πληροφοριακά συστήματα, οφείλουμε να εστιάσουμε την προσοχή μας σε έναν ακόμη παράγοντα, τη βάση δεδομένων, η οποία στεγάζει και περιέχει τα δεδομένα που επεξεργάζονται (κατά οποιονδήποτε τρόπο) το σύνολο των εφαρμογών που στελεχώνουν το πληροφοριακό περιβάλλον ενός Οργανισμού. Επιπλέον είναι ίσως εύκολο να αντιληφθούμε πως όπως συμβαίνει με οποιασδήποτε άλλης μορφής λογισμικό, οι ευπαθείς βάσεις δεδομένων μπορούν να κατηγοριοποιηθούν. Το Σχήμα 2 παρουσιάζει μία εποπτική αναπαράσταση των ακόλουθων αδυναμιών, οι οποίες και θα αναλυθούν στη συνέχεια:
- Ευπάθειες σε πρωτόκολλα αποκατάστασης της επικοινωνίας μέσω μη εξουσιοδοτημένης πρόσβασης.
- Ευπάθειες σε πρωτόκολλα αποκατάστασης της επικοινωνίας μέσω εξουσιοδοτημένης πρόσβασης.
- Ευπάθειες σε πρωτόκολλα αυθεντικοποίησης.
- Ευπάθειες στην εξουσιοδότηση λειτουργικότητας.
- Ευπάθειες έκχυσης «SQL».
- Ευπάθειες υπερχείλισης της ενδιάμεσης χρησιμοποιούμενης μνήμης αποθηκευμένων διαδικασιών, μη υποβαλλόμενων σε λίστες ελέγχου.
- Ευπάθειες υπερχείλισης της ενδιάμεσης χρησιμοποιούμενης μνήμης αποθηκευμένων διαδικασιών, υποβαλλόμενων σε λίστες ελέγχου.
Ανάλυση Τύπου Ευπαθειών
Σε σχέση με τα όσα επιγραμματικά αναφέρθηκαν στην προηγούμενη παράγραφο, μια σημαντική κατηγορία ευπαθειών που διακρίνει τις βάσης δεδομένων είναι μεταξύ άλλων και οι αδυναμίες σε πρωτόκολλα που έχουν ως στόχο τους να αποκαταστήσουν την επικοινωνία μεταξύ εξωτερικών εφαρμογών και του εξυπηρετητή (database server). Τις περισσότερες φορές, τα πρωτόκολλα αυτά κάνουν διαθέσιμες μια σειρά από συναρτήσεις πάνω από το δίκτυο, μέσω μιας γνωστής θύρας στη βάση. Ο στόχος είναι να μεταφέρουν μια αλληλουχία «bytes» από τον πελάτη (client) στον εξυπηρετητή της βάσης, ώστε να μπορέσουν οι απομακρυσμένες εφαρμογές -πελάτες να ανακαλύψουν δυναμικά πώς πρέπει να προχωρήσουν προκειμένου τελικά να εγκαθιδρυθεί η δυνατότητα επικοινωνίας μεταξύ τους. Το πρόβλημα είναι πως αρκετά συχνά οι συναρτήσεις αυτές είναι ευπαθείς σε υπερχείλιση της ενδιάμεσης χρησιμοποιούμενης μνήμης (buffer overflows) από τον εξυπηρετητή, με αποτέλεσμα τα συνήθη βήματα που ακολουθούνται κατά τη διάρκεια της διαδικασίας εγκαθίδρυσης της επικοινωνίας (όπως για παράδειγμα η αυθεντικοποίηση των αιτημάτων από τις εφαρμογές) να μπορούν να παρακαμφθούν, επιτρέποντας την πρόσβαση σε μη εξουσιοδοτημένους χρήστες. Πολλές δημοφιλείς βάσεις δεδομένων, όπως για παράδειγμα η «MySql» και ο «Microsoft SQL Server» έχουν εμφανίσει αρκετές φορές ευπάθειες αυτού του τύπου.
Μια ακόμη κατηγορία ευπαθειών που αφορούν στις βάσεις δεδομένων και συνήθως κατορθώνουν να συγκεντρώσουν αρκετό ενδιαφέρον στον κύκλο των «hackers», είναι εκείνες οι οποίες χαρακτηρίζουν αδυναμίες σε κάποιο πρωτόκολλο επικοινωνίας, όπως για παράδειγμα την εγκαθίδρυση συνδέσεων μέσω «named pipes». Η διαφορά με την προηγούμενη κατηγορία ευπαθειών είναι πως αυτή εδώ, αφορά σε χρήστες που έχουν ήδη ταυτοποιηθεί στον εξυπηρετητή με κάποια εξουσιοδοτημένη ταυτότητα και λόγω του σφάλματος που εμφανίζεται στο πρωτόκολλο επικοινωνίας, μπορεί να καταστεί δυνατή η εκτέλεση οποιωνδήποτε εντολών, ακόμη και αυτών που κανονικά θα ήταν μη προσβάσιμες στη συγκεκριμένη ταυτότητα. Έτσι, η συγκεκριμένη κατηγορία αδυναμιών – όπως άλλωστε συμβαίνει και με την προηγούμενη κατηγορία – συναντάται σε πάρα πολλές εμπορικές και μη βάσεις δεδομένων, όπως για παράδειγμα τη «DB2».
Συνεχίζοντας τη χαρτογράφηση των ευπαθειών που μπορούν να συναντηθούν σε ένα περιβάλλον που συγκαταλέγει βάσεις δεδομένων, δεν θα μπορούσαμε παρά να αναφερθούμε και στην κατηγορία που περιλαμβάνει εκείνες τις αδυναμίες που σχετίζονται με σφάλματα στα πρωτόκολλα αυθεντικοποίησης του εξυπηρετητή. Σε αυτήν την κατηγορία συγκαταλέγονται πρωτόκολλα τα οποία είτε χρησιμοποιούν συνθηματικά (passwords) που μεταφέρονται από την εφαρμογή-πελάτη (client) στη βάση, χωρίς κανενός είδους προστασία, είτε πρωτόκολλα τα οποία βασίζουν την προστασία των μεταφερόμενων δεδομένων σε ασαφείς και αδύναμες μεθόδους και όχι σε ενδεδειγμένους, κρυπτογραφικής ισχύος αλγόριθμους. Αυτού του είδους οι αδυναμίες, καθώς επίσης και περιπτώσεις όπου οι μηχανισμοί αυθεντικοποίησης ελέγχουν μόνο την ύπαρξη κατακερματισμένων (hashed) συνθηματικών και όχι των ίδιων των συνθηματικών, έχουν παρατηρηθεί εκτεταμένα στο παρελθόν από αρκετούς ερευνητές σε δημοφιλείς βάσεις δεδομένων, όπως για παράδειγμα η «MySQL».
Σε σχέση με την κατηγορία που αναφέραμε προηγουμένως, θα πρέπει να προσθέσουμε πως υπάρχουν και τύποι αδυναμιών που επιτρέπουν την πρόσβαση σε λειτουργικότητα, η οποία κανονικά θα όφειλε να είναι διαθέσιμη μόνο σε εξουσιοδοτημένους χρήστες. Φυσικά, είναι εύκολο να υποθέσουμε βασισμένοι στη μέχρι τώρα εμπειρία μας, πως είναι άλλο ζήτημα το τι κανονικά θα έπρεπε να συμβαίνει και άλλο το τι συμβαίνει στην πράξη. Έτσι, είναι αρκετά συχνό φαινόμενο σε εταιρικά περιβάλλοντα το να βρεθεί κάποιο τμήμα ενός εξυπηρετητή βάσης που παρέχει μεταξύ της συνηθισμένης του λειτουργικότητας και κάποιο είδος λειτουργικότητας – η οποία θα έπρεπε μεν κανονικά να υποβάλλεται σε αυστηρά κριτήρια ελέγχου σε σχέση πάντα με το ποιος επικαλείται πρόσβαση σε αυτήν – αλλά δεν συμβαίνει. Αυτή η περίπτωση εύκολα μπορεί να οδηγήσει σε περιπτώσεις όπου οποιεσδήποτε τυχαίες εντολές μπορούν να εκτελεστούν από τον εξυπηρετητή, ακόμη και αυτές που αφορούν στο ίδιο το λειτουργικό σύστημα του εξυπηρετητή που στεγάζει τη βάση. Χαρακτηριστικό παράδειγμα αποτελεί ο «TNS Listener» της «Oracle» (εκδόσεις 8 και 9i) όπου ένας απομακρυσμένος επιτιθέμενος μπορούσε να εκτελέσει οποιαδήποτε διαδικασία ή εντολή μέσω του «extproc» μηχανισμού της βάσης.
Προχωρώντας, από τη λίστα δεν θα μπορούσαν φυσικά να λείπουν ευπάθειες οι οποίες αφορούν στο πολυσυζητημένο και δημοφιλές θέμα των «SQL Injections». Είναι ίσως αλήθεια, πως οι περισσότεροι Οργανισμοί και εταιρείες έχουν πλέον αποκτήσει συνείδηση (τουλάχιστον μερικώς) των συγκεκριμένων ευπαθειών, ειδικά όσον αφορά στο πεδίο των δικτυακών εφαρμογών (web applications). Αυτό που οι περισσότεροι μάλλον δεν συνειδητοποιούν ακόμη, είναι πως ο κίνδυνος για «SQL Injections» είναι ορατός και υπάρχει θεωρητικά σε οποιοδήποτε κομμάτι κώδικα που κατασκευάζει δυναμικά και εκτελεί «SQL» εντολές. Αυτό πρακτικά σημαίνει πως και οι αποθηκευμένες διαδικασίες (stored procedures) των βάσεων δεδομένων, που ίσως οι περισσότεροι θεωρούν αδιάβλητες, είναι εξίσου ευάλωτες στην πραγματικότητα. Αξίζει βέβαια να τονίσουμε πως ενόσω η δυνατότητα για «SQL Injections» είναι υπαρκτή, η βασική αιτία του προβλήματος που περιγράφουμε προέρχεται από το γεγονός πως οι αποθηκευμένες διαδικασίες εκτελούνται στη βάση – είτε με τα προνόμια του χρήστη που επικαλείται τη διαδικασία είτε του χρήστη που ορίζει/δημιουργεί τη διαδικασία. Έτσι, αν για παράδειγμα ο χρήστης που δημιούργησε τη διαδικασία έχει πολλά προνόμια και υπάρχει μία αδυναμία «SQL Injection», τότε ένας επιτιθέμενος θα μπορούσε να το εκμεταλλευτεί αυτό και να κλιμακώσει τα δικά του προνόμια.
Αυτό είναι ιδιαίτερα αληθές για την «Oracle» αφού όπως έχει αποκαλυφθεί στο παρελθόν από διάφορους ερευνητές, έχουν ανακαλυφθεί αρκετές αδυναμίες αυτής της κατηγορίας, με χαρακτηριστικότερη εκείνη της «DRILOAD.VALIDATE_SMT» διαδικασίας. Στην περίπτωση αυτή, ένας επιτιθέμενος θα μπορούσε με χαρακτηριστική ευκολία να κλιμακώσει τα προνόμιά του, αφού η διαδικασία είναι διαθέσιμη και μπορεί να χρησιμοποιηθεί από όλους τους χρήστες. Βέβαια υπάρχουν και αρκετές βάσεις δεδομένων (όπως π.χ. η «SYBASE» και ο «SQL SERVER») στις οποίες τα προνόμια των αποθηκευμένων διαδικασιών ρυθμίζονται να εκτελούνται αυτόματα με αυτά του χρήστη που τις καλεί. Έτσι, ενόσω δεν μπορούμε να αρνηθούμε ότι η συγκεκριμένη κατηγορία ευπαθειών είναι πιθανό να υπάρχει, εντούτοις η πρακτική της αξία για κάποιον επιτιθέμενο ίσως να είναι περιορισμένη (τουλάχιστον σε μερικά περιβάλλοντα) εφόσον σύμφωνα με τα όσα είπαμε παραπάνω, για να εκμεταλλευτεί την υποτιθέμενη «SQL Injection» αδυναμία σε κάποια αποθηκευμένη διαδικασία και να κλιμακώσει τα προνόμιά του, θα πρέπει ήδη να έχει υψηλά προνόμια προκειμένου να μπορέσει να έχει πρόσβαση σε κάποιο σημαντικό αρχείο.
Επίσης, μια ακόμη πολύ ενδιαφέρουσα κατηγορία ευπαθειών που διακρίνει τις βάσεις δεδομένων είναι και εκείνη που αναφέρεται σε υπερχείλιση της ενδιάμεσης χρησιμοποιούμενης μνήμης (buffer overflows) κάποιων αποθηκευμένων διαδικασιών (stored procedures) και γραμματικών στοιχείων τύπου «SQL», οι οποίες δεν υπόκεινται σε λίστες ελέγχου (όπως οι REVOKE και GRANT). Αυτού του είδους οι ευπάθειες είναι περισσότερο ανησυχητικές από όσο μάλλον δείχνουν εκ πρώτης όψεως και αυτό γιατί θα μπορούσαν να εκμεταλλευτούν από έναν επιτιθέμενο ακόμη και διαμέσω του Διαδικτύου. Ένα τέτοιο σενάριο θα μπορούσε εύκολα να πραγματωθεί στην περίπτωση μιας διαδικτυακής εφαρμογής που παρουσιάζει κάποια «SQL Injection» αδυναμία (πράγμα συνηθισμένο για τέτοιου τύπου εφαρμογές) δίνοντας έτσι τη δυνατότητα στον επιτιθέμενο να περάσει μια αρκούντως μεγάλη εντολή στη βάση, η οποία με τη σειρά της θα προκαλέσει και την υπερχείλιση της ενδιάμεσης χρησιμοποιούμενης μνήμης. Επιπλέον, αξίζει ίσως να σημειωθεί πως ένας ακόμη λόγος που καθιστά τη συγκεκριμένη κατηγορία ευπαθειών αρκετά επικίνδυνη, είναι πως υπάρχει μια πραγματική δυσκολία στην αποτελεσματική γραμματική ανάλυση στοιχείων και εκφράσεων τύπου «SQL» από τους προγραμματιστές, οι οποίοι συχνά ούτως ή άλλως υποπίπτουν σε σφάλματα που οδηγούν σε κενά ασφάλειας.
Τέλος, σε στενή σχέση με την προηγούμενη κατηγορία ευπαθειών που περιγράψαμε, αλλά σε κάπως πιο ήπια μορφή, είναι και οι ευπάθειες οι οποίες αφορούν μεν στην υπερχείλιση της ενδιάμεσης χρησιμοποιούμενης μνήμης (buffer overflows) κάποιων αποθηκευμένων διαδικασιών (stored procedures) και γραμματικών στοιχείων τύπου «SQL», αλλά σε αντίθεση με την προηγούμενη κατηγορία, οι διαδικασίες αυτές υπόκεινται κανονικά σε λίστες ελέγχου. Έτσι, ενόσω το ρίσκο – θεωρητικά τουλάχιστον – από αυτού του τύπου τις διαδικασίες είναι μικρότερο, μιας και θα μπορούσε απλώς να τους αφαιρεθούν τα προνόμια τα οποία τους έχουν αποδοθεί (μέσω ενός REVOKE για παράδειγμα), εντούτοις οι περισσότερες από τις εν λόγω διαδικασίες και εντολές «SQL» εξ’ ορισμού είναι εφοδιασμένες με μια πληθώρα προνομίων.
Χαρακτηριστικά παραδείγματα αυτού του είδους ευπαθειών έχουν εμφανιστεί κατά διαστήματα σε πολλές από τις δημοφιλέστερες εμπορικής εμβέλειας βάσεις δεδομένων, όπως για παράδειγμα το «Microsoft SQL Server» με το buffer overflow στην αποθηκευμένη διαδικασία «xp_setsqlsecurity» ή την αντίστοιχη αδυναμία στη SQL εντολή «BULK INSERT», χωρίς βέβαια να εξαιρείται από τη συγκεκριμένη κατηγορία προβλημάτων ούτε η «Oracle» (με τη συγκεκριμένου τύπου αδυναμία στην εντολή CREATE DATABASE LINK ). Από την άλλη μεριά – και αυτό που κάνει την κατάσταση να μην είναι ίσως τελικά τόσο ήπια, είναι πως στην πράξη παρόλο που η συγκεκριμένου τύπου αδυναμία αφορά σε εντολές και διαδικασίες οι οποίες υπόκεινται σε λίστες ελέγχου, στην πραγματικότητα δεν είναι εύκολο κανείς να εντοπίσει και να αφαιρέσει με αρκετά αξιόπιστο τρόπο τα παραπανίσια προνόμια, εξαιτίας των πολλαπλών εξαρτήσεων με άλλα τμήματα κώδικα και προγράμματα.
Εν Κατακλείδι.
Συνοψίζοντας, μέσα από αυτήν τη σύντομη αναδρομή στους τύπους αδυναμιών που διακατέχουν τις σύγχρονες βάσεις δεδομένων, θα πρέπει να γίνει κατανοητό ότι όπως όλα τα είδη λογισμικού έτσι και εκείνες εμφανίζουν με τη σειρά τους από μια αρκετά μεγάλη γκάμα προβλημάτων από άποψη ασφάλειας . Επίσης, οι αδυναμίες αυτές σε συνδυασμό με την εξέχουσα θέση που κατέχουν οι βάσεις στα μοντέρνα υπολογιστικά περιβάλλοντα και το βαθμό αλληλεπίδρασής τους με κάθε είδους εφαρμογή, είναι μάλλον εύκολο να καταλάβουμε γιατί αποτελούν πρωτεύοντα στόχο για κάθε επιτιθέμενο. Αν επιπλέον προσθέσουμε στη λίστα με τα προηγούμενα και το γεγονός ότι υπάρχουν ελεύθερα στο Διαδίκτυο μια πλειάδα εργαλείων που μπορούν να ευκολύνουν σημαντικά τη δουλειά των εκάστοτε επιτηδείων, τότε εύκολα καταλήγουμε στο συμπέρασμα πως δεν είναι δυνατό να διατηρήσουμε την ασφάλεια των πληροφοριακών συστημάτων ενός Οργανισμού, αν δεν ασχοληθούμε ενδελεχώς και με τα προβλήματα των βάσεων δεδομένων που χρησιμοποιεί. Προς αυτήν την κατεύθυνση, η καταγραφή και η χαρτογράφηση των αδυναμιών τους, είναι ένα σημαντικό πρώτο βήμα προς την αποτελεσματικότερη προστασία τους.
Του Ευάγγελου Μωράκη
BEng., MSc Infosec, PhD Intrusion Detection
ISO27001 LA, SCJP
Senior Security Strategy Consultant