Cross-site scripting

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια
Μετάβαση σε: πλοήγηση, αναζήτηση

Με τον όρο Cross-site scripting ή XSS (δεν είναι CSS γιατί αλλιώς θα υπήρχε πρόβλημα ονομασίας) αναφερόμαστε στην εκμετάλλευση διάφορων ευπαθειών (vulnerabilities) υπολογιστικών συστημάτων με εισαγωγή κώδικα HTML ή Javascript σε κάποιο ιστοχώρο. Κάποιος κακόβουλος χρήστης, θα μπορούσε να εισάγει κώδικα σε έναν ιστοχώρο, μέσω ενός κειμένου εισόδου για παράδειγμα, ο οποίος αφού δεν θα φιλτραριζόταν από τον ιστοχώρο σωστά, θα μπορούσε να προκαλέσει προβλήματα στον διαχειριστή ή επισκέπτη του ιστοχώρου. παράδειγμα:

http://www.example.com/index.html?name=<script>alert("xss revealed")</script>

Ο κακόβουλος χρήστης θα μπορούσε να επιτύχει :

  • Κλοπή κωδικών/λογαριασμών κλπ προσωπικών δεδομένων
  • Αλλαγή ρυθμίσεων του ιστοχώρου
  • Κλοπή των cookies
  • Ψεύτικη διαφήμιση (μέσω, π.χ., ενός συνδέσμου)

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

Κατηγορίες XSS επιθέσεων[Επεξεργασία | επεξεργασία κώδικα]

Οι περισσότεροι ειδικοί διακρίνουν τις ευπάθειες από XSS επιθέσεις σε δυο βασικές κατηγορίες: μη μόνιμες και μόνιμες. Επίσης δύο άλλες κατηγορίες που μπορούν να χωριστούν είναι σε παραδοσιακές επιθέσεις (που προκαλούνται από την πλευρά του εξηπηρετητή) και σε επιθέσεις βασισμένες σε DOM (που προκαλούνται από την πλευρά του πελάτη).

  • Μη μόνιμες:

Οι ευπάθειες σε μη μόνιμες XSS επιθέσεις είναι και οι πιο δημοφιλείς. Αυτές οι αδυναμίες προκύπτουν όταν τα δεδομένα που δίνονται από έναν web-client χρησιμοποιούνται επιτόπου από κάποιο script, το οποίο λειτουργεί από την πλευρά του εξυπηρετητή ώστε να εμφανιστεί ένα αποτέλεσμα στον πελάτη, χωρίς όμως πρώτα να έχει προηγηθεί έλεγχος και καθαρισμός του αιτήματος που έστειλε ο πελάτης.

  • Μόνιμες:

Οι ευπάθειες σε μόνιμες XSS επιθέσεις είναι πολύ πιο καταστροφικές. Αυτές προκύπτουν όταν τα δεδομένα τα οποία στέλνονται από κάποιον κακόβουλο χρήστη αποθηκέυονται στον εξυπηρετητή, ώστε μετά να εμφανίζονται μέσα στις ιστοσελίδες του εξυπηρετητή όταν τις επισκέπτονται άλλοι χρήστες. Ένα κλασικό παράδειγμα τέτοιου τύπου επιθέσεων είναι σε online message boards που επιτρέπουν χρήστες να δημοσιεύσουν μηνύματα σε HTML για να τα δουν άλλοι χρήστες.

  • Παραδοσιακές & Βασισμένες σε DOM ευπάθειες:

Οι ευπάθιες απο XSS επιθέσεις οι οποίες είναι βασισμένες σε DOM δημιουργήθηκαν από την ανάπτυξη των web 2.0 εφαρμογών. Ενώ στις παραδοσιακές επιθέσεις είναι συνηθισμένο οι ευπάθειες να οφείλονται στον εξυπηρετητή όταν ετοιμάζει μια HTML απάντηση για κάποιον πελάτη, οι επιθέσεις βασισμένες σε DOM συμβαίνουν στα στάδια επεξεργασίας περιεχομένου που εκτελούνται στον πελάτη. Το όνομα αυτών των επιθέσεων προέρχεται από τον τρόπο που απεικονίζονται τα HTML ή XML αντικείμενα ο οποίος αποκαλείται Document Object Model (DOM).

Παράδειγμα XSS σε λογισμικό Apache server[Επεξεργασία | επεξεργασία κώδικα]

Στον Apache Tomcat υπήρχε ένα κενό ασφαλείας στον κώδικα ενός αρχείου Javascript ονόματι sessionsList.jsp. O κώδικας χρησιμοποιούσε τις μη ασφαλείς μεταβλητές orderBy και sort. Κάποιος κακόβουλος χρήστης, θα μπορούσε, μέσω κάποιου text input field, να δώσει ως είσοδο (σε site που «έτρεχε» με Apache) Javascript κώδικα που θα έβλαπτε τον χρήστη που θα επισκεπτόταν το site κάποια στιγμή αργότερα. Ο κώδικας θα μπορούσε να οδηγήσει τον browser του θύματος σε URL επιλογής του κακόβουλου χρήστη. Εκεί, ο τελευταίος, θα μπορούσε να οργανώσει καλύτερα την επίθεσή του μέσω Javascript κώδικα πάλι, έχοντας την «άδεια» του Apache server

Ο κώδικας που αφορούσε την παραπάνω ευπάθεια[Επεξεργασία | επεξεργασία κώδικα]

GET/manager/html/sessions?path=/&sort="><script>alert('xss')</script>order=ASC&action=injectSessions&refresh=Refresh+Sessions+list

Εκδόσεις που έχουν το πρόβλημα[Επεξεργασία | επεξεργασία κώδικα]

Apache Tomcat 6.0.2 – 6.0.20 εκτός 6.0.10 και 6.0.11


Πως θα εντοπίσεις εάν μία ιστοσελίδα είναι τρωτή[Επεξεργασία | επεξεργασία κώδικα]

Ο όρος Cross-site scripting (XSS) αναφέρεται στην εκμετάλλευση διαφόρων ευπαθειών υπολογιστικών συστημάτων (π.χ. ιστοχώρων), όπου κάποιος κακόβουλος χρήστης θα μπορούσε να εισάγαγει κακόβουλο κώδικα, ο οποίος θα προκαλέσει προβλήματα στον διαχειριστή ή τον επισκέπτη του ιστοχώρου. Τα ευπαθή σημεία, ως προς τα cross-site-scripts, μπορεί να είναι δύσκολο να αναγνωρισθούν και να αφαιρεθούν από μια Διαδικτυακή εφαρμογή. Η καλύτερη πρακτική για να αναζητήσει κανείς αυτού του είδους τα σημεία, είναι να πραγματοποιήσει μια εκτενή ανασκόπηση του κώδικα αναζητώντας τα σημεία αυτά όπου εισάγει δεδομένα, μέσω μιας φόρμας εισόδου, τα οποία πιθανόν να οδηγούν σε κάποιο HTML output. Μια ποικιλία από HTML tags (όπως <img src…>, <iframe …>, <bgsound scr…> κλπ) μπορούν να χρησιμοποιηθούν για την μετάδοση ενός κακόβουλου κώδικα JavaScript. Ειδικές εφαρμογές-σαρωτές, που υπάρχουν στο διαδίκτυο, όπως τα Burp Suite, Webnspect, Acunetix, Netsparker, Websecurify, NStalker κλπ., μπορούν να χρησιμοποιηθούν για την εύρεση αυτών των κακόβουλων λογισμικών, όμως μαζί με χειροκίνητο έλεγχο, καθώς τα περισσότερα από αυτά τα εργαλεία, χρησιμοποιούν συγκεκριμένα πρότυπα αναζήτησης, αγνοώντας τους διαφορετικούς τρόπους κωδικοποίησης ή τις τεχνικές παράβλεψης που μπορεί να χρησιμοποιηθούν.


Τρόποι προστασίας από επιθέσεις (XSS)[Επεξεργασία | επεξεργασία κώδικα]

Οι XSS (cross site scripting) είναι από τις πιο διαδεδομένες επιθέσεις στο διαδίκτυο. Εκμεταλλεύονται διάφορες ευπάθειες των υπολογιστικών συστημάτων για να πραγματοποιήσουν τις επιθέσεις τους. Οι επιθέσεις αυτές γίνονται από κάποιο κακόβουλο χρήστη που έχει ως στόχο: την κλοπή ταυτότητας, πρόσβαση σε ευαίσθητες ή εμπιστευτικές πληροφορίες, στην κατασκοπία πλοήγησης των χρηστών, στην ψεύτικη διαφήμιση. Για την πρόληψη και για να ελαχιστοποιήσετε την πιθανότητα μιας τέτοιας επίθεσης (xss) θα πρέπει να εφαρμόσετε τους ακόλουθους τρόπους προστασίας: Αρχικά θα μπορούσατε να περάσετε όλα τα εξωτερικά δεδομένα μέσα από ένα φίλτρο το οποίο θα αφαιρεί επικίνδυνες λέξεις-κλειδιά. Να επιλέγετε μόνο συνδέσεις από τον κεντρικό δικτυακό τόπο που θέλετε να δείτε. Πρέπει να είστε ιδιαίτερα προσεκτικοί όταν διαβάζετε ένα μήνυμα σε ένα δημόσιο πίνακα από ένα πρόσωπο το οποίο δεν γνωρίζετε. Επίσης μπορείτε να απενεργοποιήσετε το javascript στις ρυθμίσεις του browser σας. Αποφεύγετε “περίεργες” ιστοσελίδες (site) και αν πρέπει να μπείτε, επιλέξτε να μπείτε από virtualbox ή από κάποιο guest account που έχετε δημιουργήσει. Αποφεύγετε να αποθηκεύετε passwords στον browser γιατί μπορεί να υποκλαπούν. Χρησιμοποιώντας τους πιο πάνω τρόπους αντιμετώπισης επιθέσεων θα μειώσετε τις πιθανότητες κακόβουλης παρέμβασης στο δικτυακό σας σύστημα.