SQL injection σε εκπαιδευτική εφαρμογή DVWA και μηχανισμοί προστασίας βάσεων δεδομένων
SQL injection in DVWA web application and protection mechanisms of databases
Προβολή/ Άνοιγμα
Θεματική επικεφαλίδα
SQL (Computer program language) ; Computer security ; Βάσεις δεδομένων -- ΠροστασίαΠερίληψη
Ο SQL injection είναι ένας τρόπος επίθεσης στον οποίο εισάγεται ή επισυνάπτεται SQL κώδικας σε παραμέτρους εισόδου της εφαρμογής του χρήστη ο οποίος στη συνέχεια περνάει στον SQL server για ανάλυση και εκτέλεση. Οποιαδήποτε διαδικασία κατασκευάζει SQL δηλώσεις μπορεί να θεωρηθεί ευάλωτη σε επιθέσεις καθώς η διαφορετικότητα της φύσης της SQL και οι διαθέσιμες μέθοδοι για την κατασκευή της παρέχει μία πληθώρα επιλογών κωδικοποίησης. Η πρωταρχική μορφή της SQL injection αποτελείται από απευθείας εισαγωγή κώδικα σε παραμέτρους οι οποίες συνδέονται με SQL εντολές. Σε μία λιγότερο άμεση επίθεση εισάγεται κακόβουλος κώδικας μέσω συμβολοσειρών οι οποίες είναι προορισμένες για αποθήκευση σε πίνακα. Όταν οι αποθηκευμένες συμβολοσειρές συνδέονται με δυναμική εντολή SQL ο κακόβουλος κώδικας θα εκτελεστεί. Όταν μία εφαρμογή Web αποτυγχάνει να διασφαλίσει τις παραμέτρους οι οποίες περνάνε στην δημιουργία δυναμικών δηλώσεων SQL είναι δυνατόν για έναν εισβολέα να μεταβάλλει τη δομή αυτών. Όταν ένας εισβολέας είναι ικανός να μεταβάλει μια δήλωση SQL η δήλωση θα εκτελεστεί με τα ίδια δικαιώματα που θα εκτελούνταν από τον χρήστη της φόρμας. Καθώς ο εισβολέας χρησιμοποιεί τον SQL server για να εκτελέσει εντολές οι οποίες αλληλεπιδρούν με το λειτουργικό σύστημα, η διαδικασία θα τρέξει με τα ίδια δικαιώματα με αυτά με τα οποία εκτέλεσε την εντολή (database server, application server, Web server) το οποίο συχνά έχει υψηλά προνόμια. Οι web εφαρμογές οι οποίες είναι ευάλωτες σε SQL injection μπορεί να επιτρέψουν στον εισβολέα να αποκτήσει πλήρη πρόσβαση στις βάσεις δεδομένων τους. Επειδή αυτές οι βάσεις δεδομένων περιέχουν ευαίσθητες πληροφορίες των καταναλωτών ή των χρηστών τα αποτελέσματα των παραβιάσεων ασφαλείας περιλαμβάνουν την εκροή εμπιστευτικών πληροφοριών και γενικότερα την απάτη. Σε κάποιες περιπτώσεις οι εισβολείς χρησιμοποιούν την ευπάθεια μιας εφαρμογής σε SQL injection για να αναλάβουν τον έλεγχο και τελικά να καταστρέψουν το σύστημα που φιλοξενεί τη συγκεκριμένη εφαρμογή Web. Οι εφαρμογές Web οι οποίες είναι ευάλωτες σε επιθέσεις SQL (SQLIAs = SQL injection Attacks) είναι ευρέως διαδεδομένες ενώ συγκεκριμένη έρευνα της Gartner Group έδειξε πως πάνω από 300 Web τοποθεσίες στο δίκτυο έχουν δεχθεί επιθέσεις τύπου SQLIAs. Στην πραγματικότητα για την κατηγορία των SQLIAs έχουν μπει στο στόχαστρο με επιτυχία υψηλά προφίλ θυμάτων όπως TravelocityFTD.com και Guess.Inc. Η μέθοδος SQL injection αναφέρεται σε μία τάξη επίθεσης με εισαγωγή κώδικα στην οποία τα δεδομένα που παρέχονται από τον χρήστη εμπεριέχονται σε ένα SQL query με τέτοιο τρόπο ώστε μέρος των εισαχθέντων στοιχείων του χρήστη να αντιμετωπίζονται σαν SQL κώδικας. Αξιοποιώντας αυτά τα θέματα ευπάθειας ορισμένων εφαρμογών ένας εισβολέας μπορεί να υποβάλει SQL queries απευθείας στην βάση δεδομένων. Αυτού του είδους οι επιθέσεις αποτελούν σοβαρή απειλή για κάθε Web εφαρμογή η οποία δέχεται την εισαγωγή δεδομένων από χρήστες και τα οποία ενσωματώνει σε SQL queries σε μία βάση δεδομένων. Οι περισσότερες Web εφαρμογές οι οποίες χρησιμοποιούνται στο δίκτυο ή σε εταιρικά συστήματα ακολουθούν αυτή τη λογική λειτουργίας και διάδρασης με τον χρήστη και επομένως είναι τρωτές σε SQL injection. Η αιτία δημιουργίας τρωτών σημείων ευάλωτων σε SQL injection είναι σχετικά απλή και κατανοητή και πρόκειται για την ανεπαρκή επικύρωση των εισαχθέντων δεδομένων από τον χρήστη. Για την αντιμετώπιση αυτού του προβλήματος οι προγραμματιστές έχουν προτείνει μια σειρά κατευθυντήριων γραμμών κωδικοποίησης οι οποίες προωθούν αμυντικές πρακτικές κωδικοποίησης όπως είναι η κωδικοποίηση των εισαχθέντων στοιχείων από το χρήστη και η επικύρωση τους. Μια αυστηρή και συστηματική εφαρμογή αυτών των τεχνικών αποτελεί μια αποτελεσματική αντιμετώπιση της ευπάθειας της εφαρμογής σε επιθέσεις με SQL injection. Ωστόσο στην πράξη η εφαρμογή τέτοιων τεχνικών βασίζεται στην επιλογή του προγραμματιστή και γι’ αυτό είναι επιρρεπής σε σφάλματα. Αν και πρόσφατα ξεκίνησε να δίνεται μεγάλη βάση στο πρόβλημα ευπάθειας μιας εφαρμογής με SQL injection πολλές από τις προτεινόμενες λύσεις αδυνατούν να αντιμετωπίσουν το πρόβλημα στην πλήρη του έκταση. Υπάρχουν πολλοί τύποι SQLIAs καθώς και αμέτρητες παραλλαγές των τύπων αυτών. Ερευνητές καθώς και επαγγελματίες συχνά αγνοούν αυτή τη μυριάδα των διαφορετικών τεχνικών που μπορούν να χρησιμοποιηθούν για την εκτέλεση των SQLIAs. Επομένως οι περισσότερες από τις προτεινόμενες λύσεις αποτρέπουν ή ανιχνεύουν μόνο ένα υποσύνολο των πιθανών SQLIAs. Για κάθε είδος επίθεσης δίνεται ένας χαρακτηρισμός που απεικονίζει το αποτέλεσμά του. Μία επίθεση με SQL injection (SQLIA) πραγματοποιείται όταν ο εισβολέας αλλάζει το επιδιωκόμενο αποτέλεσμα ενός SQL query με την εισαγωγή λέξεων-κλειδιά της SQL. Αυτός ο άτυπος ορισμός περιλαμβάνει όλες τις παραλλαγές των SQLIAs. Παρακάτω ορίζουμε δύο σημαντικά χαρακτηριστικά των SQLIAs που χρησιμοποιούμε για την περιγραφή των επιθέσεων: ο μηχανισμός injection και η πρόθεση επίθεσης (attack intent).