pobierz plik referatu

May 4, 2018 | Author: Anonymous | Category: N/A
Share Embed


Short Description

Download pobierz plik referatu...

Description

Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008

Rozdział 2

w

Zaawansowane metody manipulacji kodu SQL

1 Wstęp

da .b

w

w

Streszczenie. Aplikacje internetowe zazwyczaj korzystają z warstwy danych, którą prawie zawsze jest baza danych. Jednym z rodzajów ataków poprzez aplikacje internetowe jest wstrzykiwanie przekazywanego przez aplikacje do baz danych kodu SQL. W rozdziale omówiono zaawansowane warianty ataku metodą iniekcji kodu SQL, przedstawiono klasyfikację tego typu ataków, wskazując jednocześnie możliwości uchronienia się przed manipulacjami przekazywanego kodu SQL.

Rozdział poświęcony jest atakom poprzez wstrzykiwanie kodu SQL (ang. SQL injection), nazywanymi też atakiem poprzez iniekcję kodu SQL, stanowiącym duże zagrożenie dla systemów z bazami danych. W rozdziale opisano, na czym polegają ataki poprzez wstrzykiwanie kodu SQL. Zamieszczono również krótką historię tych ataków. Omówione zostały techniki używane w atakach techniką iniekcji kodu SQL oraz możliwości obrony. W celu demonstracji wybranych metod iniekcji SQL posłużono się PHP 5.2.5/MySQL 5.1 (pod Apache 2.0.58).

pl s.

1.1 Przykładowe dane

Wygenerowana do celów demonstracyjnych tabela wygląda następująco:

mysql> DESCRIBE towary; +-------+----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+----------------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | 0 | | | nazwa | varchar(40) | YES | | NULL | | | data | date | YES | | NULL | | | cena | float(12,2) unsigned | YES | | NULL | | +-------+----------------------+------+-----+---------+-------+ 4 rows in set (0.00 sec)

Wprowadzone zostały dane: Anna Kotulla Politechnika Śląska, Instytut Informatyki, ul. Akademicka 16, 44-100 Gliwice, Polska email:[email protected]

(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008

Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008

A. Kotulla

w

mysql> SELECT * FROM towary; +----+-------------------+------------+---------+ | id | nazwa | data | cena | +----+-------------------+------------+---------+ | 1 | klawiatura | 2007-12-05 | 48.95 | | 2 | mysz | 2008-01-05 | 19.99 | | 3 | monitor 22" | 2008-01-03 | 1512.50 | | 4 | dysk twardy 500GB | 2007-12-03 | 888.00 | | 5 | nagrywarka | 2007-11-15 | 166.23 | +----+-------------------+------------+---------+ 5 rows in set (0.00 sec)

w

2 Atak poprzez wstrzykiwanie kodu SQL 2.1 Historia ataków techniką iniekcji SQL

da .b

w

Pierwsze informacje [4] na temat ataków poprzez wstrzykiwanie kodu SQL pojawiły się w grudniu 1998 w 54 wydaniu czasopisma Phrack. Wówczas opisano ataki przeprowadzone na aplikacje IDC oraz ASP pod Microsoft Internet Information Server, bazą danych był SQL Server 6.5. Wstrzykiwanie kodu SQL początkowo nazywane było m.in. SQL Insertion (wstawianie kodu SQL) . Sam termin SQL Injection pojawił się pod koniec 1999 roku, wprowadzony został prawdopodobnie przez Chipa Andrewsa w jego artykule „SQL Injection FAQ”, opublikowanym na SQLSecurity.com. 2.2 Na czym polegają ataki techniką wstrzykiwania kodu SQL

pl s.

Wstrzykiwanie kodu SQL [1], [2], [3], [4], [5], [6], [9], [11], jest metodą ataku na systemy baz danych i polega na skłonieniu bazy danych do wykonania niepożądanego kodu SQL, wprowadzonego poprzez rozszerzenie istniejących zapytań SQL o dodatkowe elementy. Zmienione zapytania SQL wprowadzane są przez aplikacje, najczęściej internetowe, korzystające z bazy danych. Atak poprzez iniekcję kodu SQL jest możliwy, kiedy aplikacja akceptuje wprowadzone przez użytkownika dane i wbudowuje je do zapytania SQL. Zapytanie to wysyłane jest do bazy danych i tam wykonywane. Aby zilustrować atak poprzez iniekcję kodu SQL, załóżmy, że w bazie danych istnieje tabela pracownicy, a jej kolumnami są m.in. nazwisko, imie, data_urodzenia, data_zatrudnienia, natomiast intencją autora było zwrócenie wartości kolumny data_zatrudnienia dla podanego imienia i nazwiska pracownika to dane wstawiane są w odpowiednie pola formularza. Wówczas dane mogą być przekazywanie poprzez URL postaci http://chroniona_strona/przykladowy_skrypt.php?nazw=& imie=

Niech aplikacja zmienia to na zapytanie SELECT data_zatrudnienia FROM pracownicy WHERE nazwisko=’podane_nazwisko’ AND imie=’podane_imie’

Jeżeli nie jest sprawdzane, jakiego typu dane zostają przekazywanie, atakujący może próbować zmodyfikować zapytanie na przykład w taki sposób: 24

(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008

Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008

Zaawansowane metody manipulacji kodu SQL http://chroniona_strona/przykladowy_skrypt.php?nazw=&imie=

W przypadku braku kontroli przekazywanych danych, zmodyfikowane może być również zapytanie SQL skierowanie do bazy danych, w sposób przewidziany przez atakującego. 2.3 Przygotowanie ataku

w

da .b

w

w

Przygotowanie ataku polega na określeniu tzw. wektora ataku [4], [7], czyli wykonanie wstępnego rozpoznania, jak poważna jest luka. W ramach przygotowania przykładowo obserwowana jest reakcja aplikacji na zmodyfikowane parametry wejściowe, podejmowane są próby uzyskania komunikatów błędów bezpośrednio w aplikacji, czy przeglądarce. W trakcie rekonesansu uzyskuje się wektor ataku. Otrzymywane mogą być informacje o wykorzystanych w aplikacji zapytaniach SQL, stosowanych technikach zabezpieczających – np. sprawdzaniu wprowadzanych wartości. Bywa, że otrzymywane informacje pozwalają określić strukturę bazy danych. W przypadku, kiedy aplikacja nie zwraca informacji o błędzie, stosowana jest technika zwana ślepym wstrzykiwaniem kodu SQL [8], [9] (ang. blind SQL Injection) – ślepym z powodu niedostatecznych dla atakującego informacji o błędzie. Bywa, że atakujący jednak i w takiej sytuacji potrafi stwierdzić czy zapytanie było wykonane, np. na podstawie czasów odpowiedzi lub zwróconych różniących się komunikatów (np. informacji o błędzie przygotowanych przez autora aplikacji). Dalsze informacje o tej groźnej technice znajdują się w [8]. 2.4 Rodzaje ataku SQL Injection – podział ze względu ukierunkowanie ataku na elementy zapytania SQL

pl s.

Biorąc pod uwagę, w jaki aspekt zapytania SQL skierowany jest atak [7], można dokonać podziału na: − ataki wymierzone na składnię zapytania, − ataki ukierunkowane na składnię języka SQL, − ataki na logikę zapytania, Wymienione powyższe techniki ataku bywają łączone. Metody ataku, pogrupowane ze względu na sposób dostępu, omówione są w podrozdzale 3. 2.5 Rodzaje ataku SQL Injection – podział ze względu na sposób dostępu

Innym możliwym podziałem jest zestawienie ze względu na sposób dostępu. Ataki SQL Injection podzielone są na [6]: − próbę dostępu przez stronę logowania, za pomocą: − warunku OR, − klauzuli HAVING, − złożonych zapytań, − użycia zewnętrznych procedur sterujących (ang. stored procedures), − próbę dostępu poprzez URL, za pomocą: − manipulowania składni zapytania bezpośrednio w URL, − użycia wyrażeń SELECT wraz z UNION. 25

(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008

Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008

A. Kotulla

3 Metody ataku

w

Biorąc pod uwagę, w jaki aspekt zapytania SQL skierowany jest atak [7], można dokonać podziału na: − ataki wymierzone na składnię zapytania, polegające na wstawianiu znaków burzących składnię zapytania, co ma na celu wygenerowanie błędów, pomagających uzupełnić wektor ataku. Do tego celu stosowane bywają znaki specjalne, takie jak znaki komentarza, cudzysłowy, apostrofy, średniki. Znaki podawane bywają również w postaci niebezpośredniej (aby ominąć filtry), np. CHAR(0x3B). 0x3B jest szesnastowym oznaczeniem kodu ASCII dla średnika, czy częściej jeszcze stosowany kod apostrofu CHAR(0x27). − ataki ukierunkowane na składnię języka SQL. Celem jest wygenerowanie błędów bazy danych lub wykonanie zapytań poprzez manipulację językiem SQL. Przykładowo do tej grupy ataków zalicza się wykonywanie własnych zapytań (typu SHOW TABLES;) dołączonych do właściwego zapytania. − ataki na logikę zapytania, polegające na takim zmodyfikowaniu kwerendy, aby otrzymać dane z tabel, których programiści nie mieli zamiaru udostępnić. Do tej grupy zaliczają się ataki z wykorzystaniem operatora UNION.

w

w

da .b

3. 1 Ataki na składnię zapytań

pl s.

Podczas filtrowania danych wejściowych w skryptach PHP [7] możliwe są błędy, wynikające z niedostecznego filtrowania, kiedy np. szukany jest tylko znak apostrofu, a pominięte są inne, potencjalnie niebezpieczne znaki, do których zaliczyć można [4] znaki spacji, , &, czy =. Uwzględnić należy, że znaki te mogą być zastąpione innymi wyrażeniami. Przykładowo dla MySQL zamiast SELECT * FROM towary WHERE ID=4 używane może być wyrażenie SELECT * FROM towary WHERE ID BETWEEN 4 AND 4. Problem sprawiać mogą zbyt ostre kryteria filtrowania [7]. Można otrzymać błędnie sformatowane zapytanie, jeżeli użyte będą funkcje: − magic_quotes(), która automatycznie kasuje wszystkie apostrofy za wyjątkiem znaku \, − oraz strip_slashes(), usuwającą znaki kasowania, Newralgicznym elementem zapytań są zmienne [7], szczególnie numeryczne, lub typu DATE. Sprawdzane są szczególnie potencjalnie obiecujące kombinacje, do których przykładowo należą: − liczby ujemne, − sprawdzanie ślepe: duże lub małe liczby zmiennoprzecinkowe, np. 4.78326123e-421, 9.23343213e+308, − sprawdzanie systematyczne: liczby mogące być poza zakresem, np. 28+n, 216+n, 232+n, 264+n (gdzie n oznacza jakąś liczbę całkowitą dodatnią). Inną możliwością są znane ograniczenia liczb jakiegoś typu, na przykład jeżeli kolumnie w MySQL [11] przypisane zostały dane typu FLOAT, wówczas dozwolonymi wartościami są: − -3.402823466E+38 do -1.175494351E-38, − 0, − 1.175494351E-38 do 3.402823466E+38. Dla języka PHP standardowo typem parametru dla wszystkich zmiennych jest łańcuch znaków, co powodować może problemy w przypadku oczekiwanych wartości liczbowych, czy typu DATE. 26

(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008

Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008

Zaawansowane metody manipulacji kodu SQL

Zwracać uwagę należy również na niebezpieczne znaki przemycane za pomocą rozbudowanych wyrażeń i przez to trudniejsze do znalezienia [7], np. cH%41r(0x68-0x41) odpowiada CHAR(0x27). 3. 2 Ataki na składnię języka SQL

w

Język SQL [7], ze względu na swoje właściwości, jak przykładowo rozbudowane możliwości tworzenia składniowych odpowiedników zapytań, jest sam w sobie dosyć dobrym celem ataku. Ataki tego typu bywają dobrym źródłem informacji pomagających rozbudować wektory ataku. Najczęściej w pierwszym rzędzie podejmowane są próby manipulowania danych numerycznych [7]. Reakcja sprawdzana jest przykładowo techniką tzw. surowych parametrów. Technika ta używa odpowiedników jakiejś liczby/wyrażenia, np. zamiast wyrażenia numer=83 można próbować na miejsce 83 podstawiać takie wartości jak 0123 (liczba przedstawiona ósemkowo), czy 0x53 (liczba przedstawiona szesnastkowo). Jeżeli uzyskane od aplikacji odpowiedzi są identyczne, wskazuje to na przetwarzanie surowych wartości parametrów. Do ataków na składnię języka SQL zaliczyć można takie, które zastępują wymienione już wcześniej znaki potencjalnie niebezpieczne, filtrowane przez aplikację, innymi [4].

da .b

w

w

pl s.

Rys. 1. Wynik zapytania SELECT id, nazwa, cena FROM towary WHERE id=4 or id=3

Przykładowo, niech fragment kodu w PHP pytający przykładową bazę danych ma postać:
View more...

Comments

Copyright © 2020 DOCSPIKE Inc.