Jak wygląda atak SQL injection w praktyce? Przykłady i sposoby zabezpieczeń
4 min
4 min
Na skróty
SQL injection to jedna z najczęściej wykorzystywanych technik ataku na strony internetowe. Szacuje się, że niemal połowa ataków na witryny postawione na WordPress wykorzystuje właśnie luki w zabezpieczeniach baz danych. Co to SQL injection? Jak działają cyberprzestępcy… i jak się przed nimi bronić? Na te pytania odpowiemy w poniższym wpisie. Zapraszamy do lektury.
Zacznijmy może od wyjaśnienia, jak działa SQL. Otóż jest to język zapytań, pośredniczący w komunikacji pomiędzy stroną internetową (lub aplikacją webową) a bazą danych, zawierającą wszystkie informacje niezbędne do jej funkcjonowania. Odpowiednio sformułowane zapytanie w języku SQL pozwala wydobyć z bazy danych loginy i hasła użytkowników platformy, adresy klientów sklepu czy listę dostępnych produktów.
W teorii do takich danych dostęp powinni mieć jedynie administratorzy danego serwisu — ale, jak z pewnością już się domyślasz, sposób na wykorzystanie języka SQL do swoich celów znaleźli także cyberprzestępcy. I właśnie ten sposób określamy jako SQL injection, czyli „wstrzyknięcie”.
Atak SQL injection w praktyce jest, niestety, stosunkowo łatwy do przeprowadzenia. Cyberprzestępcy wykorzystują do tego… wbudowane formularze witryny (np. okno logowania lub formularz kontaktowy), w których zamiast swoich danych (jak zrobiłby to każdy użytkownik) wpisują własne zapytanie w języku SQL. Jeżeli formularz nie został wcześniej zabezpieczony — strona potraktuje wpisane zapytanie jako instrukcję, którą następnie przekaże do bazy danych. W odpowiedzi haker może otrzymać np. wykaz wszystkich loginów i haseł zapisanych w bazie. Albo uzyskać dostęp do serwisu z uprawnieniami administratora, co pozwoli mu wyrządzić ogromne szkody.
Zdj 1. Prosty schemat standardowego ataku typu SQL injection.
Źródło: SQL Injection Attacks — Spanning Backup
Ataki SQL injection zalicza się do najgroźniejszych ataków backendowych — czyli dotykających serwery właścicieli strony, a nie samą witrynę oraz jej użytkowników (chociaż oni na takim ataku także mogą ucierpieć, tracąc swoje dane). Więcej o tym, czym jest backend piszemy w jednym z naszych wcześniejszych artykułów — zachęcamy do przeczytania.
Warto także zaznaczyć, że celem ataku SQL injection może być każda baza danych wykorzystująca ten język — niezależnie, czy jest to MySQL, Microsoft SQL Server, Oracle czy Firebird.
Historia ataków SQL sięga początków XXI wieku — ale prawdopodobnie najbardziej znanym przykładem zastosowania tej techniki jest przypadek Alberta Gonzaleza. W latach 2005-2007 ten amerykański haker wykradł dane ok. 130 milionów kart kredytowych, co zostało później określone przez media jako „największa kradzież tożsamości w historii Ameryki”.
Inne przypadki obejmują chociażby:
Udane (i nieudane) przykłady SQL injection można by było mnożyć — warto jednak wspomnieć, że wiele spośród tego typu ataków zostało udaremnionych już zawczasu, po wykryciu luk w zabezpieczeniach. Stało się tak m.in. w przypadku Tesli, Cisco czy jednej z największych gier internetowych w historii — Fortnite’a.
Jeżeli mielibyśmy wskazać jedną platformę, która najczęściej okazuje się być celem ataków cyberprzestępców, byłby nią WordPress. I to nie dlatego, że jest on systemem słabo zabezpieczonym — ale ponieważ jego użytkownicy korzystają z tysięcy różnych, lepiej lub gorzej napisanych wtyczek. Wiele stron postawionych na WordPressie posługuje się wtyczkami w przestarzałych, zawierających luki wersjach — a to tylko sprzyja hakerom.
Konsekwencje ataku na stronę zbudowaną w WordPressie mogą być różne:
Jeżeli posiadasz witrynę lub sklep oparty o WordPress — w kwestii ich bezpieczeństwa jesteś zdany na twórców systemu oraz wtyczek, z których akurat korzystasz. Tak naprawdę więc jedyną opcją ochrony przed ewentualnym atakiem jest regularne aktualizowanie wszystkich motywów, pluginów oraz samego silnika WordPress.
Ataki SQL injection mają to do siebie, że… standardowe zabezpieczenia nie stanowią dla nich żadnej przeszkody. Firewalle lub programy antywirusowe po prostu nie ochronią Twojej strony przed hakerami wykorzystującymi błędy projektowe na poziomie baz danych i ich komunikacji z witryną — dlatego też trzeba szukać innych sposobów.
Standardowym zabezpieczeniem przed atakiem na bazę danych jest tzw. sanitaryzacja danych wejściowych — czyli, innymi słowy, automatyczna weryfikacja danych, które użytkownicy mogą wpisać w formularzu. Dobrze zabezpieczony formularz powinien posiadać listę fraz, które mogą zostać zaakceptowane podczas jego przetwarzania — i tych, które powinny zostać przez system odrzucone. W tej drugiej grupie na pewno powinny się znaleźć polecenia w języku SQL.
Inną metodą ochrony jest zaprojektowanie strony i ścieżki jej komunikacji z bazą danych w taki sposób, aby korzystała jedynie z wcześniej zdefiniowanych gotowych zapytań — „szkieletów” poleceń w SQL, które użytkownik może uzupełnić określonymi w formularzu zmiennymi. Jeżeli ktoś spróbuje wpisać w oknie logowania własne polecenie — aplikacja potraktuje je jako błąd składni SQL i automatycznie odrzuci.
Wdrażając te dwa rozwiązania powinniśmy czuć się zabezpieczeni przed większością ataków typu SQL injection. Oczywiście, radzimy także pamiętać o wszystkich zasadach prawidłowego przechowywania danych — trzymajmy je wyłącznie na bezpiecznych, zaufanych serwerach i unikajmy sytuacji, w której wszystkie dane znajdują się w jednej bazie — dla cyberprzestępcy to łakomy kąsek.
Jeżeli chcesz dowiedzieć się, jak zabezpieczać dane w sklepie online przed innymi formami cyberataków — zachęcamy do lektury kolejnych artykułów na naszym blogu.
Zawodowy copywriter oraz student psychologii na Uniwersytecie Warszawskim. W świecie marketingu internetowego równie mocno, co chwytliwe (i wartościowe) treści interesuje go dobry design. Gdy nie zajmuje się tworzeniem contentu, odkrywa perełki kina niezależnego i pracuje nad własnymi opowiadaniami.