SQL Injection

15
1 SQL Injection SQL Injection Kamil Sławiński

description

SQL Injection. Kamil Sławiński. Plan. Wprowadzenie , model aplikacji SQL Injection - Co to jest ? Zagrożenia Przykłady Jak się zabezpieczyć ? Podatność Podsumowanie. WPROWADZENIE. - PowerPoint PPT Presentation

Transcript of SQL Injection

Page 1: SQL Injection

1

SQL InjectionSQL Injection

Kamil Sławiński

Page 2: SQL Injection

2

PlanPlan

Wprowadzenie , model aplikacjiSQL Injection - Co to jest ?ZagrożeniaPrzykładyJak się zabezpieczyć ?PodatnośćPodsumowanie

Page 3: SQL Injection

3

Wszyscy wiemy, że największym bogactwem każdej firmy są przechowywane w niej dane. Czyni się różne kroki żeby uchronić dane od kradzieży, nieuprawnionej modyfikacji i zniszczenia. Jednak wraz z rozwojem sieci Internet, coraz więcej firm decyduje się na wykorzystanie tego medium do udostępniania wybranych zasobów dla swoich klientów. Najpopularniejszym sposobem na realizację tego zadania jest interfejs WWW. Niestety okazuje się, że udostępnienie takiej funkcjonalności może otworzyć potencjalnemu intruzowi bardzo łatwą drogę do zdobycia oraz modyfikacji interesujących go danych.

WPROWADZENIEWPROWADZENIE

Page 4: SQL Injection

4

WPROWADZENIE c.d.WPROWADZENIE c.d.Każdy z nas wykorzystuje w swojej pracy dane zgromadzone w

bazach danych. Zwykle nie robimy tego bezpośrednio - zadając zapytanie SQL, lecz za pośrednictwem jakiegoś interfejsu do bazy danych.

Całość aplikacji składa się z trzech warstw:1. Klient 2. Warstwa pośrednicząca 3. Baza danych Zwykle dane do zapytania wpisujemy w odpowiednim okienku za

pomocą interfejsu ,a następnie są one przetwarzane przez warstwe pośredniczącą ,która konstruuje z tych danych pełnoprawne zapytanie SQL i przesyła je do bazy danych.

Właśnie tutaj tkwi główny cel ataków SQL-injection.

Page 5: SQL Injection

5

SQL Injection – Co to jest?SQL Injection – Co to jest?SQL injection polega na nieautoryzowanym wykonaniu wyrażeń języka

SQLSQL injection to metoda ataku polegająca na dodaniu do zapytania

wykonywanego przez warstwę pośredniczącą dodatkowego zapytania SQL.

SQL injection to typ ataku, który korzysta z dziur w aplikacjach Web'owych.

Wykorzystuje wywołanie zapytania SQL w aplikacji w której nie przetwarza się danych uzyskanych od użytkownika

Najczęściej polega na takim skonstruowaniu formuły w klauzuli WHERE zapytania, by sprawdzanie wprowadzonych danych nie miało znaczenia.

Page 6: SQL Injection

6

ZagrożeniaZagrożenia

W rezultacie może to prowadzić do: zdobycia danych, do których użytkownik nie

jest uprawniony zmodyfikowania danych, bądź dodania do

bazy dodatkowych danych obejścia mechanizmów opartych na

pobieraniu danych z bazy (np. autoryzacji)

Page 7: SQL Injection

7

PrzykładyPrzykłady

Przykładem będzie prosty skrypt JSP, który pokazuje wykonanie zapytania do bazy. Skrypt pobiera od użytkownika dane do zapytania przez prosty formularz składający się z jednego pola tekstowego. Np. jeżeli w pole wpiszemy: sal=800, to otrzymamy listę pracowników, których wynagrodzenie wynosi 800. Jeżeli przeanalizujemy kod to okaże się, że to co użytkownik wpisuje w formularz web-owy jest "doklejane" do zapytania:

SELECT ename, sal FROM scott.emp WHERE ___Czyli po wpisaniu "sal=800" skrypt skonstruuje zapytanie:

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

Page 8: SQL Injection

8

Przykłady c.d.Przykłady c.d.

Ponieważ użytkownik może wpisywać w formularz web-owy dowolne ciągi znaków zamiast „sal=800” możemy wpisać „sal=800 union select username, user_id from all_users”. W wyniku zostanie skonstruoowane zapytanie:SELECT ename, sal FROM scott.emp WHERE sal=800

UNION SELECT username, user_id FROM all_users

W rezultacie użytkownik (intruz) uzyskał dostęp do widoku all_users, a więc wykonał działanie na które twórca interfejsu nie zezwolił bezpośrednio.

Powyższy przykład jest bardzo prosty, jednak świetnie ilustruje istotę ataku typu SQL-injection.

Page 9: SQL Injection

9

Przykład 2 - modyfikacja danychPrzykład 2 - modyfikacja danychJest to typowa strona www służącą do uwierzytelniania się. (kod

ponizej)LoginPage.php

<HTML><BODY>FORM ACTION=LoginPage2.php>Uzytkownik: <INPUT NAME="username"><BR>Haslo: <INPUT NAME="password"><BR><INPUT TYPE="submit" VALUE="Zaloguj"></FORM></BODY>

Formularz, który pobiera od użytkownika parametry "username" i "password" i wywołuje kolejny skrypt, który ma za zadanie sprawdzić w bazie danych, czy podane przez użytkownika login i hasło są prawidłowe.

LoginPage2.php…// funkcja do autoryzacji    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;            }            return $id;}

Page 10: SQL Injection

10

Modyfikowanie danych –c.d.Modyfikowanie danych –c.d.

Szczeglnym fragmentem powyższego kodu jest zapytanie:"SELECT id FROM users WHERE username = ‘"

. $username ."' AND password = ‘". $password ."'";

Podobnie jak w poprzednim wypadku zapytanie jest konstruowane przez sklejenie części stałych, zaszytych w programie ze zmiennymi wprowadzonymi przez użytkownika przez formularz www.

Jeżeli do formularza LoginPage.php wprowadzimy następujące dane:        Użytkownik: ‘; delete from users

     Hasło:

Zostanie wykonane polecenie :"SELECT id FROM users WHERE username = ‘"

. ‘; delete from users-- ."' AND password = ‘". ."'";

Page 11: SQL Injection

11

W wyniku otrzymamy zapytanie :SELECT id FROM users WHERE username = "; delete from users

W rezultacie, zawartość tablicy users zostanie usunięta, uniemożliwiając innym użytkownikom na dostęp do systemu!!!

W przypadku Oracle powyższa metoda jest nieskuteczna, gdyż składnia SQL Oracle nie dopuszcza do wykonywania kilku komend w jednej linii.

Przykład 3 - ominięcie mechanizmów uwierzytelniających

Funkcja uwierzytelniająca(MyAuth) przedstawiona w przykładzie drugim, wykonuje zapytanie i sprawdza ilość rekordów zwróconych przez to zapytanie. Jeżeli zapytanie zwróciło dokładnie jeden rekord, to funkcja stwierdzi że użytkownik wpisał poprawny login oraz hasło i zwróci identyfikator użytkownika.

Jeśli w formularzu wpiszemy :Username: ‘ or 1 = 1--

skrypt wykona zapytanie:SELECT id FROM users WHERE username = " OR 1 = 1

W rezultacie intruz będzie mógł zalogować się z prawami pierwszego użytkownika w bazie.

Page 12: SQL Injection

12

Zapobieganie atakomZapobieganie atakomAtaki SQL-injection są dość ciężkie do wykrycia i zablokowania przez to, że są one

przenoszone przez zwykłe wywołania protokołu HTTP.

Obrona na poziomie bazy danych- użytkownik związany z aplikacją WWW powinien mieć najmniejszy możliwy zestaw przywilejów, niezbędny do wykonania działań na bazie.W szczególności należy rozważyć uprawnienia do wykonywania procedur w bazie oraz uprawnienia do modyfikowania danych.

Filtrowanie zapytań do serwera - wyszukiwanie pewnych słów kluczowych w wywołaniu HTTP. SELECT, DELETE, INSERT, UPDATEUNION SELECT ,OR 1=1,OR A=A,-- , ‘ . Wdrożenie tej metody wymaga jednak szczegółowego ustalenia zestawu wykrywanych znaków.

Filtrowanie na firewallu - filtrowanie zapytań HTTP za pomocą słów (lub wyrażeń) kluczowych, można zaimplementować na firewallu. Przykładem może być Checkpoint Firewall-1 , który posiada możliwość analizowania ruchu HTTP i blokowania na podstawie słów kluczowych.

Page 13: SQL Injection

13

Zapobieganie c.dZapobieganie c.d

Powyższe metody nie dają pełnego zabezpieczenia. Typ możliwych do zastosowania ataków SQL-injection jest ściśle zależny od logiki działania aplikacji internetowej oraz sposobu integracji serwera WWW z bazą danych. Znacznie większy poziom bezpieczeństwa możemy osiągnąć stosując zasady bezpiecznego projektowania i programowania aplikacji internetowych

Page 14: SQL Injection

14

PodatnośćPodatność

Niektóre z produktów podatne na ataki SQL injection:-Oracle 9i Application Server Portal R1 i R2

-Oracle E-Business Suite 11i

-Oracle Database (Oracle HTTP Server z mod_plsql).

Procedura PL/SQL może być wykonywana z uprawnieniami użytkownika wywołującego lub z uprawnieniami użytkownika definiującego procedurę. Doklejone przez intruza zapytanie wywoła się z takimi samymi prawami jak atakowana procedura. W niektórych wypadkach mogą to być uprawnienia użytkowników SYS lub SYSTEM W rezultacie nieuprzywilejowany intruz może uzyskać dostęp do dowolnych danych w bazie.

Niektóre pakiety, w których znaleziono opisywane podatności to: Portal DB Provider Forms, Portal DB Provider Hierarchy, Portal DB Provider XML Components, List of Values.

Page 15: SQL Injection

15

PodsumowaniePodsumowanie

Na przykładzie SQL-injection widzimy , że powszechnie stosowanie mechanizmy obronne (firewall) nie zawsze mogą nas obronić przed skutecznym atakiem. Istotna jest dobra znajomość i czynne stosowanie zasad bezpiecznego programowania.

Bardzo ważne jest zrozumienie podstaw i istoty działania mechanizmów bazodanowych z których korzystamy. Niestety, na skutek rozwoju technologii developerskich, powszechnego stosowania generatorów kodu często o tych podstawach zapominamy ,a to stwarza doskonałe środowisko dla intruzów.