Czym jest SQL Injection?

Definicja SQL Injection 

Wstrzykiwanie kodu SQL to atak, który nielegalnie manipuluje bazą danych, wstrzykując niezamierzone instrukcje języka strukturalnego zapytania (SQL) do aplikacji z relacyjną bazą danych (RDBMS). Istnieje kilka rodzajów wtrysku SQL, w zależności od metody i celu, a z perspektywy cyberprzestępców mogą oni wykraść informacje, sfałszować dane i zbadać luki w zabezpieczeniach. Chociaż jest to stary atak, nadal powoduje wiele szkód, więc jest to jeden z ataków, przed którym organizacje korporacyjne powinny być szczególnie ostrożne. 

Relacyjne bazy danych i SQL

Zanim przejdziemy do objaśnienia aplikacji SQL injection, najpierw wyjaśnijmy relacyjne bazy danych i SQL. Relacyjna baza danych to typ bazy danych, który zarządza danymi aplikacji w formacie tabeli. Jest wykorzystywany w wielu zastosowaniach biznesowych ze względu na wysoką niezawodność transakcji (każdy pojedynczy proces). 

SQL to język (język bazy danych) dla relacyjnych baz danych operacyjnych. Działalność operacyjna jest szeroko podzielona na trzy kategorie:  

  • Data Definition Language (DDL) do konfigurowania bazy danych 
  • Język manipulowania danymi (DML) do odczytywania i aktualizowania danych 
  • Język kontroli danych (Data Control Language, DCL) dla różnych kontroli, takich jak autorytet 

Specyfikacje SQL są określone przez ISO. Dlatego też, jeśli jest to relacyjna baza danych, zasadniczo można ją obsługiwać w taki sam sposób, nawet jeśli dostawca jest inny. 

Przykłady SQL Injection 

Pewnego dnia cyberprzestępca odkrywa aplikację i czyni ją celem ataku. Zakładamy, że cyberprzestępca wie, że w tej aplikacji internetowej istnieje już prawdziwy użytkownik „Ken Sato”. Cyberprzestępca próbuje nielegalnie się zalogować, podając się za użytkownika „Ken Sato”. W formularzu logowania cyberprzestępca wprowadza ciąg znaków pokazany na Rysunku 1. W przypadku przeglądania z perspektywy aplikacji generowane jest polecenie SQL przedstawione na Rysunku 2. Jak to oświadczenie SQL jest interpretowane w relacyjnej bazie danych? 

image

Rysunek 1: Przykład danych wejściowych używanych przez cyberprzestępców

image

Rysunek 2: Instrukcja SQL utworzona na podstawie danych wejściowych na Rysunku 1

Gdy relacyjna baza danych otrzyma to polecenie SQL, najpierw wyszukuje wiersz w tabeli UŻYTKOWNIKÓW, gdzie NAZWA UŻYTKOWNIKA to „Ken Sato”. Ponieważ nazwa użytkownika „Ken Sato” już istnieje, relacyjna baza danych przechodzi do następnego warunku wyszukiwania. Tutaj zaczyna się problem. 

Według warunków wyszukiwania relacyjna baza danych wyszukuje użytkownika, którego nazwa użytkownika to „Ken Sato”, a hasło to „pusty” lub „1” = „1”. Ponieważ w wielu aplikacjach wymagane są hasła, powiedzmy, że tym razem nie znaleziono żadnego użytkownika z „pustym” hasłem. A co z „1” = „1”? Jest to formuła, która porównuje, czy „1” i „1” są takie same. Oczywiście wynik ten zawsze jest prawdziwy. W związku z tym relacyjna baza danych rozpoznaje, że istnieje użytkownik, którego NAZWĄ UŻYTKOWNIKA jest „Ken Sato” i którego HASŁO jest „puste” lub „1” = „1”. W rezultacie serwer bazy danych odpowiada na informacje powiązane z nazwą użytkownika „Ken Sato” na serwerze aplikacji bez sprawdzania hasła dla tej nazwy użytkownika. Serwer aplikacji tworzy ekran powodzenia logowania na podstawie tych informacji i wysyła go w odpowiedzi do przeglądarki cyberataka. 

Jest to podstawowy mechanizm wstrzykiwania SQL. Jako łatwy do zrozumienia przykład podaliśmy logowanie do aplikacji internetowej, ale operacje baz danych przy użyciu instrukcji SQL są wykorzystywane w wielu funkcjach aplikacji. Dlatego ten atak może się powieść nie tylko na ekranie logowania, ale w różnych sytuacjach w aplikacji. 

Rodzaje ataków SQL Injection

Istnieje kilka rodzajów iniekcji SQL w zależności od celu i metody 

Wstrzyknięcie SQL oparte na błędach

Jest to technika iniekcji SQL wykorzystywana do badania konfiguracji aplikacji i luk w zabezpieczeniach. Błąd jest generowany przez celowe wprowadzanie niepoprawnych danych wejściowych do aplikacji, a szczegóły docelowego systemu są sprawdzane na podstawie komunikatu o błędzie. Mimo że możliwość bezpośredniego sfałszowania lub wycieku danych przy użyciu tej techniki jest niska, cyberprzestępcy mogą wykorzystać informacje uzyskane przy użyciu tej techniki do uruchomienia ataków ukierunkowanych na luki w zabezpieczeniach lub inne ataki SQL injection opisane poniżej. 

Wstrzyknięcie UNION

Jest to technika iniekcji SQL, która wykorzystuje operator UNION, typ SQL, do odniesienia się do dowolnych danych. Operator UNION jest operatorem, który łączy wyniki wielu instrukcji WYBIERZ. Jeśli cyberprzestępca doda nowe polecenie WYBIERZ, zaczynając od operatora UNION do polecenia WYBIERZ wydanego przez aplikację, aplikacja może uzyskać dane, które nie są przeznaczone dla aplikacji. Jeśli atak powiedzie się, cyberprzestępca może uzyskać dowolne dane na poziomie tabeli bazy danych. Z tego powodu jest to metoda, która może powodować szczególnie duże uszkodzenia wśród wstrzyknięć SQL. 

Ślepe wstrzyknięcie SQL

Jest to technika wtrysku SQL, która wysyła polecenie SQL do aplikacji i bada strukturę aplikacji, obserwując różnice w zachowaniu, a nie bezpośrednich wynikach. Podobnie jak w przypadku aplikacji SQL injection opartych na błędach, możliwość bezpośredniego fałszowania lub wycieku danych przy użyciu tej techniki jest niska, ale cyberprzestępcy mogą wykorzystać informacje uzyskane przy użyciu tej techniki do uruchamiania ataków ukierunkowanych na luki w zabezpieczeniach lub inne ataki SQL injection. 

Wstrzyknięcie SQL drugiego zamówienia

Jest to technika wtrysku SQL, w ramach której cyberprzestępca wysyła utworzone polecenie SQL do aplikacji, która jest nieskuteczna w momencie wykonywania, a następnie wykonuje je później. Ponieważ ta technika jest wykonywana w środowisku, w którym nie oczekuje się bezpośredniego dostępu użytkownika, w najgorszym przypadku może prowadzić do włamań na poziomie bazy danych, takich jak zmiany ustawień i uprawnień bazy danych. 

Jak zapobiegać atakom SQL Injection

Dzisiejsze aplikacje składają się z różnych elementów. Dlatego konieczne są odpowiednie środki dla każdego elementu, innymi słowy wielowarstwowa obrona.  

Są to główne środki zapobiegające uszkodzeniom spowodowanym wstrzyknięciem SQL. 

Środki na poziomie bazy danych

Jednym ze środków zaradczych na poziomie bazy danych jest optymalizacja uprawnień użytkowników w bazie danych. Jak wspomniano powyżej, operacje relacyjnych baz danych są szeroko podzielone na trzy kategorie: Data Definition Language (DDL), który konfiguruje bazę danych; Data Manipulation Language (DML), który odczytuje i aktualizuje dane; oraz Data Control Language (DCL), który obsługuje różne formanty, takie jak uprawnienia. Jednak w wielu przypadkach najczęściej używane są narzędzia DML, takie jak klauzule WYBIERZ. Ograniczając uprawnienia do innych operacji, można zapobiec niezamierzonemu usunięciu danych i zmianie ustawień. 

Środki na poziomie aplikacji

Dostępne są różne środki zaradcze na poziomie aplikacji.

  • Korzystanie z symboli zastępczych

Można zapobiec iniekcji SQL, tworząc instrukcje SQL przy użyciu symboli zastępczych. Symbole zastępcze mechanicznie przypisują wartości wejściowe do instrukcji SQL przygotowywanych z wyprzedzeniem przez aplikację, a nawet jeśli nieprawidłowe wartości są podawane jako dane wejściowe aplikacji, są to nieprawidłowe wartości, a tworzenie ostatecznej instrukcji SQL zostaje wstrzymane

  • Prawidłowe wychodzenie z wartości wejściowych

Symbole i ciągi znaków, które mają specjalne znaczenie w instrukcjach SQL, są unikane i traktowane jako normalne ciągi znaków, aby zapobiec niezamierzonym operacjom w relacyjnej bazie danych. Przykłady znaków, których można uniknąć, to: „`(pojedynczy cytat)”, „; (średnik/oznaczenie: dany symbol jest uznawany za koniec polecenia SQL)”, „-- (dwa kolejne łączniki/oznaczenie: symbol po symbolu jest traktowany jako komentarz)” oraz „UNION (Klauzula/oznaczenie ZJEDNOCZENIA: łączy wyniki dwóch lub więcej poleceń WYBIERZ)”. Ponadto w przypadku liczb takich jak „1” konieczne jest wyraźne określenie, czy są one traktowane jako „cyfry” czy „znaki” w bazie danych i ich odpowiednie konwertowanie.

  • Ukryj błędy

Komunikaty o błędach wyświetlane przez aplikacje mogą dostarczyć cyberprzestępcom wiele informacji. Jak opisano w „Error-Based SQL Injection”, atakujący mogą używać tych wiadomości do uruchamiania kolejnych ataków. Podczas tworzenia aplikacji ważne jest, aby nie wyświetlać bezpośrednio komunikatów o błędach, które mogłyby prowadzić do zrozumienia środowiska wewnętrznego systemu, a nie tylko bazy danych.

  • Stosowanie programów poprawek w systemach pakietowych

Jeśli korzystasz z systemu pakietowego, zalecamy jak najszybsze zastosowanie poprawki oficjalnie dostarczonej przez dostawcę. Pomoże to chronić system przed różnymi lukami w zabezpieczeniach, w tym SQL injection.

Środki na poziomie sieci 

Środki na poziomie sieci obejmują korzystanie z IPS (Intrusion Prevention System) i WAF (Web Application Firewall). IPS to rozwiązanie, które monitoruje sieć i wykrywa/blokuje złośliwą komunikację. WAF to rozwiązanie, które chroni aplikacje internetowe, a dzięki kontrolowaniu komunikacji internetowej wykrywa/blokuje ataki atakujące luki w zabezpieczeniach aplikacji internetowych. 

Pomiary na ogólnym poziomie środowiska operacyjnego

Po wdrożeniu powyższych środków możliwe jest obiektywne dokonanie oceny skuteczności środków i wszelkich braków poprzez przeprowadzenie zewnętrznych testów penetracyjnych i oceny luk w zabezpieczeniach. 

Różnica między skryptami między lokalizacjami

Oba luki w zabezpieczeniach mogą być spowodowane złośliwym kodem lub danymi wysyłanymi przez użytkowników witryny internetowej/aplikacji i administratorów, ale różnią się pod względem wpływu. CSS/XSS zazwyczaj powoduje zakłócenia po stronie klienta lub odwiedzającego i może być wykorzystywany do przejmowania sesji, niszczenia stron internetowych, pobierania złośliwych treści i przekierowywania adresów URL. Z drugiej strony wstrzyknięcia mają poważny wpływ na stronę serwera i mogą prowadzić do utraty danych i innych konsekwencji. 

Wniosek

Mimo że wstrzyknięcie SQL jest starym atakiem, nadal istnieje wiele potwierdzonych przypadków, które spowodowały duże szkody w ostatnich latach. W związku z tym jest to wciąż atak, przed którym organizacje powinny się uważać. Jeśli zostanie zastosowana technika, taka jak iniekcja UNION, a atak zakończy się powodzeniem, może to prowadzić do wycieku informacji na dużą skalę. Jednak podjęcie odpowiednich środków pozwala zapobiec takim uszkodzeniom, zanim do nich dojdzie. Jako środek bezpieczeństwa dla organizacji korporacyjnych, oprócz środków z perspektywy obrony szczegółowo wymienionych powyżej, zalecamy regularne przeprowadzanie ocen bezpieczeństwa, takich jak zewnętrzne testy penetracyjne i diagnostyka luk w zabezpieczeniach.