Download - SQL Injection

Transcript
Page 1: SQL Injection

SQL INJECTION

System Security projectSapountzi EleniSiganos Marios

University of Central GreeceComputer Science and Biomedical Informatics

Page 2: SQL Injection

ΤΙ ΕΙΝΑΙ;Τεχνική που χρησιμοποιείται συχνά για επιθέσεις σε ΒΔ μέσω

δικτυακού τόπου

Τεχνική έγχυσης (εισαγωγής) κώδικα που εκμεταλλεύεται μία

ευπάθεια ασφαλείας στο λογισμικό ενός ιστοτόπου

Οι επιθέσεις SQL injections εμφανίστηκαν ταυτόχρονα με τις

πρώτες εφαρμογές web

Μεγάλος ο αριθμός των συστημάτων που είναι ευάλωτα στις

επιθέσεις SQL Injections

Εύκολα μπορεί να διερευνηθεί σε μια εφαρμογή και με

κατάλληλη πρόβλεψη να αποφευχθεί

Page 3: SQL Injection

ΚΟΡΥΦΑΙΕΣ 7 ΕΠΙΘΕΣΕΙΣ

Page 4: SQL Injection

ΜΠΟΡΟΥΜΕ ΝΑ ΠΡΑΓΜΑΤΟΠΟΙΗΣΟΥΜΕ ΜΙΑ

ΤΕΤΟΙΑ ΕΠΙΘΕΣΗ;

ΝΑΙ μπορούμε!

Page 5: SQL Injection

ΕΥΑΛΩΤΕΣ ΒΔ ΚΑΙ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

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

MS SQL ServerOracle MySQLPostgresDB2 MS Access SybaseInformix, κλπ.

Page 6: SQL Injection

ΕΥΑΛΩΤΕΣ ΒΔ ΚΑΙ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Πρόσβαση μέσω εφαρμογών που έχουν αναπτυχθεί

με χρήση:

Perl και CGI scriptsASP, JSP, PHPXML, XSL και XSQLJavascriptVB, MFC, και άλλα ODBC-based εργαλεία και

APIsDB συγκεκριμένη web-based εφαρμογές και το APIReports and DB Applications 3 and 4GL-based languages (C, OCI, Pro * C,

COBOL)

Page 7: SQL Injection

ΑΝΑΛΥΣΗ

Τι χρειαζόμαστε;• Απλά έναν web browser

Τι πρέπει να ψάξουμε;• Σελίδες που επιτρέπουν την εισαγωγή δεδομένων

όπως: • login page • search page• feedback κλπ.

• HTML σελίδες που χρησιμοποιούν POST εντολές γιανα στείλουν τις σχετικές παραμέτρους σε κάποια σελίδα ASP

Page 8: SQL Injection

ΑΝΑΛΥΣΗ

Υπάρχει δυνατότητα απομακρυσμένης εκτέλεσης με

SQL Injection;• Η SQL δίνει την δυνατότητα στους developers να

κάνουν ΤΑ ΠΑΝΤΑ σε ένα σύστημα

• O SQL Server τρέχει σαν SYSTEM, δηλαδή τα δικαιώματα που έχει είναι επιπέδου administrator στο σύστημα

• Οπότε μπορούμε να αποκτήσουμε εύκολα πρόσβαση, αφού μπορούμε να τρέξουμε ότι θέλουμε

Page 9: SQL Injection

ΑΡΧΙΤΕΚΤΟΝΙΚΗ

Web Server

WebPage

Access

Database Server

Injected SQLExecution!

Application Server

InputValidation

Flaw

Page 10: SQL Injection

ΠΩΣ;

Εισάγοντας δηλώσεις SQL στα πεδία καταχώρησης φορμών ιστοσελίδων

• Πχ. αλλαγή ή διαγραφή περιεχομένου σε ΒΔ πιστωτικών καρτών ή κωδικών πρόσβασης

Page 11: SQL Injection

ΕΥΠΑΘΕΙΑ

Ελλιπής ή λανθασμένη επαλήθευση (validation) των δεδομένων εισόδου (input data) μιας εφαρμογής σε:

• φόρμες (μέθοδοι HTTP GET και POST)• links (μέθοδος HTTP GET)

Page 12: SQL Injection

ΑΝΑΛΥΣΗ ΜΙΑΣ ΕΥΠΑΘΟΥΣWEB ΕΦΑΡΜΟΓΗΣ

Page 13: SQL Injection

ΠΑΡΑΔΕΙΓΜΑ 1

Έστω πίνακας «employees» σε μια ΒΔ MySQLΕυπαθές block κώδικα PHP

<?php $qry = "SELECT employeeid, fullname, salary FROM employees " .         "WHERE employeeid =" . $_GET['employeeid']; $result = mysql_query($qry); ?>

Σκοπός είναι η εκτέλεση επερώτησεων της μορφής:SELECT employeeid, fullname, salary FROM employees WHERE employeeid = 3SELECT employeeid, fullname, salary FROM employees WHERE employeeid = 352

Page 14: SQL Injection

ΠΑΡΑΔΕΙΓΜΑ 1Το Employeeid είναι το πρωτεύον κλειδί στον πίνακα employees δίνεται μέσω browser, με χρήση της μεθόδου GET του HTTP με link της μορφής: http://www.example.com/employees.php?employeeid=3

Η τιμή της παραμέτρου GET «employeeid» που δίνεται στο URL, ΔΕΝ επαληθεύεται επαρκώς πριν την εκτέλεση της επερώτησης από τον κώδικα http://www.example.com/employees.php?employeeid=3 OR 1=1

Ως αποτέλεσμα θα εκτελεστεί στη βάση δεδομένων η εξής επερώτηση:

•SELECT employeeid, fullname, salary FROM employees WHERE employeeid=3 OR 1=1

Έτσι ενδέχεται ο κακόβουλος χρήστης να δει πληροφορίες που δεν είναι σκόπιμο

Page 15: SQL Injection

ΠΑΡΑΔΕΙΓΜΑ 2

Login formΕυπαθές block κώδικα PHP <?php $username = $_POST['username']; $password = $_POST['password']; $qry = "SELECT userid FROM users" .        " WHERE username='$username' AND password='$password'"; $result = mysql_query($qry); if (mysql_numrows($result) > 0) {     //log in user... } ?>

Page 16: SQL Injection

ΠΑΡΑΔΕΙΓΜΑ 2

Οι τιμές username και password δίνονται με χρήση μιας τυπικής web login φόρμας με τη μέθοδο HTTP POST

Αν δώσουμε στο πεδίο password: bar' OR 1=1 OR username='

έχουμε την εκτέλεση της επερώτησης:•SELECT userid FROM users WHERE username='foo'

AND password='bar' OR 1=1 OR username='';

Έτσι ενδέχεται η πρόσβαση στην εφαρμογή (login)

από άτομα που δεν είναι εξουσιοδοτημένα

Page 17: SQL Injection

ΠΑΡΑΔΕΙΓΜΑ 3

Πολλαπλές εντολές SQL ως μια επερώτηση στο σύστημαΟ μεγαλύτερος κίνδυνος στα SQL Injections!!!

Παράδειγμα ευπαθούς block κώδικα PHP <?php $qry = "SELECT employeeid, fullname, salary

FROM employees " .         "WHERE employeeid =" . $_GET['employeeid']; $result = pg_query($qry); ?>

Page 18: SQL Injection

ΠΑΡΑΔΕΙΓΜΑ 3

Δεδομένα εισόδου από links της μορφής: http://www.example.com/employees.php?employeeid=3

Αποτέλεσμα η εκτέλεση της επερώτησης: SELECT employeeid, fullname, salary FROM employees WHERE employeeid = 3

Page 19: SQL Injection

ΠΑΡΑΔΕΙΓΜΑ 3

Ο κακόβουλος χρήστης δίνει τo εξής URL http://www.example.com/employees.php?employeeid=3;

DELETE FROM users;

Έτσι θα εκτελεστούν οι 2 εντολές: SELECT employeeid, fullname, salary FROM employees WHERE employeeid = 3; DELETE FROM users;

Διαγραφή όλων των δεδομένων του πίνακα users από τη βάση!

Page 20: SQL Injection

ΑΝΑΖΗΤΗΣΗ ΕΥΠΑΘΩΝ ΙΣΤΕΣΕΛΙΔΩΝ ΧΡΗΣΙΜΟΠΟΙΩΝΤΑΣ

GOOGLE DORKS

Αναζήτηση με τα

παρακάτω:

inurl:index.php?id=

inurl:index.php?catid=

inurl:news.php?id=

inurl:news.php?catid=

inurl:product.php?id=

Προσθέτουμε ’ στο τέλος του url και αν εμφανίσει error τότε η ιστοσελίδα είναι ευάλωτη σε SQLi επιθέσεις

Page 21: SQL Injection

Η ΔΥΝΑΜΗ ΤΟΥ «’»

Κλείνει την παράμετρο συμβολοσειράς

Ό,τι ακολουθεί θεωρείται μέρος της εντολής SQL

Παραπλανητικές προτάσεις Διαδικτύου περιλαμβάνουν:• Αποφύγετε το! : Αντικαταστήστε το με ’’

Τα αλφαριθμητικά πεδία είναι πολύ συχνά, αλλά

υπάρχουν και άλλα είδη πεδίων:• Αριθμητικά• Ημερομηνίες

Page 22: SQL Injection

ΑΝΑΖΗΤΗΣΗ ΙΣΤΟΣΕΛΙΔΩΝ ΕΥΠΑΘΩΝ ΣΕ SQL INJECTION

Automated and heuristic web vulnerability

scanner

Ανώφελο να ανιχνεύσουμε μόνο τις

αδυναμίες των γνωστών εφαρμογών

Πιο ευπαθείς είναι οι εφαρμογές που

προσαρμόζονται από τον χρήστη

Page 23: SQL Injection

SQLMAP

Open Source penetration testing tool

Αυτοματοποιεί τον εντοπισμό και την αξιοποίηση

των ελαττωμάτων SQLi και την ανάληψη των

εξυπηρετητών ΒΔ

Υποστήριξη για απαρίθμηση των χρηστών της ΒΔ,

«password hashes» των χρηστών, προνόμια, τους

ρόλους των χρηστών, ΒΔ, πίνακες και στήλες

Page 24: SQL Injection

SQLMAP

Αναγνώριση της μορφής των «password

hashes» και υποστηρίζονται για να

σπάσουν με επίθεση λεξικού

Εντοπισμός των πινάκων που περιέχουν

διαπιστευτήρια όπου τα ονόματα αντίστοιχων

στηλών περιέχουν συμβολοσειρές όπως

το name και pass

Page 25: SQL Injection

SQLMAP - ΤΕΧΝΙΚΕΣ

Boolean-based blind SQL injection ή inferential

SQL injection

Time-based blind SQL injection ή blind SQL

injection

Error-based SQL injection

UNION query SQL injection ή inband SQL

injection

Stacked queries SQL injection ή multiple

statements SQL injection

Page 26: SQL Injection

ΠΩΣ ΑΠΟΦΕΥΓΟΥΜΕSQL INJECTIONS;

Αποφεύγουμε χαρακτήρες όπως:• quotes, slash, backslash, semicolon, NULL, new line, κλπ

που εντοπίζονται σε:• πεδία από φόρμες εισαγωγής από τους χρήστες

• παραμέτρους στο URL

• τιμές από cookies

Page 27: SQL Injection

ΠΩΣ ΑΠΟΦΕΥΓΟΥΜΕSQL INJECTIONS;

Όλα τα νούμερα μετατρέπονται σε ακεραίους

Διαγραφή των stored procedures που δεν σας αρέσουν και δεν χρειάζεστε όπως:

• master..Xp_cmdshell,

• xp_startmail,

• xp_sendmail,

• sp_makewebtask

Page 28: SQL Injection

ΣΥΜΠΕΡΑΣΜΑΤΑ

Η SQL Injection είναι συναρπαστική και

επικίνδυνη ευπάθεια

Όλες οι γλώσσες προγραμματισμού και ΒΔ

SQL είναι δυνητικά ευάλωτες

Προστασία από SQLi απαιτεί:• ανθεκτικό σχεδιασμό• σωστή επικύρωση των δεδομένων εισόδου

Page 29: SQL Injection

ΣΑΣ ΕΥΧΑΡΙΣΤΟΥΜΕ!

Απορίες;;