1 / 15

SQL Injection

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.

shawn
Download Presentation

SQL Injection

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. SQL Injection Kamil Sławiński

  2. Plan • Wprowadzenie , model aplikacji • SQL Injection - Co to jest ? • Zagrożenia • Przykłady • Jak się zabezpieczyć ? • Podatność • Podsumowanie

  3. WPROWADZENIE 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.

  4. 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: • Klient • Warstwa pośrednicząca • 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.

  5. SQL Injection – Co to jest? SQL injection polega na nieautoryzowanym wykonaniu wyrażeń języka SQL SQLinjection 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.

  6. Zagroż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)

  7. Przykł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

  8. 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 WHEREsal=800UNION 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.

  9. Przykład 2 - modyfikacja danych Jest 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;}

  10. 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 = ‘". ."'";

  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ładziedrugim, 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.

  12. Zapobieganie atakom Ataki SQL-injection są dość ciężkie do wykrycia i zablokowania przez to, że są oneprzenoszone 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 orazuprawnienia 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.

  13. Zapobieganie 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

  14. 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.

  15. Podsumowanie • 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 stosowaniezasad 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.

More Related