sql injection.pdf
(
597 KB
)
Pobierz
Microsoft Word - sql injection.doc
1. W jaki sposób sprawdzić podatność na SQL Injection?
Podatność na SQL Injection można sprawdzić za pomocą ręcznego testowania jednak jest to
czasochłonne. Sprawdza się wówczas:
pola formularzy (ukryte, jawne),
ciasteczka,
sesje,
parametry przekazywane za pomocą metody GET.
W przypadku formularzy zamienia się wszystkie checkboxy, selecty i radio na pola tekstowe,
dzięki którym łatwiej można coś wstrzyknąć.
2. W jaki sposób przy wykorzystaniu SQL Injection sprawdzić możliwość wykonania
zapytań zagnieżdżonych?
Na przykład przez dodawanie jednego apostrofu do listy parametrów można spowodować
wykonanie drugiego zapytania zagnieżdżonego w pierwszym.
3. W jaki sposób przy wykorzystaniu SQL Injection określić liczbę kolumn w
zapytaniu?
Wykorzystując UNION SELECT null,null,(...) gdzie ilość wartości ‘null’ odpowiada ilości
kolumn tabeli. W przypadku podania prawidłowej ilości ‘null’, zapytanie zostanie wykonane.
Przy ataku przydatne jest podanie jakiegoś parametru nieistniejącej informacji, po to żeby
wyrzucone zostało to co zwraca UNION SELECT.
Jedną z metod ustalenia ilości kolumn w tabeli, z której wykonywany jest
SELECT
jest
wykorzystanie
ORDER BY
. W tym wypadku podaje się identyfikator kolumny zamiast
nazwy. W przypadku podania identyfikatora, który nie istnieje spowoduje wystąpienie błędu
na podstawie którego można wyciągnąć wniosek co do ilości kolumn.
Ilość kolumn w tabeli nie musi się wprost przekładać na ilość kolumn w rezultacie zapytania,
informacja ta może być jednak przydatna. Podanie identyfikatora kolumny, która nie istnieje
(czyli większego od ilości kolumn) spowoduje błąd. Przykładowo zadziała
1 ORDER BY 4
,
jednak
1 ORDER BY 5
zakończy się błędem. Wynika z tego, że w tabeli, na której
wykonywany jest
SELECT
znajdują się cztery kolumny, co jest zgodne z ilością kolumn w
rezultatach zapytania SQL, co zostało zweryfikowane przy pomocy
UNION SELECT null,
(...)
.
4. Czym charakteryzuje się atak SQL Injection typu blind?
Atak SQL Injection typy blind jest z założenia dość prosty. Główną jego ideą jest zadawanie
pytań, na które dostaje się odpowiedź ‘tak’ lub ‘nie’.
Przykład:
Funkcja sqlite_version() zwraca string. Jego długość ustala się za pomocą funkcji
‘length’ lub za pomocą zapytania
1 AND (SELECT length(sqlite_version())) > 0
które
zwróci wartość ‘true’. Zastosowanie metody bisekcji doprowadza do ustalenia konkretnej
wartości długości tekstu
1 AND (SELECT length(sqlite_version())) =x
gdzie x to długość
tekstu.
W analogiczny sposób można określić jaki znak występuje na określonej pozycji. W tym celu
można wykorzystać zapytania postaci:
1 AND (SELECT substr(sqlite_version(),0,1) ) > '0'
czy
id=1 AND (SELECT substr(sqlite_version(),0,1) ) > '9'
.
5. Jak zabezpieczyć się przed SQL Injection – w czym może być pomocne rzutowanie i
escap’owanie? Czy wyrażenia regularne są dobrym rozwiązaniem?
walidacja wejścia aplikacji,
stosowanie do interakcji z bazą danych procedur składowanych oraz ich wywołanie
przez sparametryzowane API,
pola dla każdego typu zapytania oraz jasne zdefiniowanie typu danych przypisanych
do każdego pola (wejście o określonym formacie może być dalej przetwarzane),
zaimplementowanie filtrów SQL, które będą odrzucały podejrzane formuły z
klauzulami SELECT, UPDATE itp.,
ustanowienie minimalnych koniecznych przywilejów dla użytkownika korzystającego
z aplikacji WWW,
sprawdzenie skuteczności hasła użytkownika,
zmiana uprawnień i usunięcie publicznego dostępu do obiektów publicznych w bazie
danych.
Ponadto można użyć techniki zwanej rzutowaniem typów (ang. type casting), polegającej na
modyfikacji typu zmiennej po tym, jak została jej przypisana wartość. W PHP osiąga się to,
poprzedzając nazwę zmiennej type podanych w nawiasach okrągłych:
$id = (int) $_GET['userID'];
Rzutowanie typu na int zmusza zmianną $id do przyjęcia wartości wyrażonej liczbą
całkowitą. Jeśli $_GET['userID'] nie ma wartości liczbowej, $id staje się równe zeru. W
większości wypadków niekonieczna jest zmiana typu zmiennych, ponieważ PHP w razie
konieczności często robi to automatycznie. Jednak wymuszenie zmiany typu zmiennej może
być dobrym zabezpieczeniem, które można wykorzystać w aplikacjach webowych.
6. W jaki sposób osoba atakująca może wykorzystać UNION oraz opóźnienie zapytania?
W przypadku bazy MySQL / Oracle, atak tego typu może być rzeczywiście
nieskomplikowany (pod warunkiem, iż filtry aplikacyjne nie blokują stosownych funkcji
opóźniających):
Oracle
SELECT * FROM news WHERE category='hardware' ORDER BY (SELECT CASE WHEN
test3.v1 = 'xxx' then utl_inaddr.get_host_name('10.9.9.9') ELSE 'a' END FROM test3)
Powyższy przykład wykorzystuje test czasowy na konkretną zawartość dowolnej komórki w
bazie danych.
Problemy na jakie może natrafić atakujący:
niedostępna funkcja opóźniająca (np. brak dostępności pg_sleep() w pewnych
wersjach PostgreSQL),
brak możliwości wykorzystania funkcji opóźniającej w danym kontekście (np. po
ORDER BY).
Natywne opóźnienie - polega na zadaniu do bazy danych SQL zapytania powodującego jej
znaczne obciążenie, a co za tym idzie opóźnienie w wykonaniu tegoż zapytania. Nie
wykorzystuje się w nim funkcji np. benchmark();
W skrócie technika
natywnego opóźnienia
opiera się na:
użyciu operatora SELECT ,
wykorzystaniu jednostkowej operacji, która minimalne obciąża bazę danych,
wykonaniu operacji SELECT dla dużego podzbioru danych, które stanowią "mnożnik"
dla operacji jednostkowej.
W efekcie następuje wykonanie odpowiednio dużej liczby powtórzeń operacji jednostkowych
- prowadzące do widocznego opóźnienia w wykonywaniu całego zapytania.
W jaki sposób wygenerujemy duży podzbiór danych? Otóż sami stworzymy "wirtualną"
tabelę, a następnie wykonamy na niej złożone czasowo operacje.
7. Czym jest atak wielofazowy SQL Injection?
Atak wielofazowy polega na tym, że na początku dane wprowadzone przez atakującego są
zapisywane do bazy danych. Zapytanie wprowadzane przez niego sortuje dane według
jakiegoś kryterium. Zapytanie wykonuje to co atakujący zapisał w bazie. Pary apostrofów w
danych zamieniane są na pojedyncze apostrofy.
8. Jak oceniasz wykorzystanie przy parametryzowaniu zapytań białych czy czarnych
list? Co jest lepszym rozwiązaniem?
Bezsprzecznie bardziej zaawansowanym technologicznie rozwiązaniem są pakiety chroniące
przed SQL injection bez konieczności przejścia etapu "uczenia", czyli ręcznego strojenia
zasad filtracji. Jest to możliwe dzięki jednoczesnemu zastosowaniu modelu białych i czarnych
list (dynamic positive - white list i dynamic negative - black list).
Przy wyborze dozwolonych akcji stosuje się dwie listy – białą i czarną. Biała zawiera cechy, z
których przynajmniej jedna musi być spełniona przez zapytanie przekazywane do serwera.
Przykładem reguły może być ograniczenie: „
EMBEBOFHPGPSNVMBS[BPCTVHVKFNZXZʩD[OJF
1045[LPOLSFUOFKHSVQZBESFTØX*1
9. Jak oceniasz wykorzystanie procedur składowanych?
duża wydajność
Procedury są przechowywane w bazie w postaci skompilowanej i zoptymalizowanej.
Procedury w takiej formie wykonują się szybciej niż kod SQL w postaci tradycyjnej.
Zastosowanie procedur składowanych może zmniejszyć ruch w sieci komputerowej –
w sieci transportowane są tylko nazwy procedur, parametry a nie długie zapytania.
”. Czarna lista zawiera wszystko, co jest zakazane –
sygnatury XSS, SQL Injection, Code Injection, przepełnień bufora i własne filtry
użytkowników.
większe bezpieczeństwo:
W procedurach składowanych parametry mają zadeklarowane typy dzięki czemu są
one bardziej odporne na ataki SQL Injection
modularyzacja kodu:
Kod aplikacji jest bardziej przejrzysty ponieważ zamiast często długich zapytań
znajduje się tylko nazwa procedury.
10. Jaki wpływ na bezpieczeństwo ma projekt bazy oraz poziom uprawnień
użytkowników?
Z punktu widzenia bazy danych, zapytanie jest wywoływane przez zwykłego użytkownika
dlatego niezwykle ważne jest nadawanie uprawnień użytkownikom. Należy zastosować
zasadę najmniejszych przywilejów. Ważne jest zwrócenie uwagi na nadawanie uprawnień do
wykonywania procedur w bazie oraz uprawnień do modyfikacji danych w bazie. Uprawnienia
nie zabezpieczają przed samym atakiem SQL Injection ale ograniczają jego skutki.
Plik z chomika:
boro
Inne pliki z tego folderu:
ML-Tools(1).rar
(3825 KB)
ML-Tools.rar
(3825 KB)
jak pisac prace mgr.txt
(0 KB)
Ps_02.pdf
(62 KB)
demon.jpg
(32 KB)
Inne foldery tego chomika:
pliki
studia
Zgłoś jeśli
naruszono regulamin