Web sitesi güvenliğinin ölümcül günahları: yılın güvenlik açığı tarayıcı istatistiklerinden öğrendiklerimiz

Yaklaşık bir yıl önce DataLine olarak biz başlattık hizmet BT uygulamalarındaki güvenlik açıklarını aramak ve analiz etmek. Hizmet, çalışmasıyla ilgili Qualys bulut çözümüne dayanmaktadır. biz zaten söyledik. Çözümle çalıştığımız bir yıl boyunca farklı siteler için 291 tarama gerçekleştirdik ve web uygulamalarındaki yaygın güvenlik açıklarına ilişkin istatistikler topladık. 

Aşağıdaki makalede size web sitesi güvenliğindeki farklı kritiklik düzeylerinin arkasında tam olarak hangi açıkların gizlendiğini göstereceğim. Tarayıcının özellikle hangi güvenlik açıklarını bulduğunu, bunların neden ortaya çıkabileceğini ve kendinizi nasıl koruyacağınızı görelim. 

Web sitesi güvenliğinin ölümcül günahları: yılın güvenlik açığı tarayıcı istatistiklerinden öğrendiklerimiz

Qualys, tüm web uygulaması güvenlik açıklarını üç kritiklik düzeyine ayırır: düşük, orta ve yüksek. Dağılımın ciddiyetine göre bakıldığında her şeyin o kadar da kötü olmadığı görülüyor. Yüksek düzeyde kritikliğe sahip birkaç güvenlik açığı vardır ve çoğunlukla tümü kritik değildir: 

Web sitesi güvenliğinin ölümcül günahları: yılın güvenlik açığı tarayıcı istatistiklerinden öğrendiklerimiz

Ancak eleştirilmemiş olması zararsız olduğu anlamına gelmez. Ayrıca ciddi hasara da neden olabilirler. 

En önemli "kritik olmayan" güvenlik açıkları

  1. Karma içerik güvenlik açıkları.

    Web sitesi güvenliği standardı, şifrelemeyi destekleyen ve bilgileri müdahaleye karşı koruyan HTTPS protokolü aracılığıyla istemci ile sunucu arasında veri aktarımıdır. 

    Bazı siteler kullanıyor karma içerik: Bazı veriler güvenli olmayan HTTP protokolü aracılığıyla aktarılır. En sık bu şekilde aktarılır pasif içerik – yalnızca sitenin görünümünü etkileyen bilgiler: resimler, css stilleri. Ancak bazen bu şekilde bulaşır aktif içerik: sitenin davranışını kontrol eden komut dosyaları. Bu durumda, özel bir yazılım kullanarak, sunucudan gelen aktif içerikli bilgileri analiz edebilir, yanıtlarınızı anında değiştirebilir ve makinenin, yaratıcılarının amaçlamadığı şekilde çalışmasını sağlayabilirsiniz. 

    Tarayıcıların daha yeni sürümleri, kullanıcıları karışık içeriğe sahip sitelerin güvenli olmadığı konusunda uyarır ve içeriği engeller. Web sitesi geliştiricileri ayrıca konsolda tarayıcı uyarıları alır. Mesela şu şekilde görünüyor Firefox

    Web sitesi güvenliğinin ölümcül günahları: yılın güvenlik açığı tarayıcı istatistiklerinden öğrendiklerimiz

    Neden tehlikeli: Saldırganlar, kullanıcı bilgilerine müdahale etmek, komut dosyalarını değiştirmek ve onun adına siteye istek göndermek için güvenli olmayan bir protokol kullanır. Bir site ziyaretçisi veri girmemiş olsa bile bu onu korumaz. e-dolandırıcılık – hileli yöntemler kullanarak gizli bilgilerin elde edilmesi. Örneğin, bir komut dosyası kullanarak kullanıcıyı, tanıdık bir siteymiş gibi davranan, güvenli olmayan bir siteye yönlendirebilirsiniz. Bazı durumlarda, kötü amaçlı site orijinalinden bile daha iyi görünür ve kullanıcı formu kendisi doldurup gizli verileri gönderebilir. 

    Bir web geliştiricisinin hatırlaması gerekenler: Site yöneticisi SSL/TLS sertifikasını kurup yapılandırmış olsa bile insan hatası nedeniyle güvenlik açığı ortaya çıkabilir. Örneğin, sayfalardan birine göreceli bir bağlantı değil, http'den mutlak bir bağlantı koyarsanız ve ayrıca http'den https'ye yönlendirmeler ayarlamadıysanız. 

    Bir tarayıcı kullanarak bir sitedeki karışık içeriği tespit edebilirsiniz: sayfanın kaynak kodunu arayın, geliştirici konsolundaki bildirimleri okuyun. Ancak geliştiricinin kodla uzun süre ve sıkıcı bir şekilde uğraşması gerekecek. Otomatik analiz araçlarıyla süreci hızlandırabilirsiniz, örneğin: SSL kontrol, ücretsiz Lighthouse yazılımı veya ücretli yazılım Screaming Frog SEO Spider.

    Ayrıca güvenlik açığı, miras alınan eski kodla ilgili sorunlar nedeniyle de ortaya çıkabilir. Örneğin, bazı sayfalar eski bir şablon kullanılarak oluşturulmuşsa, bu, sitelerin https'ye geçişini hesaba katmaz.    

  2. "HTTPOnly" ve "safe" işaretlerini içermeyen çerezler.

    "HTTPOnly" özelliği, çerezlerin, saldırganların kullanıcı verilerini çalmak için kullandığı komut dosyaları tarafından işlenmesini önler. "Güvenli" bayrağı, çerezlerin açık metin olarak gönderilmesine izin vermez. İletişime yalnızca çerezi göndermek için güvenli HTTPS protokolü kullanıldığında izin verilecektir. 

    Her iki özellik de çerez özelliklerinde belirtilmiştir:

    Set-Cookie: Secure; HttpOnly

    Neden tehlikeli: Site geliştiricisi bu özellikleri belirtmediyse, bir saldırgan kullanıcının çerezdeki bilgilerini ele geçirebilir ve bundan yararlanabilir. Kimlik doğrulama ve yetkilendirme için çerezlerin kullanılması durumunda kullanıcının oturumunu ele geçirebilecek ve onun adına sitede işlemler gerçekleştirebilecektir. 

    Bir web geliştiricisinin hatırlaması gerekenler: Kural olarak popüler çerçevelerde bu nitelikler otomatik olarak ayarlanır. Ancak yine de web sunucusu yapılandırmasını kontrol edin ve bayrağı ayarlayın: Set-Cookie HttpOnly; Güvenli.

    Bu durumda “HTTPOnly” özelliği, çerezleri kendi JavaScript'iniz için görünmez hale getirecektir.  

  3. Yol Tabanlı Güvenlik Açıkları.

    Tarayıcı, potansiyel olarak gizli bilgiler içeren, herkese açık bir dosya veya web sitesi dizini bulduğunda böyle bir güvenlik açığını bildirir. Örneğin, bireysel sistem yapılandırma dosyalarını veya tüm dosya sistemine erişimi algılar. Bu durum sitede erişim haklarının yanlış ayarlanması durumunda mümkündür.

    Neden tehlikeli: Dosya sistemi "dışarı çıkarsa", bir saldırgan işletim sistemi arayüzüne girebilir ve açık metin olarak saklanıyorsa parola içeren klasörleri bulmaya çalışabilir (bunu yapmayın!). Veya şifre karmalarını çalabilir ve şifreyi kaba kuvvetle çalıştırabilir, ayrıca sistemdeki ayrıcalıkları yükselterek altyapının derinliklerine inmeyi deneyebilirsiniz.  

    Bir web geliştiricisinin hatırlaması gerekenler: Erişim haklarını unutmayın ve platformu, web sunucusunu, web uygulamasını web dizininden "kaçmanın" imkansız olacağı şekilde yapılandırmayın.

  4. Otomatik doldurma etkinken hassas verilerin girilmesine yönelik formlar.

    Bir kullanıcı web sitelerindeki formları sık sık dolduruyorsa, tarayıcısı bu bilgileri otomatik doldurma özelliğini kullanarak saklar. 

    Web sitelerindeki formlar, şifreler veya kredi kartı numaraları gibi hassas bilgilerin yer aldığı alanlar içerebilir. Bu tür alanlar için sitenin kendisinde form otomatik doldurma işlevini devre dışı bırakmaya değer. 

    Neden tehlikeli: Kullanıcının tarayıcısı hassas bilgiler saklıyorsa, bir saldırgan daha sonra örneğin kimlik avı yoluyla bu bilgileri ele geçirebilir. Aslında bu nüansı unutan bir web geliştiricisi, kullanıcılarına tuzak kuruyor. 

    Bir web geliştiricisinin hatırlaması gerekenler: Bu durumda klasik bir çatışmayla karşı karşıyayız: kolaylık ve güvenlik. Bir web geliştiricisi kullanıcı deneyimini düşünüyorsa bilinçli olarak otomatik tamamlamayı seçebilir. Örneğin, takip etmek önemliyse Web İçeriği Erişilebilirlik Yönergeleri – engelli kullanıcılar için içeriğin erişilebilirliğine ilişkin öneriler. 

    Çoğu tarayıcı için, otomatik tamamlamayı autocompete="off" özelliğiyle devre dışı bırakabilirsiniz, örneğin:

     <body>
        <form action="/tr/form/submit" method="get" autocomplete="off">
          <div>
            <input type="text" placeholder="First Name">
          </div>
          <div>
            <input type="text" id="lname" placeholder="Last Name" autocomplete="on">
          </div>
          <div>
            <input type="number" placeholder="Credit card number">
          </div>
          <input type="submit">
        </form>
      </body>

    Ancak Chrome'da çalışmaz. Bu, JavaScript kullanılarak aşılır, tarifin bir çeşidi bulunabilir burada

  5. X-Frame-Options başlığı site kodunda ayarlanmamış. 

    Bu başlık, çerçeve, iframe, yerleştirme veya nesne etiketlerini etkiler. Onun yardımıyla sitenizi bir çerçeveye yerleştirmeyi tamamen yasaklayabilirsiniz. Bunu yapmak için X-Frame-Options değerini belirtmeniz gerekir: reddet. Veya X-Frame-Options: Sameorigin seçeneğini belirleyebilirsiniz, ardından iframe'e yerleştirme yalnızca alanınızda mümkün olacaktır.

    Neden tehlikeli: Böyle bir başlığın bulunmaması kötü amaçlı sitelerde kullanılabilir. tıklama hırsızlığı. Saldırgan bu saldırı için butonların üstünde şeffaf bir çerçeve oluşturarak kullanıcıyı kandırıyor. Örneğin: dolandırıcılar bir web sitesindeki sosyal ağ sayfalarını çerçevelerler. Kullanıcı bu sitede bir butona tıkladığını zanneder. Bunun yerine tıklamaya müdahale ediliyor ve kullanıcının isteği, aktif oturumun olduğu sosyal ağa gönderiliyor. Saldırganlar bu şekilde kullanıcı adına spam gönderir veya abone ve beğeni kazanırlar. 

    Bu özelliği devre dışı bırakmazsanız, bir saldırgan uygulama düğmenizi kötü amaçlı bir siteye yerleştirebilir. Tavsiye programınızla veya kullanıcılarınızla ilgilenebilir.  

    Bir web geliştiricisinin hatırlaması gerekenler: Web sunucusunda veya yük dengeleyicide X-Frame-Options'ın çakışan bir değere ayarlanması durumunda güvenlik açığı oluşabilir. Bu durumda, sunucu ve dengeleyici, arka uç koduyla karşılaştırıldığında daha yüksek önceliğe sahip oldukları için başlığı yeniden yazacaktır.  

    X-Frame-Options başlığının Denk ve SameOrigin değerleri, Yandex web görüntüleyicinin çalışmasına müdahale edecektir. Web görüntüleyici için iframe kullanımına izin vermek için ayarlara ayrı bir kural yazmanız gerekir. Örneğin, nginx için bunu şu şekilde yapılandırabilirsiniz:

    http{
    ...
     map $http_referer $frame_options {
     "~webvisor.com" "ALLOW-FROM http://webvisor.com";
     default "SAMEORIGIN";
     }
     add_header X-Frame-Options $frame_options;
    ...
    }
    
    

  6. PRSSI (Yolla ilgili stil sayfası içe aktarma) güvenlik açıkları.  

    Bu, sitenin stilindeki bir güvenlik açığıdır. Stil dosyalarına erişmek için href="/tr/somefolder/styles.css/" gibi göreceli bağlantılar kullanıldığında ortaya çıkar. Saldırgan, kullanıcıyı kötü amaçlı bir sayfaya yönlendirmenin bir yolunu bulursa bundan yararlanacaktır. Sayfa, URL'sine göreceli bir bağlantı ekleyecek ve bir stil çağrısını simüle edecektir. Bir stil kisvesi altında kötü amaçlı eylemler gerçekleştirebilecek badsite.ru/…/somefolder/styles.css/ gibi bir istek alacaksınız. 

    Neden tehlikeli: Bir dolandırıcı başka bir güvenlik açığı bulursa bu güvenlik açığından yararlanabilir. Sonuç olarak çerezlerden veya tokenlardan kullanıcı verilerinin çalınması mümkündür.

    Bir web geliştiricisinin hatırlaması gerekenler: X-Content-Type-Options başlığını şu şekilde ayarlayın: nosniff. Bu durumda tarayıcı, stiller için içerik türünü kontrol edecektir. Tür metin/css dışındaysa tarayıcı isteği engelleyecektir.

Kritik güvenlik açıkları

  1. Şifre alanına sahip bir sayfa, sunucudan güvenli olmayan bir kanal üzerinden iletilir (şifre alanlarını içeren HTML formu HTTP üzerinden sunulur).

    Sunucunun şifrelenmemiş bir kanal üzerinden verdiği yanıt, "Ortadaki Adam" saldırılarına karşı savunmasızdır. Bir saldırgan trafiği engelleyebilir ve sayfa sunucudan istemciye giderken kendisini istemci ile sunucu arasına sıkıştırabilir. 

    Neden tehlikeli: Dolandırıcı sayfayı değiştirebilecek ve kullanıcıya gizli veriler için saldırganın sunucusuna gidecek bir form gönderebilecektir. 

    Bir web geliştiricisinin hatırlaması gerekenler: Bazı siteler kullanıcılara e-posta/telefon yoluyla şifre yerine tek kullanımlık bir kod gönderir. Bu durumda güvenlik açığı o kadar kritik değil ancak mekanizma kullanıcıların hayatını zorlaştıracak.

  2. Kullanıcı adı ve şifre içeren bir formun güvenli olmayan bir kanal üzerinden gönderilmesi (Giriş Formu HTTPS Üzerinden Gönderilemiyor).

    Bu durumda kullanıcıdan sunucuya şifrelenmemiş bir kanal üzerinden kullanıcı adı ve şifre içeren bir form gönderilir.

    Neden tehlikeli: Önceki durumdan farklı olarak bu zaten kritik bir güvenlik açığıdır. Hassas verilere müdahale etmek daha kolaydır çünkü bunu yapmak için kod yazmanıza bile gerek yoktur. 

  3. Bilinen güvenlik açıklarına sahip JavaScript kitaplıklarını kullanma.

    Tarama sırasında en çok kullanılan kütüphane, geniş sürüm sayısıyla jQuery oldu. Her sürümde en az bir veya daha fazla bilinen güvenlik açığı bulunur. Etki, güvenlik açığının niteliğine bağlı olarak çok farklı olabilir.

    Neden tehlikeli: Bilinen güvenlik açıklarına yönelik istismarlar vardır, örneğin:

    Web sitesi güvenliğinin ölümcül günahları: yılın güvenlik açığı tarayıcı istatistiklerinden öğrendiklerimiz

    Bir web geliştiricisinin hatırlaması gerekenler: Düzenli olarak döngüye dönün: bilinen güvenlik açıklarını arayın - düzeltin - kontrol edin. Eski kitaplıkları, örneğin eski tarayıcıları desteklemek veya paradan tasarruf etmek için bilinçli olarak kullanıyorsanız, bilinen bir güvenlik açığını düzeltme fırsatını arayın. 

  4. Siteler arası komut dosyası çalıştırma (XSS). 
    Siteler Arası Komut Dosyası Çalıştırma (XSS) veya siteler arası komut dosyası oluşturma, bir web uygulamasına yapılan ve veritabanına kötü amaçlı yazılım eklenmesine neden olan bir saldırıdır. Qualys böyle bir güvenlik açığı bulursa, bu, potansiyel bir saldırganın kötü niyetli eylemler gerçekleştirmek için kendi js betiğini site koduna ekleyebileceği veya zaten eklemiş olduğu anlamına gelir.

    Saklanan XSS komut dosyası sunucuya yerleştirildiğinden ve saldırıya uğrayan sayfa tarayıcıda her açıldığında çalıştırıldığından daha tehlikelidir.

    Yansıyan XSS Kötü amaçlı bir komut dosyası bir HTTP isteğine enjekte edilebildiği için gerçekleştirilmesi daha kolaydır. Uygulama bir HTTP isteği alacak, verileri doğrulamayacak, paketleyecek ve hemen gönderecektir. Bir saldırgan trafiğe müdahale ederse ve aşağıdaki gibi bir komut dosyası eklerse:

    <script>/*+что+то+плохое+*/</script> 

    daha sonra müşteri adına kötü niyetli bir istek gönderilecektir.

    Çarpıcı bir XSS örneği: CVC, kartın son kullanma tarihi vb. girmek için sayfaları simüle eden js algılayıcıları. 

    Bir web geliştiricisinin hatırlaması gerekenler: Content-Security-Policy başlığında, istemci tarayıcısını yalnızca güvenilir bir kaynaktan kod indirip yürütmeye zorlamak için script-src niteliğini kullanın. Örneğin, script-src 'self' yalnızca sitemizdeki tüm komut dosyalarını beyaz listeye alır. 
    En iyi uygulama Satır içi koddur: yalnızca güvenli olmayan satır içi değeri kullanan satır içi javascript'e izin verin. Bu değer satır içi js/css kullanımına izin verir ancak js dosyalarının eklenmesini engellemez. script-src 'self' ile birlikte harici komut dosyalarının yürütülmesini devre dışı bırakırız.

    Report-uri'yi kullanarak her şeyi günlüğe kaydettiğinizden ve bunu siteye uygulama girişimlerine baktığınızdan emin olun.

  5. SQL enjeksiyonları.
    Güvenlik açığı, web sitesinin veritabanına doğrudan erişen bir web sitesine SQL kodu ekleme olasılığını gösterir. Kullanıcıdan gelen veriler taranmazsa SQL enjeksiyonu mümkündür: doğruluğu kontrol edilmez ve sorguda hemen kullanılır. Örneğin bu durum, bir web sitesindeki formun, girişin veri türüyle eşleşip eşleşmediğini kontrol etmemesi durumunda meydana gelir. 

    Neden tehlikeli: Bir saldırgan bu forma bir SQL sorgusu girerse veritabanını çökertebilir veya gizli bilgileri açığa çıkarabilir. 

    Bir web geliştiricisinin hatırlaması gerekenler: Tarayıcıdan gelenlere güvenmeyin. Kendinizi hem istemci hem de sunucu tarafında korumanız gerekir. 

    İstemci tarafında, JavaScript kullanarak alan doğrulama yazın. 

    Popüler çerçevelerdeki yerleşik işlevler aynı zamanda sunucudaki şüpheli karakterlerden kaçmaya da yardımcı olur. Sunucuda parametreli veritabanı sorgularının kullanılması da önerilir.

    Web uygulamasında veritabanıyla etkileşimin tam olarak nerede gerçekleştiğini belirleyin. 

    Etkileşim, herhangi bir bilgi aldığımızda meydana gelir: kimliğe sahip bir istek (kimlik değişikliği), yeni bir kullanıcı oluşturulması, yeni bir yorum veya veritabanına yeni girişler. Burası SQL enjeksiyonlarının gerçekleşebileceği yerdir. Veritabanından bir kaydı silsek bile SQL enjeksiyonu mümkündür.

Genel tavsiyeler

Tekerleği yeniden icat etmeyin; kanıtlanmış çerçeveleri kullanın. Genel olarak popüler çerçeveler daha güvenlidir. .NET için - ASP.NET MVC ve ASP.NET Core, Python için - Django veya Flask, Ruby için - Ruby on Rails, PHP için - Symfony, Laravel, Yii, JavaScript için - Node.JS-Express.js, Java için - Bahar MVC'si.

Satıcı güncellemelerini takip edin ve düzenli olarak güncelleyin. Bir güvenlik açığı bulacaklar, ardından bir istismar yazacaklar, bunu kamuya açık hale getirecekler ve her şey yeniden olacak. Yazılım satıcısının kararlı sürümlerine yönelik güncellemelere abone olun.

Erişim haklarını kontrol edin. Sunucu tarafında, kodunuza her zaman, ilk harfinden son harfine kadar, sitenizi kırmak isteyen, verilerinizin bütünlüğünü ihlal eden en nefret ettiğiniz düşmanınız tarafından yazılmış gibi davranın. Üstelik bazen bu doğrudur.

Klonları kullanın, siteleri test edin ve ardından bunları üretim için kullanın. Bu, öncelikle üretken bir ortamda hatalardan ve hatalardan kaçınmaya yardımcı olacaktır: Üretken bir ortam para getirir, basit bir üretken ortam kritik öneme sahiptir. Herhangi bir sorunu eklerken, düzeltirken veya kapatırken, bir test ortamında çalışmak, ardından bulunan işlevsellik ve güvenlik açıklarını kontrol etmek ve ardından üretim ortamıyla çalışmayı planlamak faydalı olacaktır. 

Web uygulamanızı şununla koruyun: Web Uygulaması Güvenlik Duvarı ve güvenlik açığı tarayıcısından gelen raporları onunla entegre edin. Örneğin DataLine, bir hizmet paketi olarak Qualys ve FortiWeb'i kullanır.

Kaynak: habr.com

Yorum ekle