Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

SQL INJECTION Wykorzystanie błędów w językach skryptowych

Podobne prezentacje


Prezentacja na temat: "SQL INJECTION Wykorzystanie błędów w językach skryptowych"— Zapis prezentacji:

1 SQL INJECTION Wykorzystanie błędów w językach skryptowych
Pomiędzy warstwą programistyczną a warstwą danych Bezradne niskopoziomowe mechanizmy bezpieczeństwa JSP, ASP, XML, XSL, XSQL, Perl, CGI, JavaScript, VB, narzędzia do obsługi baz danych, C, COBOL ...

2 Przykład 1 Skrypt w JSP połączony z Oracle
W polu formularza wczytywane sal Konstruowane zapytanie (dla sal=800): SELECT ename, sal FROM scott.emp WHERE sal=800

3 Przykład 1 W polu sal wpisujemy:
sal=800 UNION SELECT username, user_id from all_users Uzyskujemy zapytanie: SELECT ename, sal FROM scott.emp WHERE sal=800 UNION SELECT username, user_id from all_users

4 Zagrożenia Dostęp do dowolnych danych w bazie
Możliwość modyfikacji i usunięcia danych Atak wysokiego poziomu Omija firewalle i zabezpieczenia na poziomie IP Omija skanery antywirusowe i filtry treści Nie istnieją sygnatury dla tego ataku

5 Przykład – zagrożenia Oracle
Można: Dodać wyrażenie za pomocą UNION Dodać podzapytania do istniejących Uzyskać wszystkie dane z bazy Uzyskać dostęp do zainstalowanych procedur i pakietów (np. pozwalających na zapisywanie i czytanie plików systemowych

6 Przykład – zagrożenia Oracle
Można: Dodać instrukcje INSERT, UPDATE, DELETE Dodać języki DDL (do definicji danych) Dołączyć inną bazę danych Nie są wykonalne: Wielokrotne instrukcje Odwołanie do bind variables

7 Przykład 2 LoginPage.php: <HTML> <BODY>
<FORM ACTION=LoginPage2.php> Użytkownik: <INPUT NAME=”username”> <br> Hasło: <INPUT NAME=”password”> <br> <INPUT TYPE=”submit” VALUE=”Zaloguj”> </FORM>

8 Przykład 2 LoginPage2.php: ...
function MyAuth( $conn,$username,$password) { $query = ”SELECT id FROM users WHERE”; $query .= ”username = '” . $username . ”'AND ”; $query .= ”password = '” . $password . ”'”; $res = pg_query( $query); if (pg_num_rows( $res) == 1) { $row = pg_fetch_array( $res); $id = $row['id']; } else { $id = 0;

9 Przykład 2 Tworzone zapytanie: . - operator konkatenacji
”SELECT id FROM users WHERE username = '” . $username . ”' AND password = '” . $password .”'” . - operator konkatenacji ” - ograniczają poszczególne ciągi znaków ' - fragmenty danych wprowadzane przez użytkownika

10 Przykład 2 Złośliwe dane: Użytkownik: 'delete from users-- Hasło:
Uzyskujemy zapytanie: ”SELECT id FROM users WHERE username = '” . '; delete from users--” . ”' AND password = '” . . ”'”;

11 Przykład 1 W efekcie uzyskujemy:
”SELECT id FROM users WHERE username = '” . '; delete from users--” . ”' AND password = '” . . ”'”; ' - zakończenie pojedynczego cudzysłowu ; - zakończenie zapytania i rozpoczęcie nowego -- - początek komentarza

12 Przykład 1 Wygenerowane zapytanie:
SELECT id FROM users WHERE username = ''; delete from users Zawartość tablicy users zostanie usunięta, uniemożliwiając innym dostęp do systemu Można doklejać dowolne zapytania, o ile pozwala na to API i składnia bazy danych

13 Metody zapobiegania Wszystkie dane z zewnątrz aplikacji powinny być filtrowane (przede wszystkim słowa kluczowe) Stosowanie zasady najmniejszych przywilejów Precyzyjne określenie funkcji dostępnych użytkownikowi za pośrednictwem interfejsu Oddzielenie dostępu do bazy danych od interfejsu Usuwanie zbędnych plików (*.bak)

14 Przykład 3 Im więcej intruz wie o strukturze bazy danych, tym większe prawdopodobieństwo skuteczności ataku Podajemy: Użytkownik: ' HAVING 1 = 1-- Uzyskujemy zapytanie: SELECT id FROM users WHERE username = '' HAVING 1 = 1

15 Przykład 3 Zapytanie: SELECT id FROM users WHERE username = '' HAVING 1 = 1 Jest poprawne składniowo, ale niepoprawne ze względu na strukturę danych. Zwrócony komunikat: Attribute users.id must be GROUPed or used in an aggregate function

16 Podsumowanie Dane z zewnątrz aplikacji powinny być filtrowane
Przy nadawaniu uprawnień należy stosować zasadę najmniejszych przywilejów Precyzyjne określenie funkcji dostępnych użytkownikowi za pośrednictwem interfejsu W środowisku aplikacji nie powinno być żadnych zbędnych plików

17 Tematy pokrewne HTML injection Second-order code injection
Niedostateczne sprawdzanie danych wejściowych przez aplikacje sieciowe Pozwala na zostawianie swoich pułapek na stronie, przechwytywanie danych Second-order code injection Dostarczenie aplikacji sieciowej potencjalnie niebezpiecznego kodu, który nie jest od razu wykonywany lecz przechowany Przechowany kod (cache, baza danych) niebezpieczny przy wczytaniu i uruchomieniu przez ofiarę


Pobierz ppt "SQL INJECTION Wykorzystanie błędów w językach skryptowych"

Podobne prezentacje


Reklamy Google