Co to jest wstrzyknięcie SQL? Czy to jest niebezpieczne?
Jeśli jest coś, co cyberprzestępcy kochają, to są to dane. Skradzione dane są bardzo cenne na nielegalnych platformach handlowych, a dostęp do prywatnych baz danych może być dla złośliwych podmiotów świetnym sposobem na czerpanie zysków ze swoich przedsięwzięć. Jednym ze sposobów uzyskania dostępu do prywatnych danych jest wstrzyknięcie kodu SQL. Ale czym dokładnie jest iniekcja SQL, jak działa i czy można zapobiec takiemu atakowi?
Co to jest wstrzyknięcie SQL?
Programy działają w oparciu o kod. Kod jest również językiem używanym przez maszyny do przeprowadzania operacji i może przybierać różne formy (Python, JavaScript, C++ itp.). Cyberprzestępcy często atakują ofiary za pomocą kodu, a wstrzykiwanie SQL (lub SQLis) nie jest wyjątkiem. Pozwalają one złośliwym aktorom „wstrzykiwać” szkodliwy kod do instrukcji SQL.
Najpierw przyjrzyjmy się, co oznacza SQL.
SQL oznacza ustrukturyzowany język zapytań. Jest to inny rodzaj języka programowania, szczególnie używany w przypadku baz danych. Stworzony w latach 70. przez firmę IBM język SQL umożliwia manipulowanie, przechowywanie i pobieranie informacji z bazy danych. Wiele systemów komunikacji z bazami danych na całym świecie korzysta z języka SQL, nic więc dziwnego, że cyberprzestępcy wymyślili sposoby na jego nadużywanie w celu zaatakowania baz danych.
Instrukcje SQL stanowią kluczową część komunikacji z bazą danych. Instrukcja SQL to polecenie, które występuje w wielu różnych formach. Niektóre modyfikują dane, inne pobierają je lub usuwają, a jeszcze inne mogą zmieniać strukturę samej bazy danych. Kiedy następuje wstrzyknięcie SQL, złośliwy kod jest wstrzykiwany do instrukcji SQL.
Oczywiście strona internetowa lub aplikacja musi używać języka programowania SQL, aby wstrzyknięcie SQL było możliwe. Ale jak działa ten wektor ataku?
Załóżmy, że masz zwykły wiersz kodu używany przez aplikację. Kiedy cyberprzestępca wstawia złośliwe wstrzyknięcie kodu SQL, dodawany jest wiersz kodu, który może zakłócać zapytania wysyłane przez samą aplikację do bazy danych. W ten sposób baza danych może zostać wykorzystana w sposób umożliwiający atakującemu przeglądanie danych, do których inaczej nie miałby dostępu.
Stamtąd cyberprzestępca może ukraść dane, aby je bezpośrednio wykorzystać lub sprzedać w ciemnej sieci lub w innym miejscu. Mogą również zmieniać, dodawać lub usuwać dane z docelowej bazy danych. W zależności od stopnia ataku typu SQL injection, można wyrządzić wiele szkód. W przypadku uzyskania dostępu do szczegółów płatności, numerów ubezpieczenia społecznego lub innych rodzajów danych prywatnych wiele osób może być narażonych na wykorzystanie.
Z drugiej strony, jeśli atakującemu uda się znacząco zmienić bazę danych, duże obszary danych mogą zostać trwale utracone. Podsumowując, iniekcje SQL mogą zniszczyć całe bazy danych za pomocą jednego ataku. Chociaż istnieją od 1998 roku, nadal są aktualne i niebezpieczne w naszych czasach.
Jak ustalił Open Web Application Security Project (OWASP) , podczas testowania aplikacji pod kątem obecności takiego ataku w 2021 r. zidentyfikowano 274 000 przypadków wstrzyknięć SQL.
Rodzaje iniekcji SQL
Istnieje kilka różnych rodzajów iniekcji SQL, z których trzy główne to iniekcje ślepe, w paśmie i poza pasmem.
Ślepe (lub wnioskowane) wstrzyknięcie SQL ma miejsce, gdy aplikacja lub witryna jest atakowana przez wstrzyknięcie, ale podane odpowiedzi HTTP (Hypertext Transfer Protocol) nie zawierają wyniku zapytania SQL. Innymi słowy, żadne dane z zaatakowanej bazy danych nie są przekazywane cyberprzestępcy. Więc, o co w tym chodzi?
Za pomocą ślepej iniekcji SQL osoba atakująca wysyła dane do serwera docelowego, a następnie może rozpoznać pewne rzeczy dotyczące bazy danych na podstawie samej odpowiedzi HTTP. Ponadto czynniki związane z odpowiedzią HTTP mogą pomóc atakującemu w stworzeniu kolejnego, skuteczniejszego wstrzyknięcia kodu SQL w celu uzyskania dostępu do bazy danych.
Istnieją dwa kluczowe typy ślepego wstrzykiwania SQL, znane jako oparte na czasie i boolowskie. Te dwa warianty mają dość podobny charakter. Zarówno wstrzyknięcie SQL oparte na wartościach boolowskich, jak i oparte na czasie wysyła tablicę pytań z odpowiedziami „tak” lub „nie”, chociaż te ostatnie wymagają od bazy danych krótkiego odczekania przed udzieleniem odpowiedzi na zapytania.
Następnie są zastrzyki SQL w paśmie. In-band SQL Injection pozwala operatorowi na przeprowadzenie ataku i uzyskanie pożądanego rezultatu przy użyciu tego samego kanału. In-band SQL injection są najczęściej używane, po prostu dlatego, że są najłatwiejsze do przeprowadzenia ze względu na fakt, że wymagają tylko jednego kanału.
Na koniec masz wstrzyknięcie SQL poza pasmem. Zasadniczo jest to alternatywna wersja wstrzyknięcia kodu SQL w paśmie, w którym atakujący nie może przeprowadzić ataku w całości przy użyciu jednego kanału. Alternatywnie, atak może wymagać zastosowania wstrzyknięcia kodu SQL poza pasmem, jeśli serwer docelowy po prostu nie jest wystarczająco szybki, aby zapewnić wyniki.
Czynniki te sprawiają, że proces jest nieco trudniejszy, co oznacza, że musi polegać na pewnych funkcjach, aby były aktywne w docelowej bazie danych, aby odnieść sukces. Na przykład atakowana platforma musi mieć brak sanityzacji danych wejściowych. Z tego powodu iniekcje SQL w paśmie są znacznie bardziej powszechne niż iniekcje SQL poza pasmem. Ale wciąż się zdarzają.
Czy można uniknąć iniekcji SQL?
Zastrzyki SQL są większym problemem dla firm i organizacji niż dla zwykłych osób. Ale są rzeczy, które te potencjalne cele mogą zrobić, aby zmniejszyć prawdopodobieństwo trafienia takim atakiem.
Oczyszczanie danych wejściowych jest kluczową powszechną praktyką unikania iniekcji SQL. Jest to proces filtrowania, który skanuje i czyści wprowadzone niebezpieczne znaki. Jeśli kod SQL zostanie przetworzony przed oczyszczeniem, szansa na iniekcję SQL w naturalny sposób wzrośnie.
Ponadto sparametryzowane zapytania mogą pomóc uniknąć iniekcji SQL. Są to zapytania, które wymagają co najmniej jednego parametru do wykonania. Stosowanie parametrów utrudnia cyberprzestępcom skuteczne przeprowadzenie ataku typu SQL injection.
Ale nie ma niezawodnego sposobu na uniknięcie wstrzyknięcia SQL. Podobnie jak w przypadku wielu cyberataków, utrzymanie całkowitej szczelności urządzeń i systemów jest prawie niemożliwe. Jeśli chodzi o iniekcje SQL, najlepsze, co możesz zrobić, to oczyścić wszystkie dane wejściowe i ustanowić sparametryzowane zapytania.
Zastrzyki SQL są przestarzałe, ale nadal stanowią zagrożenie
Chociaż iniekcje SQL istnieją już od ponad 20 lat, nadal stanowią zagrożenie dla wielu stron internetowych i aplikacji. Warto więc pamiętać o tej formie ataku i podjąć niezbędne kroki, aby jej zapobiec, ponieważ w przyszłości może ona stanowić zagrożenie dla baz danych.
Dodaj komentarz