Czytelnicy tacy jak ty pomagają wspierać MUO. Kiedy dokonujesz zakupu za pomocą linków na naszej stronie, możemy otrzymać prowizję partnerską. Czytaj więcej.

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. Umożliwiają one złośliwym aktorom „wstrzykiwanie” szkodliwego kodu do instrukcji SQL.

Najpierw przyjrzyjmy się, co oznacza SQL.

instagram viewer

SQL oznacza ustrukturyzowany język zapytań. To inny rodzaj języka programowania szczególnie używany w kontaktach z bazami 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 jest poleceniem 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 wykraść dane, aby je wykorzystać bezpośrednio lub sprzedawać w ciemnej sieci lub gdzie indziej. 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 stwierdził o Otwarty projekt bezpieczeństwa aplikacji internetowych (OWASP), podczas testowania aplikacji pod kątem obecności takiego ataku w 2021 roku 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 strona jest atakowana przez wstrzyknięcie, ale dostarczone odpowiedzi HTTP (Hypertext Transfer Protocol) nie zawierają wyniku zapytanie 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, bardziej efektywnego 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ż to drugie będzie wymagało krótkiego odczekania przez bazę danych przed udzieleniem odpowiedzi na zapytania.

Następnie są wstrzyknięcia 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 iniekcji SQL w paśmie, w której 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 praktycznie 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.