Bezpieczeństwo systemów komputerowych

Podobne dokumenty
Aplikacje webowe w obliczu ataków internetowych na przykładzie CodeIgniter Framework

Projektowani Systemów Inf.

Aspekty bezpieczeństwa aplikacji internetowych

Hosting WWW Bezpieczeństwo hostingu WWW. Dr Michał Tanaś (

Wprowadzenie do kryptografii i bezpieczeństwa. Po raz czwarty

Kurs rozszerzony języka Python

ZPKSoft WDoradca. 1. Wstęp 2. Architektura 3. Instalacja 4. Konfiguracja 5. Jak to działa 6. Licencja

Bazy danych i strony WWW

Zagrożenia związane z udostępnianiem aplikacji w sieci Internet

Ataki na aplikacje WWW. Łomem, czy wytrychem? Jak dobrać się do aplikacji WWW

The OWASP Foundation Session Management. Sławomir Rozbicki.

Architektura bezpiecznych aplikacji internetowych na platformie Java Enterprise Edition. Jakub Grabowski Warszawa,

Sesje, ciasteczka, wyjątki. Ciasteczka w PHP. Zastosowanie cookies. Sprawdzanie obecności ciasteczka

Sprawdzenie czy połączenie przebiegło poprawnie if (mysqli_connect_errno()) { echo Błąd; Połączenie z bazą danych nie powiodło się.

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

Języki skryptowe - PHP. PHP i bazy danych. Paweł Kasprowski. pawel@kasprowski.pl. vl07

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

Bezpieczeństwo systemów komputerowych

Języki programowania wysokiego poziomu. PHP cz.3. Formularze

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Sesje i logowanie. 1. Wprowadzenie

Języki programowania wysokiego poziomu. Ćwiczenia

Zagrożenia trywialne. Zagrożenia bezpieczeństwa aplikacji internetowych. Parametry ukryte. Modyfikowanie parametrów wywołania

Informatyka I. Programowanie aplikacji bazodanowych w języku Java. Standard JDBC.

Wykład 5: PHP: praca z bazą danych MySQL

Drobne błędy w portalach WWW

Baza danych do przechowywania użytkowników

Fundacja Ośrodka KARTA z siedzibą w Warszawie, przy ul. Narbutta 29 ( Warszawa),

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

Aplikacje WWW. Wykład 13. Zagrożenia bezpieczeństwa aplikacji WWW. wykład prowadzi: Maciej Zakrzewicz. Zagrożenia bezpieczeństwa

6. Bezpieczeństwo przy współpracy z bazami danych

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

Internetowe bazy danych

Program szkolenia: Bezpieczny kod - podstawy

Zakres tematyczny dotyczący kursu PHP i MySQL - Podstawy pracy z dynamicznymi stronami internetowymi

Aplikacje WWW - laboratorium

SQL injection. Metody włamań do systemów komputerowych p. 1/13. Bogusław Kluge, Karina Łuksza, Ewa Makosa

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

PRACA INŻYNIERSKA IMPLEMENTACJA MOBILNEGO KLIENTA BANKU ZABEZPIECZONEGO TOKENEM

OWASP. The Open Web Application Security Project. OWASP Top rc1. Dziesięć najbardziej krytycznych zagrożeń w web aplikacjach

Bazy Danych i Usługi Sieciowe

Cookie Policy. 1. Informacje ogólne.

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Wykorzystywanie plików cookies

PHP: bazy danych, SQL, AJAX i JSON

Szczegółowy opis zamówienia:

Wykład 8. SQL praca z tabelami 5

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

Autor: Joanna Karwowska

0.1 Logowanie do serwisu

Pakiety podprogramów Dynamiczny SQL

Bezpieczeństwo aplikacji. internetowych. 2. Szkolenie dla administratorów stron internetowych hufców Śląskiej Chorągwi ZHP

Komunikator internetowy w C#

Pharming zjawisko i metody ochrony

Sprawozdanie nr 4. Ewa Wojtanowska

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Bazy danych i usługi sieciowe

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Podstawy technologii WWW

Języki programowania wysokiego poziomu. Forum

Aplikacja internetowa ebiling

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

11. Autoryzacja użytkowników

Plan. Stan sesji (1/2) Stan sesji (2/2) Stan sesji Tworzenie przycisku Integracja prostego formularza z raportem Tworzenie formularza z raportem

Sprawozdanie Laboratorium 4

INSTRUKCJA OBSŁUGI USTAWIEŃ DYNAMICZNIE PRZEDZIELANYCH ADRESÓW IP W URZĄDZENIACH SYSTEMU IP-PRO ORAZ REJESTRATORACH MY-DVR

Aplikacje WWW - laboratorium

Serwis realizuje funkcje pozyskiwania informacji o użytkownikach i ich zachowaniach w następujący sposób:

Internetowe bazy danych

Dokumentacja interfejsu HTTPD. Platforma BSMS.PL Instrukcja podłączenia po przez http

Aplikacja do zarządzania kontami bankowymi

Zakres treści Czas. 2 Określenie charakteru i tematyki strony. Rodzaje witryn. Projekt graficzny witryny. Opracowanie skryptów

Dostęp do baz danych z serwisu www - PHP. Wydział Fizyki i Informatyki Stosowanej Joanna Paszkowska, 4 rok FK

KONFIGURACJA PRZEGLĄDAREK. Poniższa konfiguracja dedykowana jest dla Bankowości Internetowej SGB

POLITYKA PRYWATNOŚCI ORAZ POLITYKA PLIKÓW COOKIES W Sowa finanse

BAZY DANYCH. Obsługa bazy z poziomu języka PHP. opracowanie: Michał Lech

Obowiązuje od wersji

Instrukcja logowania do systemu Rejestru Unii dla nowych użytkowników

Instalacja systemu zarządzania treścią (CMS): Joomla

POLITYKA PRYWATNOŚCI

Bezpieczeństwo systemów komputerowych

Spis wzorców. Działania użytkownika Strona 147 Obsługa większości Działań użytkownika za pomocą kodu JavaScript przy użyciu metod obsługi zdarzeń.

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki

Wprowadzenie do Internetu Zajęcia 5

Analiza skuteczności zabezpieczeń przed atakami na aplikacje Web

Aplikacje WWW. Krzysztof Ciebiera. 3 kwietnia 2014

Gatesms.eu Mobilne Rozwiązania dla biznesu

Instrukcja obsługi aplikacji MobileRaks 1.0

Dokumentacja interfejsu MySQL. Platforma BSMS.PL Instrukcja podłączenia po przez mysql

Podręcznik Integracji

Konsolidacja FP- Depozyty

Instrukcja pozyskania identyfikatora - UID

INTERNETOWE BAZY DANYCH materiały pomocnicze - wykład X

Programowanie w Ruby

Zajęcia 11 wykorzystanie MySQL w PHP

Dostęp do baz danych przy wykorzystaniu interfejsu ROracle i biblioteki Shiny

Silne uwierzytelnianie dla klienta instytucjonalnego

Transkrypt:

Bezpieczeństwo systemów komputerowych Zagrożenia dla aplikacji internetowych Aleksy Schubert (Marcin Peczarski) Instytut Informatyki Uniwersytetu Warszawskiego 15 grudnia 2015

Lista zagadnień Wstrzykiwanie kodu SQL (ang. SQL injection) Skrośny atak skryptowy, XSS (ang. cross-site scripting) Skrośne fałszowanie żądania, XSRF lub CSRF (ang. cross-site request forgery, wym. sea-surf ) Porywanie kliknięć (ang. clickjacking)

Zarys problemu Wszystkie dane wprowadzane przez użytkownika należy traktować jako niebezpieczne. W aplikacji działającej w oparciu o model klient-serwer: nie wolno polegać na sprawdzaniu poprawnośći danych po stronie klienta; agresor może wprowadzić złośliwe dane; agresor może napisać własnego klienta.

Wstrzykiwanie kodu SQL Po stronie klienta zaimplementowano formatkę do uwierzytelniania, zwracającą dwie zmienne: login identyfikator użytkownika, password hasło użytkownika. Identyfikatory i hasła użytkowników przechowywane są w bazie danych w tablicy client, która zawiera kolumny name i pwd. Po stronie serwera zaimplementowano skrypt, generujący zapytanie SQL: SELECT count(*) FROM client WHERE name= $login and pwd= $password ; Zapytanie zwraca wartość 1, gdy nazwa użytkownika i hasło są poprawne, a 0 w p.p.

Atak Jeśli agresor wprowadzi login=d or 1 = 1 password=d or 1 = 1 zostanie wygenerowane zapytanie SELECT count(*) FROM client WHERE name= d or 1 = 1 and pwd= d or 1 = 1 ; które zawsze zwraca wartość różną od zera. Agresor może znać identyfikator użytkownika i wprowadzić login=root ; # password=niepotrzebne wtedy zostanie wygenerowane zapytanie SELECT count(*) FROM client WHERE name= root ; które zwróci wartość 1.

Inny atak Agresor może też modyfikować bazę danych, wprowadzając login=d INSERT INTO client VALUES ( hacker, alamakota ); # password=niepotrzebne Wygenerowane zostanie zapytanie SELECT count(*) FROM client WHERE name= d INSERT INTO client VALUES ( hacker, alamakota ); które doda nowego użytkownika do systemu.

Remedium Dane wejściowe powinny podlegać ścisłej weryfikacji po stronie serwera, np. za pomocą wyrażeń regularnych: łatwo jest napisać wyrażenie regularne dla identyfikatora użytkownika, uniemożliwiające atak polegający na wstrzykiwaniu kodu SQL; trudno jest wymyślić rozsądne wyrażenie regularne dla hasła. Hasło powinno być przechowywane w postaci binarnego skrótu kryptograficznego: przed wykonaniem skrótu należy hasło posolić (ang. salt), czyli rozszerzyć go o wartość losową; traktowanie hasła jako wartości binarnej umożliwia stosowanie w nim dowolnych znaków i uniemożliwia atak polegający na wstrzykiwaniu kodu SQL. Zamiast skryptu generującego zapytanie SQL lepiej jest zastosować procedurę składowaną. Dostępy do bazy danych powinny odbywać się z jak najmniejszymi uprawnieniami.

Remedium Można pracowicie wyszukiwać w danych od użytkownika potencjalnie niebezpiecznych znaków i je eskejpować (ang. escape). Jeśli postać wszystkich zapytań jest znana, można zastosować mechanizm łączenia (ang. binding): $login = $_POST[ login ]; $password = $_POST[ password ]; $cnt = dbqueryparams("select count(*) FROM client WHERE name=$1 and pwd=$2", array($login, $password)); Treść zapytania i parametry są przekazywane osobno, co eliminuje potencjalne problemy powstające przy sklejaniu zapytania z fragmentów napisów.

Skrośny atak skryptowy Wykorzystuje zaufanie użytkownika do odwiedzanej strony. Wiele serwisów umożliwia dodawanie treści pochodzących od użytkowników, celem wyświetlenia innym użytkownikom. Agresor może umieścić na stronie jakiegoś serwisu odwołanie do innej strony lub skrypt, który wykona się w przeglądarce użytkownika, gdy ten będzie korzystał z tego serwisu. Umożliwia to wykonanie niepożądanej akcji lub kradzież ciasteczka (ang. cookie).

Zalecenia Należy filtrować treści pochodzące od użytkowników. Ciasteczka nie powinny być dostępne dla skryptów (znacznik httponly). Wymuszanie, aby jedynym dopuszczalnym źródłem skryptów, obrazków i stylów była konkretna domena. Blokowanie wykonywania skryptów, które są zagnieżdżone w treści strony. Blokowanie niebezpiecznych konstrukcji, które umożliwiają dynamiczne tworzenie kodu wykonywalnego z napisu.

Skrośne fałszowanie żądania Wykorzystuje zaufanie strony do użytkownika, który ją odwiedza. Użytkownik zalogowany do serwisu uruchamia spreparowany odnośnik pochodzący z innego źródła (np. ukryty w obrazku, zagnieżdżonej ramce), co powoduje wykonanie (przez przeglądarkę bez wiedzy użytkownika) w tym serwisie akcji, której użytkownik nigdy by nie wykonał.

Zalecenia Będąc zalogowanym do serwisu internetowego, należy unikać otwierania wszelkich innych stron. Należy wylogować się z serwisu, gdy skończy się z niego korzystać oraz unikać zapamiętywania sesji. Wymóg podawania jednorazowego hasła przy każdej newralgicznej akcji uniemożliwia agresorowi spreparowanie poprawnego żądania do serwera. Okres ważności zalogowania i dopuszczalny czas bezczynności powinny być możliwie krótkie. Do każdego formularza można dodawać ukryte pole z pseudolosową liczbą, która jest powiązana z sesją użytkownika i musi zostać przekazana wraz z żądaniem. Należy stosować metodę POST do żądań powodujących skutki uboczne, co jest jednym z zaleceń protokołu HTTP.

Porywanie kliknięć Agresor wysyła użytkownikowi stronę, która zawiera pozornie niegroźną treść, a w niewidocznej ramce znajdującej się na pierwszym planie ładuje atakowany serwis, do którego użytkownik ma większe uprawnienia niż agresor. Użytkownik musi być zalogowany do tego serwisu. Wszystkie kliknięcia wykonują się w serwisie, którego użytkownik nie widzi. Inna możliwość to podsunięcie użytkownikowi niewidocznej strony, która, gdy się na nią klika, wykonuje złośliwe operacje na komputerze użytkownika.

Zalecenia Serwisy internetowe powinny blokować możliwość wczytania ich w ramce i odpowiednio reagować (ang. frame busting).