ScholarGate
Asistan

Web Uygulama Güvenliği

Web uygulama güvenliği, modern sistemlerde en yaygın ve etkili olan zafiyetlerden — enjeksiyon, siteler arası komut çalıştırma (cross-site scripting), bozuk kimlik doğrulama ve erişim kontrolü kusurları — web yazılımlarına özgü güvenlik açıklarını ele almaktadır.

PaperMind ile konu bulYakındaMakale ve konu bul
Tools & resources
Slaytları indir
Learn & explore
VideoYakında

Tanım

Web uygulama güvenliği, web tabanlı yazılımları ve kullanıcılarını, uygulamanın girdi, oturum, kimlik doğrulama ve erişim kontrolü yönetimindeki zayıflıkların yanı sıra tarayıcı güvenlik modelindeki açıklıklardan faydalanan saldırılara karşı koruma pratiğidir.

Kapsam

Bu konu, web uygulamalarının tehdit modelini (güvenilmeyen istemci, düşmanca ağ, çok kiracılı sunucular) ve karakteristik zafiyet sınıflarını kapsamaktadır: enjeksiyon (SQL ve komut), siteler arası komut çalıştırma (cross-site scripting), siteler arası istek sahteciliği (cross-site request forgery), bozuk erişim kontrolü ve kimlik doğrulama ile güvensiz serileştirme kaldırma (deserialization). Ayrıca, tarayıcı güvenlik modelini (aynı kaynak politikası (same-origin policy), içerik güvenlik politikası (content security policy)) ve standart savunmaları da ele almaktadır. Düşük seviyeli bellek istismarı ve genel güvenli geliştirme süreçleri, ilgili diğer konularda incelendiği için bu kapsamın dışındadır.

Temel sorular

  • Güvenilmeyen girdinin kod veya sorgularla karıştırılması neden enjeksiyon zafiyetleri yaratır?
  • Siteler arası komut çalıştırma (cross-site scripting) ve siteler arası istek sahteciliği (cross-site request forgery) bir sitenin kullanıcılarına nasıl saldırır?
  • Tarayıcının aynı kaynak politikası (same-origin policy) web kodunun yapabileceklerini nasıl kısıtlar?
  • Kimlik doğrulama, oturumlar ve erişim kontrolü web uygulamalarında genellikle nasıl bozulur?
  • En yaygın web zafiyetlerini hangi standart savunmalar önler?

Anahtar kavramlar

  • SQL ve komut enjeksiyonu
  • siteler arası komut çalıştırma (XSS)
  • siteler arası istek sahteciliği (CSRF)
  • bozuk erişim kontrolü
  • bozuk kimlik doğrulama ve oturum yönetimi
  • aynı kaynak politikası (same-origin policy)
  • içerik güvenlik politikası (content security policy)
  • parametreli sorgular
  • OWASP Top Ten

Temel kuramlar

Enjeksiyon ve kod/veri karışıklığı
Enjeksiyon kusurları (SQL enjeksiyonu, komut enjeksiyonu), güvenilmeyen girdinin kod olarak yorumlanmasıyla ortaya çıkmaktadır; savunma, veriyi ve kodu ayrı tutmak, özellikle parametreli sorgular ve katı çıktı kodlaması aracılığıyla sağlanmaktadır.
Tarayıcı güvenlik modeli ve istemci tarafı saldırılar
Aynı kaynak politikası (same-origin policy) farklı kaynaklardan gelen içeriği izole etmektedir, ancak siteler arası komut çalıştırma (cross-site scripting) saldırgan komutunu güvenilir bir sayfaya enjekte etmekte ve siteler arası istek sahteciliği (cross-site request forgery) bir kullanıcının kimliği doğrulanmış oturumunu kötüye kullanmaktadır; savunmalar arasında çıktı kodlaması, içerik güvenlik politikası ve anti-CSRF belirteçleri bulunmaktadır.

Mekanizmalar

SQL enjeksiyonu, kullanıcı girdisinin bir sorguya birleştirilmesiyle meydana gelmekte ve bir saldırganın sorgunun mantığını değiştirmesine olanak tanımaktadır; parametreli sorgular (parameterized queries) girdiyi veri olarak bağlayarak bu durumu düzeltmektedir. Siteler arası komut çalıştırma (cross-site scripting), diğer kullanıcıların tarayıcılarının yürüttüğü bir sayfaya komut enjekte etmekte olup, bağlama duyarlı çıktı kodlaması ve içerik güvenlik politikası ile hafifletilmektedir. Siteler arası istek sahteciliği (cross-site request forgery), kimliği doğrulanmış bir tarayıcıyı istenmeyen istekler yapmaya kandırmakta ve anti-CSRF belirteçleri (tokens) ile SameSite çerezleri (cookies) ile savunulmaktadır. Erişim kontrolü kusurları ise sunucunun her istekte yetkilendirmeyi kontrol etmemesi durumunda ortaya çıkmaktadır.

Klinik önem

Web uygulama zafiyetleri, en büyük veri ihlallerinin çoğuna neden olmaktadır: SQL enjeksiyonu ve bozuk erişim kontrolü milyarlarca kaydın açığa çıkmasına yol açmış, siteler arası komut çalıştırma (cross-site scripting) ise rutin olarak kullanıcı hesaplarını tehlikeye atmaktadır. Neredeyse tüm hizmetlerin bir web arayüzüne sahip olması nedeniyle, web güvenliği e-ticaret, bankacılık, sağlık portalları ve devlet sistemlerini doğrudan etkilemekte; sızma testleri (penetration testing), hata ödül programları (bug-bounty programs) ve PCI-DSS gibi uyumluluk rejimlerinin temelini oluşturmaktadır.

Kanıt ve kılavuzlar

OWASP Top Ten, yaygın web riskleri için fiili bir referans olup, OWASP Uygulama Güvenliği Doğrulama Standardı (ASVS) ve hızlı referans kartları (cheat sheets) ile tamamlanmaktadır. Tarayıcı tarafından uygulanan savunmalar (İçerik Güvenlik Politikası (Content Security Policy), SameSite çerezleri, Alt Kaynak Bütünlüğü (Subresource Integrity)) W3C ve WHATWG tarafından standartlaştırılmaktadır. PCI-DSS gibi uyumluluk çerçeveleri, ödeme verilerini işleyen sistemler için web güvenliği kontrollerini zorunlu kılmaktadır.

Tarihçe

Web uygulama güvenliği, 1990'ların sonları ve 2000'lerde dinamik web ile birlikte gelişmiştir; veritabanları ve kullanıcı girdileri enjeksiyon ve komut çalıştırma kusurları yaratmıştır. OWASP Top Ten (ilk olarak 2003'te yayımlanmıştır), en kritik risklere yönelik farkındalığı standartlaştırmıştır. Tarayıcı tarafı savunmaları, aynı kaynak politikası (same-origin policy) ve daha sonra İçerik Güvenlik Politikası (Content Security Policy) aracılığıyla evrilirken, dönüm noktası niteliğindeki ihlaller, SQL enjeksiyonu ve bozuk erişim kontrolünün gerçek dünyadaki maliyetini defalarca göstermiştir.

Öne çıkan isimler

  • Dafydd Stuttard
  • Ross Anderson
  • Jeremiah Grossman
  • Michal Zalewski

İlgili konular

Temel eserler

  • stuttard2011
  • owasp2021
  • anderson2020

Sıkça sorulan sorular

SQL enjeksiyonuna karşı en etkili tek savunma nedir?
SQL yapısını ve kullanıcı tarafından sağlanan değerleri ayrı ayrı gönderen parametreli sorguların (hazırlanmış ifadeler) kullanılmasıdır, böylece girdi asla sorgunun bir parçası olarak yorumlanamaz. Bu, kodu ve veriyi ayrı tutar ve saldırı sınıfını etkisiz hale getirir.
Siteler arası komut çalıştırma (cross-site scripting) SQL enjeksiyonundan nasıl farklıdır?
Her ikisi de güvenilmeyen girdiden kaynaklanmaktadır, ancak SQL enjeksiyonu sunucunun veritabanını hedef alırken, siteler arası komut çalıştırma (cross-site scripting) güvenilir site içinde diğer kullanıcıların tarayıcılarında çalışan kötü amaçlı komutları enjekte etmektedir. SQLi sunucu verilerini çalar veya değiştirir; XSS kullanıcı oturumlarını ve eylemlerini ele geçirir.

Bu kavram için yöntemler

İlgili kavramlar