26Aug

Πώς οι χάκερς αναλαμβάνουν ιστοσελίδες με SQL Injection και DDoS

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

Υπάρχουν πολλά εργαλεία και τεχνικές που χρησιμοποιούν αυτές οι ομάδες και ενώ δεν προσπαθούμε να σας δώσουμε ένα εγχειρίδιο για να το κάνετε εσείς οι ίδιοι, είναι χρήσιμο να καταλάβετε τι συμβαίνει.Δύο από τις επιθέσεις που ακούτε συστηματικά σχετικά με αυτούς είναι οι "(Distributed) Denial of Service"( DDoS) και "SQL Injections"( SQLI).Δείτε πώς λειτουργούν.

Εικόνα από xkcd

Επίθεση άρνησης εξυπηρέτησης

Τι είναι αυτό;

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

Πώς λειτουργεί;

Η εφοδιαστική της επίθεσης DDoS μπορεί να εξηγηθεί καλύτερα με ένα παράδειγμα.

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

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

Εκτελώντας την επίθεση

Λόγω της φύσης της επίθεσης DDoS "βίαιης δύναμης", πρέπει να έχετε πολλούς υπολογιστές συντονισμένους για να επιτεθείτε ταυτόχρονα.Επανεξετάζοντας το παράδειγμα του τηλεφωνικού μας κέντρου, αυτό θα απαιτούσε από όλους τους επιτιθέμενους να γνωρίζουν και να καλούν στις 9 π.μ. και να τηλεφωνούν εκείνη τη στιγμή.Ενώ αυτή η αρχή σίγουρα θα λειτουργήσει όταν πρόκειται να επιτεθεί σε ένα web server, γίνεται πολύ πιο εύκολη η χρήση υπολογιστών zombie, αντί των πραγματικών επανδρωμένων υπολογιστών.

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

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

SQL Injection Attack

Τι είναι αυτό;

Μια επίθεση "SQL injection"( SQLI) είναι μια εκμετάλλευση που εκμεταλλεύεται τις κακές τεχνικές ανάπτυξης ιστού και, συνήθως, σε συνδυασμό με ελαττωματική ασφάλεια της βάσης δεδομένων.Το αποτέλεσμα μιας επιτυχημένης επίθεσης μπορεί να κυμαίνεται από την πλαστοπροσωπία ενός λογαριασμού χρήστη σε έναν πλήρη συμβιβασμό της αντίστοιχης βάσης δεδομένων ή διακομιστή.Σε αντίθεση με μια επίθεση DDoS, μια επίθεση SQLI είναι απολύτως και εύκολα αποτρέψιμη αν μια εφαρμογή web προγραμματιστεί κατάλληλα.

Εκτελώντας την επίθεση

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

SELECT UserID FROM Χρήστες WHERE UserName = 'myuser'= 'mypass';

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

Ο συνδυασμός του εισερχόμενου ονόματος χρήστη( myuser) και του κωδικού πρόσβασης( mypass) πρέπει να ταιριάζει με μια καταχώρηση στον πίνακα χρηστών για να επιστραφεί ένα UserID.Εάν δεν υπάρχει αντιστοιχία, δεν επιστρέφεται κανένα αναγνωριστικό χρήστη, ώστε τα διαπιστευτήρια σύνδεσης να μην είναι έγκυρα.Ενώ μια συγκεκριμένη εφαρμογή μπορεί να διαφέρει, οι μηχανικοί είναι αρκετά πρότυπο.

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

SELECT UserID από χρήστες WHERE UserName = '[χρήστη]' AND Password = '[pass]'

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

Για παράδειγμα, ας υποθέσουμε ότι το "myuser'-" εισάγεται στο πεδίο όνομα χρήστη και εισάγεται "wrongpass" στον κωδικό πρόσβασης.Χρησιμοποιώντας απλή υποκατάσταση στο ερώτημα πρότυπου, θα λάβουμε το εξής:

SELECT UserID FROM Χρήστες WHERE UserName = 'myuser' - 'ΚΑΙ Password =' ​​wrongpass '

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

SELECT UserID ΑΠΟ χρήστες WHERE UserName = 'myuser'

Η εντυπωσιακή παράλειψη εδώ είναι η έλλειψη ελέγχου κωδικού πρόσβασης.Με τη συμπερίληψη των δύο παύσεων ως μέρος του πεδίου χρήστη, παρακάμπτονταν πλήρως τη συνθήκη ελέγχου κωδικού πρόσβασης και μπόρεσαν να συνδεθούν ως "myuser" χωρίς να γνωρίζουν τον αντίστοιχο κωδικό πρόσβασης.Αυτή η πράξη του χειρισμού του ερωτήματος για την παραγωγή ανεπιθύμητων αποτελεσμάτων είναι μια επίθεση SQL injection.

Τι ζημιά μπορεί να γίνει;

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

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

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

Για να δείξουμε λοιπόν τη ζημιά που μπορεί να γίνει σε αυτή την περίπτωση, θα χρησιμοποιήσουμε το παράδειγμα που παρέχεται στο παραπάνω κόμικ εισάγοντας τα ακόλουθα στο πεδίο ονόματος χρήστη: "Robert", DROP TABLE Users, - ".Μετά από απλή υποκατάσταση το ερώτημα ελέγχου ταυτότητας γίνεται:

SELECT UserID FROM Χρήστες WHERE UserName = 'Robert';DROP TABLE Χρήστες - 'AND Password =' ​​wrongpass '

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

Το οποίο εκτελείται από τη βάση δεδομένων ως:

SELECT UserID από χρήστες WHERE UserName = 'Robert'

Πίνακας DROP Χρήστες

Έτσι ακριβώς χρησιμοποιήσαμε μια επίθεση SQLI για να διαγράψουμε ολόκληρο τον πίνακα χρηστών.

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

Πρόληψη μιας προσβολής SQL

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

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

Για παράδειγμα, αν θέλετε να κάνετε αναζήτηση "O'neil" σε μια βάση δεδομένων, δεν θα μπορούσατε να χρησιμοποιήσετε απλή αντικατάσταση επειδή το μοναδικό απόσπασμα μετά το O θα προκαλέσει πρόωρο τερματισμό της συμβολοσειράς.Αντ 'αυτού καθαρίστε το χρησιμοποιώντας τον χαρακτήρα διαφυγής της αντίστοιχης βάσης δεδομένων.Ας υποθέσουμε ότι ο χαρακτήρας διαφυγής για ένα ενιαίο εισαγωγικό quote προφέρεται σε κάθε απόσπασμα με ένα σύμβολο \.Επομένως, το "O'neal" θα απολυμαίνεται ως "O" Neil ".

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

/ λάθοςpass :

SELECT UserID από χρήστες WHERE UserName = 'myuser \' - 'AND Password =' ​​wrongpass '

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

Robert ';Πίνακας DROP Χρήστες - / λάθοςpass :

SELECT UserID από χρήστες WHERE UserName = 'Robert \';DROP TABLE Χρήστες - 'AND Password =' ​​wrongpass '

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

Συνοπτικά

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

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