Erişim kontrolü (veya yetkilendirme), kimin (veya neyin) denenen eylemleri gerçekleştirebileceğine veya talep ettikleri kaynaklara erişebileceğine ilişkin kısıtlamaların uygulanmasıdır. Web uygulamaları kapsamında erişim kontrolu kimlik doğrulama ve oturum yönetimine bağlıdır.
Authentication (Kimlik doğrulama) : Kullanıcıyı tanımlar ve söyledikleri kişi olduklarını doğrular. Yani instagram hesabınıza gireceksiniz kullanıcı adınızı ve şifrenizi giriyorsunuz Instagram burda kendi veritanında sizin kim olduğunuzu anlıyor ve hesabınıza giriş sağlıyorsunuz. Ama burda ki yazımızda amacımız kimlik doğrulamayı anlatmak değil nerelere erişebiliriz ve bunlarla neler yapabiliriz. Authentication konusunu detaylı biçimde başka bir yazıda ele alacağım.
Peki oturum yönetimi nedir?
Http stateless(durumsuz, bağımsız) bir protokol olduğundan her istekde bizim kim olduğumuzu server’a bildirmeli. Bunu da cookie’leri kullanarak yapıyor. Server kimliğimizi doğruladıktan sonra bize bir session cookie tanımlıyor.
Sadece session cookie olmasına gerek yok. Yukarda görüldüğü üzere kullanıcıyı tanımlayan birçok cookie var. Bu kullanıcın izin verilen sınırlar içerisinde kalmasını sağlıyor. Yani anlıyacağınız üzere Erişim kontrolü tamamen kullanıcının gerçekleştirmeye çalıştığı eylemi gerçekleştirmesine izin verilip verilmediğini belirlemek için kullanılıyor.
Erişim kontrolü zaafiyetleri sıklıkla karşılaşılan ciddi bir güvenlik açığıdır. Çünkü erişim kontrolü insanlar tarafından tasarlanıyor. Bir teknoloji tarafından değil. Ve insanında kusurlu bir varlık olduğunu düşünürsek potansiyel hatalar ile karşılaşmak oldukça yüksek.
Peki türleri var mıdır?
Aslında temel olarak bahsedebileceğimiz bir kaç kategoride inceleyebiliriz.
Vertical Privilege Escalation (Dikeyde Yetki Yükseltme)
Örneğin yönetici olmayan bir hesap, yöneticinin özelliklerine erişebiliyorsa bu dikeyde erişim elde etmiş olur. Örneğin bir facebook grubunuz var ve sadece grub fotoğrafını yönetici değiştirebiliyor. Bunu sizin de yapabileceğinizi düşünün.
Horizantal Access Control (Yatayda Yekti Yükseltmek)
Yatay erişim kontrolleri, özellikle bu kaynaklara erişmesine izin verilen kullanıcılara kaynaklara erişimi kısıtlayan mekanizmalardır.
Yatay erişim kontrolleriyle, farklı kullanıcılar aynı türden bir kaynak alt kümesine erişebilir. Örneğin, bir bankacılık uygulaması, bir kullanıcının işlemleri görüntülemesine ve kendi hesaplarından ödeme yapmasına izin verir, ancak başka herhangi bir kullanıcının hesaplarından izin vermez. Ya da başkasının instagram hesabındaki fotoğrafları görme gibi (onu takip etmeden ve hesabı gizli olacak).
Örnekler
Bu isteğe baktığımızda admin kontrolü ve sayfaya giriş izni bir cookie ile sağlanıyor. Bu cookie’yi kullanarak admin olabiliriz ve bu da dikeyde erişim zafiyeti yaratır.
IDOR (Insecure Direct Object References)
IDOR Erişim kontrolü zaafiyetlerinin bir alt kategorisidir. IDOR, bir uygulama nesnelere doğrudan erişmek için kullanıcı tarafından sağlanan girdiyi kullandığında ve bir saldırgan, yetkisiz erişim elde etmek için girdiyi değiştirebildiğinde ortaya çıkar. Peki ne demek bu? Hemen bir örnekle açıklayalım.
Diyelim ki website kullanıcı hesabını direk yukarıdaki url olduğu gibi customer_number adlı parametreden alıyor. Eğer ben burada parametre değerini keyfi olarak değiştirirsem ve başkasının hesabına erişirsem işte bu IDOR oluyor.
Hemen IDOR’la ilgili bir gerçek hayat örneğine bakalım.
Böyle bir alışveriş sitemiz var. Ve biz bu sitenin live chat özelliğini test etmek istiyoruz. Tıklayalım.
Karşımıza böyle bir ekran geldi. birlaç mesaj yazalım ve incelemeye devam. Bu arada arkada burp suite açık ve istekleri inceliyoruz.
Gayet normal. Normal bir istek yok web socket ile anlık haberleşiyorlar. Şuan bunla ilgilenmiyoruz
Bi de View transcript diyelim ve bakalım ne olacak.
Arkada böyle bir istek gitti. Ve bilgisayarımıza direk chat history txt olarak indi. Ama burada bir şeye dikkat edelim dosyanın adı 2.txt. Hemen aklımıza 1 veya 3,4,5… gibi ifadeler ile değiştirmek gelsin. Deneyelim hemen.
Evet 1.txt yaptık ve başkasının chat history’sine eriştik. İşte IDOR böyle çalışır. Bu dosyaya erişmememiz gerekiyor. Çünkü bize ait değil. Ve dosya içeriğine baktığınızda ne kadar ciddi bir açık olduğunu görüyoruz. Kişi şifresini paylaşmış :)
Peki nasıl engelleyeceğiz?
Kod düzeyinde, geliştiricilerin her kaynak için erşime izin verilip verilmeyeceğini kontrol etmesi gerekiyor. Tasarlandığı gibi çalıştıklarından emin olmak için erişim kontrollerini baştan sona denetleyin ve test edin.
Erişim Kontrolü zaafiyetleri otomatize tool’lar ile tespit edilmesi zordur. O yüzden sık karşılaşılır ve uygulama tasarlanırken bu iyi düşünülmelidir.
Evet bir yazımızın daha sonuna geldik. Hoşçakalın :)