Top 10 aslında nedir
OWASP — Open Worldwide Application Security Project — birkaç yılda bir, gerçek olay ve tarama verisinden yola çıkarak sıralı bir web uygulama risk kategorileri listesi yayımlar. Güncel liste bozuk erişim kontrolü, kriptografik hatalar ve enjeksiyonla başlıyor.
Listenin nasıl kurulduğundan iki sonuç çıkar ve ikisi de sağlayıcı metinlerinde kaybolur.
Bunlar zafiyet değil kategori. "Enjeksiyon" başlığı SQL enjeksiyonunu, komut enjeksiyonunu, LDAP enjeksiyonunu ve şablon enjeksiyonunu kapsar. Bir ürün bir kategoriyi "destekleyemez"; yalnızca o kategorinin içindeki belirli teknikleri tespit edebilir.
Bu, uygulamayı yazanlar için bir önceliklendirme aracıdır. Size inceleme vaktinizi nereye ayıracağınızı söyler. Hiçbir zaman bir uyumluluk kontrol listesi olmadı ve uygulamanın önüne konan bir güvenlik duvarı listeyi ortadan kaldırmaz.
Bir paragrafta WAF nedir
Web uygulama güvenlik duvarı uygulamanızın önünde durur ve her isteği — yolu, sorgu dizesini, başlıkları, çerezleri ve gövdeyi — bir kural setine karşı inceler. Bir kural eşleştiğinde istek, uygulamanız daha çalışmadan engellenir, loglanır ya da ikisi birden olur.
Çoğu WAF'ın üstüne kurulduğu açık kural seti OWASP Core Rule Set (CRS)'tir; aynı vakfın sürdürdüğü genel amaçlı tespit kurallarından oluşur. Edge'de, ModSecurity üzerinde çalıştırdığımız kural seti de budur. CRS kurallarını sayısal aralıklara göre ailelere ayırır — cross-site scripting için 941, SQL enjeksiyonu için 942, local file inclusion için 930, remote file inclusion için 931, remote command execution için 932, PHP enjeksiyonu için 933 — engellenen bir isteğin muğlak bir "güvenlik politikasına" değil kesin bir kural numarasına kadar izlenebilmesinin sebebi de budur.
Kategori kategori: güvenlik duvarı gerçekte ne yapıyor
Enjeksiyon — WAF burada gerçekten güçlü. SQL enjeksiyonu, komut enjeksiyonu ve şablon enjeksiyonu istek verisinde tanınabilir şekiller bırakır. Kalıp eşleştirmenin iyi olduğu iş tam da budur ve kurallar fırsatçı denemelerin çoğunu daha ilk seferde yakalar. Bu, parametreli sorguları isteğe bağlı hâle getirmez; size zaman kazandırır ve otomatik çoğunluğu durdurur.
Cross-site scripting — güçlü, ama çekinceli. Parametrelerdeki script yükleri tespit edilebilir. Güvenlik duvarının incelemediği bir yoldan gelen depolanmış XSS ya da sunucunuza hiç uğramayan DOM tabanlı bir sorun ise erişiminin dışındadır.
Güvenlik yapılandırma hataları — kısmen. Bir WAF sunucu banner'ını gizleyebilir, .git ve yedek dosyalarına erişimi engelleyebilir, tehlikeli metotları reddedebilir. Gevşek bir CORS politikasını ya da varsayılan parolalı bir yönetim panelini düzeltemez.
Zafiyetli ve güncelliğini yitirmiş bileşenler — kısmen ve geçici olarak. Bir CVE yayımlandığında genel kurallar çoğu zaman yayımlanan istismarın şeklini yakalar; "sanal yamalamanın" bütün değeri de budur: duyuru ile sizin yükseltme pencereniz arasındaki günleri satın alır. Yükseltmenin yerini tutmaz.
Bozuk erişim kontrolü — büyük ölçüde hayır. Uygulamanız, A kullanıcısının URL'deki bir kimliği değiştirerek B kullanıcısının faturasını çekmesine izin veriyorsa, iki istek de güvenlik duvarına birebir aynı görünür. 4711 numaralı faturanın kime ait olduğundan haberi yoktur. Bu, güncel listenin en üstündeki kategoridir ve kodunuzdaki bir yetkilendirme hatasıdır.
Kimlik belirleme ve doğrulama hataları — kısmen. Giriş uçlarındaki rate limiting, kimlik doldurmayı ve brute force'u köreltir; bu gerçek ve sahip olmaya değer bir kazançtır. Zayıf oturum yönetimi ya da token sızdıran bir parola sıfırlama akışı ise bir güvenlik duvarının göreceği şey değildir.
Güvensiz tasarım ve yazılım bütünlüğü hataları — hayır. Bunlar mimaridir. Hiçbir istek kalıbı bunları ifade etmez.
Yanlış pozitif sorunu ve her şeyi neden o belirliyor
Enjeksiyonu yakalayacak kadar agresif olan her kural seti zaman zaman bir insanı da engeller. Klasik örnek, içinde kod örneği geçen bir makaleyi kaydeden içerik editörü ya da birinin içinde SQL geçen bir hata mesajını yapıştırdığı destek formudur. İstek meşrudur; sadece bir saldırıya benzemektedir.
WAF'lar operasyonel olarak tam burada kazanılır ya da kaybedilir. Yanlış pozitif "site o kişide bozuk ve kimse sebebini açıklayamıyor" anlamına geliyorsa, WAF bir ay içinde kapatılır — ki bu en kötü sonuçtur, çünkü koruma sessizce ortadan kalkarken herkes açık olduğuna inanmaya devam eder.
Bunu yaşanabilir kılan şey izlenebilirliktir. Bizim edge'imizde engellenen bir istek, referans numarası taşıyan markalı bir 403 sayfası döndürür ve o numara, eşleşen kuralı ve eşleştiği alanı içeren denetim logu kaydına karşılık gelir. Destek konuşması "site beni ara sıra engelliyor"dan "942100 numaralı kural editör URL'sindeki content alanıyla eşleşti"ye döner. Çözüm de bundan sonra dar bir istisnadır: o kural, o alan, o yol. Kural ailesi değil, site hiç değil.
Paranoya seviyeleri: kimsenin açıklamadığı ayar
Core Rule Set 1'den 4'e paranoya seviyeleriyle gelir. Seviye 1 bariz olanı yakalar ve bir insanı nadiren engeller. Her seviye, daha katı ve yanlış pozitife daha yatkın kurallar ekler; seviye 4'te güvenlik duvarı, normal bir uygulamanın her gün yaptığı şeyleri reddeder hâle gelir.
Dürüst tavsiye heyecan verici değil. Varsayılandan başlayın, bir hafta logu izleyin ve ancak operasyonel maliyeti hak eden bir şeyi koruyorsanız seviyeyi yükseltin — o zaman da önce bir staging ortamında yapın. Çoğu site, üçüncü şikâyetten sonra birinin sessizce kapattığı bir seviye 3 yerine iyi ayarlanmış bir seviye 1 ile daha iyi durumdadır.
Bir sağlayıcının "OWASP Top 10 kapsaması" nasıl değerlendirilir
Dört soru pazarlamanın çoğunu keser.
1. Hangi kural seti ve hangi sürüm? "OWASP tabanlı" ifadesi Core Rule Set anlamına da gelebilir, sağlayıcının OWASP tadında isimler taşıyan kendi kuralları anlamına da. Sürüm de önemli — kural setleri revize edilir ve eskisini çalıştırmak bir ayrıntı değil gerçek bir tercihtir. Biz CRS çalıştırıyoruz ve onu upstream'i otomatik takip ederek değil, kendi müşterilerimizin karşılaştığı yanlış pozitif kalıplarına karşı test ederek bilerek yükseltiyoruz.
2. Bir istek engellendiğinde ne görüyorum? Cevap, genel geçer bir hata sayfası ve kurala göre arayamadığınız bir logsa, ayar yapmak tahminden ibaret kalır.
3. Tek bir yoldaki tek bir alanı nasıl muaf tutarım? Elinizdeki en küçük istisna "bu site için kural ailesini kapat" ise, ürün sizi korumayı kapatmaya doğru itiyordur.
4. Neler kapsam dışı? "Erişim kontrolü ve iş mantığı bizim kurallarımız değil sizin kodunuz" diye cevap veren bir sağlayıcı size doğruyu söylüyordur. Top 10'un tamamını kapsadığını iddia eden ise bir yeteneği değil bir kategori listesini anlatıyordur.
OWASP ve WAF SSS
WAF uygulamamı OWASP uyumlu yapar mı?
OWASP uyumluluğu diye bir şey yok. Top 10 bir farkındalık ve önceliklendirme belgesidir, belge alacağınız bir standart değil. Bir WAF bazı kategorilerde maruziyeti azaltır, bazılarında hiçbir şey yapmaz; uygulamanın yine de dikkatle yazılması gerekir.
OWASP Core Rule Set ile OWASP Top 10 aynı şey mi?
Hayır. Top 10 risk listesidir. Core Rule Set ise aynı vakfın sürdürdüğü, ModSecurity ve uyumlu motorlar tarafından kullanılan genel amaçlı tespit kurallarıdır. Kural seti Top 10 kategorilerinin birkaçına dokunur; listeyi uygulamaz.
Bir WAF, SQL enjeksiyonunu tamamen durdurabilir mi?
Fırsatçı denemelerin büyük çoğunluğunu durdurur ve hedefli olanların maliyetini yükseltir. Parametreli sorguların yerini tutmaz, çünkü kararlı bir saldırgan yükü kalıp eşleştirmeden kaçacak şekilde uyarlar. Onu çözüm değil, derinlik olarak görün.
Sanal yamalama (virtual patching) nedir?
Gerçek düzeltmeyi devreye alana kadar bilinen bir zafiyetin istismar şeklini güvenlik duvarında engellemek. Bir CVE'nin yayımlanmasıyla bakım pencerenizin gelmesi arasındaki aralıkta gerçekten işe yarar; kalıcı cevap hâline gelirse tehlikelidir.
Top 10'un hangi kategorisi için en çok endişelenmeliyim?
Bozuk erişim kontrolü: güncel listenin en üstünde, yaygın ve güvenlik duvarınızın yardımcı olamadığı kategori. API'nizin döndürdüğü her nesnenin, kimliği doğrulanmış kullanıcının hakkı olan bir nesne olduğunu kontrol edin — bu hataların çoğu bir controller'da eksik kalmış bir sahiplik kontrolüdür.