Loading:

PHP 7 News & Updates v7.0 - 7.4 - book

SQL Injection

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.

Jak to wygląda w praktyce? Wystarczy wyobrazić sobie następującą sytuację: istnieje strona WWW, która zawiera dwa pola pozwalające na wprowadzenie nazwy użytkownika oraz przyporządkowanego mu hasła. Wypełnienie tych pól i przesłanie ich zawartości do bazy spowoduje wygenerowanie zapytania SQL w celu sprawdzenia, czy wpisane hasło odpowiada danemu użytkownikowi. Kod takiego zapytania może wyglądać następująco:

SELECT UserList.Username FROM UserList WHERE UserList.Username = 'nextUser' AND UserList.Password = '1234'
Jeżeli zapytanie to zwróci dokładnie jeden wiersz, to w bazie zostanie odnalezione hasło odpowiadające nazwie użytkownika. W celu dostania się do systemu agresor może zmienić polecenie SQL. Wystarczy, że poda prawidłową nazwę użytkownika, a w polu przeznaczonym na hasło wprowadzi prawidłową instrukcję OR. Oto, jak wyglądałoby zapytanie w wyniku iniekcji tak krótkiego kodu:

SELECT UserList.Username FROM UserList WHERE
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.



Napisz Artykuł

Listing

niema


Ten wpis posiada swój wątek na forum

Wszystkie pytania prosimy kierować właśnie tam ponieważ komentarze to miejsce na poprawki do kodu lub alternatywne rozwiązania i pytania nie będą publikowane

http://forum.funkcje.net/forum/viewtopic.php?f=5&t=6006

Dane do logowania na forum są takie same jak na funkcje.net



Dodano przez: w4r10ck Ranga: Poziom 3 Punktów: 50
Komentarze użytkowników
    • Treść komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-17 v.1.5 | design: diviXdesign & rainbowcolors