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

Εισαγωγή
Σε προηγούμενο άρθρο είχαμε αναφερθεί στην ανάγκη ενσωμάτωσης της ασφάλειας στον κύκλο ζωής ανάπτυξης μιας εφαρμογής, χρησιμοποιώντας διαδικασίες σχετικές με την ασφάλεια. Οι διαδικασίες αυτές έπρεπε να περιλαμβάνουν κατ’ ελάχιστον τα εξής: προσδιορισμό των στόχων ασφάλειας, εφαρμογή σωστών τεχνικών και αρχών σχεδιασμού, δημιουργία μοντέλου απειλών, αναθεώρηση της αρχιτεκτονικής και του κώδικα της εφαρμογής, εκτέλεση δοκιμών με έμφαση στην ασφάλεια κοκ. [1, 2, 3].

Στο σημερινό άρθρο θα αναφερθούμε στους στόχους ασφάλειας (security objectives) μιας εφαρμογής, οι οποίοι θέτουν το πλαίσιο που θα πρέπει να κινηθείτε ώστε να δώσετε προτεραιότητα στις διάφορες απαιτήσεις και να πετύχετε τα κατάλληλα trade-offs. Η ασφάλεια είναι μια ιδιότητα που πρέπει να εξισορροπηθεί με άλλες ποιοτικές και ποσοτικές ιδιότητες (π.χ. αποτελεσματικότητα, συμμόρφωση με πρότυπα, ποιότητα εξυπηρέτησης κ.λπ.) αλλά και περιορισμούς ως προς την ανάπτυξη της εφαρμογής. Έτσι λοιπόν, ο καθορισμός των στόχων ασφάλειας θα σας βοηθήσει να προσδιορίσετε αρχικά τι πρέπει να πετύχετε όσον αφορά την ασφάλεια και αργότερα πώς να το πετύχετε.

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

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

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

  • Εμπιστευτικότητα (Confidentiality): Ευαίσθητα προσωπικά ή εταιρικά δεδομένα πρέπει να παραμένουν ασφαλή, απέναντι σε μη εξουσιοδοτημένες χρήσεις.
  • Ακεραιότητα (Integrity): Προστασία των δεδομένων από τυχόν τροποποιήσεις.
  • Διαθεσιμότητα (Availability): Πότε ή πόσο συχνά μια πληροφορία ή ένα σύστημα θα είναι έτοιμο για χρήση.

Υπάρχουν όμως και άλλες απαιτήσεις, όπως για παράδειγμα η μη δυνατότητα αποκήρυξης πράξεων και εντολών (non-repudiation), η εξουσιοδοτημένη πρόσβαση (access control), η αυθεντικότητα των δεδομένων (authenticity) κ.λπ., τις οποίες θα πρέπει να καθορίζετε από την αρχή και στη συνέχεια να χρησιμοποιείτε με συνέπεια σε όλες τις σχετικές δραστηριότητες.

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

  • Ποια είναι τα δεδομένα που θέλουμε να προφυλάξουμε; Ποιοι θα πρέπει να έχουν πρόσβαση σε αυτά; Τι είδους πρόσβαση επιτρέπεται;
  • Απαιτείται η συμμόρφωση με διεθνή πρότυπα, για την εμπιστευτικότητα ή τη διατήρηση των δεδομένων;
  • Υπάρχουν απαιτήσεις όσον αφορά την ποιότητα και τη διαθεσιμότητα των παρεχόμενων υπηρεσιών;

Στην πράξη, δύο τεχνικές μπορούν πραγματικά να βοηθήσουν να προσδιορίσετε τους στόχους ασφάλειας. Η μία είναι να χρησιμοποιήσετε μία μήτρα ρόλων (role matrix) στην οποία φαίνονται οι διαφορετικοί χρήστες του συστήματος, καθώς και το είδος της πρόσβασης πάνω στα αντικείμενα στα οποία επενεργούν. Για παράδειγμα, αν μια υπηρεσία διατίθεται και σε ανώνυμους χρήστες, αυτοί δεν θα πρέπει να μπορούν να δημιουργούν νέους χρήστες, να δημιουργούν ή να τροποποιούν δεδομένα κ.λπ. Ένας administrator μπορεί να εισάγει νέους χρήστες στο σύστημα, αλλά δεν μπορεί να τροποποιεί ή να αφαιρεί δεδομένα από τη βάση πελατών κ.ο.κ.

Η δεύτερη τεχνική είναι να απαριθμήσετε τις λειτουργικές απαιτήσεις (functional requirements) του συστήματος και να προσδιορίσετε έπειτα τις αντίστοιχες απαιτήσεις, όπως εμπιστευτικότητα, ακεραιότητα κ.λπ., ανάλογα με την περίπτωση. Έστω, για παράδειγμα, οι ακόλουθες λειτουργικές απαιτήσεις μιας εφαρμογής:

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

Κάθε μία από τις λειτουργικές απαιτήσεις θα πρέπει να εξεταστεί υπό το πρίσμα των συνηθισμένων απαιτήσεων για εμπιστευτικότητα, ακεραιότητα, διαθεσιμότητα κ.λπ. Για παράδειγμα, όσον αφορά την πρώτη λειτουργική απαίτηση θα πρέπει να χρησιμοποιήσουμε ισχυρή κρυπτογράφηση, ώστε να πετύχουμε το στόχο της εμπιστευτικότητας για τα δεδομένα μας, οπουδήποτε και αν φυλάσσονται αυτά. Για τη δεύτερη, τα κανάλια επικοινωνίας θα πρέπει να προστατεύονται από επιθέσεις ενάντια στην εμπιστευτικότητα και ακεραιότητα των δεδομένων, ενώ αμοιβαία αυθεντικοποίηση είναι αναγκαία για προστασία από man-in-the-middle επιθέσεις. Αντίστοιχα, για την τρίτη, θα πρέπει να ελέγχεται η χρήση των πόρων του συστήματος από απομακρυσμένους χρήστες, ώστε να μετριάζονται ή να αποτρέπονται denial-of-service επιθέσεις. Επίσης, εφεδρικά συστήματα θα πρέπει να χρησιμοποιούνται για να εξασφαλίζεται η διαθεσιμότητα των υπηρεσιών. Τέλος, για την τέταρτη λειτουργική απαίτηση, ανάλογα με το ρόλο του χρήστη, θα πρέπει να επιτρέπεται η πρόσβαση σε διαφορετικό είδος δεδομένων και υπηρεσιών. Για παράδειγμα, θα πρέπει να προστατεύονται τα στοιχεία των χρηστών από τυχόν αποκάλυψη σε μη εξουσιοδοτημένους χρήστες (εμπιστευτικότητα). Απλοί χρήστες δεν επιτρέπεται να προσθέτουν άλλους χρήστες ή να τροποποιούν δεδομένα (ακεραιότητα). Η εφαρμογή θα πρέπει να επιτρέπει στους χρήστες με τα κατάλληλα προνόμια να προβαίνουν στις απαραίτητες ενέργειες, ανάλογα με το επίπεδο στο οποίο βρίσκονται (διαθεσιμότητα).

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

Βιβλιογραφία
[1] Software development process. http://en.wikipedia.org/wiki/Software_lifecycle
[2] M. Bishop, Computer Security: Art and Science, Addison-Wesley, 2003, section 18.2.
[3] Common Criteria for Information Technology Security Evaluation, part 1, version 2.1, Aug. 1999.

Τάσος Δημητρίου, PhD
Καθηγητής, Επικεφαλής, Αλγόριθμοι και Ασφάλεια Συστημάτων
Athens Information Technology
www.ait.edu.gr