Bezpieczeństwo jak każdy wie, jest bardzo ważne. Tworzymy systemy informatyczne coraz bardziej rozbudowane i przechowujące jeszcze więcej danych. W ostatnich latach niestety znacznie częściej słyszymy o wyciekach poufnych informacji.

Najpopularniejszym atakiem na bazy danych jest SQL Injection. Polega on na dodaniu złośliwego kodu do wysyłanego zapytania. Pokażę na przykładzie logowania się do aplikacji.

Gdy chcemy się zalogować, zazwyczaj wysyłane jest do bazy danych poniższe zapytanie. Bez dobrego zabezpieczenia zawartość formularza zostaje wstawiona bezpośrednio do zapytania.

Logowanie bez znajomości hasła

W SQLu w pierwszej kolejności wykonuje się OR, później AND. Zatem możemy zrobić tak, aby pytanie o hasło zawsze zwracało prawdę. Czyli rozbudowujemy zapytanie. Skoro nikt nie zabezpieczył formularza, możemy podać puste hasło, a następnie dopisać coś, co zawsze zwróci prawdę, np. 1=1 – to zawsze jest prawdą, a przynajmniej w SQLu 🙂

SQL Injection logowanie bez znajomości hasła

Podając dane jak na powyższym rysunku zapytanie logujące użytkownika wygląda w ten sposób:

Zachwianie stabilności systemu

Poza samym logowaniem, możemy przeprowadzić atak SQL Injection dodając bardziej szkodliwe kawałki kodu, np. usunąć bazę danych Users. Wiele projektów baz ma taką tabelę, ponieważ prawie każdy większy system opiera się o użytkowników.

SQL Injection drop table

Dwa myślniki na końcu oznaczają komentarz, zatem wszystko co będzie wysłane w dalszej części nie zostanie wykonane – w szczególności apostrof kończący zapytanie do logowania. Tak prezentuje się pełne zapytanie do bazy danych:

Zabawnym przykładem jest ten, ze zdjęcia. Kiedyś słyszałem, że w podobny sposób kilkukrotnie zaatakowano system sczytujący tablice rejestracyjne. Atak zakończył się sukcesem i w dodatku był powtórzony wielokrotnie, zanim zostało wprowadzone zabezpieczenie.

SQL Injection samochód

Aplikacje tworzone w technologiach Microsoftu działają na serwerze IIS. Jeśli baza danych otrzyma odpowiednie uprawnienia do systemu operacyjnego, będziemy mogli przeprowadzić atak SQL Injection i w poniższy sposób zatrzymać IISa. Teraz wyobraź sobie zrobić coś takiego w banku: przestają działać wszystkie strony internetowe, łącznie z tymi w oddziałach i służące do administracji, serwisy do obsługi bankomatów oraz wiele zabezpieczeń. Skoro prawie nic nie działa, to znacznie łatwiej włamać się do bazy danych i wykraść dane klientów.

Zabezpieczenie przed SQL Injection

ochrona przed SQL InjectionPrzed SQL Injection najprościej zabezpieczyć się prostą zamianą pojedynczego apostrofu na podwójny we wszystkich wartościach uzupełnianych przez użytkownika. Programiści często wykorzystują też narzędzia ORM do obsługi bazy danych (w dużym uproszczeniu – służą do generowania zapytań, zamiast pisania ich ręcznie). Mają one już wbudowane mechanizmy zabezpieczeń.

Jeszcze jedną metodą, bardzo często stosowaną są procedury składowane. Zamyka się w nich zapytania i zamiast składać go w kodzie, to przesyłamy tylko parametry podane przez użytkownika. O resztę zadba baza danych.

Related Post

Zapisz się do newslettera!

Chcę dołączyć do newslettera

FreshMail.pl
 

FreshMail.pl