Bezpieczne nagłówki HTTP/HTTPS Adam Szaraniec Software Developer - XSolve
Bezpieczne nagłówki HTTP/HTTPS
Adam SzaraniecSoftware Developer - XSolve
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?
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
Man in the middle
PC RuterSwiatłowó
dISP Sieć Serwer
HTTP Strict Transport Security
Wymusza w przeglądarce klienta używanie tylko połączeń SSL.
Obrazki pochodzą z http://sekurak.pl
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%
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
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ą).
Obrazki pochodzą z https://kryptosfera.pl
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
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"
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
HTTP Public Key Pinning
DEMO
https://secure-headers.herokuapp.com
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.
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.
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() )
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.
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")))
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
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"
}
}
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.
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ł.
Pytania?