OWASP (Open Web Application Security Project / Açık Web Uygulama Güvenliği Projesi) aslında bir organizasyondur ve 10 yıldan beri web güvenliği için kaynak, konferans ve eğitim gibi hizmetleri sağlamaktadır. Bir kaç yılda bir en yaygın kullanılan Top 10 uygulama güvenlik açıklarını yayınlamaktadırlar. Bu yazıda, en son 2021 yılında yayınlanan OWASP Top 10 güvenlik açıklarına bakacağız. OWASP organizasyon web sayfasına link üzerinden (owasp.org/Top10/) ulaşabilirsiniz. Buradan detaylı tüm bilgilere ulaşabilirsiniz.
- Broken Access Control (Bozuk Erişim Kontrolü): Bozuk Erişim Kontrol güvelik açığı, izni olmayan bir kullanıcının gizli bilgileri görme ihlalidir. Access control, hangi kullanıcıların nereye erişip nereye erişemeyeceğini kontrol etmektedir. Broken access control ise bunun ihlal edilmesi anlamına gelmektedir. Bir kullanıcı istemediğimiz bir veriyi görebilir, düzenleyebilir hatta silebilir. Uygulama içerisinde belirli fonksiyonlara erişmek için kullanıcı rolleri tanımlarız. Bu roller, Anonymous user, visitor, emloyee, content contributor, administrator veya developer olabilir. Broken access control, bir kullanıcının bu rollerin dışında yetki kazanarak farklı bir rol gibi davranmasıdır. Bu yolla, başka kişilere ait hassas ve gizli bilgilere erişim sağlayabilmektedir. Gerçek hayattan bir örnek verirsek; insan kaynakları departmanından birinin, performans çıktılarını veya gizli bir bilgiyi printer da unutması olabilir. Benzer şekilde, insan kaynakları departmanı gizli bir bilgiyi departmanındaki birine e-mail atmak isterken, yanlışlıkla email adresini farklı girerek bu gizli bilgi yanlış bir kişiye göndermesi olabilir. Bu durumların önüne geçmek için gerçekten kimin neye yetkisi olduğunu tekrar tekrar kontrol etmeliyiz.
- Cryptographic Failures (Şifreleme Hatası): Saklanan veya taşınan verinin güvenlik ihtiyaçlarına karar verilmesi son derece önemlidir. Örneğin, şifre, kredi kartı numarası, sağlık bilgileri, kişisel veriler, ve gizli iş bilgileri extra güvenlik ihtiyacına sahip olabilir. Verinin gerçekten güvenlik ihtiyacı varsa bu durumda veriyi encrypt ederek şifreleyebiliriz. Bu sayede, bilginin anlamlı bir şekilde okunmasının önüne geçmiş oluruz. Bu tür ekstra güvenlik adımı uygulamak istediğimizde izleyeceğimiz adımlar; Birincisi, eğer hassas veriyi saklamak zorunda değilseniz, saklamayınız. İkincisi, eğer hassas veriyi saklamanız gerekiyorsa veriyi hem saklarken (at rest) hemde taşırken (in transit) encrypt ediniz. Üçüncüsü, veriyi encrypt ederken iyi bilinen güçlü encrypt algoritmalarını kullanınız.
- Injection (Enjeksiyon): Uygulama veriyi girdi (input) olarak kabul ederken, bu verinin talimat (instruction) olarak işlenmesine injection denilmektedir. Düşmanca (hostile) veriler kullanıldığında, uygulamamız bu saldırılara savunmasız (vulnerable) kalabilir. Gerçek yaşam örneği olarak, bir köpeğimiz olsun ve ismine otur (sit) diyelim. Bu durumda, köpeğimize otur diye seslendiğimizde köpek ne yapacağını bilemeyecektir. Çünkü bu bir otur komutu mu yoksa köpeğimizin ismini mi çağırıyoruz? Injection da benzer şekilde gerçekleşmektedir. Uygulamamız kullanıcı girdilerini yanlış yorumlayarak bu güvenlik açığına maruz kalmaktadır. Kullanıcı girdi içerisine kötü niyetli (malicuous) bir kod enjekte ederek (inject), uygulamamızın o girdiyi bir talimat (instruction) olarak algılamasını sağlayabilir. Cross Site Scripting (XSS) bir tür injection yöntemidir. Uygulama, kullanıcı girdisini nötralize edemez (neutralize). Girdinin güvenli (safe) veya meşru (legitimate) olmasını ve uygun formatta olmasını doğrulayamama durumudur. Bu durumu önlemek için girdiyi kontrol etmeliyiz. Örneğin, kullanıcı tarih bilgisi giriyorsa, girilen tarih bilgisine ait formatı kontrol etmeliyiz eğer uygun değilse validasyon hatası dönmeliyiz. Benzer şekilde sql injection ile veri tabanında injection da yapılabilir.
- Insecure Design (Güvensiz Tasarım): Tasarım ve mimari kusurlarla (flaw) ilgili risklere odaklanmaktadır. Hata mesajları geliştirme fazında çok faydalıdır ancak bu kodlar production’a gönderilirken gereksiz hata mesajları temizlenmelidir. Çünkü içerisinde hassas verileri de içerebilmektedir. Bu hassas mesajları kötü niyetli aktörler rahatlıkla kullanabilmektedirler. Düz metin (plain text) şifreleri de aynı şekilde insecure design kusurudur.
- Security Misconfiguration (Güvenlik Yanlış Yapılandırma): Eğer uygulamanız güvenlik konfigurasyon süreçleriyle uyumlu (concerted) ve tekrar edilebilir (repeatable) değilse, uygulamanız savunmasız (vulnerable) olabilmektedir. Örneğin, bisiklet sürerken kaskınızı başınıza değilde bisikletin dümenine asmışsanız, bu güvenli bir yöntem değildir. Kaskı başınıza takarak bisiklet sürüyorsanız o zaman güvenli diyebilirsiniz. Uygulamanızın konfigurasyonları katılaştırılarak (hardened) güvenli bir şekilde yapılandırılmalıdır. Örneğin, evden çıkıp kapıyı kitlememiş olmanız veya arabaya binip emniyet kemerini takmamış olmanız security misconfiguration konusudur. Telefonunuza şifre koymamanız veya default olanı değiştirmemeniz, uygulamayı güncellememeniz, gereksiz servis veya özellikleri açmanız da security misconfiguration konusudur. Security misconfiguration belirlemek için izlenecek yollar; Birincisi, güvenlik için gerekli her ayar ve konfigurasyonu ölçmek ve belirlemek gerekmektedir. İkincisi, Center for Internet Security (CIS) rehberini kullanmalıyız. Üçüncüsü, ideal olarak CIS rehberini uygulamayı katılaştırmalıyız. Gerçekte ise bu zafiyeti engellemek için, organizasyonunuz için risk tolerans ve gereksinimlerinizi adreslemelisiniz.
- Vulnerable and Outdated Components (Savunmasız ve Eski Bileşenler): Eğer uygulamanız içerisindeki bileşenlerin versiyonlarını bilmiyorsanız, o bileşen savunmasız, desteksiz (unsupported) veya tarihi geçmiş (out dated) olabilir. Bu durumda sizin uygulamanızın o bileşene bağımlılığı olduğu için uygulamanız da savunmasız kalmış demektir. Ayrıca, uygulamalarımız içerisinde açık kaynak kodlu bileşenler kullanabiliriz ve bu bileşenlerin bazı versiyonlarında güvenlik açıkları olabilir. Bu güvenlik açıkları, uygulamamızı otomatik olarak savunmasız bırakacaktır. Bu sorunlardan kaçınabilmek için; öncelikle bütün varlıklarımızı(assets) bilmemiz gerekmektedir. İkincisi, her bir bileşenin savunmasız olup olmadığını bilmeliyiz ve proaktif bir şekilde test yapmalıyız. Üçüncüsü, tarihi geçmiş bileşenlerimizi güncellemeliyiz ve varsa güvenlik için patch atmalıyız. Aslında, bu sorun teknik bir problem değildir, kişi ve süreç problemidir. Bu nedenle, tekrar eden varlık envanter (inventory) süreçlerimizi güçlendirmeliyiz (robust).
- Identification and Authentication Failures (Tanımlama ve Kimlik Doğrulama Hataları): Kimlik doğrulama saldırılarına karşı, kullanıcı kimliği doğrulama ve oturum yönetimi önemli bir savunma aracıdır. Gerçek yaşam örneği olarak, bir yolcu uçağa binmek istediğinde kimlik doğrulamasından geçer ve o kişinin iddia edilen (claimed) kişi olup olmadığı doğrulanır ve uçağa alınır. Bunun için kimlik üzerindeki fotoğraf ile aynı kişi olup olmadığı kontrol edilebilir. Kişi fake bir kimlik yapmışsa bunun da doğrulanması gerekmektedir. Benzer bir şekilde, kötü niyetli bir kişi web sitenizin fake bir versiyonunu yapmışsa ve kullanıcıları kendine yönlendirerek kullanıcı bilgilerini alıyorsa. Bu durumda, sizin kullanıcının gerçekte o kişi olup olmadığını telefona kod göndermek gibi farklı bir yolla doğrulamanız gerekmektedir. Diğer bir ihlal ise kullanıcının oturumunu halka açık bir yerde açık unutması ve başka bir kişinin aynı bilgisayarı kullanarak o kişinin bilgilerine erişebilmesidir.
- Software and Data Integrity Failures (Yazılım ve Veri Bütünlüğü Hataları): Yazılım geliştirme ortamında otomasyon olarak kullandığımız güvenilir olmayan CI/CD pipeline potansiyel risk taşıyabilir. Bir çok uygulama otomatik güncelleme fonksiyonuna sahiptir. Bu otomatik güncellemenin nereden yapıldığı ve yeterli doğrulama yöntemine sahip olup olmadığı önemlidir. Çünkü CI/CD pipeline içerisine istenmeyen yeni bir iş akışı eklenebilir. Örneğin, bir çikolata fabrikası düşünün. Ham made (raw material) alındıktan sonra bu ham maddeler otomatik olarak belirli süreçlerden geçirilerek çikolata üretilmektedir. Eğer ham madde kalitesiz ise veya iş süreçlerine yanlış bir işlem daha eklenmiş ise, bu durumda istenilen kalitede ve şekilde bir çikolata üretilemez. Benzer şekilde, kötü niyetli kişiler otomatize edilmiş CI/CD pipeline içerisine bir saldırıda bulunabilir ve kendi işlemini araya ekleyebilirler. Bu durumda sizin uygulamanız da savunmasız hale gelmiş olur. Mesela, bir nesneyi serialize ederken veya deserialize ederken otomatik bir şekilde yapabiliriz. Bu işlem arasına farklı bir algoritma dahil edilirse bu durumda serialize edilen işlemi tekrar deserialize edemeyiz ve sistemimiz hasar görmüş olur.
- Security Logging and Monitoring (Güvenlik Loglama ve İzleme): Monitor ve loglama yapılmadan ihlaller (breaches) tesbit edilemez. Örneğin, evinizin veya arabanızın kapısı her açıldığı ve kapandığında size bilgi gelse, bu durumda hırsızları durdurma ve yakalama şansınız çok yüksektir. Bu ihlalin oluşmaması için çalışan bir organizasyon vardır. UK National Cyber Security Centre, güvenlik amacıyla gözlemleme ve loglama işlerini hangi durumlarda yapmamız gerektiğini belirtmektedir. Bu durumlar; Hangi dosya indirildi ve gözlemlendi? Herhangi bir yanlış kullanıcı doğrulaması yapıldı mı?, Yenilerde kim login oldu? Beklenmeyen zamanda veya beklenmeyen bir yerden kullanıcı doğrulaması oldu mu? Loglama, monitoring ve alarm mekanizmaları sistem sızmalarını tesbit etmek ve güvenlik ekibini bu doğrultuda uyarmak için kullanılmaktadır. Bu sayede, güvenlik ekipleri, saldırganın sisteme daha fazla hasar vermesini engelleyerek saldırganın kimliğini belirleyebilirler.
- Server Side Request Forgery (SSRF) (Sunucu Tarafı İstek Sahteciliği): SSRF kusurunda (flaw), saldırgan hazırlanmış (crafted) bir isteği beklenmeyen bir hedefe göndermeye zorlar. Saldırgan isteklerini sanki mağdur kimsenin (victim) sunucusu gibi rol yaparak gönderir. Çünkü, sunucu güvenilir bir varlıktır. Bu saldırı, hassas ve yönetimsel fonksiyonlara erişmekle sonuçlanabilir. Bu saldırıdan kurtulmanın en önemli yolu meşru (legitimate) dış kaynaklardan sadece bazı ip adreslerine ve host isimlerine izin verirken diğerlerine izin vermemektir.
→ Sonuç olarak; Bu yazıda OWASP organizasyonunun 2021 yılında yayınlamış olduğu top 10 web güvenlik maddeleri anlatıldı. İster yazılımcı, ister güvenlik uzmanı isterse de IT sektöründe farklı bir role sahip olalım, şirketimizde bulunan uygulamaların güvenli olması hepimiz için çok değerlidir.
Değerlendirme Soruları
1- Hangi ifade bir web uygulamasında bozuk erişim kontrolünü tanımlar?
Cevap: Özel bilgiler yetkisiz bir kişiye gönderilmektedir. Özel bilgiler yetkisiz bir kişinin eline geçer. Özel bilgiler yetkisiz bir kişi tarafından okunabilir, düzenlenebilir veya silinebilir.
2- Güvenlik açığı bulunan ve güncelliğini yitirmiş bileşenlerin web uygulamalarının güvenliği üzerinde neden bu kadar büyük bir etkisi var?
Cevap: Çoğu web uygulaması, uygulamanın güvenlik duruşunu iyileştirmek için hepsinin izlenmesi ve güncel tutulması gereken birkaç farklı bileşen içerir.
3- Bileşenlerinizin her birinin savunmasız olup olmadığını nasıl anlarsınız?
Cevap: Bilinen güvenlik açıklarını araştırın ve uygulamalarınızı proaktif olarak test edin.
4- Meşru dış kaynakların belirli bir konumdan geldiğini biliyorsanız, SSRF’yi önlemek için ne yapabilirsiniz?
Cevap: Yalnızca bu IP adresine veya ana bilgisayar adına izin verin.
5- 2021 OWASP İlk 10’daki yeni Güvensiz Tasarım kategorisinin önemi nedir?
Cevap: Bu yeni kategori, güvenliğin web uygulaması geliştirmenin gereksinimleri ve tasarım aşamasında önemli olduğunu kabul eder.
6- Dijital güvenlik yanlış yapılandırmasına bir örnek nedir?
Cevap: Mobil cihazınızda şifre kullanmamayı tercih ediyorsunuz.
7- Güvenlik kaydı ve izleme neden bu kadar önemli?
Cevap: İhlallerin daha hızlı ve saldırının daha erken aşamalarında keşfedilmesini sağlar.
8- Hassas verileri saklıyorsanız, verileri ne zaman şifrelemelisiniz?
Cevap: veriler beklemedeyken ve aktarılırken
9- Düzenli erişim denetimleri neden her zaman bir sunucu tarafı istek sahteciliği (SSRF) saldırısını önlemek için çalışmıyor?
Cevap: Sunucu ayrıcalıklı erişime sahip olabilir.
10- Bir enjeksiyon saldırısının sonucu nedir?
Cevap: Web uygulaması, kullanıcı tarafından gönderilen girdiyi izlenecek bir talimat olarak yorumlar.
11- Hangi senaryo, tanımlama ve kimlik doğrulama hatasına bir örnektir?
Cevap: Bir web uygulaması öncekini kapatmadan yeni bir kullanıcı oturumu oluşturduğunda. yazılım bir sertifika sağlayan bir ana bilgisayarla iletişim kurduğunda, ancak sertifikanın gerçekten o ana bilgisayarla ilişkilendirildiğini garanti etmez. bir aktör belirli bir kimliğe sahip olduğunu iddia ettiğinde ve yazılım iddianın doğru olduğunu kanıtlamadığında
12- Sekizinci madde olan Yazılım ve Veri Bütünlüğü Arızaları, diğer hangi OWASP ilk 10 maddesinin bir alt kümesidir?
Cevap: Savunmasız ve Eskimiş Bileşenler