Μαθήματα Πληροφορικής & Προγραμματισμού

Το sql injection στις data driven εφαρμογές (Μέρος Β’)

Το sql injection στις data driven εφαρμογές είναι τεχνική ενσωμάτωσης κώδικα, η οποία χρησιμοποιείται για επιθέσεις στις εφαρμογές αυτές. Σύμφωνα με την τεχνική αυτή, κακόβουλα SQL statements εισάγονται σε ένα πεδίο εισόδου προς εκτέλεση, για παράδειγμα να εξάγουν ολόκληρη τη βάση μαζί με τα δεδομένα της στον επιτιθέμενο.

Το SQL injection αποτελεί ένα ευρέως διαδεδομένο τρόπο επίθεσης σε ιστοσελίδες, αλλά μπορεί να χρησιμοποιηθεί και για επίθεση/ υποκλοπή σε κάθε τύπο SQL βάσης δεδομένων. Επιτρέπει στον επιτιθέμενο να υποκλέψει ταυτότητα, υπάρχοντα δεδομένα, να προκαλέσει ισχυρά ζητήματα ακεραιότητας σε βάσεις οικονομικού περιεχομένου (πχ κενές συναλλαγές ή χρεώσεις λογαριασμών), να μπλοκάρει το σύνολο των υπάρχοντων δεδομένων, να καταστήσει τη βάση σε αχρησία, καθώς και να αναλάβει τα καθήκοντα του διαχειριστή της βάσης.

Η τεχνική SQL injection για να επιτύχει κάποιο αποτέλεσμα πρέπει να εκμεταλλεύεται αδυναμίες/ ελλείψεις ασφαλείας στο λογισμικό της εφαρμογής. Οι ιστοσελίδες που εμφανίζουν περιεχόμενο (πχ αποτελέσματα ενός καλαθιού αγορών συγκεκριμένου χρήστη) αποτελούν ιδανικό στόχο για επιτήδειους χρήστες. Στην περίπτωση που δεν καλύπτουν προγραμματιστικά τις περιπτώσεις εισαγωγής δεδομένων λανθασμένου τύπου – όπως είδαμε στο μέρος Α’ του ομώνυμου άρθρου- οι πιθανότητες αποτελεσματικής επίθεσης αυξάνονται. Η εκμετάλλευση της ευαισθησίας ανάλογων σελίδων μπορεί να αναγκάσει τη βάση σε βεβιασμένη επιλογή και εμφάνιση εγγραφών/ πεδίων στον επιτιθέμενο, και κατ’ επέκταση στην άμεση εκροή απαγορευμένης πληροφορίας.

Υπάρχουν όμως και τύποι επιθέσεων SQL injection οι οποίοι δεν επιφέρουν άμεσο αποτέλεσμα προς τον επιτιθέμενο, γεγονός που βέβαια δε μειώνει τις πιθανότητες για εκροή πληροφορίας. Οι τύποι αυτοί απαιτούν περισσότερο χρόνο από τον επιτιθέμενο, καθώς η πληροφορία ανακτάται σε μικρά κομμάτια και βασίζεται στην υποβολή περισσότερων διαδοχικών ερωτημάτων προς το server. Παρακάτω παρατίθεται ο τρόπος λειτουργίας και έμμεσης ανάκτησης απαγορευμένων δεδομένων με οδηγό το sql injection στις data driven εφαρμογές.

Το sql injection στις data driven εφαρμογές: Blind SQL injection

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

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

Το sql injection στις data driven εφαρμογές: Blind SQL Injection/ Conditional responses

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

Η διεύθυνση http://books.example.com/showReview.php?ID=5 οδηγεί τον server στο να εκτελέσει το ερώτημα

SELECT * FROM bookreviews WHERE ID = 'Value(ID)';

το αποτέλεσμα του οποίου θα εμφανίσει στη σελίδα τα δεδομένα της εγγραφής με id=5 από τον πίνακα bookReviews. Το ερώτημα πραγματοποιείται εξ’ ολοκλήρου στον server. Ο χρήστης δε γνωρίζει τα ονόματα των πινάκων ή των πεδίων της βάσης, ούτε το ερώτημα καθαυτό. Το μόνο που μπορεί να διακρίνει είναι ότι η παραπάνω διεύθυνση επιστρέφει μία κριτική βιβλίου.
Ο επιτιθέμενος μπορεί να φορτώσει στη γραμμή διευθύνσεων τα ακόλουθα:
http://books.example.com/showReview.php?ID=5 OR 1=1 ή
http://books.example.com/showReview.php?ID=5 AND 1=2
τα οποία μεταφράζονται αντίστοιχα στα ερωτήματα:

SELECT * FROM bookreviews WHERE ID = '5' OR '1'='1';
SELECT * FROM bookreviews WHERE ID = '5' AND '1'='2';

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

Ο επιτιθέμενος μπορεί να συνεχίσει με το επόμενο ερώτημα, δημιουργημένο κατάλληλα ώστε να αποκαλύψει την έκδοση της MySQL που τρέχει στον server:

http://books.example.com/showReview.php?ID=5 AND substring(@@version, 1, INSTR(@@version, ‘.’) – 1)=4

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

Το sql injection στις data driven εφαρμογές: SQL injection δεύτερου επιπέδου

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

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

Αφήστε ένα Σχόλιο

Η ηλ. διεύθυνση σας δεν δημοσιεύεται. Τα υποχρεωτικά πεδία σημειώνονται με *

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