6. |
HTTP bir kaynaktan dağıtılan ve ortak kullanıma açık olan hiperortam
(hypermedia) bilgi sistemleri için uygulama seviyesinde bir iletişim
protokolüdür.
(H)yper (T)ext (T)ransfer (P)rotocol
Http Security Headers I 6
8. |
• Farklı kaynaklar birbirinden izole şekilde çalıştırılmalıdır
• Same origin : Aynı protokol + aynı host + aynı port
Same-Origin Politikası
• Same-Origin
12. |
• Browser tarafından hangi adresten, hangi tipte kaynağın yüklenip,
çalıştırılabileceğini belirlememizi sağlayan bir W3C standardıdır.
Content-Security-Policy 1.0
Http Security Headers I 12
Content-Security-Policy : W3C standartı olarak belirlenen başlıktır,
• Chrome versiyon 25+,
• Firefox versiyon 23+,
• Opera versiyon 19+
• Safari 7+
• Microsoft Edge 12 build 10240+ tarafından desteklenmektedir.
X-Content-Security-Policy :
• Internet Explorer 10+,
• Firefox 4+ sonrası tarafından desteklenmektedir.
X-WebKit-CSP :
• Chrome versiyon 14-25,
• Safari 6+ tarafından desteklenmektedir.
13. |
• Desteklenen direktifler;
– default-src : Kaynağın tipi belirtilmedikçe, varsayılan olarak kullanılacak direktiftir. (fallback),
– script-src : Hangi script’in çalıştırılabileceğini belirtir,
– object-src : Pluginlerin nereden yüklenebileceğini belirtir, (<object>, <embed> ya da <applet>)
– style-src : CSS dosyalarının nereden yüklenebileceğini belirtir,
– img-src : İmaj dosyalarının nereden yüklenebileceğini belirtir,
– media-src : Video ve ses dosyalarının nereden yüklenebileceğini belirtir, (<audio>, <video>)
– font-src : Font dosyalarının nereden yüklenebileceğini belirtir,
– connect-src : Scriptler aracılığıyla hangi URI’lerin yüklenebileceğini belirtir,
– form-action : Hangi URI’lerin form elementlerinde action olarak tanımlanabileceğini belirtir,
– sandbox : Kaynağa web tarayıcı tarafından uygulanması istenen HTML sandbox politikası belirtir, (same-origin politikası
uygulanması, pop-up, plugin, script engellenmesi)
– plugin-types : çalışıtırılabilir plug-in tiplerini belirler,
– reflected-xss : Kullanıcının web tarayıcısındaki kendi XSS korumasını aktive etmesini isteyebilir, daha sonra göreceğimiz
standard’ın parçası olmayan X-XSS-Protection headerının eşdeğeridir.
– report-uri : Politika uyumsuzluklarının bildirileceği URI belirlenir.
Content-Security-Policy 1.0 (cont.)
Http Security Headers I 13
14. |
CSPHeader Örnek;
Content-Security-Policy:
// Varsayılan kaynak değerini «none» yaparak, olası hatalı configürasyonların önüne geçiyoruz
default-src none;
// «self» ile Scriptlerin kendi domaininden geldiği sürece çalıştırılabileceğini belirtiyoruz
(Inline javascript çalıştırılmasına, Eval() fonksiyonuna ve Google analytics’e izin vermektedir)
script-src self unsafe-inline unsafe-eval https://ssl.google-analytics.com;
// Pluginlerin yüklenebileceği adresleri belirliyoruz
object-src self;
// CSS’lerin çalışma politikasını belirliyoruz
style-src self;
// İmajların çalışma politikasını belirliyoruz
img-src self;
// Form action’larının çalışma politikasını belirliyoruz
form-action self;
// Ses ve video dosyalarının çalışma politikasını belirliyoruz
media-src self;
// Font’ların çalışma politikasını belirliyoruz
font-src self;
// Scriptlerin bağlanabileceği adres politikasını belirliyoruz
connect-src self;
// Çalıştırılabilir plugin tiplerini belirliyoruz
plugin-types application/pdf application/x-shockwave-flash;
// Web tarayıcını kendi XSS korumasını aktive etmesini sağlıyoruz
reflected-xss block;
Content-Security-Policy 1.0 (cont.)
Http Security Headers I 14
16. |
CSP 1.0’da tek tek hangi scriptlerin çalıştırılabileceği seçilememekteydi. Bu durum çoğu zaman yol açtığı problemler
nedeniyle inline scriptlere genel olarak izin verilmesine ve istenilen güvenlik seviyesinin sağlanamamasına neden olmaktaydı.
Content-Security-Policy 2.0
Http Security Headers I 16
CSP 2.0 Nonce kullanımı;
Content-Security-Policy: default-src 'self';
script-src 'self' https://example.com 'nonce-$RANDOM'
Web Tarayıcıya gelen header değeri;
Content-Security-Policy: default-src 'self';
script-src 'self' https://example.com 'nonce-Nc3n83cnSAd3wc3Sasdfn939hc3'
<script>
alert("Blocked because the policy doesn’t have 'unsafe-inline'.")
</script>
<script nonce="EDNnf03nceIOfn39fn3e9h3sdfa">
alert("Still blocked because nonce is wrong.")
</script>
<script nonce="Nc3n83cnSAd3wc3Sasdfn939hc3">
alert("Allowed because nonce is valid.")
</script>
<script src="https://example.com/allowed-because-of-src.js"></script>
<script nonce="EDNnf03nceIOfn39fn3e9h3sdfa"
src="https://elsewhere.com/blocked-because-nonce-is-wrong.js"></script>
<script nonce="Nc3n83cnSAd3wc3Sasdfn939hc3"
src="https://elsewhere.com/allowed-because-nonce-is-valid.js"></script>
Script örnekleri;
19. |
• Web tarayıcının kendi XSS (Cross-site-scripting) atak korumasını devreye sokar
• Reflected XSS saldırılarına karşın, browser tarafından pattern matching yapılarak, XSS saldırıları
tespit edilmeye çalışılmaktadır.
• x-xss-protection 1 mode=block
Normalde XSS payloadı tespit ettiğinde, yalnızca ilgili payloadı etkisiz hale getirir ancak block
modda çalıştırıldığında tüm sayfadaki scriptlerin çalıştırılmasını durdurur.
• CSP reflected-xss direktifi ile aynı işleve sahip
• Tarayıcı desteği;
– Internet Explorer 8+ (Internet, Trusted, Restricted güvenlik alanlarında varsayılan değer
olarak aktif, Local Intranet güvenlik alanındaki siteler manuel olarak aktive etmelidir.
–Chrome 4+ varsayılan olarak aktiftir.
X-XSS-Protection
Http Security Headers I 19
20. |
• Clickjacking / UI Redress saldırılarına karşı koruma sağlar.
• Click + Hijacking = Clickjacking
X-Frame-Options
Http Security Headers I 20
• Same origin : Hem iFrame hem de web sayfası aynı domaindeyse izin verir.
• Deny : Web sayfasının hiçbir şekilde bir iFrame içersinde gösterimine izin vermez.
• Allow from : Yalnızca izin verilen domainlerde iFrame içerisinde gösterime izin verir.
23. |
• Web tarayıcının HTTP ile iletişim kurmasını engeller, yalnızca HTTPS protokolü ile iletişime izin verir.
• Web Tarayıcı HTTP’ye gelen istekleri otomatik olarak HTTPS’ye çevirir. Böylece sitede unutulan HTTP
bağlantıları olsa bile kullanımını engeller.
• Man-In-The-Middle saldırganı kendi ürettiği sertifikayı kurbana kabul ettirse dahi, HSTS başlığı gören
web tarayıcısı kullanıcının siteye bağlanması engelleyecektir.
• Örnek kullanım;
–Strict-Transport-Security: max-age=3153600
En basit kullanım şeklidir
–Strict-Transport-Security: max-age=3153600; includeSubDomains
Alt domainlere de etki eder
–Strict-Transport-Security: max-age=3153600; includeSubDomains; preload
«Preload» listesindedir.
HTTP Strict-Transport-Security
Http Security Headers I 23
24. |
• «Preload» listesi ile web uygulamanız Web Tarayıcılara HTTPS Only olarak hard-coded
şekilde girer. Liste Chrome tarafından yönetilmektedir. (https://hstspreload.appspot.com)
HTTP Strict-Transport-Security (cont.)
FootNote Http Security Headers I 24
Gereksinimler;
1.Geçerli bir sertifikaya sahip olun
2.Tüm HTTP Trafiğini HTTPS’ye redirect edin
3.Tüm alt domainleri HTTPS’ye çevirin, (DNS kaydında varsa www altdomaini dahil)
4.Ana domainde HSTS başlığını bulundurun:
•Geçerlilik tarihi en az 18 hafta olmalı (10886400 saniye).
• «includeSubdomains» belirteci bulunmalıdır
• «preload» belirteci bulunmalıdır.
• Sayfanızdan dışarıya redirect yönlendirmeleri varsa, ilgili redirect sayfaları için de
(yönlendirme yaptığınız sayfalar değil) HSTS başlığı bulunmalıdır.
25. |
• Set-cookie $RANDOM;
–Temel olarak Kullanıcının sunucu tarafından tanınması amacıyla kullanılmaktadır.
• Set-cookie $RANDOM; HttpOnly;
– Cookie (çerez) değerinin yalnızca HTTP ile iletilmesine izin verir, Javascript, Flash vb. ile cookie
değerine erişim sağlanamaz.
–Cookie deperinin XSS vb. saldırılarla çalınmasını güçleştirir.
• Set-cookie $RANDOM; HttpOnly; Secure;
–Cookie değerinin yalnızca HTTPS üzerinden, güvenli kanallar ile iletilmesini sağlamaktadır.
Set-Cookie
Http Security Headers I 25
26. |
• MIME content-sniffing ataklarına karşı koruma sağlar. Internet Explorer 7 ve öncesinde zafiyet
bulunmaktadır.
• Bu ataklar kullanıcının web uygulamasına imaj, doküman vb. dosya yükleyebildiği, diğer
kullanıcıların da bu dosyalara erişebildiği durumlarda kullanılabilmektedir.
• Content Sniffing : Web tarayıcı byte kod analizi ile yüklenen dosyanın tipini bulur. Uygun bir dosyayı
bulduğunda da sunucunun ilettiğinden bağımsız olarak, kendi anladığı formatta göstermeye çalışır
• Saldırı adımları;
–Kötü niyetli birisi GIF dosyasının içerisine HTML kodu koyarak, bunu web uygulamasına yükler
–GIF dosyasını görüntüleyen diğer kullanıcılar, web tarayıcının GIF dosyasına «content sniffing»
yaparak, içerisinde HTML olduğunu anlaması nedeniyle, kötü niyetli HTML’i istemeden çalıştırır.
• Örnek Kullanım : X-Content-Type-Options: nosniff
X-Content-Type-Options
Http Security Headers I 26
27. |
• Web sunucusundan indirilen bir dosyaya web tarayacı tarafından nasıl davranılacağı belirlenir.
• X-Download-Options: noopen olarak kullanılması durumunda tarayıcı dosyayı download etmekten
başka alternatif sunmaz.
• HTML olarak yüklenen dosyalar Internet Explorer ile «save» yerine «open» edildiğinde, o sitenin
cookie değerlerine erişebilmektedir.
X-Download-Options
FootNote Presentaion Title I 7
X-Download-Options X-Download-Options: noopen
28. |
• Adobe Flash ve Acrobat Reader programlarının web sitesi üzerinde hangi kaynaklara erişebileceğini
kısıtlamak için kullanılır.
• Örnek kullanım;
–X-Permitted-Cross-Domain-Policies : none
Cross-domain erişime izin verilmez.
–X-Permitted-Cross-Domain-Policies : master-only
Yalnızca ilgili domaine ait cross-domain.xml’in okunmasına izin verecektir.
X-Permitted-Cross-Domain-Policies
Http Security Headers I 28
<?xml version="1.0" encoding="UTF-8"?>
<cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.adobe.com/xml/schemas/PolicyFile.xsd">
<allow-access-from domain="twitter.com" />
<allow-access-from domain="api.twitter.com" />
<allow-access-from domain="search.twitter.com" />
<allow-access-from domain="static.twitter.com" />
<site-control permitted-cross-domain-policies="master-only"/>
<allow-http-request-headers-from domain="*.twitter.com" headers="*" secure="true"/>
</cross-domain-policy>
• Twitter cross-domain.xml
29. |
• Certificate Pinning : Sertifikanın istemci tarafından doğrulanması işlemidir.
• Man-In-The-Middle saldırılarına karşı, saldırgan sahte bir sertifika ile HTTPS trafiğini izlemek üzere
araya girmeyi başarsa dahi, istemci tarafında sertifika hash doğrulamasından geçirilmektedir.
• = Base64 (sha256(sertifika))
• Public-Key-Pins: max-age=3000;
pin-sha256="d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=";
• Tarayıcı desteği;
Public-Key-Pins
FootNote Presentaion Title I 7
31. | Http Security Headers I 31
Alexa Türkiye Top 500’den, Türkiye odaklı(*) Top 348 site
(*) Türkiye odaklı sitelerin hesaplanmasında, ilgili siteye gelen trafiğe göre, ilk 5’de Türkiye olanlar hesaplamaya dahil edilmiştir.
32. | Http Security Headers I 32
Alexa Türkiye Top 500’den, Türkiye odaklı(*) Top 348 site
Sektörel Dağılım
(*) Türkiye odaklı sitelerin hesaplanmasında, ilgili siteye gelen trafiğe göre, ilk 5’de Türkiye olanlar hesaplamaya dahil edilmiştir.
33. || Http Security Headers I 33
Daha Fazlası İçin
06
https://securityheaders.io/