Co to jest wstrzykiwanie SQL? Jak zapobiegać atakom SQLi

Opublikowany: 2023-09-15

Aplikacje internetowe codziennie wspomagają nasze korzystanie z Internetu. Łączymy się, wchodzimy w interakcję, robimy zakupy i oglądamy śmieszne filmy o kotach – a wszystko to za pomocą aplikacji internetowych. Dostarczają istotne usługi biznesowe i przechowują wrażliwe dane, ale im częściej z czegoś korzystamy, tym bardziej staje się to podatne na ataki.

Jednym z cyberataków, na który należy uważać na aplikacje wykorzystujące luki w ustrukturyzowanym języku zapytań (SQL), jest powszechny i ​​niebezpieczny zastrzyk SQL.

Ataki polegające na wstrzykiwaniu SQL prowadzą do niewłaściwego dostępu do danych, manipulacji, kradzieży tożsamości, strat finansowych, utraty reputacji i konsekwencji prawnych. Programiści i organizacje muszą zrozumieć związane z tym ryzyko i wdrożyć pełne środki bezpieczeństwa. Narzędzia takie jak oprogramowanie zapory sieciowej aplikacji internetowych (WAF) i oprogramowanie do kryminalistyki cyfrowej mają na celu ochronę przed atakami polegającymi na wstrzykiwaniu kodu SQL. Firmy mogą również polegać na kompleksowych pakietach zabezpieczeń witryn internetowych, aby chronić swoje aplikacje.

Przeczytaj tę ściągawkę dotyczącą wstrzykiwania SQL, aby dowiedzieć się, jak przeprowadzane są ataki SQL, wraz z przykładami, ich odmianami i sposobami zapobiegania takim atakom.

Dlaczego ataki polegające na wstrzykiwaniu SQL są niebezpieczne?

Wstrzykiwanie SQL od lat znajduje się na liście 10 największych zagrożeń bezpieczeństwa aplikacji internetowych opracowanej przez Open Worldwide Application Security Project (OWASP). Tylko w 2022 r. OWASP wykrył ponad 274 000 przypadków jakiejkolwiek formy zastrzyku w testowanych aplikacjach; Najpopularniejsze były wstrzykiwanie SQL i cross-site scripting (XSS).

Atakujący mogą użyć zastrzyków SQL, aby spowodować:

  • Błędy w aplikacjach internetowych spowodowane modyfikacją lub usuwaniem informacji w bazie danych.
  • Naruszenia danych , jeśli hakerzy uzyskają nieautoryzowany dostęp do wrażliwych danych przechowywanych w bazach danych, takich jak dane osobowe, dokumentacja finansowa lub hasła.
  • Zaatakowanie systemów poprzez uzyskanie dostępu do dodatkowych, nieautoryzowanych systemów korzystających z tych samych wspólnych baz danych. Umożliwia to atakującym eskalację ataków na inne systemy w tej samej sieci lub przeprowadzenie rozproszonej odmowy usługi (DDoS).

Te destrukcyjne działania nieodwracalnie szkodzą przedsiębiorstwom. Przestępstwa naruszają prywatność i integralność danych, prowadząc do utraty zaufania klientów i reputacji biznesowej. Stanowi to również dodatkowe obciążenie finansowe dla firmy zajmującej się następstwami takiego zdarzenia.

Przykłady ataków typu SQL Injection z życia wzięte

Minęło ponad dwie dekady, odkąd po raz pierwszy pojawił się zastrzyk SQL. Dwadzieścia lat później kwestia ta pozostaje owiana złą sławą, o czym świadczą następujące znaczące przypadki wstrzykiwania kodu SQL.

  • Heartland Payments Systems: W 2008 roku firma Heartland Payments Systems doświadczyła jednego z największych naruszeń bezpieczeństwa danych w historii, w wyniku którego w wyniku ataku SQLi ujawniono ponad 130 milionów szczegółów kart kredytowych i debetowych. Heartland zapłacił wielomilionowe kary.
  • Yahoo : W 2012 r. w wyniku ataku polegającego na wstrzykiwaniu kodu SQL naruszono dane dotyczące kont prawie 5 milionów użytkowników Yahoo, w tym adresy e-mail i hasła.
  • Freepik: Hakerzy ukradli e-maile i hasła 8,3 miliona użytkowników Freepik i Flaticon w 2020 r. podczas ataku polegającego na wstrzykiwaniu SQL na stronę internetową firmy Flaticon.
  • WooCommerce: Popularna wtyczka WordPress naprawiła lukę w zabezpieczeniach związaną z wstrzykiwaniem SQL, która naraziła 5 milionów witryn na kradzież danych.
  • BillQuick: Cyberprzestępcy wykorzystali ślepą lukę SQL w popularnej platformie rozliczeniowej do rozprzestrzeniania oprogramowania ransomware.
  • MOVEit: w maju 2023 r. gang zajmujący się oprogramowaniem ransomware Cl0p wykorzystał lukę w zabezpieczeniach polegającą na wstrzyknięciu SQL w oprogramowaniu do zarządzanego przesyłania plików MOVEit, atakując ponad 1000 organizacji i co najmniej 60 milionów osób, co czyni je największym jak dotąd naruszeniem bezpieczeństwa danych w tym roku.

Jak działa atak polegający na wstrzykiwaniu SQL?

Przyjrzyjmy się podstawom baz danych i zapytań SQL, których używamy we współczesnych aplikacjach internetowych. Pomoże nam to lepiej zrozumieć wewnętrzne działanie wstrzykiwania SQL.

Wszystkie strony internetowe korzystają z relacyjnych baz danych, zwanych także bazami danych SQL, do przechowywania danych o swoich użytkownikach i aplikacjach. Mogą to być dane użytkownika, dane logowania, informacje o płatności lub cokolwiek innego na temat firmy. Weźmy na przykład witrynę e-commerce. Przechowuje w swojej bazie danych dane produktów, konta użytkowników, dane zamówień i informacje o płatnościach.

Strony internetowe pobierają następnie dane z tych baz danych i dostarczają treści lub usługi specyficzne dla użytkowników. Proces ten odbywa się dzięki SQL, ustandaryzowanemu językowi programowania służącemu do zarządzania bazami danych. Ilekroć chcesz pobrać coś z aplikacji, powiedz historię zakupów, w rzeczywistości wysyłasz żądanie do bazy danych za pomocą zapytań SQL, polecenia, które instruuje bazę danych, aby wykonała określoną akcję.

Chcąc zapewnić bezproblemową interakcję w sieci Web, wiele witryn umożliwia użytkownikom wprowadzanie danych w celu tworzenia zapytań SQL. Może to obejmować na przykład wyszukiwane hasła, nazwy użytkowników lub szczegóły płatności.

Rozważmy przykład witryny e-commerce. Proste zapytanie SQL wyświetlające Twoją historię zamówień z bazy danych z tabelą „zamówienia” (o) i tabelą „produkty” (p) będzie wyglądać następująco:

SELECT o.id_zamówienia, o.data_zamówienia, p.nazwa_produktu, p.cena

Z zamówień o

DOŁĄCZ do produktów p ON o.product_id = p.product_id

GDZIE o.user_id = 12345;

Ten kod SQL pobiera identyfikator i datę zamówienia z tabeli zamówień, wraz z nazwą i ceną produktu z tabeli produktów dla identyfikatora USER ID 12345 z bazy danych witryny internetowej. Zazwyczaj identyfikator będzie oparty na danych wejściowych użytkownika. Problemy pojawiają się, gdy dane wejściowe nie są odpowiednio sprawdzane i kontrolowane. Osoby atakujące wykorzystują tę lukę do przeprowadzenia ataku polegającego na wstrzykiwaniu kodu SQL.

Oto jak to zwykle się rozwija.

  • Identyfikacja wrażliwych pól wejściowych: osoby atakujące zaczynają od znalezienia w aplikacji internetowej pól wejściowych, w których mogą potencjalnie wstrzyknąć złośliwy kod. Podają różne wartości i sprawdzają, jak aplikacja reaguje. aby dowiedzieć się czy. Jeśli aplikacja nie weryfikuje prawidłowo lub nie oczyszcza danych wejściowych użytkownika, przetwarza je jako kod SQL. Ta potencjalna luka jest wykorzystywana do wstrzykiwania kodu.
  • Wstrzykiwanie kodu poprzez wprowadzanie danych przez użytkownika: po zrozumieniu, w jaki sposób aplikacja radzi sobie z danymi wejściowymi, osoby atakujące konstruują ładunek będący fragmentem złośliwego kodu SQL wykorzystującego lukę. Obejmuje to dodanie znaków kontrolnych SQL, takich jak pojedynczy cudzysłów ('), podwójny cudzysłów („) lub znak równości (=), aby zmienić strukturę zapytania SQL. Użycie tych znaków kontrolnych w typowych poleceniach SQL, takich jak SELECT i FROM, umożliwia atakującym uzyskanie dostępu do danych lub ich pobranie z serwera bazy danych.

    Następnie przesyłają specjalnie spreparowane dane wejściowe wraz z uzasadnionymi żądaniami, oszukując aplikację tak, aby potraktowała podejrzany kod jako uzasadnioną część zapytania.
  • Wykonanie: baza danych, nieświadoma ataku, przetwarza zapytanie i wykonuje wprowadzony kod tak, jakby było to uzasadnione żądanie.
  • Eksploatacja: w zależności od zamiarów atakującego wprowadzony kod SQL może odzyskać poufne dane, zmodyfikować lub usunąć informacje, a nawet udzielić nieautoryzowanego dostępu. Narusza to bezpieczeństwo aplikacji, potencjalnie ujawniając poufne informacje.

Przykład wstrzyknięcia SQL

Rozważmy aplikację internetową, która używa parametru adresu URL do pobierania szczegółów produktu na podstawie identyfikatora produktu, na przykład:

http://example.com/products?id=1

Osoba atakująca może spróbować wstrzyknąć złośliwy kod SQL, aby spowodować błąd i pobrać takie informacje: http://example.com/products?id=1' OR 1=1;

Jeśli aplikacja nie sprawdzi prawidłowości i nie czyści danych wejściowych użytkownika, zapytaniem SQL można manipulować w następujący sposób:

WYBIERZ * Z produktów GDZIE LUB 1=1; - - ';

W tym przypadku pierwotne zapytanie miało na celu pobranie produktu o identyfikatorze 1, ale dane wejściowe osoby atakującej modyfikują zapytanie tak, aby zwracało wszystkie produkty ze względu na dodanie 1=1 i dołączonego podwójnego łącznika (- -). Unieważnia to oryginalny pojedynczy cudzysłów zamykający i prowadzi do konsekwencji polegających na wyświetlaniu wszystkich szczegółów produktu lub ujawnianiu komunikatów o błędach, które mogą wykorzystać osoby atakujące.

33%

krytycznych luk w aplikacjach internetowych w 2022 r. wynikało z zastrzyków SQL.

źródło: Statista

Powszechne występowanie luk w zabezpieczeniach SQL i atrakcyjność bazy danych aplikacji internetowych zawierającej wszystkie dane o znaczeniu krytycznym sprawiają, że wstrzykiwanie SQL jest jednym z najbardziej trwałych cyberataków.

Funkcjonowanie wtrysku SQL źródło: Spiceworks

Rodzaje ataków typu SQL Injection

Istnieją trzy główne typy ataków polegających na wstrzykiwaniu kodu SQL w zależności od sposobu, w jaki atakujący uzyskują informacje lub wchodzą w interakcję z bazą danych:

  1. Klasyczny lub wewnątrzpasmowy SQLi
  2. Ślepy lub wnioskowany SQLi
  3. Pozapasmowy SQLi

1. SQLi klasyczny lub wewnątrzpasmowy

Wewnątrzpasmowy jest najczęstszym typem ataku polegającego na wstrzykiwaniu SQL. Klasyczny haker wykorzystuje ten sam kanał komunikacji (w paśmie), aby wstrzyknąć złośliwy kod SQL i pobrać wyniki. Dwie główne odmiany SQLi wewnątrzpasmowego to:

Wewnątrzpasmowy SQLi oparty na Unii

Atak ten wykorzystuje operator SQL UNION, używany do łączenia danych z wyniku dwóch lub więcej instrukcji SELECT. W ten sposób osoby atakujące mogą odzyskać dane z tabel, do których nie mają bezpośredniego dostępu.

Oparte na błędach wewnętrzne SQLi

W tej technice osoba atakująca celowo wywołuje błędy w zapytaniu SQL, aby wykorzystać komunikaty o błędach zwrócone przez bazę danych. Błędy mogą ujawnić cenne informacje na temat struktury bazy danych, nazw tabel, nazw kolumn, a czasami samych danych. SQLi oparty na błędach może być również wykonywany jako SQLi poza pasmem.

2. Wnioskowanie (ślepe) SQLi

W ślepym SQLi atakujący nie może bezpośrednio zobaczyć rezultatów swojego ataku. Zamiast tego wyciągają informacje na podstawie obserwacji zachowania aplikacji lub komunikatów o błędach, które odpowiadają na ich zapytania. Ten typ ataku jest czasochłonny, ponieważ hakerzy muszą wykonać serię zapytań SQL, aby znaleźć potencjalne luki do wykorzystania. Dwie odmiany ślepego SQLi to:

Ślepy SQLi oparty na czasie

W tym przypadku osoby atakujące zadają zapytania, które powodują, że baza danych opóźnia odpowiedź, zanim zareaguje. Wyciągają informacje o bazie danych, zwracając uwagę na czas odpowiedzi.

Boole'owskie ślepe SQLi

W przypadku ślepego SQLi typu Boolean napastnicy wykorzystują sposób, w jaki aplikacja odpowiada na warunki prawda lub fałsz w zapytaniach SQL. Na podstawie odpowiedzi aplikacji internetowej wnioskują informacje o bazie danych, mimo że nie są zwracane żadne dane z bazy danych.

3. Pozapasmowy SQLi

Pozapasmowy atak SQLi powoduje, że aplikacja wysyła dane do zdalnego punktu końcowego kontrolowanego przez hakerów. Taki atak wymaga, aby serwery SQL miały pewne funkcje, na przykład możliwość inicjowania żądań sieci zewnętrznych, takich jak żądania protokołu HTTP (Hypertext Transfer Protocol).

Jak zapobiegać atakom polegającym na wstrzykiwaniu SQL: ściągawka

Zapobieganie wstrzykiwaniu SQL wymaga wielowarstwowego podejścia obejmującego praktykę bezpiecznego kodowania i ciągłe monitorowanie. Oto ściągawka z niezbędnymi krokami, które pomogą Ci zabezpieczyć się przed atakami polegającymi na wstrzykiwaniu SQL.

Skorzystaj z przygotowanych stwierdzeń

Podstawową obroną przed atakami polegającymi na wstrzykiwaniu SQL są przygotowane instrukcje zawierające sparametryzowane zapytania. Przygotowane instrukcje zapewniają, że dane wejściowe użytkownika są traktowane jako dane, a nie kod wykonywalny.

Programiści z wyprzedzeniem kompilują kody SQL dla zapytań jako szablony z symbolami zastępczymi dla wartości wejściowych od użytkownika. W momencie wykonania zapytania przygotowane instrukcje wiążą rzeczywiste wartości zamiast symboli zastępczych. Zatrzymuje to wykonanie złośliwego kodu.

Przygotowane instrukcje są preferowane w stosunku do dynamicznych instrukcji SQL. Piszą zapytania SQL w czasie wykonywania, co osłabia je przed atakami typu „wstrzykiwanie”.

Przygotowane zestawienia w popularnych językach programowania:

Oto zalecenia specyficzne dla języka dotyczące stosowania przygotowanych instrukcji (zapytań sparametryzowanych) w popularnym programowaniu baz danych:

  • Wersja Java Enterprise (EE): Użyj klasy PrzygotowaniedStatement z pakietu java.sql. Powiąż parametry za pomocą metod takich jak setString , setInt itp.
  • Python (SQLite3) : Używaj symboli zastępczych ( ? ) w zapytaniach. Powiąż parametry za pomocą krotki lub listy .
  • PHP: użyj rozszerzenia obiektów danych PHP (PDO) . Wykorzystaj przygotowane instrukcje z symbolami zastępczymi (:). Powiąż parametry za pomocą bindValue lub bindParam .
  • .NET : Użyj obiektu MySqlCommand . Powiąż parametry za pomocą Parameters.AddWithValue .

Inną metodą zapobiegania wstrzykiwaniu SQL jest użycie procedur składowanych lub grupy wstępnie skompilowanych kodów SQL, których można używać wielokrotnie.

Przećwicz sprawdzanie poprawności danych wejściowych

Walidacja danych wejściowych polega na sprawdzeniu danych wejściowych użytkownika, aby przed przetworzeniem upewnić się, że spełniają one określone kryteria. Lista dozwolonych, zwana także białą listą, jest kluczowym aspektem sprawdzania poprawności danych wejściowych. Tutaj jako część zapytań SQL akceptowane są tylko wstępnie zdefiniowane, bezpieczne wartości lub wzorce. Wszelkie dane wejściowe, które nie spełniają ustalonych kryteriów, są odrzucane. To aktywnie zapobiega przedostawaniu się złośliwych lub nieoczekiwanych danych wejściowych do systemu.

Użyj bibliotek mapowania obiektowo-relacyjnego

Biblioteki mapowania obiektowo-relacyjnego (ORM) są cennymi narzędziami dla programistów pracujących z relacyjnymi bazami danych. Umożliwiają programistom interakcję z bazami danych przy użyciu wybranego przez nich języka programowania, zmniejszając w ten sposób potrzebę pisania nieprzetworzonych zapytań SQL. Biblioteki ORM zapewniają wbudowaną ochronę przed atakami polegającymi na wstrzykiwaniu kodu SQL.

Szkoluj programistów i zespoły IT w zakresie praktyk bezpiecznego kodowania. Pamiętaj o regularnym przeprowadzaniu audytów bezpieczeństwa i testów penetracyjnych w celu znalezienia luk w zabezpieczeniach.

Wskazówka: pomóż programistom i programistom szybciej nauczyć się bezpiecznego kodowania dzięki narzędziom szkoleniowym dotyczącym bezpiecznego kodu.

Egzekwuj zasadę najmniejszych uprawnień

Zasada najmniejszych uprawnień zapewnia użytkownikom bazy danych jedynie minimalne uprawnienia wymagane do wykonywania ich zadań. Przestrzeganie tej zasady zmniejsza wpływ potencjalnych ataków polegających na wstrzykiwaniu SQL lub jakiegokolwiek cyberataku. Zastosuj także ścisłą kontrolę dostępu do swojej bazy danych.

Wdrażanie zapory aplikacji internetowej (WAF)

WAF monitoruje przychodzący ruch sieciowy aplikacji i blokuje potencjalny złośliwy ruch w oparciu o listę dobrze znanych sygnatur ataków.

5 najlepszych narzędzi zapory aplikacji internetowych (WAF):

  1. Zapora aplikacji internetowej platformy Azure
  2. AWS WAF
  3. Zapora sieciowa Imperva dla aplikacji internetowych (WAF)
  4. Spektrum Cloudflare'a
  5. Zapora sieciowa Symantec i zwrotny serwer proxy

* Powyżej znajduje się pięć wiodących rozwiązań WAF z raportu G2 dotyczącego sieci z lata 2023 r.

WAF wykorzystuje predefiniowane reguły do ​​wykrywania podejrzanych wzorców i anomalii w ruchu przychodzącym, takich jak słowa kluczowe SQL i złośliwe ładunki. Oczyszcza i sprawdza dane wejściowe użytkownika oraz blokuje lub filtruje szkodliwe żądania. Pomaga to zatrzymać niebezpieczne zapytania SQL wprowadzane do systemu.

Nowoczesne WAF-y dostosowują się do nowych metod ataku za pomocą uczenia maszynowego.

Inne narzędzia bezpieczeństwa zapobiegające atakowi polegającemu na wstrzykiwaniu SQL

Oprócz WAF kilka innych platform bezpieczeństwa utrudnia ataki polegające na wstrzykiwaniu SQL.

  • Skanery podatności wyszukują znane i nieznane luki w aplikacjach internetowych.
  • Narzędzia do statycznego testowania bezpieczeństwa aplikacji (SAST) i oprogramowanie do statycznej analizy kodu znajdują luki w zabezpieczeniach bez faktycznego wykonywania kodu.
  • Oprogramowanie do dynamicznego testowania bezpieczeństwa aplikacji symuluje ataki na działające aplikacje i identyfikuje słabe punkty.
  • Systemy wykrywania i zapobiegania włamaniom oraz oprogramowanie do kryminalistyki cyfrowej badają anomalie i ataki na aplikacje w czasie rzeczywistym.

Kliknij, aby porozmawiać z Monty-AI z G2

Strzeż swoich fortec danych

Ataki polegające na wstrzykiwaniu kodu SQL stanowią poważne zagrożenie dla bezpieczeństwa aplikacji internetowych. W przypadku powodzenia ataków firmy ryzykują utratę cennych danych, prywatności użytkowników i dobrej reputacji.

Chociaż żadne pojedyncze rozwiązanie nie gwarantuje całkowitego bezpieczeństwa przed iniekcją SQL, połączenie środków zapobiegawczych, o których tu mówiliśmy, znacznie zmniejsza ryzyko ataków. Twórcy stron internetowych i administratorzy baz danych powinni stosować rygorystyczne zabezpieczenia i wzmacniać swoje aplikacje internetowe przed potencjalnym wykorzystaniem.

Chcesz kompleksowego rozwiązania zabezpieczającego Twoją witrynę? Poznaj oprogramowanie zabezpieczające sieć i dowiedz się, jak pomaga ono w walce z cyberatakami prowadzącymi do naruszenia bezpieczeństwa danych.