H μοντελοποίηση απειλών (threat modeling) είναι μία διαδικασία που βοηθάει να προσδιορίσουμε τις απειλές, τις επιθέσεις, τις ευπάθειες, αλλά και τα αντίμετρα που σχετίζονται με την ανάπτυξη της εφαρμογής μας.Σε προηγούμενα άρθρα είχαμε τονίσει ότι η ανάπτυξη ασφαλών εφαρμογών προϋποθέτει την ενσωμάτωση της ασφάλειας στον κύκλο ζωής ανάπτυξης της εφαρμογής. Οι σχετικές δραστηριότητες θα πρέπει να περιλαμβάνουν κατ’ ελάχιστον τα εξής: προσδιορισμό των στόχων ασφάλειας, εφαρμογή σωστών τεχνικών και αρχών σχεδιασμού, δημιουργία μοντέλου απειλών, αναθεώρηση της αρχιτεκτονικής και του κώδικα της εφαρμογής, εκτέλεση δοκιμών με έμφαση στην ασφάλεια κ.ο.κ.

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

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

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

Η μοντελοποίηση απειλών θα μας βοηθήσει να:

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

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

Η διαδικασία αυτή δεν θα πρέπει να είναι «μια και έξω» αλλά θα πρέπει να εξελίσσεται, περιλαμβάνοντας όλο και περισσότερη λεπτομέρεια στο μοντέλο απειλών, καθώς

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

Πριν περιγράψουμε πιο αναλυτικά τη διαδικασία μοντελοποίησης απειλών, είναι καλό να εξοικειωθούμε με την παρακάτω ορολογία:

  • Πόρος (Asset): Οτιδήποτε έχει αξία για μας. Μπορεί να είναι τα εταιρικά δεδομένα, τα στοιχεία των πελατών μας σε μία βάση, ένας server που πρέπει να παραμείνει διαθέσιμος 24 ώρες το εικοσιτετράωρο ή ακόμα και η υπόληψη της εταιρείας μας, που μπορεί να πληγεί από την αρνητική δημοσιότητα σε περίπτωση επίθεσης.
  • Απειλή (Threat): Ένα ανεπιθύμητο γεγονός ή εν δυνάμει συμβάν, που μπορεί να βλάψει κάποιο από τα παραπάνω assets.
  • Ευπάθεια (Vulnerability): Μία αδυναμία σε κάποιο χαρακτηριστικό της εφαρμογής, που καθιστά μια απειλή δυνατή. Ευπάθειες μπορεί να υπάρχουν σε πολλά διαφορετικά επίπεδα, από το δικτυακό περιβάλλον μέχρι τα συστήματα που τρέχει η εφαρμογή μας.
  • Επίθεση (Attack): Είναι μία πράξη που στόχο έχει να βλάψει κάποιο asset. Συνήθως είναι αποτέλεσμα εκμετάλλευσης των ευπαθειών του συστήματος.
  • Αντίμετρο (Countermeasure): Μία προστασία ενάντια σε απειλές, που στόχο έχει να μετριάσει τον κίνδυνο ή τον αντίκτυπο μιας επίθεσης.

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

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

1. Καθορισμός των πόρων που πρέπει να προστατευθούν.
2. Δημιουργία μιας επισκόπησης της αρχιτεκτονικής και ανάλυση της εφαρμογής στα συστατικά της μέρη. Χρησιμοποιήστε απλά διαγράμματα και πίνακες, για να τεκμηριώσετε την αρχιτεκτονική της εφαρμογής σας, συμπεριλαμβανομένων των υποσυστημάτων, των ορίων εμπιστοσύνης και της ροής δεδομένων.
Σε αυτή τη φάση, ο στόχος είναι να τεκμηριωθεί η λειτουργία της εφαρμογής, της αρχιτεκτονικής, αλλά και των τεχνολογιών που αποτελούν μέρος της λύσης αυτής. Αναλύοντας την εφαρμογή στα συστατικά της μέρη, θα μας βοηθήσει να ανακαλύψουμε πιο εύκολα τυχόν απειλές. Έμφαση πρέπει να δοθεί στα όρια εμπιστοσύνης, στη ροή δεδομένων, στα σημεία εισόδου/interface της εφαρμογής με εξωτερικούς clients, καθώς και στα κομμάτια του κώδικα που προσπελαύνουν σημαντικούς πόρους του συστήματος.
3. Προσδιορισμός και τεκμηρίωση των απειλών. Γνωρίζοντας την αρχιτεκτονική και τις πιθανές ευπάθειες της εφαρμογής μας, μπορούμε να προσδιορίσουμε πιο εύκολα τις απειλές που θα μπορούσαν να έχουν επιπτώσεις στην εφαρμογή. Στη διαδικασία αυτή, καλό θα είναι να λάβουν μέρος σε μία άτυπη σύσκεψη όλα τα εμπλεκόμενα μέρη, από τους σχεδιαστές της εφαρμογής και τους ειδικούς σε θέματα ασφαλείας, μέχρι τους υπεύθυνους για την ανάπτυξη και τους διαχειριστές συστημάτων. Μερικές χαρακτηριστικές προσεγγίσεις, είναι οι ακόλουθες:

  • Χρήση STRIDE [1]. Το όνομα STRIDE προέρχεται από τα αρχικά των λέξεων Spoofing (of an identity), Tampering, Repudiation, Information disclosure, Denial of Service και Elevation (of privileges) και είναι μία μέθοδος που χρησιμοποιείται ευρέως από τη Microsoft για τον καθορισμό των απειλών. Η μέθοδος αυτή κοιτά την εφαρμογή από την πλευρά του attacker και προσπαθεί να απαντήσει σε ερωτήματα σχετικά με τους πιθανούς στόχους ενός επιτιθεμένου. Μερικά τυπικά ερωτήματα, θα μπορούσαν να είναι τα εξής: Μπορεί ο επιτιθέμενος να υποδυθεί κάποιον άλλο, προκειμένου να έχει πρόσβαση στην εφαρμογή ή σε ένα σύστημα; Μπορεί κάποιος να τροποποιήσει τα δεδομένα καθώς μετακινούνται μέσω ενός δικτύου; Μπορεί κάποιος να πετύχει ένα DoS attack; Κ.ο.κ.
  • Χρήση κατηγοριοποιημένων λιστών απειλών. Με αυτήν την προσέγγιση, ξεκινάμε με μια λίστα κοινών απειλών, που ομαδοποιούνται ανάλογα με το δίκτυο, τον εξυπηρετητή ή τις κατηγορίες των εφαρμογών. Στη συνέχεια, εφαρμόζουμε αυτή τη λίστα στην αρχιτεκτονική της εφαρμογής μας και σε οποιεσδήποτε ευπάθειες έχουμε τυχόν προσδιορίσει νωρίτερα στη διαδικασία. Με αυτόν τον τρόπο, θα είμαστε σε θέση να αποκλείσουμε κάποιες απειλές που δεν ισχύουν στην περίπτωσή μας.
  • Χρήση δέντρων επίθεσης. Τα δέντρα επίθεσης, μας επιτρέπουν να αναλύσουμε τις απειλές σε μεγαλύτερο βάθος.
    Ένα δέντρο επίθεσης είναι ένας τρόπος για να ταξινομήσουμε τις πιθανές επιθέσεις στο σύστημά μας, με ένα δομημένο και ιεραρχικό τρόπο. Η δομή των δέντρων, μας δίνει μια αναλυτική περιγραφή όλων των δυνατών επιθέσεων, τις οποίες ο επιτιθέμενος μπορεί να χρησιμοποιήσει για να επιτεθεί σε ένα σύστημα. Το Σχήμα 2 δίνει ένα παράδειγμα δέντρου για τη διαδικασία διάρρηξης ενός απλού χρηματοκιβώτιου [2].

4. Εκτίμηση των απειλών. Η εκτίμηση των απειλών, μας βοηθά να εξετάσουμε και να δώσουμε προτεραιότητα στις σημαντικότερες από τις απειλές, μιας και αυτές παρουσιάζουν το μεγαλύτερο κίνδυνο. Η διαδικασία εκτίμησης ζυγίζει την πιθανότητα της απειλής ενάντια στη ζημιά που θα μπορούσε να συμβεί εάν η επίθεση ήταν πετυχημένη. Έτσι, μερικές απειλές δεν χρειάζεται να αντιμετωπιστούν, δεδομένου ότι το κόστος αντιμετώπισής τους μπορεί να είναι μεγαλύτερο από τη ζημιά που μπορεί να προκαλέσουν. Μπορούμε λοιπόν να αγνοήσουμε εκείνες τις απειλές που η πιθανότητα εμφάνισής τους είναι μικρή ή η ζημιά που μπορεί να προκαλέσουν είναι αμελητέα.
Γενικά, ο κίνδυνος που τίθεται από μια ιδιαίτερη απειλή, είναι ίσος με την πιθανότητα εμφάνισης της απειλής, πολλαπλασιασμένης με τη δυνατότητα ζημιάς, η οποία φανερώνει τις συνέπειες στο σύστημά μας, εάν εμφανιστεί η επίθεση.
Risk = Probability * Damage Potential
Χρησιμοποιώντας αυτήν την προσέγγιση, ο κίνδυνος που τίθεται από μία απειλή με μία χαμηλή πιθανότητα της εμφάνισης αλλά με υψηλή δυνατότητα ζημιάς, μπορεί να είναι ίσος με τον κίνδυνο που τίθεται από μία απειλή με περιορισμένη δυνατότητα ζημιάς, αλλά με μεγάλη πιθανότητα εμφάνισης.

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

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

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

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

Βιβλιογραφία

1. “Uncover Security Design Flaws Using The STRIDE Approach,” by Shawn Hernan and Scott Lambert and Tomasz Ostwald and Adam Shostack. Available at http://msdn.microsoft.com/en-us/magazine/cc163519.aspx
2. “Attack trees” by Bruce Schneier. Available at http://www.schneier.com/paper-attacktrees-ddj-ft.html

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