background image

Bezpieczeństwo 
w bazach danych

Dr inż. Izabela Rojek

background image

Plan wykładu

„

Jak należy rozumieć bezpieczeństwo baz 
danych?

„

Poziomy bezpieczeństwa

„

Implementacja różnych poziomów 
bezpieczeństwa  

background image

Jak należy rozumieć 
bezpieczeństwo baz danych?

„

Pojęcie bezpieczeństwa baz danych wiąże 
się nieodłącznie z bezpieczeństwem 
serwera baz danych 

„

W hierarchii bezpieczeństwo serwera baz 
danych stoi wyżej niż bezpieczeństwo 
pojedynczej bazy 

background image

Jak należy rozumieć 
bezpieczeństwo baz danych?

Bezpieczeństwo serwera baz danych to:

„

zapewnienie stabilnego i w miarę możliwości 

bezawaryjnego działania serwera baz danych,

„

zapewnienie uprawnionym użytkownikom dostępu do 

odpowiednich baz danych,

„

ograniczenie dostępu do danych dla użytkowników 

nieuprawnionych,

„

zapewnienie jak najmniejszej ingerencji serwera baz 

danych w działanie systemu operacyjnego komputera.

background image

Jak należy rozumieć 
bezpieczeństwo baz danych?

Bezpieczeństwo baz danych natomiast dotyczy 

następujących aspektów:

„

umożliwienie tylko autoryzowanym 

użytkownikom wykonywania odpowiednich 

operacji na bazie danych,

„

zapewnienie bezpieczeństwa fizycznego bazy 

danych (odpowiednia strategia kopii 

zapasowych).

background image

Jak należy rozumieć 
bezpieczeństwo baz danych?

Mówiąc o bezpieczeństwie należy rozróżniać dwa 

pojęcia: 

„

uwierzytelnienie - oznacza identyfikację 

użytkownika na podstawie jego nazwy i hasła

„

autoryzacja - jest fazą następującą po 

poprawnym uwierzytelnieniu i polega na 

określeniu uprawnień przypadających 

uwierzytelnionemu użytkownikowi. 

background image

Poziomy bezpieczeństwa

„

bezpieczeństwo fizyczne danych,

„

bezpieczeństwo sieci,

„

bezpieczeństwo domeny,

„

bezpieczeństwo maszyny lokalnej,

„

bezpieczeństwo serwera baz danych,

„

bezpieczeństwo bazy danych,

„

bezpieczeństwo aplikacji bazodanowej.

background image

Poziomy bezpieczeństwa

„

Bezpieczeństwa doskonałego

nie można w 

praktyce nigdy zapewnić, ale można podjąć 
kroki, by zapobiegać skutkom wszelkich awarii, 
katastrof lub niepożądanych ingerencji czynnika 
ludzkiego. 

„

Aby zadbać o globalne bezpieczeństwo, należy 
zaplanować strategię na każdym z 
wymienionych poziomów bezpieczeństwa

background image

Poziom bezpieczeństwa fizycznego 
danych

„

określa, czy 

w przypadku awarii sprzętu, katastrofy

(

jako 

katastrofę rozumiemy nie tylko czynniki naturalne jak 
powodzie, także kradzieże i inne wpływy czynnika 
ludzkiego

) lub 

fizycznego uszkodzenia plików danych

jesteśmy w stanie odtworzyć dane i jak długo baza 
danych (lub serwer baz danych) będzie niedostępny dla 
użytkowników. 

„

Na tym poziomie należy też odpowiedzieć na pytanie czy 

kopie danych są bezpieczne (m.in. czy niepowołane 

osoby nie mają do nich dostępu). 

background image

Poziom bezpieczeństwa sieci

„

określa, czy dane są bezpiecznie 
przesyłane w sieci. 

„

Szczególnie dotyczy to ściśle poufnych 
danych, tj. numerów kart kredytowych czy 
danych personalnych klientów firmy. 

background image

Poziom bezpieczeństwa domeny

„

określa, czy komputery w domenie (

szczególności kontrolery domeny

) są 

odpowiednio zabezpieczone. 

„

W dobie integracji serwerów baz danych 

(np. 

MS SQL Server

) z systemami 

operacyjnymi w przypadku braku 

zabezpieczeń w systemie operacyjnym 

bezpieczeństwo serwera baz danych 

spada do minimum

background image

Poziom bezpieczeństwa serwera 
baz danych 

„

określa, czy serwer baz danych jest 
odpowiednio zabezpieczony przed 
nieuprawnionymi użytkownikami 
(fizycznie - maszyna oraz 
wirtualnie - odpowiednie mechanizmy 
uwierzytelniające
). 

background image

Poziom bezpieczeństwa bazy 
danych 

„

określa, czy dostęp do bazy danych i ról w 
bazie danych jest odpowiednio 
skonfigurowany 
(na ogół jest to sprawa konfiguracji w 
SZBD
). 

background image

Poziom bezpieczeństwa aplikacji 
bazodanowej 

„

określa, czy kod aplikacji klienckiej 
współpracującej z bazą danych jest 
napisany w sposób bezpieczny 
(czy aplikacja nie umożliwia zmniejszenia 
bezpieczeństwa na którymkolwiek z 
pozostałych poziomów
). 

„

Szczególnie należy tu zwrócić uwagę na 
dane wprowadzane przez użytkowników.

background image

Implementacja różnych poziomów 
bezpieczeństwa 

„

Implementacja bezpieczeństwa fizycznego

„

Implementacja bezpieczeństwa sieci

„

Implementacja bezpieczeństwa komputerów i 
domen

„

Implementacja bezpieczeństwa serwerów baz 
danych i samych baz

„

Implementacja bezpieczeństwa aplikacji 
bazodanowej

background image

Implementacja bezpieczeństwa 
fizycznego

„

Zadaniem administratora baz danych jest 

zapewnienie 

tolerancji błędów dysków fizycznych dla systemu i dla 

danych

oraz 

zaplanowanie strategii sporządzania i 

przechowywania kopii zapasowych

.

„

Tolerancję błędów dysków fizycznych można osiągnąć 

używając woluminów typu RAID

- 1 lub  RAID

- 5 (RAID -

ang. Redundant Array of Independent Disks).

background image

Implementacja bezpieczeństwa 
fizycznego

„

Implementacja RAID-1 polega na jednoczesnym 

przechowywaniu danych na dwóch fizycznych 

dyskach stanowiących 

jeden dysk logiczny

(

dwie 

kopie danych - w przypadku awarii jednego 

dysku, drugi nadal umożliwia dostęp do danych

).

„

Oznacza to, że 50% pojemności woluminu typu 

RAID-1 jest przeznaczone na przechowywanie 

danych, a druga połowa służy do 

przechowywania kopii danych.

background image

Implementacja bezpieczeństwa 
fizycznego

„

RAID-5 to dysk logiczny składający się z co najmniej 

trzech dysków fizycznych (

z każdego dysku wolumin 

zabiera tyle samo przestrzeni dyskowej

). 

„

W woluminach typu RAID-5 część przestrzeni 

dyskowej jest poświęcana na zapis tzw. danych 

parzystości (

niezbędnych do odzyskania danych w 

przypadku awarii jednego z dysków wchodzących w 

skład woluminu

). 

„

Im więcej dysków wchodzi w skład woluminu, tym 
mniej przestrzeni dyskowej zajmują dane 
parzystości (

mniejsza nadmiarowość danych

).

background image

Implementacja bezpieczeństwa 
fizycznego

Najlepszym rozwiązaniem w kwestii zapewnienia 

tolerancji błędów dysków fizycznych są

sprzętowe woluminy RAID pracujące z 
kontrolerami SCSI

(z uwagi na szybszą pracę

niż RAID software'owy). Niestety jest to 
jednocześnie najdroższe rozwiązanie. 

background image

Implementacja bezpieczeństwa 
fizycznego

„

Kopie bezpieczeństwa zwane też kopiami 
zapasowymi 
(ang. backup) powinny być 
przechowywane bądź na zewnętrznym nośniku 
(

taśmy, płyty CD lub inne nośniki przenośne

) lub 

na innym komputerze niż ten, z którego 
kopiujemy dane. 

„

Ponadto nośniki z kopiami zapasowymi powinny 
być przechowywane w innym miejscu niż 
maszyna, z której pochodzą dane (

zmniejszamy 

ryzyko w przypadku pożarów czy powodzi

). 

background image

Implementacja bezpieczeństwa 
fizycznego

„

Strategia kopii zapasowych powinna być zaplanowana 

przez administratora baz danych i administratora 

systemu operacyjnego. 

„

Należy zaplanować strategię, która odpowiada 

potrzebom firmy - tzn.  należy odpowiedzieć na pytanie, 

czy ważniejsze jest szybkie sporządzanie kopii 

zapasowych, czy też istotniejsze jest jak najszybsze 

przywracanie danych po awarii. 

„

Na ogół strategia musi uwzględnić obie kwestie. 

„

Stąd najczęściej powtarzanym schematem sporządzania 
kopii zapasowych jest wykonywanie co tydzień kopii 
wszystkich danych oraz codzienne wykonywanie kopii 
różnicowych (tylko dane zmodyfikowane danego dnia).

background image

Implementacja bezpieczeństwa 
fizycznego

„

W budowaniu strategii kopii zapasowych należy 

też uwzględnić "godziny szczytu" pracy serwera 

(proces wykonywania kopii zapasowych pociąga 

za sobą dodatkowe obciążenie serwera). 

„

Dlatego na ogół operacje te są wykonywane w 

godzinach nocnych i są planowane w ten 

sposób, by nie kolidowały z czasem, gdy 

użytkowanie serwera przez klientów jest 

najintensywniejsze. 

background image

Implementacja bezpieczeństwa 
sieci

„

Przy planowaniu bezpieczeństwa sieci należy zadać 

sobie pytanie, 

czy dane przesyłane z naszego serwera baz danych 

są poufne. 

Jeśli tak, to możemy zastosować dostępne protokoły 

szyfrujące, tj. 

SSH czy IPSec

„

Oprócz implementacji sieciowych protokołów 

szyfrujących do transmisji danych należy ograniczyć 

ilość danych wysyłanych w świat do niezbędnego 

minimum 

(najlepiej nie "przedstawiać się" zbytnio w sieci -

ujawnienie oprogramowania serwera baz danych to 

pierwszy krok do zachwiania bezpieczeństwa naszego 

serwera). 

background image

Implementacja bezpieczeństwa 
komputerów i domen

„

Nie należy instalować serwerów baz 

danych na serwerach kluczowych dla 

domeny (kontrolery domeny). 

„

Najlepsza struktura domeny to taka, w 

której każdy serwer pełni pojedynczą 

funkcję 

(np. serwer aplikacji, serwer plików, 

serwer baz danych itd.).

background image

Implementacja bezpieczeństwa 
komputerów i domen

Niezbędna jest odpowiednia polityka 

administratorów systemu (lub domeny), czyli:

„

utrzymywanie aktualnego poziomu 

zabezpieczeń systemu operacyjnego oraz 

serwera baz danych,

„

odpowiednia polityka bezpiecznych haseł 

użytkowników,

„

zmiana nazw kont administratorskich,

„

monitorowanie logowania do systemu (domeny), 

- ograniczanie dostępu do plików i folderów,

background image

Implementacja bezpieczeństwa 
komputerów i domen

„

nadawanie minimalnych wymaganych uprawnień dla 

użytkowników i grup,

„

jak najmniejsze wykorzystywanie kont 

administratorskich,

„

implementacja "zapór ogniowych" (ang. firewall),

„

ogranicznenie fizycznego dostępu do serwerów i 

kontrolerów domeny,

„

uruchamianie usług serwera baz danych przy użyciu 

konta użytkownika specjalnie stworzonego w tym celu 

(nie administratora), zapewnienie stabilności tego konta 

(np. nigdy nie wygasające hasło). 

background image

Implementacja bezpieczeństwa 
serwera baz danych i samych baz

„

Pod hasłem bezpieczeństwa serwera baz 

danych rozumiemy umożliwienie korzystania z 

serwera tylko osobom do tego uprawnionym. 

„

Większość SZBD oferuje uwierzytelnianie 

użytkowników na dwóch poziomach: na 

poziomie serwera (

użytkownik może dostać się 

do serwera

) oraz na poziomie bazy danych 

(

użytkownik serwera ma dostęp do konkretnej 

bazy danych

).

background image

Implementacja bezpieczeństwa 
serwera baz danych i samych baz

„

Mechanizmy uwierzytelniania i autoryzacji są 

różne i zależą od konkretnego SZBD. 

„

Zazwyczaj użytkownicy dzieleni są na 

role 

(grupy), natomiast rolom nadawane są 

określone 

uprawnienia

„

Ponadto niezbędnym dobrym nawykiem 

administratora baz danych powinno być 

rejestrowanie i monitorowanie zdarzeń

na 

serwerze w poszukiwaniu nietypowych zdarzeń. 

background image

Implementacja bezpieczeństwa 
aplikacji bazodanowej

„

Piętą achillesową systemu informatycznego 

współpracującego z bazą danych często jest 

interfejs 

użytkownika

(od strony programistycznej i implementacji

logiki biznesowej). 

„

Szczególnie chodzi tu o umożliwienie użytkownikom 

oddziaływania na serwer baz danych lub nawet na 

system operacyjny serwera z poziomu aplikacji 

klienckiej.

„

Należy ze szczególną uwagą projektować aplikacje 

bazodanowe. 

background image

Implementacja bezpieczeństwa 
aplikacji bazodanowej

Oto kilka zasad, którymi należy się kierować przy tworzeniu 

interfejsów dla tych aplikacji:

„

zachowaj 

przezroczystość aplikacji i bazy danych

(nie 

pokazuj informacji o źródle aplikacji i o strukturze bazy 
danych), szczególnie uważaj na komunikaty domyślne 
aplikacji (lepiej ustawić swoje, które powiedzą tylko, że 
wystąpił błąd),

„

nigdy nie ufaj użytkownikowi

aplikacji i wpisywanym 

przez niego wartościom,

„

sprawdzaj

tylko, czy wejście jest tym, czego oczekujesz i 

odrzucaj wszystko inne,

background image

Implementacja bezpieczeństwa 
aplikacji bazodanowej

„

walidację wejścia

przeprowadzaj na wielu poziomach,

„

Termin walidacja pochodzi od angielskiego słowa validate i oznacza — w 
kontekście informatycznym — sprawdzanie poprawności i zgodności z 
zadanymi kryteriami. Jest on stosowany w odniesieniu do danych 
pochodzących od użytkownika jak również w stosunku do zmiennych,
obiektów, typów i klas w różnych językach programowania. 

„

Wprowadzając dane, użytkownik może — świadomie lub nie — popełnić 
pomyłkę. Jeśli dane odebrane od użytkownika poddamy przetwarzaniu bez 
weryfikacji, wówczas, w zależności od odporności aplikacji, możemy mieć do 
czynienia z różnymi rodzajami błędów, od drukowania w przeglądarce klienta 
komunikatów diagnostycznych PHP czy MySQL, poprzez utratę spójności bazy 
danych, aż po ujawnienie niepowołanym użytkownikom informacji poufnych. Z 
tego powodu, nie wolno ignorować wagi problemu.

background image

Implementacja bezpieczeństwa 
aplikacji bazodanowej

„

używaj 

wyrażeń regularnych,

„

staraj się nie używać 

konkatenacji 

do 

tworzenia zapytań SQL (zamiast tego użyj 
procedur z parametrami),

„

łącz się z bazą danych używając w miarę 
najmniej uprzywilejowanego konta 
użytkownika.

background image

Implementacja bezpieczeństwa 
aplikacji bazodanowej

Poniżej kilka porad dla administratorów systemów i serwerów 

baz danych:
- nigdy nie myśl, że system i serwer baz danych są
bezpieczne,
- nigdy nie ufaj temu, co użytkownik podaje na wejście,
- zachowuj zasadę minimalnych uprawnień,
- zachowuj zasadę "domyślnie zamknięte",
- regularnie szukaj nieprawidłowości w systemie,
- bądź na bieżąco z technologiami i technikami 
programistycznymi. 

background image

Bezpieczeństwo baz danych 

„

Bezpieczeństwo baz danych ma wiele aspektów 

i musi być rozpatrywane na wielu poziomach. 

„

Raz zabezpieczony serwer baz danych wymaga 

stałego nadzoru i monitorowania.

„

Należy pamiętać,  że nie wolno nam zakładać, 

że coś jest całkowicie bezpieczne, ponieważ jak 

w każdej dziedzinie informatyki, również w 

bezpieczeństwie codziennie zachodzą zmiany 

i dochodzą nowe zagrożenia.

background image

Bezpieczeństwo aplikacji 

„

Najczęstsze błędy programistów. 

„

SQL Injection.

„

Nawet najlepiej zabezpieczona baza danych może paść ofiarą ataku
przeprowadzonego z poziomu aplikacji, która z bazy danych 
korzysta. 
Dlatego ważne jest, by administratorzy i programiści byli świadomy 
zagrożeń, jakie niesie za sobą dostęp do baz danych przy pomocy 
zewnętrznych aplikacji.

Prawdopodobnie najwięcej przypadków nieautoryzowanego dostępu 

do danych wynika z błędów programistycznych. 
Dlatego niezbędne jest stałe edukowanie programistów w temacie 
bezpieczeństwa dostępu do danych. 

background image

Programowanie z dostępem do 
danych - błędy

Najczęściej popełniane przez programistów błędy to:

„

dostęp do serwera baz danych z użyciem konta o zbyt dużych 
uprawnieniach - powoduje to, że w przypadku ataku potencjalny 
agresor działa w SZBD często z uprawnieniami administratora,

„

przechowywanie kluczowych danych, takich jak hasła, w plikach 
konfiguracyjnych aplikacji - zdobycie takich danych często otwiera 
drogę potencjalnemu agresorowi,

„

brak kontroli nad danymi wprowadzanymi w aplikacji przez 
użytkowników - daje to bardzo często możliwość ataku SQL 
Injection, następstwem czego może być nieuprawniony dostęp do 
danych, a w skrajnych przypadkach nawet przejęcie kontroli nad 
bazą danych lub serwerem,

background image

Programowanie z dostępem do 
danych - błędy

„

wyświetlanie w aplikacji domyślnych komunikatów 
błędów SZBD - powoduje to często ujawnienie struktury 
bazy danych i użytych w aplikacji zapytań SQL, co 
prowadzi na ogół do ataku typu SQL Injection,

„

błędne podejście przy wykrywaniu nieprawidłowości w 
danych wprowadzanych przez użytkownika - często 
programista stara się wypisać wszystkie przypadki, które 
są według niego nieprawidłowe, pominięcie jednego z 
przypadków tworzy lukę w bezpieczeństwie,

„

brak kontroli nad zasobami serwera baz danych -
pozostawianie otwartych połączeń, nie zamykanie 
obiektów (jak na przykład kursory). 

background image

Programowanie z dostępem do 
danych – najlepsze nawyki

Jak zatem należy pisać aplikacje? Należy trzymać się 

pewnych zasad.

„

Używaj konta o minimalnych uprawnieniach niezbędnych 

do wykonania operacji w bazie danych.

„

Nigdy nie ufaj użytkownikom aplikacji. Kontroluj 

wprowadzane przez nich dane.

„

Sprawdzaj tylko, czy wprowadzane przez użytkowników 

dane są tym, czego się spodziewasz, a resztę odrzucaj.

„

Nie wyświetlaj domyślnych komunikatów o błędach w 

aplikacji (zwłaszcza w aplikacjach WWW).

„

Jeśli używasz transakcji, staraj się, by były one jak 
najkrótsze.

background image

Programowanie z dostępem do 
danych – najlepsze nawyki

„

Nigdy nie trzymaj danych poufnych w plikach 
konfiguracyjnych, chyba że w postaci zaszyfrowanej.

„

Zawsze sprzątaj po sobie - zamykaj otwarte przez 

aplikację połączenia z serwerami.

„

W razie potrzeby zapewniaj bezpieczne przesyłanie 

danych po sieci (używaj SSL).

„

Używaj procedur składowanych i widoków do 

implementacji bezpiecznego dostępu do danych.

„

Staraj się nie używać mechanizmów powszechnie 

uważanych za niebezpieczne (np. dynamiczny SQL).

background image

SQL Injection

„

SQL Injection to dziś wśród programistów i 
administratorów baz danych prawie 
legenda. 

„

Mimo to wciąż zdarzają się sytuacje, w 
których aplikacja jest napisana tak, że 
umożliwia ten atak.

background image

SQL Injection - co to takiego?

„

SQL Injection to atak na bazę danych 

przeprowadzony przy użyciu nieprawidłowo 

napisanej aplikacji. 

„

W ataku tym agresor wykorzystuje fakt, że 

aplikacja nie sprawdza lub sprawdza 

niedostatecznie dane wprowadzane w aplikacji 

przez użytkowników. 

„

Dzięki temu atakujący jest w stanie podać 

fragment kodu języka SQL, który wykona w 

bazie danych czynność niedozwoloną i 

nieprzewidzianą z punktu widzenia programisty.

background image

SQL Injection - co to takiego?

„

Co jest najważniejsze, na atak ten jest 
narażony każdy SZBD, jeśli tylko istnieje 
odpowiednio źle napisana aplikacja, która 
się do tego systemu dostaje i korzysta z 
baz w nim przechowywanych. 

background image

SQL Injection– następstwa 

Najczęściej występujące objawy to:

„

nieuprawniony dostęp do danych,

„

udana próba uwierzytelnienia w aplikacji bez znajomości 

danych uwierzytelniających,

„

wykonanie niepożądanej operacji w bazie danych (np. 

usunięcie tabeli),

„

wykonanie niepożądanej operacji w SZBD (np. 

stworzenie nowej bazy danych),

„

wykonanie niepożądanej operacji w systemie 

operacyjnym (skrajny przypadek, ale możliwy). 

background image

SQL Injection – przykłady

Przykład 1 - Nieuprawniony dostęp do danych

„

W powyższym przykładzie zapytanie służy do uwierzytelnienia 

użytkownika w aplikacji. Zapytanie pobiera od użytkownika dwie 

informacje: login i hasło. 

„

W drugim fragmencie kodu na zielono zaznaczono dane wstawione 

przez użytkownika w pola tekstowe w aplikacji. 

„

Jeśli istnieje podany przez użytkownika login i na dodatek dla 

podanego loginu zgodzi się również hasło, to zapytanie zwróci 

jeden rekord.

--

zapytanie 

bez 

danych 

użytkownika

SELECT  *  FROM  Uzytkownicy WHERE  Login  =  ''  AND 

Haslo = '‘

--

zapytanie 

danymi 

użytkownika

SELECT  *  FROM  Uzytkownicy WHERE  Login  =  '

Pawel

AND Haslo = '

P@ssw0rd

--

atak

SQL 

Injection 

-

próba

logowania

SELECT * FROM Uzytkownicy WHERE Login = '

' OR 1=1 

--

' AND Haslo = ''

background image

SQL Injection - przykłady

„

Uwaga na trzeci fragment kodu SQL, w którym kolorem czerwonym 

zaznaczono napis wstawiony przez atakującego w pole tekstowe 

służące do pobrania loginu. Zakładając, że mamy do czynienia z 

Microsoft SQL Server (chodzi o symbol komentarza - dwa myślniki 

powodują wykomentowanie reszty kodu SQL), atak spowoduje 

najprawdopodobniej udaną próbę logowania na pierwszy dostępny 

login.

„

Dlaczego ten atak zadziałał? Co powoduje wstawienie złośliwego 

kodu. Najpierw zamykany jest apostrof, by zapytanie było 

prawidłowym zapytaniem SQL, potem następuje stworzenie 

warunku, który zawsze jest prawdziwy (dla każdego rekordu), 

wreszcie używany jest symbol komentarza w celu zignorowania 

pozostałej części oryginalnego zapytania. W sumie zapytanie 

wybiera z tabeli wszystkie rekordy...

-- atak SQL Injection - próba logowania

SELECT * FROM Uzytkownicy WHERE Login = '

' OR 1=1 --

' AND Haslo = ''

background image

SQL Injection - przykłady

„

Taki atak ma szansę powodzenia, jeśli aplikacja 

wykorzystuje konkatenację do tworzenia składni 

SQL w kodzie aplikacji.

Pamiętaj, że do wykonania ataku SQL Injection czasem nie jest potrzebne 

użycie symbolu komentarza. Zamiast tego można we wszystkie pola 
w aplikacji wstawić warunek zawsze spełniony i tym sposobem atak 
jest możliwy do wykonania nawet w bazach danych, które nie oferują
symbolu komentarza (np. Microsoft Access).

Np.: SELECT * FROM Uzytkownicy WHERE Login = '' OR 'a'='a' AND 

Haslo = '' OR 'a'='a'

background image

SQL Injection – przykłady

Przykład 2 - Wykonanie niepożądanej operacji w bazie danych

--

zapytanie 

bez 

danych 

użytkownika

SELECT * FROM Uzytkownicy WHERE Login = '' AND 

Haslo = '‘

--

zapytanie 

danymi 

użytkownika

SELECT  *  FROM  Uzytkownicy WHERE  Login  = 

'Pawel' AND Haslo = 'P@ssw0rd‘

-- atak  SQL  Injection - próba  usunięcia  tabeli 

SELECT  *  FROM  Uzytkownicy WHERE  Login  =  ''; 

DROP TABLE Uzytkownicy

--

' AND Haslo = ''

background image

SQL Injection – przykłady

Przykład 2 - Wykonanie niepożądanej operacji w bazie danych

„

Tym razem celem ataku nie jest zalogowanie się 

do aplikacji, a popsucie bazy danych przez 

usunięcie tabeli (polecenie DROP TABLE).

„

Taki atak ma szansę powodzenia, jeśli aplikacja 

wykorzystuje konkatenację do tworzenia składni 

SQL w kodzie aplikacji i dodatkowo aplikacja 

dostaje się do bazy danych w kontekście konta o 

zbyt wysokich uprawnieniach (umożliwiających 

wykonanie polecenia kasowania tabeli). 

background image

SQL Injection – przykłady

Przykład 3 - Przejęcie kontroli nad systemem operacyjnym

„

Czasem SZBD jest mocno zintegrowany z 
systemem operacyjnym. 

„

Zachodzi wówczas możliwość ataku, 
którego efektem będzie wykonanie 
niepożądanej operacji w samym systemie 
operacyjnym.

background image

SQL Injection – przykłady

Przykład 3 - Przejęcie kontroli nad systemem operacyjnym

--

zapytanie 

bez 

danych 

użytkownika

SELECT * FROM Uzytkownicy WHERE Login = '' AND 

Haslo = '‘

--

zapytanie 

danymi 

użytkownika

SELECT  *  FROM  Uzytkownicy WHERE  Login  = 

'Pawel' AND Haslo = 'P@ssw0rd‘

-- atak  SQL  Injection - próba  usunięcia  tabeli 

SELECT  *  FROM  Uzytkownicy WHERE  Login  =  ''; 

EXEC master..xp_cmdshell 'net user Haker P@ssw0rd 

/add --' AND Haslo = ''

background image

SQL Injection – przykłady

Przykład 3 - Przejęcie kontroli nad systemem operacyjnym

„

W powyższym przykładzie w trzecim bloku kodu 

wykonany jest atak polegający na dodaniu użytkownika 

do systemu operacyjnego Windows. Następnym krokiem 

mogłoby być dodanie użytkownika do grupy 

administratorów systemowych.

„

Taki atak ma szansę powodzenia, jeśli aplikacja 

wykorzystuje konkatenację do tworzenia składni SQL w 

kodzie aplikacji i dodatkowo aplikacja dostaje się do 

bazy danych w kontekście konta o zbyt wysokich 

uprawnieniach (sysadmin w systemie Microsoft SQL 

Server). 

background image

SQL Injection- obrona

Aby obronić się przed SQL Injection programista powinien 

stosować pewne zasady.

„

Używaj konta o minimalnych uprawnieniach niezbędnych 

do wykonania operacji w bazie danych.

„

Nigdy nie ufaj użytkownikom aplikacji. Kontroluj 

wprowadzane przez nich dane.

„

Sprawdzaj tylko, czy wprowadzane przez użytkowników 

dane są tym, czego się spodziewasz, a resztę odrzucaj.

„

Nie wyświetlaj domyślnych komunikatów o błędach w 

aplikacji (zwłaszcza w aplikacjach WWW).

background image

SQL Injection- obrona

„

Używaj procedur składowanych i ich parametrów do 

dostępu do danych.

„

Unikaj stosowania konkatenacji (łączenia napisów) przy 

tworzeniu składni SQL w kodzie aplikacji.

„

Używaj mechanizmów dostępnych w językach 

programowania (jak parametry w .NET lub prepared

statements w Javie).

„

Wykrywaj i usuwaj z podawanych przez użytkowników 

danych znaki charakterystyczne dla języka SQL, którego 

używa Twój SZBD.

background image

SQL Injection

Jako ciekawostkę można podać również fakt, że wyszukiwarki 

internetowe z Google na czele, zapamiętują wystąpienia 
komunikatów błędów na stronach WWW. Zatem atakujący 
może wyszukać podatne na ataki witryny w bardzo prosty 
sposób, jeśli zna słowa kluczowe komunikatów serwera (a to 
można znaleźć chociażby w dokumentacji). 

background image

Bezpieczeństwo

„

Bezpieczeństwo to temat- rzeka. Jednak znajomość 

podstawowych problemów i odpowiedzi na potencjalne 

zagrożenia znacznie ogranicza możliwości ataku na 

administrowany przez Ciebie serwer. Dlatego warto 

poświęcać sporo uwagi zagadnieniom bezpieczeństwa.

„

Bezpieczeństwo aplikacji jest równie ważne, jak 

bezpieczeństwo serwera baz danych, jako że bardzo 

często decyduje ono o tym, czy nasza baza będzie 

funkcjonowała poprawnie i czy firma nie będzie 

narażona na straty z powodu udanych ataków, których 

liczba rośnie z każdym rokiem.


Document Outline