Πως γίνεται η πρόσβαση σήμερα; Το user input περνάει από ένα server-side script μέσω HTTP methods όπως POST/GET Το αίτημα επεξεργάζεται Ανάλογα ανοίγει πρόσβαση στη βάση Query database και ανάκτηση results Αποστολή results στο χρήστη Uniform Resource Locator Protocol Host FilePath http://www.site.gr/index.html? field1=valuex&field2=valuey Client HTML file HTTP GET HTTP file Application server HTML Web server Query String DB server HTML HTML HTML Ασφάλεια Υπολογιστών και Δικτύων, Τμήμα Πληροφορικής, ΜΠΣ, Ο.Π.Α., Δρ. Ι. Μαριάς 7-1
Πως γίνεται η πρόσβαση σήμερα; HyperText Transfer Protocol Πρωτόκολλο Αίτηση από server ή αποστολή σε server των webpages GET: requests a resource from a server POST: submits data to the server. e.g. a form on a webpage Hypertext Markup Language HTML Tags δηλώνουν στον browser πώς να εμφανίζει περιεχόμενο HTML Forms <form action= http://site.com/index.jsp method= GET > Email: <input type="text" name="email > <input type="submit" value="submit"> </form> http://site.com/index.jsp?email=x@y.com Ασφάλεια Υπολογιστών και Δικτύων, Τμήμα Πληροφορικής, ΜΠΣ, Ο.Π.Α., Δρ. Ι. Μαριάς 7-2
Πως γίνεται η πρόσβαση σήμερα; JavaScript Η JavaScript είναι μια γλώσσα για ιστοσελίδες, που θα τρέξει στον φυλλομετρητή-πελάτη. Μπορεί να προστεθεί σε οποιοδήποτε αρχείο HTML. Όταν ο πελάτης φορτώνει τον κώδικα HTML εκτελεί το JavaScript Γιατί JavaScript; Μεταφέρει υπολογισμούς και εκτελέσεις στον client Personalise web pages στον φυλλομετρητή-πελάτη. Form validation Παρακολούθηση των χρηστών: τα cookies.. Pop-up, alerts, new windows Ασφάλεια Υπολογιστών και Δικτύων, Τμήμα Πληροφορικής, ΜΠΣ, Ο.Π.Α., Δρ. Ι. Μαριάς 7-3
Πως γίνεται η πρόσβαση σήμερα; JavaScript Server HTML & JS HTTP GET HTTP file Client HTML & JS JS Interpreter HTML+ JS file HTML + JS file HTML + JS file Display Ασφάλεια Υπολογιστών και Δικτύων, Τμήμα Πληροφορικής, ΜΠΣ, Ο.Π.Α., Δρ. Ι. Μαριάς 7-4
Πως γίνεται η πρόσβαση σήμερα; JavaServer Pages (JSP) Επιτρέπει να γράφονται δυναμικές ιστοσελίδες με χρήση Java Μπορεί να ενσωματωθεί Java σε ένα αρχείο HTML Ο κώδικας Java εκτελείται στο διακομιστή (server) κάθε φορά που ζητείται μια σελίδα Για να εκτελεστεί JSP θα πρέπει να χρησιμοποιηθεί συμβατός webserver, π.χ. Tomcat PHP: αντίστοιχος role με JSP δημιουργία σελίδων web με δυναμικό περιεχόμενο. Μια σελίδα PHP περνά από επεξεργασία από ένα συμβατό webserver (π.χ. Apache) Παράγεται σε πραγματικό χρόνο το τελικό περιεχόμενο, που θα σταλεί στο client φυλλομετρητή σε μορφή κώδικα HTML Ασφάλεια Υπολογιστών και Δικτύων, Τμήμα Πληροφορικής, ΜΠΣ, Ο.Π.Α., Δρ. Ι. Μαριάς 7-5
Παράδειγμα Αναζήτηση σε βιβλία με βάση author, tittle, publisher, year, ISBN etc Έστω query SELECT * FROM items Σε γλώσσα C# WHERE owner = AND itemname = ; string username = ctx.getauthenticatedusername(); string query = "SELECT * FROM items WHERE owner = "'" + username + "' AND itemname = '" + ItemName.Text + "'"; sda = new SqlDataAdapter(query, conn); επειδή το query είναι δυναμικό (συνένωση constant query string και user input string), εκτελείται σωστά μόνο εάν το itemname δεν περιέχει single-quote character. Εάν εισβολέας με όνομα χρήστη Wiley βάλει το string "name' OR 'a'='a" στο itemname, τότε το query γίνεται SELECT * FROM items WHERE owner = 'wiley' AND itemname = 'name' OR 'a'='a'; ή ισοδύναμα το query γίνεται SELECT * FROM items; Η συνθήκη OR 'a'='a' θέτει το query να γίνεται evaluated πάντα ως TRUE Ασφάλεια Υπολογιστών και Δικτύων, Τμήμα Πληροφορικής, ΜΠΣ, Ο.Π.Α., Δρ. Ι. Μαριάς 7-6
Bypassing login session (επιτιθέμενος ξέρει uname του admin) Έστω τυπικό ερώτημα πρόσβασης: SELECT * FROM Users WHERE Username='$username AND Password='$password Παράδειγμα SELECT * FROM users WHERE username='marcus' AND password ='secret' αν βρεθεί πλειάδα marcus & secret στη βάση τότε επιτρέπεται πρόσβαση, διαφορετικά όχι Το παρακάτω ερώτημα παραβιάζει τη λογική της εφαρμογής SELECT * FROM Users WHERE Username='marcus' OR '1'='1' AND Password='1' OR '1'='1' Με GET method σε web site www.example.com http://www.example.com/index.php?username=marcus'%20or%20'1'%20=%20'1&pass word=1'%20or%20'1'%20=%20'1 αποδεκτό από query interpreter Το query επιστρέφει a set of values γιατί η condition είναι πάνατα αληθινή (OR 1=1). Το σύστημα έχει αυθεντικοποιήσει τον user χωρίς να ξέρει το password. Ασφάλεια Υπολογιστών και Δικτύων, Τμήμα Πληροφορικής, ΜΠΣ, Ο.Π.Α., Δρ. Ι. Μαριάς 7-7
Bypassing login session (επιτιθέμενος δεν ξέρει uname admin) Έστω τυπικό ερώτημα πρόσβασης: SELECT * FROM Users WHERE Username='$username AND Password='$password Παράδειγμα SELECT * FROM users WHERE username='marcus' AND password ='secret' αν βρεθεί πλειάδα marcus & secret στη βάση τότε επιτρέπεται πρόσβαση, διαφορετικά όχι Το παρακάτω ερώτημα παραβιάζει τη λογική της εφαρμογής SELECT * FROM Users WHERE Username= 1' OR '1'='1' AND Password='1' OR '1'='1' Με GET method σε web site www.example.com http://www.example.com/index.php?username=1'%20or%20'1'%20=%20'1&password= 1'%20or%20'1'%20=%20'1 αποδεκτό από query interpreter Το query επιστρέφει a set of values γιατί η condition είναι πάνατα αληθινή (OR 1=1). Το σύστημα έχει αυθεντικοποιήσει τον user χωρίς να ξέρει το password. Ασφάλεια Υπολογιστών και Δικτύων, Τμήμα Πληροφορικής, ΜΠΣ, Ο.Π.Α., Δρ. Ι. Μαριάς 7-8
Bypassing login session (επιτιθέμενος δεν ξέρει uname admin, password με hashing) Έστω τυπικό ερώτημα πρόσβασης: SELECT * FROM Users WHERE ((Username='$username') AND (Password=MD5('$password'))) Στόχος επίθεσης: evade the second condition Προσθέτουμε στο query a final symbol που σημαίνει ότι ένα comment ξεκινά. Οτιδήποτε έπεται του symbol είναι comment. Κάθε DBMS έχει syntax για comments /* (στην Oracle το symbol είναι --). Το παρακάτω ερώτημα παραβιάζει τη λογική της εφαρμογής SELECT * FROM Users WHERE ((Username='1' or '1' = '1'))/*') AND (Password=MD5('$password'))) Με GET method σε web site www.example.com http://www.example.com/index.php?username=1'%20or%20'1'%20=%20'1'))/*&passw ord=foo αποδεκτό από query interpreter Λόγω της χρήσης comment delimiter στο $username value το password μέρος τοη query αγνοείται Ασφάλεια Υπολογιστών και Δικτύων, Τμήμα Πληροφορικής, ΜΠΣ, Ο.Π.Α., Δρ. Ι. Μαριάς 7-9
SQL injection attack http://www.forshop.gr?action=buy&product=x => SELECT * FROM products WHERE code= X ; Τι μπορεί να είναι το X? X= ; DROP TABLE products; -- => SELECT * FROM products WHERE code= ; DROP TABLE products; -- Ασφάλεια Υπολογιστών και Δικτύων, Τμήμα Πληροφορικής, ΜΠΣ, Ο.Π.Α., Δρ. Ι. Μαριάς 7-10
Injecting Attacks Prevention Query parameterization queries σε application code όπου: αρχικά define static SQL code, μετά pass each parameter στο query σε διαφορετικό section του κώδικα Επιτρέπει στην DB να διακρίνει μεταξύ code και data, ανεξάρτητα από το τι δίνει ο user ως input. Προσεκτικό Error handling Error messages αποκαλύπτουν πληροφορία που μπορεί να χρησιμοποιηθεί από hacker/ Δεν πρέπει να αποκαλυφθεί sensitive information Έλεγχος σε user entered parameters Έλεγξε data types και lengths και τύπους μεταβλητών Απέτρεψε unwanted data (HTML tags, JavaScript) Απέτρεψε ειδικούς χαρακτήρες (--, semi-colon, brackets) Input Validation χρήση black/white που ορίζουν valid input data πχ όταν αναμένουμε digits ως input, πρέπει να κάνουμε accurate input data validation (το input string είναι με digits). Ασφάλεια Υπολογιστών και Δικτύων, Τμήμα Πληροφορικής, ΜΠΣ, Ο.Π.Α., Δρ. Ι. Μαριάς 7-11
Περισσότερες Πληροφορίες OWASP SQL Injection https://www.owasp.org/index.php/sql_injection The Web Application Security Consortium http://projects.webappsec.org/w/page/13246963/sql%20injection How to Avoid SQL Injection Vulnerabilities https://www.owasp.org/index.php/guide_to_sql_injection How to Review Code for SQL Injection Vulnerabilities https://www.owasp.org/index.php/reviewing_code_for_sql_injection How to Test for SQL Injection Vulnerabilities https://www.owasp.org/index.php/testing_for_sql_injection_(otg- INPVAL-005) How to Bypass Web Application Firewalls with SQLi https://www.owasp.org/index.php/sql_injection_bypassing_waf Ασφάλεια Υπολογιστών και Δικτύων, Τμήμα Πληροφορικής, ΜΠΣ, Ο.Π.Α., Δρ. Ι. Μαριάς 7-12
Περισσότερες Πληροφορίες OWASP SQLiX Project An SQL Injection Scanner Creative Commons https://www.owasp.org/index.php/category:owasp_sqlix_project SQL Power Injector Penetrator tester Pangolin SQL Injection Scanner SQLiX SQL Injection Scanner in Perl GreenSQL Open Source SQL Injection Filter Open Source database firewall Sqlmap automatic SQL injection tool in Python Ασφάλεια Υπολογιστών και Δικτύων, Τμήμα Πληροφορικής, ΜΠΣ, Ο.Π.Α., Δρ. Ι. Μαριάς 7-13