Üçüncü Parti Servislerde Barındırılan Web Kaynaklarının Subresource Integrity İle Doğrulanması
Bu makalede Subresource Integrity (SRI)'nin ne olduğu, nasıl çalıştığı ve Content Delivery Networks (CDNs) gibi üçüncü parti servislerin kullanımının güvenliği konusunda geliştiricilere ne yararlar sağladığı anlatılmıştır.
Subresource Integrity (SRI), 23 Haziran 2016’da World Wide Web Consortium (W3C) tarafından bir W3C tavsiyesi olarak duyurulmuştu.
Aynı gün biz de otomatikleştirilmiş web uygulaması güvenlik tarayıcımıza ait SRI için bazı yeni web güvenlik kontrollerinin duyurusunu yapmıştık.
Subresource Integrity Nedir?
SRI, web uygulama geliştiricilerine, Content Delivery Networks (CDN) gibi üçüncü parti servislerde barındırılan kaynakların herhangi bir beklenmeyen modifikasyon olmadan dağıtıldığını garanti altına alma fırsatı sunan bir metottur.
W3C, kaynakların üçüncü parti bir servisten yüklenmesi halinde uygulanacak en iyi pratik olarak SRI’yı tavsiye etmektedir.
SRI Nasıl Çalışır?
SRI, hash karşılaştırmalarını kullanarak çalışmaktadır. Web sunucusunda barındırılan kaynakların hash değeriyle üçüncü parti bir serviste barındırılan kaynakların hash değerlerini karşılaştırır.
Neden SRI Kullanılır?
Birçok kurum-kuruluş, web sitelerinin performansını artırmak için farklı kaynakları farklı sunucularda barındırma yolunu tercih ederler. Örneğin scriptler, CSS dosyaları ve imajlar genellikle CDN’lerde tutulur.
Fakat bunu yaparak, CDN ya da diğer üçüncü parti servislere açıkça itimat etmiş olurlar. Bu yüzden CDN hacklendiğinde ya da DNS hijacking saldırısına maruz kalındığında aynı zamanda kendi web uygulamaları da hacklenebilir. Böyle bir durumda saldırgan, CDN servisinde barındırılan ve bir Cross Site Scripting (XSS) zafiyetine yol açabilecek olan bir script dosyasının içeriğini değiştirme fırsatı elde edecektir.
Dolayısıyla SRI’yı devreye sokarak web uygulamanızın güçlendirilmiş bir dosyayı işaret ettiğinden ve dosya değiştirilse bile web tarayıcınızın bu dosyayı yüklemeyip saldırının başarısız olacağından emin olabilirsiniz.
Can I Use sitesini kullanarak web tarayıcınızın Subresource Integrity’i destekleyip desteklemediğini öğrenebilirsiniz.
HTTPS Neden Yeterli Değildir?
HTTPS, kullanıcının web tarayıcısı ve web sunucusu arasındaki bağlantının şifrelenmesini sağlamak amacıyla kullanılır. Bu nedenle üçüncü parti bir sunucu ya da hizmette bulunan içerik zararlı kodlarla kurcalanabilir ve her şeye rağmen içerik, bağlantının şifreli olup olmamasından bağımsız bir şekilde kullanıcıya sunulmaya devam eder.
Netsparker Subresource Integrity Güvenlik Kontrolleri
Web sitenizi Netsparker web zafiyeti tarayıcısıyla tarattığınızda SRI’nın implemente edilip edilmediğinin kontrolü de sağlanacaktır.
Eğer SRI implemente edilmişse, Netsparker ayrıca geçersiz hash’lerin kontrolünü de yapacaktır. Bundan dolayı Netsparker, aşağıdaki ekran görüntüsünde de görüldüğü gibi hashlerle alakalı bir uyumsuzluk raporlarsa, harici kaynağın bir tehlike içerdiğini anlayabiliriz.
Örnek: Subresource Integrity’i İmplemente Etme
Integrity (bütünlük) HTML özniteliğinin formatı şöyledir:
integrity=”[hash algoritması]-[base64 ile encode edilmiş kriptolu hash değeri]
Hash algoritması olarak sha256, sha384 ya da sha512 kullanılabilir. Bu sebeple SRI kontrollerini aktif etmek için aşağıdaki örnekte gösterildiği gibi Integrity HTML özniteliğini script etiketine eklemelisiniz:
<script src="https://code.jquery.com/jquery-2.1.4.min.js" integrity="sha384-R4/ztc4ZlRqWjqIuvf6RX5yb/v90qNGx6fS48N0tRxiGkqveZETq72KgDVJCp2TC" crossorigin="anonymous"></script>
SRI hakkında daha ayrıntılı bilgiler edinmek için W3C’nin SRI dokümanına göz atabilirsiniz.