Οι διαδικτυακές εφαρμογές έχουν εξελιχθεί σε πολυπλοκότητα την τελευταία δεκαετία. Έχουν εξελιχθεί από απλά δοχεία για φόρμες επαφής και δημοσκοπήσεις σε πλήρεις εφαρμογές. Μπορούμε να τα συγκρίνουμε με τις βαριές εφαρμογές επιφάνειας εργασίας, τόσο σε μέγεθος όσο και σε απόδοση. Με μια απότομη αύξηση της πολυπλοκότητας και τον αυξανόμενο αριθμό εφαρμογών πλούσιων σε χαρακτηριστικά, έχει καταστεί αναγκαιότητα να επενδύσετε πολύ χρόνο και να φροντίσετε να καταστήσετε όλα τα στοιχεία εφαρμογών όσο το δυνατόν πιο ασφαλή. Η μαζική άνοδος των χρηστών του Διαδικτύου έχει καταστήσει ακόμη πιο σημαντικό να αντιμετωπιστεί το ζήτημα της προστασίας των χρηστών δεδομένων και εφαρμογών. Υπάρχει μια τεράστια ομάδα απειλών που προσπαθούν να εισέλθουν και να προκαλέσουν σοβαρούς πονοκεφάλους σε όλους τους εμπλεκόμενους.
Το 2001, ένας νέος οργανισμός μπήκε στη σκηνή. Στόχος του ήταν να καταπολεμήσει τα προβλήματα ασφαλείας που επηρεάζουν ιστότοπους και εφαρμογές. Ονομάστηκε κατάλληλα Open Web Application Security Project (OWASP). Σήμερα, δημοσιεύει πόρους, διοργανώνει συνέδρια και προτείνει πρότυπα για την ασφάλεια στον ιστό και τις εφαρμογές. Ένα de facto πρότυπο για την ασφάλεια εφαρμογών ιστού είναι το OWASP Top Ten Project. Παραθέτει τις δέκα πιο διαδεδομένες απειλές για την ασφάλεια. Οι σημαντικοί παράγοντες για να αποφασίσουν τι θα μπήκε ήταν ένας εκτενής αριθμός δεδομένων και ανατροφοδότηση από την κοινότητα. Στα τέλη του 2017, έγινε μια ενημέρωση του έργου. Πολλά νέα ζητήματα κρίσιμα για πολλές σύγχρονες διαδικτυακές εφαρμογές έλαβαν τη θέση τους, ενώ μερικά έχουν ξεφύγει από τη λίστα.
Αυτό το άρθρο συμπληρώνει την αρχική λίστα και απεικονίζει τις τελευταίες αλλαγές στη λίστα. Περιγράφει τις απειλές, προσπαθεί να δώσει σαφή παραδείγματα για ευκολότερη κατανόηση και προτείνει τρόπους καταπολέμησης των απειλών κατά της ασφάλειας.
Πριν από την ενημέρωση του 2017, η λίστα από το 2013 ήταν η πιο πρόσφατη. Λαμβάνοντας υπόψη τις αλλαγές στον τρόπο δημιουργίας και κατανάλωσης των εφαρμογών ιστού, είναι λογικό να γίνει μια διεξοδική αναθεώρηση. Οι μικροσυσκευές παίρνουν το κομμάτι της πίτας και νέα δροσερά και γυαλιστερά πλαίσια αντικαθιστούν τον εξοπλισμό μάχης κώδικα βανίλιας. Αυτά τα γεγονότα σημαίνουν ότι ορισμένες από τις απειλές που αναφέρθηκαν προηγουμένως καταργήθηκαν και μερικές νέες αντικατέστησαν τη θέση τους.
Θα φροντίσουμε να ανανεώσουμε τη μνήμη μας για τα πολύ ξεχασμένα ζητήματα σε αυτό το άρθρο, καθώς και να παρουσιάσουμε τους νέους κακούς λύκους. Η εκμάθηση της ιστορίας είναι ο μόνος σίγουρος τρόπος να μην επαναληφθούν τα ίδια λάθη.
Η πλαστογράφηση αιτήσεων μεταξύ ιστότοπων (CSRF) είναι ένας από τους «χαμένους» στην πρόσφατη επανάληψη του έργου. Εξαφανίστηκε επειδή πολλά σύγχρονα πλαίσια ιστού περιλαμβάνουν μηχανισμούς άμυνας CSRF. Η πιθανότητα έκθεσης των εφαρμογών σας στην απειλή μειώνεται έτσι γρήγορα.
Ανεξάρτητα από το CSRF που βγαίνει από τη λίστα, είναι ακόμα καλό να ανανεώνουμε τη μνήμη μας. Ας βεβαιωθούμε ότι δεν θα επιστρέψει ισχυρότερη από ποτέ.
Στην ουσία, το CSRF είναι μια εκμετάλλευση που αισθάνεται μια βόμβα καπνού. Ένας εισβολέας ξεγελά έναν ανυποψίαστο χρήστη για να εκτελέσει ένα ανεπιθύμητο αίτημα ή ενέργεια εντός μιας εφαρμογής ιστού. Με απλά λόγια, ένας εισβολέας αναγκάζει το θύμα του να στείλει ένα αίτημα σε μια εφαρμογή τρίτου μέρους και το θύμα δεν γνωρίζει το αίτημα που στάλθηκε ποτέ. Το αίτημα θα μπορούσε να είναι ένα αίτημα HTTP GET για ανάκτηση ενός πόρου, ή ακόμα χειρότερα, ένα αίτημα HTTP POST που αλλάζει έναν πόρο υπό τον έλεγχο του θύματος. Κατά τη διάρκεια της επίθεσης, το θύμα πιστεύει ότι όλα είναι καλά, τις περισσότερες φορές χωρίς καν να παρατηρήσει ότι κάτι συμβαίνει στο παρασκήνιο. Μετά τον καθαρισμό του αέρα, η ζημιά έχει γίνει ή κάτι λείπει και κανείς δεν ξέρει τι είχε συμβεί.
Ο επιτυχής έλεγχος ταυτότητας προηγούμενου χρήστη εντός της εφαρμογής στόχου είναι αυτό που επιτρέπει στην παγίδα να είναι αποτελεσματική. Ο χρήστης είχε κάποια στιγμή πριν από την επίθεση συνδεθεί σε μια εφαρμογή. Η εφαρμογή έστειλε στο θύμα ένα cookie για να τα θυμάται. Μόλις το πρόγραμμα περιήγησης ιστού στέλνει το κακόβουλο αίτημα, το cookie αποστέλλεται αυτόματα μαζί με τυχόν πιθανό ωφέλιμο φορτίο και η εφαρμογή δεν αντιτίθεται στην προβολή του αιτήματος σε έναν χρήστη που γνωρίζει ήδη.
Ένα από τα πιο διάσημα παραδείγματα είναι να εξαπατήσετε έναν χρήστη να μεταφέρει χρήματα από τον λογαριασμό του σε αυτόν που ελέγχει ένας εισβολέας. Ένας χρήστης συνδέεται σε ένα σύστημα ηλεκτρονικής τραπεζικής για να ελέγξει το υπόλοιπο του λογαριασμού του. Μετά από αυτό, επισκέπτονται ένα διαδικτυακό φόρουμ για να ελέγξουν τις κριτικές ενός νέου κινητού τηλεφώνου. Ένας εισβολέας, ψάρεμα με δυναμίτη, δημοσιεύει μια κριτική που περιλαμβάνει μια εικόνα με έναν φαινομενικά σπασμένο υπερσύνδεσμο εικόνας. Αντί για έναν πραγματικό υπερσύνδεσμο, ο εισβολέας χρησιμοποιεί έναν υπερσύνδεσμο που χρησιμοποιεί το σύστημα ηλεκτρονικής τραπεζικής για να μεταφέρει χρήματα από τον λογαριασμό Α στον λογαριασμό Β: https://payments.dummybank.com?receiver=attacker&amount=100
. Το τραπεζικό σύστημα καθιστά τον επικυρωμένο χρήστη τον αποστολέα και την αξία από την παράμετρο «δέκτης» τον παραλήπτη των χρημάτων. Φυσικά, ο εισβολέας καθορίζει τον υπεράκτιο λογαριασμό του ως παραλήπτη.
Δεδομένου ότι το πρόγραμμα περιήγησης φορτώνει αυτόματα εικόνες κατά την απόδοση της σελίδας, το αίτημα συμβαίνει στο παρασκήνιο. Εάν το σύστημα πληρωμών της τράπεζας εφαρμόζει μεταφορές χρημάτων χρησιμοποιώντας αίτημα HTTP GET, τίποτα δεν εμποδίζει την καταστροφή. Λάβετε υπόψη ότι το παράδειγμα είναι απλό και πιθανότατα δεν πραγματοποιούνται μεταφορές μέσω HTTP GET. Ωστόσο, ο εισβολέας μπορεί, με λίγη ακόμη δυσκολία, να καταφέρει να αλλάξει το χαρακτηριστικό 'action' στη φόρμα δημοσίευσης μηνυμάτων HTML του φόρουμ. Στη συνέχεια, το πρόγραμμα περιήγησης στέλνει το αίτημα στο σύστημα πληρωμών της τράπεζας, αντί για το back-end του φόρουμ.
Η κλοπή χρημάτων είναι μόνο ένα από τα πολλά παραδείγματα εκεί έξω. Η αλλαγή των διευθύνσεων email των χρηστών ή η πραγματοποίηση ακούσιων αγορών εμπίπτουν επίσης σε αυτήν την κατηγορία. Όπως συμβαίνει συχνά, η κοινωνική μηχανική και ορισμένες τεχνικές γνώσεις αποτελούν αποτελεσματικό μοχλό ενάντια σε ένα λάθος μηχανικής λογισμικού.
Κατά το σχεδιασμό των συστημάτων σας, λάβετε υπόψη τα ακόλουθα:
Αυτή η ευπάθεια έχει ακόμη χειρότερη επίδραση όταν συνδυάζεται με δέσμες ενεργειών μεταξύ ιστότοπων (XSS). Εάν ένας εισβολέας μπορεί να εισάγει κακόβουλο κώδικα σε έναν αγαπημένο ιστότοπο ή εφαρμογή, το εύρος της επίθεσης γίνεται πολύ πιο σημαντικό και επικίνδυνο. Ακόμη πιο κρίσιμο, οι επιτιθέμενοι μπορούν να παρακάμψουν ορισμένους από τους μηχανισμούς προστασίας έναντι του CSRF εάν είναι δυνατές οι επιθέσεις XSS.
Λάβετε υπόψη ότι το CSRF δεν έχει εξαφανιστεί, δεν είναι τόσο συνηθισμένο όσο ήταν.
Πολλές εφαρμογές, αφού ολοκληρώσετε μια ενέργεια, ανακατευθύνετε ή προωθήστε έναν χρήστη σε άλλο μέρος της ίδιας ή ακόμα και σε κάποια άλλη εφαρμογή. Για παράδειγμα, η επιτυχής σύνδεση σε μια εφαρμογή ενεργοποιεί μια ανακατεύθυνση στην αρχική σελίδα ή στη σελίδα που επισκέφτηκε αρχικά ο χρήστης. Πολύ συχνά, ο προορισμός είναι μέρος της ενέργειας της φόρμας ή της διεύθυνσης συνδέσμων. Εάν το στοιχείο που χειρίζεται την ανακατεύθυνση ή προς τα εμπρός δεν βεβαιωθεί ότι η διεύθυνση προορισμού είναι πράγματι αυτή που δημιουργήθηκε από την εφαρμογή, προκύπτει μια πιθανή απειλή. Αυτή είναι μια ευπάθεια ασφαλείας που ονομάζεται 'μη επικυρωμένες ανακατευθύνσεις και προωθήσεις'.
Οι δύο κύριοι λόγοι για τους οποίους οι μη επικυρωμένες ανακατευθύνσεις και οι προωθήσεις θα θεωρούνταν ποτέ επικίνδυνοι είναι το ηλεκτρονικό ψάρεμα και η πειρατεία. Ένας εισβολέας μπορεί να καταφέρει να αλλάξει τη θέση προορισμού ανακατεύθυνσης / προώθησης και να στείλει έναν χρήστη σε μια κακόβουλη εφαρμογή σχεδόν διακριτή από την αρχική. Ένας ανυποψίαστος χρήστης αποκαλύπτει τα διαπιστευτήριά του και τις εμπιστευτικές του πληροφορίες σε κακόβουλο τρίτο μέρος. Προτού συνειδητοποιήσουν τι είχε συμβεί, είναι ήδη πολύ αργά.
Για παράδειγμα, οι εφαρμογές ιστού εφαρμόζουν πολύ συχνά τη σύνδεση με υποστήριξη για ανακατευθύνσεις στη σελίδα της τελευταίας επίσκεψης. Για να μπορέσετε να το κάνετε εύκολα, ένα χαρακτηριστικό δράσης μιας φόρμας HTML μπορεί να μοιάζει με κάτι http://myapp.example.com/signin?url=http://myapp.example.com/puppies . Είστε μεγάλος θαυμαστής των κουταβιών, οπότε ήταν λογικό να εγκαταστήσετε μια επέκταση προγράμματος περιήγησης που αντικαθιστά τα favicons του ιστότοπου με τις μικρογραφίες των αγαπημένων σας κουταβιών. Δυστυχώς, είναι ένας κόσμος που τρώει σκύλο. Ο συντάκτης της επέκτασης του προγράμματος περιήγησης αποφάσισε να εξαργυρώσει την άνευ όρων αγάπη σας και να εισαγάγει ένα επιπλέον «χαρακτηριστικό». Κάθε φορά που επισκέπτεστε τον αγαπημένο σας ιστότοπο θαυμαστών κουταβιών, αντικαθιστά την παράμετρο 'url' στο χαρακτηριστικό ενέργειας της φόρμας με έναν σύνδεσμο προς τον δικό του ιστότοπο. Δεδομένου ότι ο ιστότοπος φαίνεται ακριβώς ο ίδιος, όταν δίνετε τα στοιχεία της πιστωτικής σας κάρτας για να αγοράσετε κουτάβια, στην πραγματικότητα χρηματοδοτείτε έναν κακόβουλο εισβολέα και όχι το χόμπι σας.
Η επίλυση της ευπάθειας περιλαμβάνει τον έλεγχο της τοποθεσίας προορισμού, διασφαλίζοντας ότι είναι η προβλεπόμενη. Εάν ένα πλαίσιο ή βιβλιοθήκη κάνει την πλήρη λογική ανακατεύθυνσης ή προώθησης, είναι χρήσιμο να ελέγξετε την εφαρμογή και να ενημερώσετε τον κώδικα εάν είναι απαραίτητο. Διαφορετικά, πρέπει να κάνετε χειροκίνητους ελέγχους για προστασία από την επίθεση.
Υπάρχουν διάφοροι τύποι ελέγχων που μπορείτε να κάνετε. Για την καλύτερη προστασία, χρησιμοποιήστε έναν συνδυασμό πολλών προσεγγίσεων αντί να κολλήσετε μόνο με μία από αυτές.
Τα περισσότερα από τα ζητήματα της λίστας μπορούν να χαρακτηριστούν ως ελαττώματα στην εφαρμογή, είτε λόγω έλλειψης γνώσεων είτε λόγω ανεπαρκούς διερεύνησης πιθανών απειλών. Και οι δύο αυτοί λόγοι μπορούν να αποδοθούν στην έλλειψη εμπειρίας και η λύση για την εξέταση τους στο μέλλον είναι εύκολη - απλώς φροντίστε να μάθετε περισσότερα και να είστε πιο εμπεριστατωμένοι. Ένα ιδιαίτερα δύσκολο βασίζεται σε έναν συνδυασμό του επικίνδυνου (αλλά πολύ ανθρώπινου) χαρακτηριστικού της δημιουργίας πάρα πολλών υποθέσεων σε συνδυασμό με τη δυσκολία ανάπτυξης και συντήρησης σύνθετων συστημάτων υπολογιστών. Μια ευπάθεια που εντάσσεται σε αυτήν την κατηγορία είναι «σπασμένος έλεγχος πρόσβασης».
Η ευπάθεια προκαλείται από ανεπαρκή ή απόλυτη έλλειψη εξουσιοδότησης και ελέγχου πρόσβασης για ορισμένα τμήματα της εφαρμογής. Στις προηγούμενες επαναλήψεις του OWASP Top Ten Project, υπήρχαν δύο ζητήματα: ανασφαλείς άμεσες αναφορές αντικειμένων και λείπει έλεγχος πρόσβασης σε επίπεδο λειτουργίας. Τώρα συγχωνεύονται σε ένα λόγω της ομοιότητάς τους.
Οι άμεσες αναφορές αντικειμένων χρησιμοποιούνται συχνά στις διευθύνσεις URL για τον εντοπισμό πόρων που λειτουργούν. Για παράδειγμα, όταν ένας χρήστης συνδέεται, μπορεί να επισκεφτεί το προφίλ του κάνοντας κλικ σε έναν σύνδεσμο που περιέχει το αναγνωριστικό του προφίλ του. Εάν το ίδιο αναγνωριστικό είναι αποθηκευμένο στη βάση δεδομένων και χρησιμοποιείται για την ανάκτηση πληροφοριών προφίλ και η εφαρμογή υποθέτει ότι οι χρήστες μπορούν να μεταβούν στη σελίδα προφίλ μόνο μέσω μιας σελίδας σύνδεσης, η αλλαγή του αναγνωριστικού προφίλ στη διεύθυνση URL εκθέτει τις πληροφορίες προφίλ άλλου χρήστη.
Μια εφαρμογή που ορίζει τη διεύθυνση URL της φόρμας διαγραφής προφίλ http://myapp.example.com/users/15/delete καθιστά σαφές ότι υπάρχουν τουλάχιστον 14 άλλοι χρήστες εντός της εφαρμογής. Το να μάθετε πώς να φτάσετε στη φόρμα διαγραφής άλλων χρηστών δεν είναι επιστήμη πυραύλων σε αυτήν την περίπτωση.
Η λύση σε αυτό το ζήτημα είναι να εκτελέσετε ελέγχους εξουσιοδότησης για κάθε πόρο χωρίς να υποθέσετε ότι μόνο ορισμένες διαδρομές μπορούν να ληφθούν για να φτάσετε σε ορισμένα μέρη της εφαρμογής. Επιπλέον, η κατάργηση άμεσων αναφορών και η χρήση έμμεσων είναι ένα ακόμη βήμα προς τα εμπρός, επειδή δυσκολεύει τους κακόβουλους χρήστες να καταλάβουν πώς δημιουργείται η αναφορά.
Κατά τη διάρκεια της ανάπτυξης, ως προφύλαξη, γράψτε ένα απλό διάγραμμα μηχανής κατάστασης. Αφήστε τις πολιτείες να αντιπροσωπεύουν διαφορετικές σελίδες στην εφαρμογή σας και να μεταβαίνουν τις ενέργειες που μπορούν να κάνουν οι χρήστες. Αυτό διευκολύνει τη λίστα όλων των μεταβάσεων και των σελίδων που χρειάζονται ιδιαίτερη προσοχή.
Λείπει ο έλεγχος πρόσβασης σε επίπεδο λειτουργίας είναι πολύ παρόμοιος με ανασφαλείς άμεσες αναφορές αντικειμένων. Σε αυτήν την περίπτωση, οι χρήστες τροποποιούν τη διεύθυνση URL ή κάποια άλλη παράμετρο για να προσπαθήσουν να αποκτήσουν πρόσβαση σε προστατευμένα μέρη της εφαρμογής. Εάν δεν υπάρχει κατάλληλος έλεγχος πρόσβασης που εξετάζει τα επίπεδα πρόσβασης, ένας χρήστης μπορεί να αποκτήσει προνομιακή πρόσβαση σε πόρους εφαρμογών ή τουλάχιστον κάποια γνώση της ύπαρξής του.
Δανεισμός από το παράδειγμα για άμεσες αναφορές αντικειμένων, Εάν μια εφαρμογή υποθέσει ότι ένας χρήστης που επισκέπτεται τη φόρμα διαγραφής είναι υπερχρήστης μόνο επειδή οι υπερχρήστες μπορούν να δουν τον σύνδεσμο προς τη φόρμα διαγραφής, χωρίς να κάνουν περαιτέρω εξουσιοδότηση, ανοίγει ένα τεράστιο ελάττωμα ασφαλείας. Το να βασίζεστε στη διαθεσιμότητα κάποιου στοιχείου διεπαφής χρήστη δεν είναι κατάλληλος έλεγχος πρόσβασης.
Το πρόβλημα επιλύεται διασφαλίζοντας πάντα την εκτέλεση ελέγχων σε όλα τα επίπεδα της εφαρμογής σας. Η διεπαφή διεπαφής ενδέχεται να μην είναι ο μόνος τρόπος με τον οποίο κακόβουλοι χρήστες μπορούν να έχουν πρόσβαση στο επίπεδο τομέα σας. Επίσης, μην βασίζεστε σε πληροφορίες που διαβιβάζονται από τους χρήστες σχετικά με τα επίπεδα πρόσβασής τους. Εκτελέστε τον κατάλληλο έλεγχο συνεδρίας και ελέγχετε πάντα τα ληφθέντα δεδομένα. Ακριβώς επειδή το σώμα του αιτήματος λέει ότι ο χρήστης είναι διαχειριστής, δεν σημαίνει πραγματικά ότι είναι.
Ο σπασμένος έλεγχος πρόσβασης συνδυάζει τώρα όλα τα ζητήματα που σχετίζονται με ανεπαρκή έλεγχο πρόσβασης, είτε σε επίπεδο εφαρμογής είτε σε επίπεδο συστήματος, όπως μια εσφαλμένη διαμόρφωση του συστήματος αρχείων.
Η έλευση νέων πλαισίων front-end και η υιοθέτηση νέων πρακτικών ανάπτυξης λογισμικού μετέβαλαν τα προβλήματα ασφάλειας σε εντελώς νέα θέματα. Οι νέες τεχνολογίες κατάφεραν επίσης να λύσουν ορισμένα κοινά ζητήματα που αντιμετωπίζαμε με το χέρι πριν. Ως εκ τούτου, έγινε χρήσιμο να αναθεωρήσετε τη λίστα και να την προσαρμόσετε ανάλογα με τις σύγχρονες τάσεις.
Το πρότυπο XML προσφέρει μια ελάχιστα γνωστή ιδέα που ονομάζεται εξωτερική οντότητα, η οποία αποτελεί μέρος του ορισμού τύπου δεδομένων του εγγράφου (DTD). Επιτρέπει στους συντάκτες εγγράφων να καθορίζουν συνδέσμους προς εξωτερικές οντότητες που μπορούν στη συνέχεια να αναφέρονται και να περιλαμβάνονται στο κύριο έγγραφο. Ένα πολύ απλό παράδειγμα θα ήταν:
&bar;
Κατά τη διάρκεια της ανάλυσης, μια αναφορά &bar;
αντικαθίσταται με το περιεχόμενο από την καθορισμένη οντότητα, αποδίδοντας έτσι baz
.
Εάν η εφαρμογή επρόκειτο να λάβει εξωτερική είσοδο και να την συμπεριλάβει, χωρίς ελέγχους, απευθείας στον ορισμό εγγράφου XML, θα ήταν δυνατή μια ευρεία γκάμα διαρροών δεδομένων και επιθέσεων.
Το μαγικό είναι ότι η οντότητα δεν χρειάζεται να είναι μια απλή συμβολοσειρά - μπορεί να είναι μια αναφορά σε ένα αρχείο στο σύστημα αρχείων. Ο αναλυτής XML θα χαρεί να λάβει τα περιεχόμενα του καθορισμένου αρχείου και να το συμπεριλάβει στην παραγόμενη απόκριση, αποκαλύπτοντας ενδεχομένως ευαίσθητες πληροφορίες συστήματος. Όπως φαίνεται από το OWASP, θα ήταν πολύ εύκολο να λάβετε πληροφορίες σχετικά με τους χρήστες του συστήματος, ορίζοντας την οντότητα ως
]>
Ένα ιδιαίτερα ενοχλητικό «χαρακτηριστικό» αυτής της ευπάθειας είναι η δυνατότητα εύκολης εκτέλεσης μιας επίθεσης άρνησης υπηρεσίας. Ένας εύκολος τρόπος για να το κάνετε είναι να απαριθμήσετε τα περιεχόμενα ενός ατελείωτου αρχείου όπως /dev/random
. Το άλλο είναι να δημιουργήσετε μια ακολουθία οντοτήτων, καθεμία από τις οποίες αναφέρει την προηγούμενη πολλές φορές. Αυτό μετατρέπει την τελική αναφορά σε μια ρίζα ενός δυνητικά πολύ μεγάλου και βαθιού δέντρου του οποίου η ανάλυση θα μπορούσε να εξαντλήσει τη μνήμη του συστήματος. Αυτή η επίθεση είναι ακόμη γνωστή ως Billion Laughs. Όπως φαίνεται στη Wikipedia, ορίζεται μια σειρά εικονικών οντοτήτων, δημιουργώντας την ευκαιρία για έναν εισβολέα να συμπεριλάβει ένα δισεκατομμύριο lols στο τελικό έγγραφο.
&lol9;
Η πρόληψη της εκμετάλλευσης εξωτερικών οντοτήτων XML θα μπορούσε να γίνει χρησιμοποιώντας μια λιγότερο περίπλοκη μορφή δεδομένων. Το JSON είναι μια καλή αντικατάσταση, υπό την προϋπόθεση ότι λαμβάνεται επίσης κάποια προφύλαξη λόγω πιθανών επιθέσεων εναντίον της. Η ενημέρωση βιβλιοθηκών XML είναι απαραίτητη, σε συνδυασμό με την απενεργοποίηση της επεξεργασίας εξωτερικών οντοτήτων και του DTD. Όπως πάντα, επικυρώστε και απολυμάνετε τα δεδομένα που προέρχονται από μη αξιόπιστες πηγές πριν τα χρησιμοποιήσετε ή τα συμπεριλάβετε στα έγγραφά σας.
Κατά τη σύνταξη κώδικα, οι προγραμματιστές έχουν τη δύναμη να ελέγχουν τα συστήματα που αναπτύσσουν χρησιμοποιώντας τον κώδικα που γράφουν. Πόσο φοβερό θα ήταν να ελέγχετε τη συμπεριφορά των συστημάτων τρίτων μερών που γράφουν μόνο λίγο ή και καθόλου κώδικα; Χάρη στο γεγονός ότι οι άνθρωποι δεν είναι τέλειοι και ότι οι βιβλιοθήκες έχουν ελαττώματα, αυτό είναι σίγουρα δυνατό.
Η κατάσταση και η διαμόρφωση της εφαρμογής είναι συχνά σειριακά και αποθηκεύονται. Μερικές φορές τα προγράμματα περιήγησης χρησιμεύουν ως μηχανές αποθήκευσης εάν τα σειριακά δεδομένα συνδέονται στενά με τον τρέχοντα χρήστη. Μια εφαρμογή που προσπαθεί να είναι έξυπνη και να εξοικονομήσει χρόνο επεξεργασίας θα μπορούσε να χρησιμοποιήσει ένα cookie για να επισημάνει ότι ένας χρήστης έχει συνδεθεί. Δεδομένου ότι το cookie μπορεί να δημιουργηθεί μόνο μετά την επιτυχία της σύνδεσης, είναι λογικό να αποθηκεύσετε το όνομα χρήστη στο cookie. Στη συνέχεια, ένας χρήστης πιστοποιείται και εξουσιοδοτείται βάσει της ύπαρξης και του περιεχομένου του cookie. Αν οι άνθρωποι δεν ήταν κακοπροαίρετοι, τίποτα δεν θα μπορούσε να πάει στραβά. Για να είμαι ειλικρινής, ούτε πρέπει να είναι περίεργοι.
Εάν ένας περίεργος χρήστης βρήκε ένα cookie στο μηχάνημά του, θα μπορούσε να δει κάτι σαν αυτό:
{'username': 'joe.doe', 'expires': '2018-06-01 10:28:16'}
Ένα απόλυτα έγκυρο λεξικό Python που έχει σειριοποιηθεί στο JSON, τίποτα το ιδιαίτερο γι 'αυτό. Ο συνεχώς περίεργος χρήστης μπορεί να αλλάξει την ημερομηνία λήξης για να αποτρέψει την εφαρμογή από το να υποχρεώσει την αποσύνδεση. Ένας ακόμη πιο περίεργος χρήστης μπορεί να προσπαθήσει να τροποποιήσει το όνομα χρήστη σε 'jane.doe'
. Εάν υπήρχε αυτό το όνομα χρήστη, θα ανοίξει έναν εντελώς νέο κόσμο για τον ανυποψίαστο χρήστη που έχει πλέον πρόσβαση σε ιδιωτικά δεδομένα.
Ένα απλό παράδειγμα σειριοποίησης δεδομένων στο JSON και η διατήρηση όλων των διαφανών είναι πολύ από το χειρότερο πράγμα που μπορεί να συμβεί σε εσάς. Εάν ένας εισβολέας καταφέρει να τροποποιήσει ορισμένα σειριακά δεδομένα, ενδέχεται να είναι σε θέση να τα τροποποιήσει με τρόπο που αναγκάζει το σύστημά σας να εκτελέσει αυθαίρετο κώδικα.
Ας υποθέσουμε ότι δημιουργείτε ένα REST API που επιτρέπει στους χρήστες να γράφουν τα δικά τους μοντέλα μηχανικής μάθησης στο Python και να τα ανεβάζουν στην υπηρεσία σας. Η υπηρεσία θα αξιολογήσει τα μεταφορτωμένα μοντέλα και θα τα εκπαιδεύσει χρησιμοποιώντας τα σύνολα δεδομένων σας. Αυτό επιτρέπει στους χρήστες να χρησιμοποιούν τους υπολογιστικούς πόρους σας και ένα μεγάλο αριθμό διαθέσιμων συνόλων δεδομένων για γρήγορη και εύκολη κατασκευή μοντέλων.
Η υπηρεσία δεν αποθηκεύει τον κώδικα σε μορφή απλού κειμένου. Χρήστες πίκλα τον κωδικό τους, τον κρυπτογραφήστε χρησιμοποιώντας το ιδιωτικό τους κλειδί και στείλτε το στο API για εκπαίδευση. Όταν η υπηρεσία πρέπει να εκτελέσει ένα μοντέλο, αποκρυπτογραφεί τον κώδικα, τον αποσυνδέει και τον εκτελεί. Το δύσκολο μέρος είναι ότι το πρωτόκολλο τουρσί δεν είναι ασφαλές. Ο κώδικας μπορεί να κατασκευαστεί με τρόπο που επιτρέπει την εκτέλεση αυθαίρετου κακόβουλου κώδικα κατά την αποεστερίωση.
Το πρωτόκολλο του Python επιτρέπει στα μαθήματα να καθορίζουν μια μέθοδο __reduce__
, η οποία επιστρέφει πληροφορίες σχετικά με τον τρόπο αποεπιλογής ενός προσαρμοσμένου αντικειμένου. Μία από τις υποστηριζόμενες τιμές επιστροφής είναι μια πλειάδα από δύο ορίσματα: μια κλήση και μια πλειάδα ορισμάτων που θα μεταβιβαστούν στην κλήση. Λαμβάνοντας υπόψη ότι το σύστημα εκπαίδευσης μοντέλου ML στοχεύει να παρέχει τη μέγιστη ευελιξία της δομής κώδικα, είναι δυνατό να γράψετε τον ακόλουθο κώδικα:
class Algo(object): def run(self): pass def __reduce__(self): import itertools return (list, (itertools.count(1), ))
Μόλις το αντικείμενο πρέπει να αποστειρωθεί (μη τουρσί), μια συνάρτηση list
καλείται με ένα μόνο όρισμα. Η συνάρτηση list
είναι ένας κατασκευαστής λιστών στο Python, και η συνάρτηση itertools.count
παράγει ένα άπειρο επαναληπτικό τιμών, ξεκινώντας από την παράμετρο που πέρασε. Η μετατροπή ενός άπειρου επαναλήπτη σε μια λίστα πεπερασμένων μπορεί να έχει καταστροφικές συνέπειες στην απόδοση και τη σταθερότητα του συστήματός σας.
Η μόνη πραγματική θεραπεία για αυτόν τον τύπο ευπάθειας είναι η επιλογή να μην αποεπιλεχθούν δεδομένα που προέρχονται από εξωτερικές πηγές. Σε περίπτωση που αυτό δεν είναι δυνατό, προτείνεται να χρησιμοποιήσετε ένα άθροισμα ελέγχου ή μια ψηφιακή υπογραφή για να αποτρέψετε την αποεριοποίηση δεδομένων που ενδεχομένως τροποποιήθηκαν από κακόβουλο χρήστη. Επίσης, προσπαθήστε να ρυθμίσετε ένα περιβάλλον sandbox αποσυνδεδεμένο από το κύριο σύστημά σας για να περιορίσετε τις επιπτώσεις των ζητημάτων που ενδέχεται να προκύψουν.
Όταν χρησιμοποιείτε εξωτερικές βιβλιοθήκες για αποεστερίωση δεδομένων, για παράδειγμα από XML ή JSON, προσπαθήστε να επιλέξετε αυτές που σας επιτρέπουν να κάνετε ελέγχους τύπου αντικειμένου πριν από την εκτέλεση μιας πραγματικής διαδικασίας αποεπιλογίωσης. Αυτό μπορεί να πιάσει απροσδόκητους τύπους αντικειμένων των οποίων ο μοναδικός σκοπός είναι να βλάψει το σύστημά σας.
Όπως με όλες τις άλλες ενέργειες που εκτελεί η εφαρμογή σας, επιβάλλετε εκτεταμένη καταγραφή και παρακολούθηση. Οι αποεπινοτικοποιήσεις συμβαίνουν συχνά ή αποτυγχάνουν περισσότερο από το κανονικό αποτελούν ενδείξεις ότι κάτι κακό συμβαίνει. Αντιμετωπίστε τα προβλήματα νωρίς.
Πόσος χρόνος αφιερώνετε για να βεβαιωθείτε ότι καταγράφετε όλες τις προειδοποιήσεις και τα λάθη που συμβαίνουν στην εφαρμογή σας; Αποθηκεύετε μόνο σφάλματα που εμφανίζονται στον κώδικα ή καταγράφετε επίσης σφάλματα επικύρωσης; Τι συμβαίνει όταν δεν τηρούνται οι επιχειρηματικοί κανόνες του τομέα σας; Η μη τήρηση όλων των εσφαλμένων και ύποπτων δραστηριοτήτων στην εφαρμογή σας αποτελεί κίνδυνο ασφάλειας και δεδομένων.
Φανταστείτε το ακόλουθο σενάριο. Η αίτησή σας περιέχει μια σελίδα σύνδεσης, όπως οι περισσότεροι. Η φόρμα έχει δύο πεδία, ένα για την εισαγωγή email και το άλλο για κωδικό πρόσβασης. Εάν ένας χρήστης προσπαθήσει να συνδεθεί και παρέχει λανθασμένο κωδικό πρόσβασης, μπορεί να προσπαθήσει ξανά. Δυστυχώς, ο αριθμός των λανθασμένων προσπαθειών δεν είναι περιορισμένος, επομένως η σελίδα σύνδεσης δεν θα κλειδωθεί μετά από ανεπιτυχείς προσπάθειες N. Ένας εισβολέας μπορεί να χρησιμοποιήσει αυτήν την ευκαιρία και, έχοντας ένα σωστό μήνυμα ηλεκτρονικού ταχυδρομείου, συνεχίζει να εισάγει κωδικούς πρόσβασης από ένα τραπέζι ουράνιου τόξου έως ότου επιτευχθεί τελικά ένας συνδυασμός. Εφόσον η εφαρμογή σας είναι αρκετά ασφαλής και έχετε κατακερματιστεί τους κωδικούς πρόσβασης πριν τους εισαγάγετε σε μια βάση δεδομένων, αυτή η συγκεκριμένη επίθεση δεν θα λειτουργήσει. Ωστόσο, έχετε έναν μηχανισμό για τον εντοπισμό των εισβολών;
Ακριβώς επειδή αυτή η απόπειρα απέτυχε να ανοίξει τη σελίδα σύνδεσης, αυτό δεν σημαίνει ότι κάποιος άλλος δεν θα το κάνει. Η σελίδα σύνδεσης δεν είναι πιθανώς η μόνη πιθανή πόρτα που έχετε, ούτε. Αν όχι για κάτι άλλο, κάποιος μπορεί να προσπαθήσει να χρησιμοποιήσει σπασμένο έλεγχο πρόσβασης εναντίον σας. Ακόμη και τέλεια κατασκευασμένες εφαρμογές θα πρέπει να γνωρίζουν ότι κάποιος προσπαθεί να τους επιτεθεί, παρόλο που μπορεί να μην είναι δυνατό. Πάντα όμως.
Για να κάνετε το καλύτερο δυνατό για να προστατευτείτε από τέτοιες επιθέσεις, κάντε τα ακόλουθα βήματα:
Κατά την επίλυση του προβλήματος, προσέξτε να μην διαρρεύσετε αρχεία καταγραφής σφαλμάτων σε εξωτερικούς χρήστες. Σε αντίθετη περίπτωση, σας καθιστά ευαίσθητο στην έκθεση ευαίσθητων πληροφοριών. Η καταγραφή και η παρακολούθηση πρέπει να σας βοηθήσουν στην επίλυση προβλημάτων και όχι στους επιτιθέμενους να κάνουν τη δουλειά τους πιο αποτελεσματικά.
Είναι σημαντικό να γνωρίζετε τις πιθανές απειλές και ευπάθειες στις εφαρμογές Ιστού. Είναι ακόμη πιο σημαντικό να αρχίσετε να τα αναγνωρίζετε στις εφαρμογές σας και να εφαρμόζετε τις ενημερώσεις κώδικα για να τις καταργήσετε.
Η προσοχή στην ασφάλεια εφαρμογών αποτελεί σημαντικό μέρος όλων των βημάτων του έργου ανάπτυξης λογισμικού. Αρχιτέκτονες λογισμικού, προγραμματιστές και δοκιμαστές πρέπει όλοι να ενσωματώσουν τις διαδικασίες δοκιμής λογισμικού στις ροές εργασίας τους. Είναι χρήσιμο να χρησιμοποιήσετε λίστες ελέγχου ασφαλείας και αυτοματοποιημένες δοκιμές σε κατάλληλα βήματα της διαδικασίας ανάπτυξης λογισμικού για τη μείωση του κινδύνου ασφάλειας.
Είτε αναλύετε μια υπάρχουσα εφαρμογή είτε αναπτύσσετε μια νέα, θα πρέπει να εξετάσετε το Πρότυπο έργο επαλήθευσης ασφάλειας εφαρμογών OWASP (ASVS). Ο στόχος του έργου είναι να αναπτύξει ένα πρότυπο για την επαλήθευση της ασφάλειας της εφαρμογής. Το πρότυπο απαριθμεί δοκιμές και απαιτήσεις για την ανάπτυξη ασφαλών εφαρμογών ιστού. Οι δοκιμές αντιστοιχίζονται σε επίπεδα από ένα έως τρία, όπου το ένα σημαίνει το λιγότερο ποσό κινδύνου και τρία σημαίνει την υψηλότερη πιθανή απειλή. Η ταξινόμηση επιτρέπει στους διαχειριστές εφαρμογών να αποφασίσουν ποιες από τις απειλές είναι πιο πιθανές και σημαντικές. Δεν είναι απαραίτητο να συμπεριλάβετε κάθε δοκιμή σε κάθε εφαρμογή.
Τόσο τα νέα όσο και τα υπάρχοντα έργα εφαρμογών ιστού, ειδικά εκείνα που ακολουθούν τις αρχές του Agile, επωφελούνται από τον δομημένο σχεδιασμό των προσπαθειών για την εξασφάλιση των εφαρμογών τους. Ο προγραμματισμός των δοκιμών OWASP ASVS είναι ευκολότερος εάν αποφασίσετε να το χρησιμοποιήσετε Πλαίσιο γνώσης ασφαλείας OWASP . Πρόκειται για μια εφαρμογή για τη διαχείριση σπριντ με προσανατολισμό στις δοκιμές ασφαλείας, με ένα σύνολο παραδειγμάτων σχετικά με τον τρόπο επίλυσης κοινών προβλημάτων ασφαλείας και εύκολες στη λίστα ελέγχου που βασίζονται στο OWASP ASVS.
Εάν μόλις ξεκινήσατε να εξερευνάτε την ασφάλεια εφαρμογών ιστού και χρειάζεστε μια ασφαλή παιδική χαρά με άμμο, χρησιμοποιήστε μια εφαρμογή εφαρμογής ιστού από το OWASP— WebGoat . Είναι μια σκόπιμα ανασφαλής εφαρμογή μιας εφαρμογής ιστού. Η εφαρμογή σας καθοδηγεί στα μαθήματα, με κάθε μάθημα να επικεντρώνεται σε μία απειλή για την ασφάλεια.
Κατά την ανάπτυξη εφαρμογών, βεβαιωθείτε ότι:
Παρόλο που, όπως υποδηλώνει το όνομα, το OWASP Top Ten Project παραθέτει μόνο δέκα ευπάθειες ασφαλείας, υπάρχουν χιλιάδες πιθανές παγίδες και backdoors που απειλούν τις εφαρμογές σας και, κυρίως, τους χρήστες και τα δεδομένα τους. Φροντίστε να είστε επιφυλακτικοί και να ανανεώνετε συνεχώς τις γνώσεις σας, καθώς οι αλλαγές και οι βελτιώσεις των τεχνολογιών έχουν τόσο αρνητικά όσο και μειονεκτήματα.
Ω, και, μην ξεχνάτε, ο κόσμος δεν είναι ασπρόμαυρος. Οι ευπάθειες ασφαλείας δεν έρχονται μόνες τους. είναι συχνά αλληλένδετα. Το να είσαι εκτεθειμένος σε ένα συχνά σημαίνει ότι μια σειρά από άλλους είναι γύρω από τις γωνίες, περιμένοντας να οπίσθουν τα άσχημα κεφάλια τους και κάποια στιγμή, παρόλο που δεν φταίνε εσύ, καθώς προγραμματιστής ασφάλειας συστήματος , σκοπεύετε να διορθώσετε τα κενά για τον περιορισμό του εγκλήματος στον κυβερνοχώρο. Για παράδειγμα, δείτε Οι αριθμοί πιστωτικών καρτών που έχουν παραβιαστεί είναι ακίνητοι, εξακολουθούν να έχουν δυνατότητα Google .
Το ακρωνύμιο OWASP σημαίνει το έργο Open Web Application Security. Είναι μια διαδικτυακή κοινότητα που παράγει μαθησιακούς πόρους και εργαλεία που ασχολούνται με την ασφάλεια εφαρμογών ιστού.
Το OWASP Top Ten είναι μια λίστα με τις πιο κοινές απειλές για την ασφάλεια εφαρμογών ιστού, που παράγονται από ειδικούς ασφαλείας, λαμβάνοντας υπόψη τα σχόλια της κοινότητας.
Η πλαστογράφηση αιτήσεων μεταξύ ιστότοπων είναι μια επίθεση που κάνει τους χρήστες να εκτελούν ανεπιθύμητα αιτήματα προς μια εφαρμογή στην οποία πιστοποιούνται.
προσθέστε χρήματα στο hack χρεωστικής κάρτας
Οι μη επικυρωμένες ανακατευθύνσεις και προωθήσεις είναι ένα θέμα ευπάθειας ασφαλείας που επιτρέπει στους εισβολείς να ανακατευθύνουν τους χρήστες σε μη ασφαλείς εφαρμογές ιστού, να αποκτήσουν πρόσβαση σε προστατευμένους πόρους εφαρμογών ή να κλέψουν προνομιακές πληροφορίες χρηστών, όλες οι οποίες έγιναν δυνατές μέσω επιθέσεων με έγχυση.
Η επίθεση με έγχυση είναι ένας τύπος επίθεσης που επιτρέπει στους εισβολείς να εισάγουν ανεπιθύμητο κώδικα σε μια εφαρμογή. Υπάρχουν διάφοροι τύποι επιθέσεων, με βάση την εφαρμογή, με τους πιο συνηθισμένους να είναι SQL injection και cross-site scripting.
Η αποεριοποίηση είναι μια διαδικασία μετατροπής μιας ροής byte σε κώδικα που φορτώνεται στη μνήμη. Η αρχική ροή byte παράγεται από μια διαδικασία σειριοποίησης που κάνει το αντίθετο.
Ένας φορέας επίθεσης σημαίνει μια μέθοδο εκμετάλλευσης ευπάθειας ασφαλείας σε εφαρμογές. Η ένεση ενός μη έγκυρου στοιχείου img HTML που υποβάλλει αιτήματα σε έναν πόρο API μιας τράπεζας είναι ένα παράδειγμα ενός φορέα επίθεσης που χρησιμοποιείται σε μια επίθεση CSRF.
Η οντότητα XML είναι ένας μηχανισμός για τον ορισμό ενός ψευδωνύμου σε ένα στοιχείο που χρησιμοποιείται στο έγγραφο XML ή στον ορισμό τύπου εγγράφου (DTD).
Η εξωτερική οντότητα είναι ένας τύπος οντότητας XML. Είναι εύκολο για τους συντάκτες εγγράφων να συμπεριλάβουν εξωτερικούς πόρους στα έγγραφά τους χρησιμοποιώντας ένα ενιαίο αναγνωριστικό πόρου (URI).
Το OWASP WebGoat είναι μια σκόπιμα ανασφαλής εφαρμογή μιας διαδικτυακής εφαρμογής που χρησιμεύει ως μηχανισμός εκμάθησης για τη διδασκαλία μαθημάτων ασφαλείας εφαρμογών Ιστού.