Adam Szaraniec, Software Developer w XSolve, w prezentacji na temat nagłówków zwiększających poziom bezpieczeństwa aplikacji WWW.
Adam omawia nagłówki umożliwiające wymuszenie bezpiecznego połączenia między klientem (przeglądarką) a serwerem oraz nagłówek CSP pomagający zabezpieczyć się przed atakiem XSS.
2. 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?
3. 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
4. Man in the middle
PC Ruter
Swiatłowó
d
ISP Sieć Serwer
5. HTTP Strict Transport Security
Wymusza w przeglądarce klienta używanie tylko połączeń SSL.
Obrazki pochodzą z http://sekurak.pl
7. 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
8. 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ą).
10. 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
11. 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"
12. 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
13. HTTP Public Key Pinning
DEMO
https://secure-headers.herokuapp.com
14. 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.
15. Content Security Policy
Dyrektywa 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
16. 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() )
17. 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.
19. 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
21. 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.
22. 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ł.