Τι είναι το Cross-Site Scripting (XSS);

Το Cross-Site Scripting (XSS) είναι ένας τύπος ευπάθειας (vulnerability) ο οποίος είναι πολύ διαδεδομένος και επιτρέπει σε έναν κακόβουλο χρήστη να εισάγει κακόβουλο κώδικα (JavaScript) σε έναν web browser μέσω της χρήσης μιας ευπαθούς ιστοσελίδας (web application). Ο κακόβουλος χρήστης μπορεί να στείλει τον κώδικα με διάφορους τρόπους. Μπορούν να σας ξεγελάσουν έτσι ώστε να κάνετε κλικ σε ένα link (Reflected XSS) ή να περιμένουν να επισκεφθείτε μια σελίδα η οποία περιέχει ήδη τον κακόβουλο κώδικα (Stored ή Persistent XSS).

Αυτό το ενοχλητικό pop-up παράθυρο με το 1; Αυτό είναι απλά ένας τρόπος που κάποιοι άνθρωποι μπορούν να αποδείξουν οπτικά ότι το JavaScript τους (XSS) εκτελέστηκε. Αλλά μην αφήσετε αυτό το παράθυρο να σας ξεγελάσει, υπάρχουν πολλά περισσότερα με το XSS από αυτό.

Τι μπορούν να κάνουν οι hackers με το XSS;

Ένας hacker μπορεί να κλέψει τα “cookies” σας και να κάνει login σε μια σελίδα σα να ήσασταν εσείς!

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

Μπορούν να προσθέσουν ψεύτικες login σελίδες στο ευπαθές site για να σας ξεγελάσουν να δώσετε το όνομα χρήστη (username) και τον κωδικό σας.

Θα μπορούσαν ακόμα να χρησιμοποιήσουν το XSS για να παρακάμψουν άλλα μέτρα ασφαλείας τα οποία έχουν ενσωματωθεί στο web application ή στον browser για να σας προστατέψουν.

Οι δυνατότητες είναι σχεδόν απεριόριστες. Να πάρουν τον έλγχο της webcam σας; Ναι! Να ακούσουν από το μικρόφωνο του υπολογιστή σας; Σίγουρα!

Για πιο προχωρημέμενες τεχνικές δείτε το The Browser Exploitation Framework (BeEF).

Ποιοι έχουν δεχθεί επίθεση χρησιμοποιώντας XSS;

Το Apache Foundation, οι δημιουργοί και διαχειριστές ενός από τα πιο δημοφιλή λογισμικά στο διαδίκτυο για web servers δέχτηκαν εισβολή από μια αρχική XSS επίθεση.

Μια XSS επίθεση στο επίσημο forum της δημοφιλούς διανομής Linux, το Ubuntu, επέτρεψε στους εισβολείς να κατεβάσουν ονόματα χρηστών (usernames), e-mail και κωδικούς από 1,82 εκατομμύρια χρήστες.

Οι XSS επιθέσεις συνήθως στοχεύουν τους χρήστες των ιστοσελίδων και τα τοπικά τους δίκτυα. Παρ’ όλα αυτά, όπως είδαμε στα παραδείγματα παραπάνω, όταν αυτοί οι χρήστες είναι διαχειριστές (administrators), τότε και οι web servers των ιστοσελίδων αυτών βρίσκονται επίσης σε κίνδυνο.

XSS ευπάθειες ανακαλύπτονται στο Facebook, το Yahoo, το Google, το Twitter και άλλες δημοφιλείς ιστοσελίδες σε καθημερινή βάση από ανεξάρτητους ερευνητές ασφαλείας που συμμετέχουν σε «κυνήγι» bugs (bug bounties).

Εδώ θα βρείτε μια λίστα από επιθέσεις που έκαναν χρήση XSS – https://www.google.com/fusiontables/DataSource?snapid=S1158702BBoV

Τι μπορώ να κάνω για να προστατευτώ από το XSS;

Σιγουρευτείτε ότι ο browser σας είναι ενημερωμένος και ότι έχει όλες τις λειτουργίες ασφαλείας ενεργοποιημένες, όπως το φιλτράρισμα Cross-Site Scripting (XSS). Αν ο browser που χρησιμοποιείτε δεν έχει κάποιο φίλτρο XSS, όπως ο Firefox, τότε μπορείτε να κατεβασετε το NoScript, ένα Πρόσθετο (add-on) φίλτρο XSS.

Προσέχετε σε τι συνδέσμους κάνετε κλικ. Ένας σύνδεσμος μπορεί να δείχνει ακίνδυνος αλλά μπορεί να περιέχει κακόβουλο κώδικα XSS.

Αποσυνδεθείτε από τις ιστοσελίδες όταν έχετε τελειώσει καθώς δυσκολεύει τους hackers να κλέψουν τα “cookies” σας.

Το τεχνικό κομμάτι! Τι μπορώ να κάνω για να προστατέψω την ιστοσελίδα μου από XSS;

Το Cross-Site Scripting συμβαίνει όταν δεδομένα που εισάγονται σε κάποιο πεδίο εμφανίζοναι στην σελίδα χωρίς πρώτα να ελεγχθούν και/ή να κωδικοποιηθούν.

Για παράδειγμα, αν ένας χρήστης βάζει το username του για να κάνει login και μετά το username εμφανίζεται στη σελίδα χωρίς να έχει ελεγθχεί ή κωδικοποιηθεί, τι γίνεται στη περίπτωση που το username περιέχει HTML χαρακτήρες; Ο browser δε θα μπορέσει να ξεχωρίσει το username απο το πραγματικό HTML κώδικα της σελίδας. Τα δεδομένα (το username) μπερδεύονται με τον κώδικα (HTML)! Αυτό θα μπορούσε να επιτρέψει σε έναν χρήστη να κάνει login με ένα username που περιέχει κακόβουλο κώδικα JavaScript και να τον εκτελέσει στον browser μέσα στο πλαίσιο της ιστοσελίδας.

Σιγουρευτείτε ότι ελέγχετε το username πριν να το χρησιμοποιήσετε. Για παράδειγμα αν οι χρήστες πρέπει να έχουν μόνο αλφαριθμητικούς χαρακτήρες στα username τους τότε εφαρμόστε φιλτράρισμα. Χρησιμοποιήστε μια whitelist! Συγκρίνετε το username με γνωστά «καλά» αντί με γνωστά «κακά».

Χρησιμοποιήστε τη σωστή κωδικοποίηση! Αν το username πρόκειται να χρησιμοποιηθεί μέσα σε HTML, τότε κωδικοποιήστε όλους τους χαρακτήρες του username με HTML κωδικοποίηση. Με αυτόν τον τρόπο ο browser θα ξέρει τι πρέπει να θεωρηθεί HTML και τι όχι. Δεν έχουν όμως όλα να κάνουν με την HTML κωδικοποιήση. Πρέπει να κωδικοποιήτε για το σωστό περιεχόμενο. Δείτε τις σελίδες παρακάτω για περισσότερες πληροφορίες.

Ελέγχετε τις ιστοσελίδες σας για XSS προβλήματα. Υπάρχουν πολλά αυτοματοποιημένα εργαλεία που ανιχνεύουν προβλήματα που σχετίζονται με το XSS. Μπορείτε να δοκιμάσετε το λογισμικό ανοιχτού κώδικα OWASP ZAP.

Ρυθμίζετε τα session cookies σας ως HttpOnly. Αυτό λέει στον browser ότι το cookie δε θα πρέπει να είναι προσβάσιμο απο την JavaScript, βοηθώντας τους χρήστες να προστατευτούν από την κλοπή των συνεδριών τους (session).

Η HTTP επικεφαλίδα που ονομάζεται Content Security Policy (CSP) μπορεί ρυθμιστεί από τον web server να λέει στον browser τι και από που επιτρέπεται η JavaScript να εκτελείται. Χρησιμοποιεί μια whitelist!

Τέλος, γιατί να μην εγκαταστήσετε ένα Web Application Firewall (WAF) οπώς το ανοιχτού κώδικα mod_security! Ένα WAF θα δώσει την ιστοσελίδα σας εκείνο το έξτρα επίπεδο προστασίας για να αμυνθείτε απέναντι σε κακόβουλους χρήστες αλλά δε θα πρέπει να χρησιμοποιηθεί ως η μόνη λύση κωθώς συχνά βρίσκονται τρόποι να παρακαμφούν.

Που μπορώ να βρω περισσότερες πληροφορίες;

Οι τύποι XSS που αναφέρονται στη παρούσα σελίδα (Reflected και Stored) δεν είναι οι μόνοι! Μόλις που έχουμε αγγίξει το θέμα. Θέλετε να μάθετε περισσότερα;

Το Open Web Application Security Project (OWASP) είναι μια εξαιρετική πηγή πληροφοριών για όλα τα πράγματα που σχετίζονται με την ασφάλεια των ιστοσελίδων ή web application. Ρίξτε μια ματιά στο άρθρο τους για το XSS ή το XSS Prevention Cheat Sheet. Για πληροφορίες σχετικά με άλλους τύπους ευπαθειών σε web applications κοιτάξτε στο OWASP Top 10.

Ευχαριστούμε για την ανάγνωση,
Ryan Dewhurst & Thomas MacKenzie – Μετάφραση: Νίκος Λαλέας

---

Η σελίδα αυτή σχεδιάστηκε για να απλοποιήσει το XSS, να κάνει την κατανόηση των προβλημάτων που σχετίζονται με το XSS ευκολότερη.

Ο σχεδιασμός της ιστοσελίδας εμπνέυστηκε από εδώ: http://justinjackson.ca/words.html

---

Thanks to Nikos Laleas for this translation. English version here.