Bezpieczeństwo Systemów Informacyjnych lab. 13



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

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

Instalacja MySQL.

CREATE USER

Baza danych do przechowywania użytkowników

Wdrożenie modułu płatności eservice. dla systemu Gekosale 1.4

Aplikacje WWW - laboratorium

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

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Wdrożenie modułu płatności eservice. dla systemu Magento

Wdrożenie modułu płatności eservice. dla systemu Zen Cart

Projektowanie systemów baz danych

Wdrożenie modułu płatności eservice. dla systemu oscommerce 2.3.x

Bazy Danych. Ćwiczenie 1: Przygotowanie środowiska pracy dla bazy MySQL z wykorzystaniem XAMPP Portable Lite oraz MySQL-Front

Technologie Internetowe Raport z wykonanego projektu Temat: Internetowy sklep elektroniczny

Aplikacje www laboratorium

Przygotowanie środowiska pracy dla bazy MySQL z wykorzystaniem XAMPP Portable Lite oraz MySQL-Front

Projektowani Systemów Inf.

System. Instalacja bazy danych MySQL. Autor : Piotr Zielonka tel Piotrków Tryb., sierpień 2018r.

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

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Bazy danych i usługi sieciowe

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

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Język SQL, zajęcia nr 1

Aplikacje WWW - laboratorium

Aplikacje WWW - laboratorium

Bazy Danych i Usługi Sieciowe

mysql> UPDATE user SET Password=PASSWORD('pass') WHERE user='root'; Query OK, 2 rows affected (0.05 sec) Rows matched: 2 Changed: 2 Warnings: 0

KOMPUTEROWY SYSTEM WSPOMAGANIA OBSŁUGI JEDNOSTEK SŁUŻBY ZDROWIA KS-SOMED

Po instalacji serwera MYSQL dostępne jest konto o nazwie root. Domyślnie nie ma ono przypisanego hasła, aczkolwiek podczas procesu konfiguracji jest

WINDOWS Instalacja serwera WWW na systemie Windows XP, 7, 8.

Pracownia internetowa w każdej szkole (edycja jesień 2005)

2. Podstawy języka SQL

Pracownia internetowa w każdej szkole (edycja jesień 2005)

INFORMATYKA MÓJ SPOSÓB NA POZNANIE I OPISANIE ŚWIATA PROGRAM NAUCZANIA INFORMATYKI Z ELEMENTAMI PRZEDMIOTÓW MATEMATYCZNO-PRZYRODNICZYCH

Zajęcia 11 wykorzystanie MySQL w PHP

LeftHand Sp. z o. o.

Założenia do ćwiczeń: SQL Server UWM Express Edition: \SQLEXPRESS. Zapoznaj się ze sposobami użycia narzędzia T SQL z wiersza poleceń.

Wykład 6: PHP: praca z bazą danych MySQL, cz.2

Instalacja systemu zarządzania treścią (CMS): Joomla

Bazy danych. Polecenia SQL

Instrukcja instalacji środowiska testowego na TestingCup wersja 1.0

Podstawy technologii WWW

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki

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

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

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Aplikacje internetowe - laboratorium

PRÓBNY EGZAMIN POTWIERDZAJĄCY KWALIFIKACJE W ZAWODZIE CZĘŚĆ PRAKTYCZNA

Data modyfikacji:

Kurs. Podstawy MySQL

Dostęp do baz danych z serwisu www - PHP. Wydział Fizyki i Informatyki Stosowanej Joanna Paszkowska, 4 rok FK

MAMP: Można to pobrać i zainstalować z XAMPP: Można go pobrać i zainstalować z

Problemy techniczne. Jak zainstalować i zarejestrować program Optivum?

Języki programowania wysokiego poziomu. Ćwiczenia

Języki skryptowe - PHP. PHP i bazy danych. Paweł Kasprowski. pawel@kasprowski.pl. vl07

Instalacja (GM) AMXBans #1.5.1/ #1.6.1 na serwerze gry/stronie WWW. Wymagania

Forte Zarządzanie Produkcją Instalacja i konfiguracja. Wersja B

Zakres tematyczny dotyczący kursu PHP i MySQL - Podstawy pracy z dynamicznymi stronami internetowymi

E-commerce. Genialnie proste tworzenie serwisów w PHP i MySQL.

Currenda EPO Instrukcja Konfiguracji. Wersja dokumentu: 1.3

PHP: bazy danych, SQL, AJAX i JSON

NARZĘDZIA WIZUALIZACJI

Books. by HansaWorld. Przewodnik instalacji. wersji 6.2

Instalacja portalu Internetowego Mambo

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

Plan. Wprowadzenie. Co to jest APEX? Wprowadzenie. Administracja obszarem roboczym

Lab3 - Zastosowania protokołów przesyłania plików

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Dokumentacja fillup - MS SQL

Administrowanie serwerami baz danych ZADANIA ADMINISTRATORA BAZ DANYCH

Instrukcja użytkownika systemu Komornik SQL-VAT

MySQL. Æwiczenia praktyczne

Pracownia internetowa w szkole ZASTOSOWANIA

4. Projekt Bazy Danych

Pracownia internetowa w każdej szkole (edycja Jesień 2007)

NARZĘDZIA WIZUALIZACJI

Opis instalacji oparto na przykładzie serwera SUPERHOST z obsługą PHP i MySQL.

MS Windows Vista. Spis treści. Autor: Jacek Parzonka, InsERT

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

Paweł Cieśla. Dokumentacja projektu

Autor: Joanna Karwowska

INSTRUKCJA ZARZĄDZANIA

(aktualizacja 30 kwietnia 2018)

System Comarch OPT!MA v. 17.1

Instrukcja instalacji programu ARPunktor wraz z serwerem SQL 2005 Express

INSTALACJA SERWERA LOKALNEGO TYPU WAMP NA PRZYKŁADZIE PAKIETU KRASNAL SERV 2.7

Wprowadzenie do Doctrine ORM

Rok szkolny 2015/16 Sylwester Gieszczyk. Wymagania edukacyjne w technikum. ADMINISTROWANIE BAZAMI DANYCH kl. 4c

VinCent v.1.40 zmiany w programie

Instrukcja użytkownika

Instrukcja obsługi Modułu Payu dla Moodle 2.x

mcourser platforma edukacyjna z multimedialnymi mlibro Zestaw darmowych aplikacji do zainstalowania

Projektowanie baz danych za pomocą narzędzi CASE

Transkrypt:

Atak typu: zastrzyk SQL, metody obrony Wstęp Wielu początkujących programistów tworzących różne aplikacje webowe korzysta najczęściej takich technologii jak język PHP, serwer baza danych Mysql, Postgresql. Podczas tworzenia różnych systemów często zdarza się, że projekt systemu obejmuje swoim zakresem rejestrację użytkowników oraz moduł logowania do systemu. To właśnie ta funkcjonalność systemu może być elementem ataku zwanym zastrzykiem SQL. SQL Injection (z ang., dosłownie zastrzyk SQL) atak związany z luką w zabezpieczeniach aplikacji internetowych polegającą na nieodpowiednim filtrowaniu lub niedostatecznym typowaniu danych przesyłanych w postaci zapytań SQL do bazy danych. Na taki atak podatne są systemy złożone z warstwy programistycznej (przykładowo skrypt w PHP, ASP, JSP itp.) dynamicznie generującej zapytania do bazy danych (MySQL, PostgreSQL itp.). Wynika to z błędów programisty. Na naszych zajęciach zaprezentujemy sposób wykonania przykładowego zastrzyku SQL oraz podamy krótką informację o metodach zabezpieczania aplikacji przed takimi atakami. Temat SQL incjection jest obszerny, zatem zainteresowanych odsyłamy do materiałów z sieci lub zapoznanie się z zawartością dokumentu: http://orka.am.gdynia.pl/bsi/lab13/ext_sql_injection.pdf poszerzającego wiedzę o takich atakach. Dokument jest zbiorem wybranych fragmentów tekstów dostępnych w sieci Internet i nie jesteśmy jego autorami. Nasz przykładowy zastrzyk SQL także powstał w większości na podstawie materiałów opublikowanych w sieci Internet. Aplikacja rejestrująca użytkowników Uruchom system Windows SO oraz zaloguj się jako admin. Załóżmy, że nasza aplikacja webowa będzie realizowała rejestrację użytkowników. Będzie to tylko zalążek takiej aplikacji, gdyż w rzeczywistych warunkach aplikacja taka byłaby bardziej złożona i dodatkowo korzystała z kilku technologii internetowych. Nam jednak nie chodzi o nauczenie jak projektować poprawne aplikacje z obsługą bazy danych, lecz chcemy zaprezentować mechanizm ataku SQL injection. W celu realizacji zajęć wykorzystamy środowisko WampServer 2.0. Wykonaj następujące czynności: Przygotowanie środowiska WampServer Korzystając z materiałów poprzednich zajęć BSI_lab12.pdf, przygotuj w swoim systemie Windows XP działające środowisko WampServer. Z materiałów do lab12 wykorzystaj następujące akapity: Przygotowanie odpowiedniego oprogramowania: Uruchomienie i sprawdzenie działania pakietu WampServer Zabezpieczenie dostępu do motoru baz danych mysql Ustawienie hasła dla użytkownika root Struktury danych dla potrzeb naszej aplikacji Utworzymy aplikację korzystającą z bazy danych mysql składającej się z jednej tabeli. W normalnych warunkach projekt bazy byłby bardziej złożony i obejmowałby większą liczbę tabel, widoków, indeksów oraz wyzwalaczy. Dla uproszczenia, w celu lepszego skupieniu się na SQL injection, posłużymy się jedną bazą zawierającą jedną tabelę. Podczas naszych prac może przydać się krótki przewodnik do mysql (patrz przewodnik_mysql.pdf). Nasza aplikacja będzie przechowywała login, hasła użytkowników oraz poziom uprawnień. Poziom uprawnień może przyjąć dwie wartości: user, admin co oznacza odpowiednio konto zwykłego użytkownika oraz administratora. Na potrzeby naszych rozważań utworzymy bazę danych SQL_injection z tabelą użytkownicy składającą się z kolumn: id, login, hasło, poziom. Przeanalizuj zawartość skryptu SQL znajdującego się na następnej stronie. Poszczególne instrukcje zaopatrzono w odpowiednie komentarze, które wyjaśniają ich działanie instrukcji. Za pomocą phpmyadmin albo konsoli mysql wykonaj poniższy skrypt w celu przygotowania bazy danych SQL_injection wraz ze strukturą użytkownicy. Zwróć uwagę, że wartości haseł są wynikiem wbudowanej po stronie serwera mysql funkcji md5. 1

/* zawartość pliku strukt_data.sql */ /* źródło skryptu: http://orka.am.gdynia.pl/bsi/lab13/strukt_data.sql */ utworzenie bazy danych create database sql_injection; ustawienie bieżącej bazy danych use sql_injection; struktura, tabela create table uzytkownicy (id int auto_increment primary key, login varchar(15), haslo varchar(50), poziom varchar(5) ); wstawienie przykładowych danych (dwóch administratorów, jeden zwykły użytkownik) insert into uzytkownicy values (null,'wojtek',md5('superhaslo'),'admin'); insert into uzytkownicy values (null,'zenek',md5('jeszczelepszehaslo'),'admin'); insert into uzytkownicy values (null,'magda',md5('magdalena2009'),'user'); wyświetl listę użytkowników oraz ich haseł select * from uzytkownicy; przydzielenie uprawnień insert, select do bazy sql_injection użytkownikowi sql_inj z hasłem Bezp2009 -> takie same parametry połączenia z bazą danych musi mieć aplikacja php grant Insert, Select On sql_injection.* to 'sql_inj'@'localhost' identified by 'Bezp2009'; sprawdzenie przyznanych uprawnień do bazy danych dla użytkownika sql_inj show grants for sql_inj@localhost; uaktywnienie nadanych uprawnień flush privileges; Aplikacja php rejestrująca użytkowników Pobierz z zasobów http://orka.am.gdynia.pl/bsi/lab13 plik app.rar i rozpakuj go w katalogu www serwera WAMP. Uzyskasz w ten sposób katalog app z czteroma plikami. Nasza aplikacja składa się z następujących plików: Nazwa pliku index.php loguj.php rejestruj.php config.inc Opis Główny plik aplikacji menu zaloguj, rejestruj Skrypt realizujący logowanie do systemu dla użytkowników już istniejących. W przypadku logowania zwykłego użytkownika wyświetla treść: Witaj zwykły użytkowniku. Jeśli zaloguje się admin to pojawia się treść: Witaj admin Skrypt realizujący rejestrację nowych użytkowników. Podczas rejestracji sprawdza, czy już taki użytkownik istnieje oraz używa w zapytaniu insert funkcji md5 w celu zakodowania hasła. Plik z parametrami połączeniowymi z bazą mysql. Nawiązanie połączenia z bazą danych mysql. Kod funkcji spr 2

Do przygotowania poszczególnych plików będzie nam potrzebny odpowiedni edytor do modyfikacji plików w odpowiedniej stronie kodowej i rozpoznający składnię plików np. php. W tym celu wybraliśmy KED. Znajdź, pobierz i zainstaluj edytor KED. Obejrzyj kolejno zawartość poszczególnych plików. Jak już zauważyłeś plik config.inc zawiera parametry połączenia z bazą danych mysql. Parametry te są zgodne z wcześniejszym przyznaniem uprawnień za pomocą GRANT dla użytkownika sql_inj. Nasza aplikacja może tylko dodawać oraz przeglądać rekordy. Nie potrafi usuwać danych jak i elementów bazy. Wywołaj swoją aplikację za pomocą adresu URL: http://localhost/app Wykonaj próbę logowania dwóch użytkowników (wojtek, magda). Wykonaj próbę rejestracji dwóch nowych użytkowników, a następnie próby ich logowania. Obejrzyj zawartość tabeli użytkownicy w bazie sql_injection za pomocą phpmyadmin albo za pomocą instrukcji sql w konsoli mysql. Nasz system potrafi tylko rejestrować zwykłych użytkowników!!! Zastrzyk SQL w naszej aplikacji. Celem naszego zastrzyku będzie zaprezentowanie studentom, że z wykorzystaniem dostępnej aplikacji utworzymy konto administratora tzn., że status w kolumnie poziom w nowym rekordzie będzie wynosić: admin, a nie user. Czyli, jak teraz nadać naszemu użytkownikowi rangę administratora? Mając bazę możesz postarać się sam na to wpaść, jeśli jednak nie potrafisz poniżej przedstawiamy sposób postępowania, aby osiągnąć zamierzony cel: Oryginalne zapytanie do bazy danych MySQL: insert into uzytkownicy values(null,'login',md5('jakies_haslo'),'user') A powinno wyglądać o tak: insert into uzytkownicy values(null,'login',md5('jakies_haslo'),'admin') Patrząc na powyższe zapytania do bazy danych, musimy zmienić ostatnią, a zarazem najważniejszą rzecz, czyli rangę. Jak już zauważyłeś wszelkie aplikacje budują zapytanie sql poprzez sklejenie poszczególnych instrukcji sql z odpowiednimi wartościami z pól formularza. Jeśli wiemy, że w mysql komentarz występuje jako zapis dwóch następujących po sobie myślników, to jeśli w polu formularza hasło: wpiszemy swoje hasło doklejając odpowiedni znaki końca łańcucha, nawiasy no i wartość admin + na końcu komentarz po to, aby zakomentować końcówkę zapytania oryginalnego),'user'), to spowodujemy, że uda nam się dopisać użytkownika z rangą administratora. Poniżej przedstawiamy wartości pól użytych w przykładzie (uwaga przed i za komentarzem musi być spacja) Login: admin Hasło: haslo123'),'admin') Wówczas zobaczymy efekt naszej rejestracji. Dziękujemy za rejestrację! Wykonaj teraz logowanie na konto admin z hasłem: haslo123. Powinieneś otrzymać tekst: Witaj admin. OOPS udał się zastrzyk SQL mamy konto admina Dołóż jeszcze dwa konta administratorskie z różnymi loginami oraz hasłami. Dla ułatwienia zapisu hasła w celu wykonania zastrzyku możesz w kodzie rejestruj.php wykonać dwie zmiany: Ustaw typ text dla pola haslo -> wówczas zobaczysz, jakie hasło wpisujesz do formularza. Oprócz tego można zdjąć komentarz wiersza numer 28 po to, aby w oknie przeglądarki zobaczyć, jak wygląda zbudowane przez aplikację zapytanie SQL. Pytanie: Czy można dołożyć rekord o wartości rangi/poziomu gość, a nie user lub admin? Jeśli tak to powiedz jak to rozwiązać! 3

Ochrona przed atakami SQL injection Ochrona przed takimi atakami może polegać na ścisłej kontroli pól formularzy, albo samych zapytań przed ich wykonaniem. Z pomocą mogą przyjść następujące funkcje php: addslashes(); stripslashes(); htmlentities(); strip_tags(); htmlspecialchars(); mysql_escape_string(); My jednak przefiltrujemy dane pobierane z formularza za pomocą własnej funkcji spr($string), co spowoduje dodanie odpowiednich znaków w przypadku napotkania komentarza. Użycie tej funkcji pozwoli na uniknięcie przedstawionego wcześniej ataku. Czy nasza aplikacja będzie całkowicie bezpieczna na ataki SQL incjection? To całkiem inna sprawa. Funkcja spr() zamienia komentarz - - na zapis!q co powoduje później błędne wykonanie zapytania. Nasza funkcja wykorzystuje funkcję biblioteczną z php str_replace. Kod źródłowy funkcji znajduje się w pliku config.inc. W celu przetestowania naszej prostej ochrony przed atakami SQL w pliku rejestruj.php usuń komentarze dla wierszy od 24 do 26. Zakomentuj wiersz 27. Teraz ponownie wykonaj próbę utworzenia konta admina. Czy udało Ci się? 4

Instalacja środowiska GLPI w środowisku WampServer Za pomocą klienta konsoli mysql lub phpmyadmin połącz się z bazą danych mysql. Wykorzystując polecenia SQL: CREATE DATABASE, USE DATABASE, GRANT lub funkcje phpmyadmin-a wykonaj następujące czynności: 1. Utwórz bazę danych o nazwie inwentaryzacja, 2. W bazie danych mysql utwórz użytkownika u_informatyk z hasłem INFo@009 wraz z nadaniem pełnych uprawnień do bazy inwentaryzacja. Przygotowane parametry posłużą do instalacji środowiska GLPI. Pobierz najnowszą wersję GLPI ze strony: http://www.glpi-project.org/spip.php?lang=en rozpakuj kod aplikacji w katalogu F:\Wampso\www\inwentaryzacja. Może okazać się, że do rozpakowania będzie potrzebne jakieś narzędzie. Jakie? Aplikacja ta ma być dostępna pod adresem URL: http://localhost/inwetaryzacja Wywołaj powyższy adres URL w swojej przeglądarce i rozpocznij proces instalacji. Podczas instalacji możesz posłużyć się przykładową dokumentacją prezentującą etapy instalacji GLPI: http://orka.am.gdynia.pl/bsi/lab13/instalacja_glpi.pdf Zarządzanie systemem GLPI Po zalogowaniu się do aplikacji za pomocą konta glpi wykonaj następujące czynności: Za pomocą menu Administracja/Oddziały dopisz trzy oddziały Badawczo-rozwojowy Wsparcia-serwisu Handlowy Przyjrzyj się aplikacji, a w szczególności menu Administracja. Wykonaj następujące czynności: Utwórz grupy wraz z użytkownikami zgodnie z poniższą tabelę. Do każdej grupy dopisz po dwóch pracowników. Zaproponuj własne hasła!!! Nazwa oddziału Nazwa grupy glpi Członkowie grupy Handlowy handel janek basia Badawczo-rozwojowy badroz wojtek zenek Wsparcia i serwisu wspser hania darek Jako Wojtek zarejestruj dwa komputery wraz z jakimś oprogramowaniem np. Windows 7 i Office 2010 Beta. Zastanów się teraz nad następującymi pytaniem: Czy aplikacji GLPI odporna jest na atak typu: zastrzyk SQL? Można przeanalizować kod aplikacji w miejscach, gdzie pobiera się dane z formularzy oraz wiersze, w których konstruowane jest zapytanie SQL. Nie będzie to takie proste, bo może okazać się pracochłonne. Można szukać funkcji, o których mówiliśmy wcześniej. 5

Rozliczenie z laboratorium nr 13: W ramach rozliczenia się z tego laboratorium w pliku tekstowym odpowiedz na 4 pytania: 1. Czy system GLPI ma jakieś zabezpieczenia przed zastrzykami SQL? 2. Jak w GLPI zorganizowana jest hierarchia uprawnień? Czy można manipulować przydziałem uprawnień użytkownikom w ramach funkcjonalności systemu? 3. Czy administrator ma wpływ na menu użytkownika i dostępne w nim funkcje systemu? 4. Jakie dodatkowe czynności techniczne należy wykonać, aby używanie systemu GLPI w jakimś przedsiębiorstwie było jak najbardziej bezpieczne? Plik tekstowy z odpowiedziami na te pytania należy przesłać za pomocą ILIASA: rozliczenie_lab13.txt (laboratorium 13). Posprzątaj po sobie: 1. Wyłącz wampserver 2. Odinstaluj narzędzie wampserver 3. Usuń katalog F:\Wampso 4. Usuń wszystkie katalogi i pliki instalacyjne z systemu 6