OWASP_logoΣυνεχίζοντας τον κύκλο άρθρων σχετικά με την ασφάλεια σε δικτυακά περιβάλλοντα σε συνεργασία με τον Παναγιώτη Καλαντζή στο άρθρο αυτό θα δούμε την έκτη θέση των συνηθέστερων αδυναμιών όπου βρίσκεται η ελλιπής διασφάλιση των ευαίσθητων δεδομένων της διαδικτυακής εφαρμογής. Οι διαδικτυακές εφαρμογές στις μέρες μας αποτελούν βασικό μέρος της καθημερινότητάς μας και συνεπώς πολύ συχνά διαχειρίζονται, ή για την ακρίβεια τους εμπιστευόμαστε, ευαίσθητα (προσωπικά και μη) δεδομένα. Η εμπιστοσύνη αυτή στηρίζεται στην προβαλλόμενη ικανότητά τους να διαχειρίζονται τα δεδομένα αυτά με μεθόδους που τα προστατεύουν από κακόβουλους χρήστες. Ωστόσο, τα προβλήματα ελλοχεύουν παντού: η ανύπαρκτη ή κακή κωδικοποίηση (encryption) των ευαίσθητων δεδομένων αυτών, η κακή χρήση κλειδιών – ειδικότερα στην κωδικοποίηση των αποθηκευμένων συνθηματικών (passwords) αλλά και τα προβλήματα ασφάλειας των φυλλομετρητών (browsers) – παρά τη δυσκολία ευρείας εκμετάλλευσής τους.

Έτσι ο επιτιθέμενος δε θα αποκρυπτογραφήσει κατευθείαν τα δεδομένα αλλά κάποιο άλλο σημαντικό μέρος της αλυσίδας ανταλλαγής πληροφορίας (λ.χ. κλοπή κλειδιών, επίθεση τύπου man-in-the-middle, κλοπή μη κωδικοποιημένων δεδομένων από τον διακομιστή (server) είτε αυτά διακινούνται είτε είναι απλώς αποθηκευμένα).

Σκεφτείτε την περίπτωση όπου η αποθήκευση δεδομένων πιστωτικών καρτών γίνεται με διάφανη για την εφαρμογή μεθοδολογία (λ.χ. αυτόματα από την βάση δεδομένων – οπότε παρότι αποθηκευμένα τα δεδομένα είναι κωδικοποιημένα, κατά τη χρήση τους από την εφαρμογή είναι πλήρως αναγνώσιμα). Στην περίπτωση αυτή μια επίθεση τύπου sql injection θα είχε ως αποτέλεσμα την πρόσβαση στα προαναφερθέντα δεδομένα στην πλήρως αναγνώσιμη μορφή τους! Η προφανής λύση είναι η χρήση δημόσιου κλειδιού για τα ευαίσθητα δεδομένα και η πλήρης αποκωδικοποίησή τους στην εφαρμογή με το ιδιωτικό κλειδί.

Ένα άλλο παράδειγμα είναι η μη χρήση κωδικοποίησης SSL για τις σελίδες που απαιτούν διαπίστευση. Ο επιτιθέμενος με απλή παρακολούθηση στα, πλέον, πανταχού παρόντα ανοικτά ασύρματα δίκτυα μπορεί να υποκλέψει τα δεδομένα συνεδρίας (session data) άλλων χρηστών και στη συνέχεια να τα χρησιμοποιήσει για να αποκτήσει πρόσβαση στα δεδομένα του θύματος που απαιτούν διαπίστευση.

Ένα ακόμα σύνηθες παράδειγμα είναι η αποθήκευση των συνθηματικών των χρηστών με κωδικοποίηση τύπου μονόδρομης συνάρτησης hash χωρίς τη χρήση επιπλέον πληροφορίας (unsalted) όπου ο επιτιθέμενος με τη χρήση προϋπολογισμένων κωδικών hash μπορεί να αναρτήσει την αρχική τιμή του συνθηματικού.

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

  1. Πως δεν είναι σε μορφή απλού αναγνώσιμου κειμένου, συμπεριλαμβανομένων των αντίγραφών τους στα αντίγραφα ασφάλειας (backups),
  2. Πως δεν μεταδίδονται σε μορφή απλού αναγνώσιμου κειμένου εσωτερικά στην εφαρμογή και ειδικότερα εξωτερικά της εφαρμογής,
  3. Πως δεν χρησιμοποιούνται παλαιοί ή επισφαλείς κρυπτογραφικοί αλγόριθμοι,
  4. Πως δε γίνεται χρήση επισφαλών/αδύναμων κλειδιών αλλά και πως γίνεται κατάλληλη διαχείριση των χρησιμοποιούμενων κλειδιών,
  5. Πως γίνεται σωστή χρήση των εντολών ασφάλειας προς τους φυλλομετρητές για τα δεδομένα που αποστέλλονται από και προς τους φυλλομετρητές.

Τα συνήθη αποτελέσματα της εκμετάλλευσης της αδυναμίας αυτής είναι πως ο επιτιθέμενος μπορεί να αποκτήσει πρόσβαση σε ευαίσθητα δεδομένα!

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

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

  1. Προσδιορισμός της επίθεσης για την οποία πρέπει να προστατευτούν τα δεδομένα (λ.χ. εσωτερική ή εξωτερική επίθεση),
  2. Κωδικοποίηση όλων των ευαίσθητων δεδομένων είτε είναι απλώς αποθηκευμένα είτε μετακινούνται με μεθόδους που αντιμετωπίζουν τους κινδύνους του προηγούμενου βήματος,
  3. Αποφύγετε την άσκοπη αποθήκευση ευαίσθητων δεδομένων καταστρέφοντάς τα όταν είναι εφικτό με στόχο να μην είναι διαθέσιμα για κλοπή.
  4. Χρησιμοποιήστε ασφαλείς ευρέως διαδεδομένους αλγορίθμους κωδικοποίησης και ασφαλή κλειδιά μαζί με ασφαλή διαχείρισή τους,
  5. Βεβαιώστε πως τα συνθηματικά είναι αποθηκευμένα με ασφαλείς αλγορίθμους κωδικοποίησης εξειδικευμένους για συνθηματικά (λ.χ. bcrypt, PBKDF2 ή scrypt),
  6. Απενεργοποιήστε την αυτόματη συμπλήρωση φόρμας των φυλλομετρητών αλλά και την προσωρινή αποθήκευση (caching) ιστοσελίδων που διαχειρίζονται ευαίσθητα δεδομένα.

Στο επόμενο άρθρο θα δούμε την αδυναμία που προκαλείται από τη κακή παραμετροποίηση των θεμάτων ασφάλειας διαδικτυακής εφαρμογής και των συνεπειών μιας τέτοιας έκθεσης (Security Misconfiguration).

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

Share This: