Piątek z XSolve - Bezpieczne nagłówki HTTP

23
Bezpieczne nagłówki HTTP/HTTPS Adam Szaraniec Software Developer - XSolve

Transcript of Piątek z XSolve - Bezpieczne nagłówki HTTP

Page 1: Piątek z XSolve - Bezpieczne nagłówki HTTP

Bezpieczne nagłówki HTTP/HTTPS

Adam SzaraniecSoftware Developer - XSolve

Page 2: Piątek z XSolve - Bezpieczne nagłówki HTTP

1

AGENDA

❖ Wstęp i opis

❖ Wymuszanie bezpiecznego połączenia (HSTS, HPKP)

❖ Nagłówek CSP

❖ Nagłówek X-Frame-Options

❖ Nagłówek X-XSS-Protection

❖ Pytania?

Page 3: Piątek z XSolve - Bezpieczne nagłówki HTTP

Stack

przeglądarka

sieć

serwer

❖ Cross Site Scripting

❖ Cross Site Request Forgery

❖ Clickjacking

❖ Cookies

❖ Man in the middle

❖ DNS hjacking

❖ SQL injection

❖ Weak Access Control

❖ Session Injection

Page 4: Piątek z XSolve - Bezpieczne nagłówki HTTP

Man in the middle

PC RuterSwiatłowó

dISP Sieć Serwer

Page 5: Piątek z XSolve - Bezpieczne nagłówki HTTP

HTTP Strict Transport Security

Wymusza w przeglądarce klienta używanie tylko połączeń SSL.

Obrazki pochodzą z http://sekurak.pl

Page 6: Piątek z XSolve - Bezpieczne nagłówki HTTP

HTTP Strict Transport Security

Statystyki - Wsparcie przez przeglądarki❖ Globalne - 79%❖ Polska - 89%

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

includeSubDomains;

preload

Statystyki - użycie (httpsecurityreport.com)❖ HTTPS: 52% ❖ HSTS: 21%

Page 7: Piątek z XSolve - Bezpieczne nagłówki HTTP

HTTP Strict Transport Security

Możliwe wady:❖ TOFU trust-on-first-use,

Rozwiązanie❖ wartość preload, dodanie strony do https://hstspreload.appspot.com/

Debug: chrome://net-internals/#hsts

Data: https://chromium.googlesource.com/chromium/src/net/+/master/http/transport_security_state_static.json

Page 8: Piątek z XSolve - Bezpieczne nagłówki HTTP

HTTP Public Key Pinning

Public Key Pinning realizowany poprzez nagłówek protokołu HTTP pozwala na poinformowanie klienta (przeglądarki) o powiązaniu danego klucza publicznego z konkretnym serwerem (domeną).

Page 9: Piątek z XSolve - Bezpieczne nagłówki HTTP

Obrazki pochodzą z https://kryptosfera.pl

Page 10: Piątek z XSolve - Bezpieczne nagłówki HTTP

HTTP Public Key Pinning

❖ Certificate Revocation List (CRL) - Lista unieważnionych certyfikatów.

❖ The Online Certificate Status Protocol (OSCP) - Protokół internetowy używany w celu

uzyskania statusu unieważnienia certyfikatu cyfrowego X.509

Cofnięte certyfikaty:

❖ Comodo

❖ DigiNotar

Page 11: Piątek z XSolve - Bezpieczne nagłówki HTTP

HTTP Public Key Pinning

Statystyki - Wsparcie przez przeglądarki❖ Globalne - 56%❖ Polska - 76%❖ Brak wsparcia dla IE/Edge/Safari

Statystyki - użycie 0.4%

Public-Key-Pins: pin-sha256="d6qzRu9zOECxWltNs72z2ak"; max-age=259200 includeSubdomains; report-uri="https://example.net/pkp"

Page 12: Piątek z XSolve - Bezpieczne nagłówki HTTP

HTTP Public Key Pinning

Public-Key-Pins-Report-Only: (obecnie nie wspierane) - Nie blokuje dostępu do strony w razie

niezgodności kluczy, a jedynie wysyła raport pod wskazany adres.

Generowanie:openssl x509 -in certyfikat.pem -pubkey -noout| openssl rsa -pubin -outform der| openssl dgst -sha256 -binary| openssl enc -base64

Page 13: Piątek z XSolve - Bezpieczne nagłówki HTTP

HTTP Public Key Pinning

DEMO

https://secure-headers.herokuapp.com

Page 14: Piątek z XSolve - Bezpieczne nagłówki HTTP

Content Security Policy

Content Security Policy pozwala na zdefiniowanie, skąd mogą pochodzić dodatkowe zasoby, z których korzysta aplikacja www (pliki zewnętrzne JavaScript czy CSS, obrazki i inne elementy multimedialne). Dzięki temu minimalizuje możliwości ataku XSS.

CSP działa na zasadzie whitelist’y. Wszystkie nie pasujące do polityki zasoby będą przez przeglądarkę odrzucone jako niedozwolone, a sama przeglądarka zgłosi błąd naruszenia reguł polityki.

Page 15: Piątek z XSolve - Bezpieczne nagłówki HTTP

Content Security PolicyDyrektywa Przykładowe wartości Opis

default-src 'self' cdn.example.com Domyślna polityka ładowania zasobów.Ciąg wskazujący na konkretne URI, z których skrypty mogą zostać uruchomione. Ciąg może zawierać dowolną ilość adresów. Można używać ‘*’ określającego dowolną wartość w miejscu, gdzie został on zastosowany. Może to być: protokół, nazwa domenowa, subdomena czy port.

Możliwe jest tez użycie ‚self’. Słowo to wskazuje na możliwość wykonywania wszystkich skryptów JavaScript pochodzących z dokładnie tej samej domeny, z której pochodzi wywołujący dokument.

script-src, style-src, img-src, font-src, media-src

'self' js.example.com Definiuje reguły dla JavaScript, styli css, obrazków, fontów, audio, video.

object-src 'self' Definiuje reguły dla <object>, <embed>, <applet>.

child-src 'self' Definiuje reguły dla <frame>,<iframe> (Zapobiega clickjacking)

form-action 'self' Definiuje reguły dla form action

report-uri /report/csp Adres pod który wysyłany jest raport w przypadku pogwałcenia polityki.

Page 16: Piątek z XSolve - Bezpieczne nagłówki HTTP

Content Security Policy

Możliwe specjalne wartości dyrektywy:

❖ ‘self’ - pozwala na ładowanie zasobów z tego samego źródła (protokół + host + port)❖ ‘none’ - blokuje ładowanie zasobów z wszystkich źródeł❖ * - wieloznacznik (wildcard)❖ data - pozwala na ładowanie zasobów używających np data:image/png;base6❖ https: - pozwala na ładowanie zasobów z wszystkich domen używajcych protokołu https❖ 'unsafe-inline' - zezwala na ładowanie elementów ‘inline’ np atrybutu onclick, lub tagu script❖ 'unsafe-eval' - zezwala na dynamiczne wykonywanie kodu ( eval() )

Page 17: Piątek z XSolve - Bezpieczne nagłówki HTTP

Content Security Policy

Content-Security-Policy: default-src 'self';

img-src *;

media-src media1.com media2.com;

script-src 'self' 'unsafe-inline' userscripts.example.com;

report-uri="https://example.net/csp-report"

Możliwe jest użycie nagłówka Content-Security-Policy-Report-Only w celu raportowania nadużyć (elementy nie są blokowane) - przydane z początku wdrażania nagłówka, aby nie blokować zasobów nie uwzględnionych w liście.

Page 18: Piątek z XSolve - Bezpieczne nagłówki HTTP

Content Security Policy

Wykonywanie skryptów inline (bez uzywania używania ‘unsafe-inline’):

❖ nounce<script nounce="randomGenChars">alert('hello word');</script>Content-Security-Policy: script-src 'self' 'nounce-randomGenChars'

❖ hash<script>alert('hello word');</script>Content-Security-Policy: script-src 'self' 'sha256-qznLcsROx4GACP2zCzC='

base64_encode(hash("sha256", alert("hello word")))

Page 19: Piątek z XSolve - Bezpieczne nagłówki HTTP

Content Security Policy

Wsparcie przeglądarek :

❖ Globalne - 89%

❖ Polska - 92%

❖ Dla IE nagłówek w postaci X-Content-Security-Policy.

Narzędzia:

● https://report-uri.io - Pozwala wyklikać porządane wartości nagłówka. Pozwana na analizę raportów.

● https://securityheaders.io - Nadrzędzie analizujące nagłówki HTTP i na ich podstawie generuje raport związany z bezpieczeństwem aplikacji

Page 20: Piątek z XSolve - Bezpieczne nagłówki HTTP

Content Security Policy

Przykładowy payload

{

"csp-report": {

"document-uri": "http://example.org/page.html",

"referrer": "http://evil.example.com/haxor.html",

"blocked-uri": "http://evil.example.com/image.png",

"violated-directive": "default-src 'self'",

"effective-directive": "img-src",

"original-policy": "default-src 'self'; report-uri http://example.org/csp-report"

}

}

Page 21: Piątek z XSolve - Bezpieczne nagłówki HTTP

X-Frame-Options

X-Frame-Options służy do wskazania przeglądarce czy powinna być w stanie wyświetlać zawartość strony w ramce. (Przestarzały!!)

Możliwe opcje:❖ Deny❖ ALLOW-FROM uri❖ SAMEORIGIN

Mniejszy priorytet niż CSP.Warto używać jako fall-back ponieważ jest wpierany przez starsze przeglądraki.

Page 22: Piątek z XSolve - Bezpieczne nagłówki HTTP

X-XSS-Protection

X-XSS-Protection wykrywa ataki typu XSS i je blokuje. (IE >=8)

X-XSS-Protection: 1 mode=block

Większość aktualnych przeglądarek ma włączony filtr XSS domyślnie.

Filtr jest mało skuteczny, a jako metodę obrony przed XSS powinno się używać filtrowania i 'escapowania' danych pochodzących z nieznanych źródeł.

Page 23: Piątek z XSolve - Bezpieczne nagłówki HTTP

Pytania?