Większość ataków przeprowadzanych z internetu ma charakter zautomatyzowany. Są one jedynie zainicjowane przez człowieka, natomiast dalszy ich przebieg jest kontrolowany przez wcześniej utworzone skrypty. Ataki na serwery baz danych mają nieco inny charakter, ale przed nimi też się można obronić.
W automatyczny sposób przebiega większość ataków typu DoS (Denial of Service – odmowa obsługi) czy DDoS (Distributed Denial of Service – atak typu odmowa obsługi, przeprowadzany z wielu miejsc jednocześnie). Podobny przebieg mają ataki wykorzystujące znane luki w oprogramowaniu użytkowym: systemach operacyjnych, aplikacjach czy np. serwerach baz danych.
Innym rodzajem ataku z internetu jest iniekcja (Injection). W przeciwieństwie do masowego wykorzystywania exploitów, inwazja za pomocą iniekcji nie jest zautomatyzowana. Ma ona bardzo zróżnicowany charakter i jest dostosowana do konkretnej bazy danych. W związku z tym jest atakiem znacznie trudniejszym do wykrycia niż np. DoS czy DDoS.
Skanery antywirusowe, tak skuteczne w przypadku ataków automatycznych, wobec iniekcji kodu są bezradne. Aby ochronić serwer baz danych przed atakami typu SQL Injection, wymagana jest szczegółowa analiza zabezpieczeń systemu i budowy bazy.
Przed epoką internetu
Jednym z najpopularniejszych celów, jakie wykorzystywane są w atakach tego typu, są serwery baz danych korzystające z języka SQL (Simple Query Language). Został on opracowany w latach 70. XX wieku w laboratoriach koncernu IBM. Obecnie administratorzy i programiści używają głównie jego poprawionej wersji, która została udoskonalona w latach 90. m.in. w firmie Microsoft.
SQL to strukturalny język zapytań wykorzystywany do tworzenia i modyfikowania baz danych. O jego popularności świadczy fakt, że już w 1986 roku stał się oficjalnym standardem uznanym przez Międzynarodową Organizację Normalizacyjną (ISO – International Organization for Standarization) oraz Amerykański Narodowy Instytut Normalizacji (ANSI – American National Standards Institute). SQL jest językiem deklaratywnym. Tak więc za pomocą reguł samego języka nie ustala się metod przechowywania czy pobierania informacji. Zadanie to jest przekazywane na tzw. systemy zarządzania bazami danych, zwane zazwyczaj serwerami baz danych. Skuteczność iniekcji kodu zależy od logicznej lokalizacji atakowanej bazy. Najbardziej narażone są bazy wykorzystywane w ogólnodostępnych aplikacjach internetowych.
Metody ataków
Atak typu SQL Injection polega na przekazaniu do bazy poleceń, które wykonają zapytanie agresora. Skuteczność ataku opiera się na założeniu, że serwer, na skutek złej konfiguracji, w konkretnym momencie może oczekiwać nie tylko na informacje przekazywane za pośrednictwem formularza na stronie WWW (np. nazwa użytkownika i hasło podczas logowania się do serwera). Zaakceptuje także dowolne polecenia lub choćby takie, które spowodują zwiększenie uprawnień nieautoryzowanego użytkownika, umożliwiając mu modyfikację zapytań wysyłanych do bazy i dzięki temu wyciągnięcie poufnych danych.
UserList.Username = 'nextUser' AND UserList.Password = '1234' OR '1'='1'
W powyższym przykładzie w miejsce '1234' można wstawić dowolny ciąg znaków, jednak wartość '1'='1' jest zawsze prawdą, a tym samym wynik alternatywy logicznej jest prawdziwy. W rezultacie tego zapytania baza zwróci wiele wierszy, które zapewnią dostęp do bazy. Powyższy przykład zakłada, że agresor posiada pewną wiedzę na temat atakowanej bazy, tzn. zna co najmniej jedną prawidłową nazwę konta użytkownika. Jednak taka wiedza (kwestię, w jaki sposób ją zdobyć, na razie pomijamy) wcale nie jest konieczna, by zaatakować bazę danych.
Listing