SQL Injection – czym jest i jak zagraża Twojej stronie internetowej?

haker siedzi w ciemnym pokoju pzy komputerze z wyświetlonym sql injection

Atak SQL Injection to zabójcza kombinacja, która spędza sen z powiek administratorom witryn. Jest prosta do przeprowadzenia i może doprowadzić do kradzieży Twoich danych. Sprawdź czym jest SQLi i przede wszystkim – jak możesz się przed nim obronić?

Czym jest SQL Injection?

Haker wykorzystuje lukę w zabezpieczeniach strony, wysyłając niewłaściwe zapytania do jej bazy danych. Dzięki nim może uzyskać dostęp do informacji takich jak hasła użytkowników czy dane ich kart kredytowych. Za pomocą tej metody jest w stanie także edytować dane, a nawet całkowicie je usuwać.

Jak działa SQL Injection

Nasz sklep posiada zabezpieczenia na wypadek ataku SQLi. Jednak na potrzeby artykułu, wyobraź sobie bliźniaczą stronę, która jest wrażliwa na takie metody hakerów.

Jeśli na tej hipotetycznej stronie klikniesz w kategorię “Mikrofony”, przeglądarka wyśle zapytanie SQL w celu pobrania odpowiednich produktów z bazy danych. Będzie ono wyglądać tak:

SELECT * FROM products WHERE category = 'Mikrofony’

Atakujący może zmienić zapytanie tak, by strona wyświetliła w tej kategorii wszystkie produkty, nawet te, które nie są mikrofonami. Wystarczy, że doda formułę OR 1=1. 1 zawsze będzie równe 1, więc zapytanie zwróci wszystkie produkty dostępne na stronie. Takie zachowania mogą się wydawać niewinne, ale otwierają furtkę do groźniejszych działań.

Jak haker kradnie nasze dane?

haker siedzi przy laptopie z kartą płatniczą w ręce

W naszym fikcyjnym sklepie możesz również zalogować się na swoje konto. Załóżmy, że jako nazwę użytkownika podasz: jankowalski1, a jako hasło: 12345. Strona sprawdzi te dane wysyłając zapytanie SQL:

SELECT * FROM users WHERE username = 'jankowalski1′ AND password = '12345′

Jeśli zapytanie odszuka te informacje, to zostaniesz zalogowany pomyślnie. Jeśli nie znajdzie ich w bazie danych, odrzuci Twoją próbę.

Jest to prosty mechanizm, co czyni go jeszcze łatwiejszym w obejściu. Haker może zalogować się na Twoje konto nie znając nawet hasła. Wystarczy, że użyje sekwencji “–” czym uzyska taki efekt:

SELECT * FROM users WHERE username = 'jankowalski1′–’ AND password = ”

Te dwa myślniki oznaczają początek komentarza w SQL. Upraszczając, sprawia to, że witryna ignoruje wszystko, co występuje po nich. Zapytanie zwróci więc użytkownika o nazwie “jankowalski1”, a haker pomyślnie zaloguje się na konto. Tam będzie mieć dostęp do takich danych jak Twój adres, karty kredytowe, czy numer telefonu.

działanie sql injection

Jak loguje się zwykły użytkownik:

Wpisujemy swój login i hasło > zapytanie szuka takiego loginu i hasła w bazie danych > jeśli znalazło to pomyślnie nas loguje

Jak loguje się haker

Wpisuje tylko nasz login i dodaje w nim formułę “–” > w ten sposób usuwa konieczność wpisania hasła > loguje się pomyślnie i ma dostęp do naszego konta (czyli np. karty kredytowej)

Dobrą informacją jest, że praktycznie żadne witryny nie używają już tak banalnych mechanizmów logowania. Ale są też złe wieści. Cyberprzestępcy mają jeszcze parę asów w rękawie…

Inne przykłady ataków SQL Injection

osoba trzyma w ręce telefon z wyświetloną zieloną czaszką na ekranie

Oprócz samego włamania na konto, zapytanie SELECT może dać dostęp do innych wrażliwych informacji. Przestępca jest w stanie doprowadzić do wycieku danych i poufnych informacji firmy. Co gorsza, ataki SQL Injection są bardzo trudne do wykrycia, więc sprawca najpewniej pozostanie bezkarny.

Stosując bardziej zaawansowane techniki, przestępcy mogą uzyskać dostęp do danych wszystkich użytkowników. Dzieje się za to pomocą zapytania UNION, która pozwala pobierać informacje z tabel bazy informacji.

W rubrykach mogą się znaleźć hasła i loginy wszystkich zarejestrowanych użytkowników. Wśród nich są też administratorzy i osoby posiadające uprawnienia do modyfikacji bazy danych. Nie trzeba wielkiej wyobraźni, by uzmysłowić sobie jak wielki bałagan może zrobić haker z dostępem do tych kont.

Atakujący jest w stanie rozpętać chaos w witrynie stosując zapytanie DELETE. Dzięki niemu haker ma możliwość usunięcia elementów strony, a nawet całą jej bazę danych.

Kogo może dotknąć SQL Injection?

Mimo że ten atak ma niemal tyle lat co internet, to wiele stron internetowych wciąż nie jest przed nim chronionych. Ostatnio grupa amerykańskich badaczy bezpieczeństwa znalazła lukę w portalu firmy Spireon.

Jest to dostawca telematyki samochodowej, który obsługuje 15 milionów pojazdów. Dzięki błędowi w zabezpieczeniach naukowcy uzyskali dostęp administratora do platformy. To okazało się furtką do kont wszystkich użytkowników, urządzeń na pokładach pojazdów, flot karetek pogotowia oraz wozów straży pożarnej.

Okazało się, że naukowcy byli w stanie blokować rozruszniki, zwalniać zamki w drzwiach pojazdu, a także wysyłać fałszywe adresy interwencji do karetek pogotowia i wozów strażackich. Chociaż badacze wykryli lukę, mogło być już za późno. Podejrzewają oni, że hakerzy zastosowali już SQL Injection i zainstalowali backdoory w portalu Spireon.

Jak chronić się przed SQL Injection?

kłódka stoi na karcie płatniczej która leży na laptopie

Żadne zabezpieczenie nie działa w 100%. Zwiększysz bezpieczeństwo swoich danych, jeśli zastosujesz się do paru poniższych rozwiązań:

  • Koniecznie używaj spreparowanych instrukcji (ang. prepared statements) – to szalenie ważny krok, który ochroni Twoją stronę przed większością ataków SQLi. Są to komendy napisane w taki sposób, aby haker nie mógł namieszać w strukturze zapytania.
  • Skorzystaj z procedury składowania – w ten sposób kod SQL wszystkich procedur będzie znajdował się w bazie danych, a nie po stronie nieproszonego gościa w witrynie
  • Waliduj dane wejściowe – to również bardzo ważne w ochronie przed hakerami. Warto połączyć to z tzw. białą listą. Odbierze ona przestępcy możliwość wykonania zapytania, które na tej liście się nie znajduje.
  • Regularnie aktualizuj swoją witrynę WordPress czy Joomla regularnie ulepszają swoje zabezpieczenia. Jednak nie pomogą Ci jeśli Twoja strona wciąż będzie funkcjonować na starej wersji programu.

WordPress – zagrożenie SQL Injection

WordPress to zdecydowanie najpopularniejsze oprogramowanie typu CMS (Content Management System – system zarządzania treścią). Za jego pomocą zostały stworzone strony takie jak Sony Music, Playstation Blog czy oficjalna witryna The Rolling Stones. Użytkownicy cenią WordPressa za elastyczność. Dzięki tysiącom darmowych i płatnych wtyczek można w nim stworzyć praktycznie każdą witrynę.

Jednak pomimo swojej popularności i bogatej bazy użytkowników, WordPress w przeszłości okazał się bardzo podatny na SQL Injection. Najbardziej druzgocący był ten z 2017 roku, gdy grupa hakerów zniszczyła ponad milion stron na platformie.

WordPress wyciągnął z tej porażki lekcję i wprowadził zabezpieczenia przed tego rodzaju atakami. Oprogramowanie automatycznie weryfikuje dane wejściowe oraz interakcje z bazą danych.

Ten CMS to program open-source. Oznacza to, że jego kod źródłowy jest publicznie dostępny w Internecie. WordPress musi być niemożliwy do zhakowania, nawet jeśli agresor zna wszystkie jego mechanizmy.

Oprogramowanie nadal nie jest kompletnie szczelne i zdarzają się luki w kodzie. Patrząc na statystyki CVE Details widać wyraźnie, że bezpieczeństwo WordPressa ulega poprawie.

Joomla i SQL Injection

ekran z wyświetlonym logowaniem i logiem joomla

Joomla to lubiany i szeroko używany CMS. Pod względem popularności przegrywa jednak z WordPressem. Głównym powodem jest bardziej skomplikowany od konkurencji interfejs oprogramowania. To wciąż potężne narzędzie pozwalające na tworzenie zaawansowanych stron.

Joomla była podatna na SQL Injection w pierwszych latach funkcjonowania. W 2008 roku specjaliści wykryli w jej kodzie aż 73 luki, które umożliwiały tego rodzaju ataki. Jednak od tamtej pory sytuacja uległa poprawie, a twórcy pozamykali praktycznie wszystkie “furtki” przez mogli dostać się hakerzy.

Analiza CVE Details pokazuje, że bezpieczeństwo platformy od paru lat utrzymuje się na podobnym poziomie. W kodzie znajdują się tylko pojedyncze luki, które potencjalnie mogą wykorzystać przestępcy.

Użytkownicy Joomla muszą jednak cały czas mieć się na baczności. Nawet pojedyncza “furtka” w kodzie grozi atakiem SQLi. Dlatego niezwykle ważne jest, aby stale aktualizować oprogramowanie.

Drupal – podatność na SQL Injection

ekran z wyświetlonym logowaniem i logiem drupal

Ten CMS jest zdecydowanie bardziej zaawansowany od WordPressa i Joomla. Czyni go mniej intuicyjnym w obsłudze. Podobnie jak w przypadku konkurencji, kod źródłowy Drupala można znaleźć za darmo w internecie.

To nie oznacza jednak, że oprogramowanie nie jest bezpieczne. Jego skuteczność poświadczył Biały Dom USA, stawiając swoją stronę właśnie za pomocą Drupala. To pomogło popularności narzędzia, ale paradoksalnie naraziło również jego zabezpieczenia.

Wzrost rozpoznawalności sprawił, że Drupal pojawił się na celowniku hakerów. To właśnie u szczytu popularności oprogramowania, w latach 2006-2009, pojawiło się najwięcej luk w kodzie. Jeden z błędów pozostawał niewykryty przez trzy lata i został zauważony dopiero podczas audytu.

Dzięki statystykom możemy zobaczyć, że twórcy Drupala nie mają powodów do wstydu. Liczba podatności w ich kodzie wciąż jest mniejsza niż u konkurencji. Łącznie w kodzie Drupala wykryto 356 takich błędów. Dla porównania: 388 miał WordPress, a 446 Joomla. Patrząc na statystyki roczne, widać że sytuacja jest bardzo dynamiczna. Liczba podatności przez parę lat wzrastała, po czym zaczęła gwałtownie spadać.

Magento i ataki SQLi

ekran z wyświetlonym pomarańczowym logiem magento

W odróżnieniu od konkurencji Magento jest stworzone pod konkretny rodzaj stron. Jeśli chcesz stworzyć sklep internetowy to prawdopodobnie najlepsze narzędzie. To też najnowsze z opisywanych tu oprogramowań, ponieważ korzystać z niego można od 2008 roku. Obecnie jego rozwojem zajmuje się Adobe.

Mimo tak potężnej firmy za sterami, Magento zdarzały się wpadki w kontekście SQL Injection. W 2019 roku wykryto krytyczną podatność w kodzie platformy e-commerce. Pozwalała ona na wyciągnięcie całej bazy danych, wraz z hasłami i danymi użytkowników, szczegółami zamówień oraz parametryzacją sklepów.

Magento potrzebowało aż czterech miesięcy, by załatać lukę. Zajęło to naprawdę długo, biorąc pod uwagę, że z platformy korzysta prawie 300 tysięcy sklepów.

Mimo to w ogólnym rozrachunku Magento ma najmniej luk wśród wszystkich wymienionych CMS. Łączna ich liczba to 221. Patrząc na statystyki CVE Details, możemy zaobserwować trend spadkowy w kwestii podatności na ataki hakerskie.

SQL Injection – FAQ

Poznaj odpowiedzi na najczęstsze pytania dotyczące SQL Injection:

Co to SQL Injection?

Jest to metoda ataku hakerskiego, polegająca na manipulowaniu zapytaniami, aby uzyskać dostęp do ukrytych, bądź poufnych danych.

Jakie są przykłady SQL Injection?

Za pomocą komendy SELECT haker może uzyskać dostęp do ukrytych danych na stronie bądź do konta użytkownika (nawet nie znając jego hasła). Zapytanie UNION umożliwia odczytanie wszystkich haseł witryny.

Przy użyciu DELETE przestępca jest w stanie usunąć całą bazę danych lub poszczególne informacje w niej zawarte.

Jak się zabezpieczyć przed SQL Injection?

Najskuteczniejszą metodą jest stosowanie spreparowanych instrukcji. Oprócz tego musimy pamiętać o regularnym aktualizowaniu strony oraz instalacji łatek. Warto skorzystać również z procedury składowania i walidacji danych wejściowych.

Czy istnieje test dla stron przeciw SQL Injection?

Tak. Istnieją testy i aplikacje, które sprawdzają zabezpieczenia twojej strony na wypadek ataku SQL Injection. Jednym z nich jest Pentest Tools. Wystarczy, że podasz narzędziu link Twojej strony, a ono przeskanuje ją w poszukiwaniu luk w kodzie. Po zakończeniu testu dostaniesz szczegółowy raport o bezpieczeństwie witryny.

Czy SQL Injection jest nielegalne?

Tak. Celowe włamanie na stronę internetową, jak również kopiowanie i niszczenie danych, jest w świetle polskiego prawa nielegalne.

error: Treści są zabezpieczone!