SQL INJECTION

17
SQL INJECTION Wykorzystanie błędów w językach skryptowych Pomiędzy warstwą programistyczną a warstwą danych Bezradne niskopoziomowe mechanizmy bezpieczeństwa JSP, ASP, XML, XSL, XSQL, Perl, CGI, JavaScript, VB, narzędzia do obsługi baz danych, C, COBOL ...

description

SQL INJECTION. Wykorzystanie błędów w językach skryptowych Pomiędzy warstwą programistyczną a warstwą danych Bezradne niskopoziomowe mechanizmy bezpieczeństwa JSP, ASP, XML, XSL, XSQL, Perl, CGI, JavaScript, VB, narzędzia do obsługi baz danych, C, COBOL. Przykład 1. - PowerPoint PPT Presentation

Transcript of SQL INJECTION

Page 1: SQL INJECTION

SQL INJECTION● Wykorzystanie błędów w językach

skryptowych● Pomiędzy warstwą programistyczną a

warstwą danych● Bezradne niskopoziomowe mechanizmy

bezpieczeństwa● JSP, ASP, XML, XSL, XSQL, Perl, CGI,

JavaScript, VB, narzędzia do obsługi baz danych, C, COBOL ...

Page 2: SQL INJECTION

Przykład 1● Skrypt w JSP połączony z Oracle● W polu formularza wczytywane sal● Konstruowane zapytanie (dla sal=800):

SELECT ename, sal FROM scott.emp WHERE sal=800

Page 3: SQL INJECTION

Przykład 1● W polu sal wpisujemy:

sal=800 UNION SELECT username, user_id from all_users

● Uzyskujemy zapytanie:

SELECT ename, sal FROM scott.emp WHERE sal=800 UNION SELECT username, user_id from all_users

Page 4: SQL INJECTION

Zagrożenia● Dostęp do dowolnych danych w bazie● Możliwość modyfikacji i usunięcia danych● Atak wysokiego poziomu

– Omija firewalle i zabezpieczenia na poziomie IP– Omija skanery antywirusowe i filtry treści– Nie istnieją sygnatury dla tego ataku

Page 5: SQL INJECTION

Przykład – zagrożenia Oracle

Można:– Dodać wyrażenie za pomocą UNION– Dodać podzapytania do istniejących– Uzyskać wszystkie dane z bazy– Uzyskać dostęp do zainstalowanych procedur i

pakietów (np. pozwalających na zapisywanie i czytanie plików systemowych

Page 6: SQL INJECTION

Przykład – zagrożenia Oracle

Można:● Dodać instrukcje INSERT, UPDATE, DELETE● Dodać języki DDL (do definicji danych)● Dołączyć inną bazę danych

Nie są wykonalne:● Wielokrotne instrukcje● Odwołanie do bind variables

Page 7: SQL INJECTION

Przykład 2● LoginPage.php:

<HTML><BODY><FORM ACTION=LoginPage2.php>Użytkownik: <INPUT NAME=”username”> <br>Hasło: <INPUT NAME=”password”> <br><INPUT TYPE=”submit” VALUE=”Zaloguj”></FORM>

Page 8: SQL INJECTION

Przykład 2● LoginPage2.php:...function MyAuth( $conn,$username,$password) {

$query = ”SELECT id FROM users WHERE”;$query .= ”username = '” . $username . ”'AND ”;$query .= ”password = '” . $password . ”'”;$res = pg_query( $query);if (pg_num_rows( $res) == 1) {

$row = pg_fetch_array( $res);$id = $row['id'];}

else {$id = 0;}

}

Page 9: SQL INJECTION

Przykład 2● Tworzone zapytanie:

”SELECT id FROM users WHERE username = '” . $username . ”' AND password = '” . $password .”'”

● . - operator konkatenacji ● ” - ograniczają poszczególne ciągi znaków● ' - fragmenty danych wprowadzane przez

użytkownika

Page 10: SQL INJECTION

Przykład 2● Złośliwe dane:

Użytkownik: 'delete from users--Hasło:

● Uzyskujemy zapytanie:

”SELECT id FROM users WHERE username = '” . '; delete from users--” . ”' AND password = '” . . ”'”;

Page 11: SQL INJECTION

Przykład 1● W efekcie uzyskujemy:

”SELECT id FROM users WHERE username = '” . '; delete from users--” . ”' AND password = '” . . ”'”;

● ' - zakończenie pojedynczego cudzysłowu● ; - zakończenie zapytania i rozpoczęcie

nowego● -- - początek komentarza

Page 12: SQL INJECTION

Przykład 1● Wygenerowane zapytanie:

SELECT id FROM users WHERE username = ''; delete from users

● Zawartość tablicy users zostanie usunięta, uniemożliwiając innym dostęp do systemu

● Można doklejać dowolne zapytania, o ile pozwala na to API i składnia bazy danych

Page 13: SQL INJECTION

Metody zapobiegania● Wszystkie dane z zewnątrz aplikacji powinny

być filtrowane (przede wszystkim słowa kluczowe)

● Stosowanie zasady najmniejszych przywilejów

● Precyzyjne określenie funkcji dostępnych użytkownikowi za pośrednictwem interfejsu

● Oddzielenie dostępu do bazy danych od interfejsu

● Usuwanie zbędnych plików (*.bak)

Page 14: SQL INJECTION

Przykład 3● Im więcej intruz wie o strukturze bazy

danych, tym większe prawdopodobieństwo skuteczności ataku

● Podajemy:

Użytkownik: ' HAVING 1 = 1--

● Uzyskujemy zapytanie:

SELECT id FROM users WHERE username = '' HAVING 1 = 1

Page 15: SQL INJECTION

Przykład 3● Zapytanie:SELECT id FROM users WHERE username = '' HAVING 1 = 1

Jest poprawne składniowo, ale niepoprawne ze względu na strukturę danych.

Zwrócony komunikat:

Attribute users.id must be GROUPed or used in an aggregate function

Page 16: SQL INJECTION

Podsumowanie● Dane z zewnątrz aplikacji powinny być

filtrowane● Przy nadawaniu uprawnień należy stosować

zasadę najmniejszych przywilejów● Precyzyjne określenie funkcji dostępnych

użytkownikowi za pośrednictwem interfejsu● W środowisku aplikacji nie powinno być

żadnych zbędnych plików

Page 17: SQL INJECTION

Tematy pokrewne● HTML injection

– Niedostateczne sprawdzanie danych wejściowych przez aplikacje sieciowe

– Pozwala na zostawianie swoich pułapek na stronie, przechwytywanie danych

● Second-order code injection– Dostarczenie aplikacji sieciowej potencjalnie

niebezpiecznego kodu, który nie jest od razu wykonywany lecz przechowany

– Przechowany kod (cache, baza danych) niebezpieczny przy wczytaniu i uruchomieniu przez ofiarę