Erişim kontrolleri üç kategoriye ayrılır: Dikey, Yatay ve context-dependent(içeriğe bağlı). Dikey demek belli içeriklere erişimin belli yetkilerce kısıtlandırılmasıdır. En güzel örneği kullanıcı-admin örneğidir.
Yatay erişim de aynı tür kullanıcıların aynı tür içerikleri kendi alanlarında incelemesini kapar. Örnek mail uygulaması kendi maillerimizi görmemize izin verirken başkasının maillerini görmemize izin vermez.
İçeriğe bağlı da örnek olarak kullanıcı aşama aşama görüntüleme yapıyorsa diğer aşamaları görmesinin engellenmesidir.
Access Control saldırılarında 3 tür vardır :
- Dikey erişim : Örnek olarak normal bir kullanıcının admin işlevlerini gerçekleştirmesi
- Yatay erişim : Bir kullanıcının başka bir kullanıcının yapabileceği işlevleri yapması bilgileri görmesi
- Business Logic : Örnek olarak kullanın ödeme esnasında bir aşamayı atlaması vs. İş akışındaki hatalar.
Saldırılar Ve Dikkat Edilmesi Gerekenler :
Korunmayan Güvenlik Mekanizması
Bazı durumlarda daha yüksek yetki seviyesine erişim sağlayan sayfalar URL ‘ler herhangi bir kontrol olmadan erişilebilir durumdadır. Örnek olarak sadece adminlerin https://wahh-app.com/admin/ böyle bir sayfayı görmesi güvenli değildir. Normal bir kullanıcı bu sayfaya gitmek istediğinde başka kontroller de yapılmalıdır. Bu urlyi bilen birisi doğrudan bu sayfaya erişememelidir.
URL ‘ler kullanıcıların ekranlarında görünür, proxy ile iletilir, browserda kaydedilir. Bu yüzden bilinmeyen veya güvenilir bir url diye birşey geçerli değildir.
Bazı durumlarda yönetici URL leri javascript içindeki koda kullanıcıyı tanımlayan bayraklarla gizlenmiş olabilir. Saldırgan bunları inceleyerek url’yi bulabilir.
Direkt Erişim Yöntemleri
Bazı durumlarda Java API tarafından çağırılan kodların, browsera taşınması veya browserdan çağırılması sonucu doğrudan erişim elde edilebilir. Bunun dışında da bazı doğrudan erişimler URL de standart java isimlendirmesinin kullanılmasından kaynaklı gerçekleşebilir (getBalance, isExpired gibi)
Genellikle API çağrılarında güvenli iletişim ve erişim sağlanmalıdır. Ama bazen çağrılar herhangi bir input değişikliğinde güvenlik önlemi almadan işlemi yapıyor olabilir veya API çağrılarına erişim için bir güvenlik önlemine gerek olmuyor olabilir.
Örnek olarak http://wahh-app.com/public/securityCheck/getCurrentUserRoles bu linke ulaşırsak getAllUserRoles, getAllRoles, getAllUsers, ve
getCurrentUserPermissions gibi değerleri de url de deneyip erişim yapmaya çalışabiliriz.
Bir diğer direkt erişim yönteminde de belli bir noktaya erişim için URL’de veya post requestde belli unique bir parametrenin gönderilmesiyle gerçekleşir. Örnek olarak https://wahh-app.com/ViewDocument.php?docid=1280149120 bu adresteki bilgiyi bu id ile ilişkilendirilmiş kişi görebilir. Ancak bazı durumlarda bu güvenli bir şekilde sağlanmıyor olabilir. Burada saldırgan hem ViewDocument.php sayfasını bilmeli hem de id’yi bilmelidir. Ama yine de güvenli olmaz çünkü bir şekilde loglara erişebilir ve oradan görebilir veya id sıralı şekildeyse tahmin edebilir.
TIP : Genellikle bu tarz açıklar genellikle server ile arayüzün farklı teknolojilerle geliştirildiği durumlarda gerçekleşir. Farklı teknolojiler arasında session odaklı bir güvenlik mekanizması oturmak zor olabilir.Ayrıca böyle id gibi verilere bağlı url’leri görmek için loglara erişim çok iyi bir kaynaktır. Loga erişen birisi ciddi anlamda hedefle ilgili bilgi edinebilir.
Multistage Functions
Birçok uygulamada işlemler farklı aşamalardan geçerek gerçekleşir. Örnek olarak kullanıcının kayıt olması aşaması adım adım gerçekleşir. Eğer geliştiriciler her aşamada, bir önceki aşamanın başarılı şekilde gerçekleştiğini varsayarsa saldırgan sonraki aşamalara atlayıp kendisini admin olarak ekleyebilir.
Bazen bu aşamalar gerçekleştirilirken bir önceki aşama doğrulanmış olduğu varsayılarak geçilen aşamalar arasında bir kontrol gerçekleştirilmez ve bir önceki aşamadan gelen veriler HTML içine gizlenmiş olabilir. Eğer son POST gönderiminde buna dikkat edilmezse saldırgan kolayca verileri değiştirip kendisine ait değil de başkasına ait bir hesaptan para transferi yapılmasını sağlayabilir.
Static Files
Çoğu uygulamada istekler dinamik dosyalara yönlendirilir ve dinamik sayfalar çalıştırılır. Bu sayfalara erişim güvenlik önlemleriyle olur ama örnek olarak kitap indirme siteisinde kullanıcı satın alma yaptıktan sonra, hiçbir kontrolün olmadığı bir url’den dosyayı indirebilir. Bu noktada o url’yi bilen saldırgan statik dosyayı doğrudan indirebilir. Eğer url’de tahmin edilebilir kitap kodu vs varsa bütün statik dosyaları indirebilir.
Platform Misconfiguration
Platform konfigürasyonları düzeyinde yapılan yanlışlıklar yetkisiz erişime sebep olabilir. Yetkilendirme aşamaları genellikle :
- Request Yöntemi (GET,POST,HEAD …)
- URL path
- Kullanıcı Rolü
Dikkate alarak tasarlanır. Doğru HTTP metotları doğru URL’ler ile doğru şekilde işlenmelidir. Yoksa metotların değiştirilmesiyle zayıflıklar ortaya çıkabilir.
Örnek olarak bazı uygulamalar POST metodu alan bir url’ye GET metodu gönderildiğinde bunu doğru işlemeyebilir ve saldırganın yetkisiz işlem yapmasına sebep olabilir. Veya bazı uygulamalar HEAD metodunu işleyebilmek için önce GET metodunu işler ve daha sonra bunun başlıklarını döndürür. Eğer bir sayfa GET ve POST metotlarına göre kısıtlanmışsa bile HEAD isteği atmak saldırganın GET işlemini yapmasını sağlayabilir. POST bekleyen bir sayfaya HEAD isteği atmak da bu şekilde kırılmalara sebep olabilir.
Insecure Access Control Methods
Bazı uygulamalarda erişim kontrolü kullanıcının inputlarına veya saldırganın kontrol edebileceği parametrelere bağlı olabilir.
Parametre Tabanlı Erişim
Bu türlü güvenli olmayan erişim metotlarında kullanıcı login yaptığında, kullanıcın rolü belirlenir ve bu gizli HTML yoluyla veya cookie yoluyle veya url parametreleri yoluyla tüm sayfalara iletilir. Bu da kullanıcı tarafında olduğu için kolayca manipüle edilebilir. URL ile iletiliyorsa tespiti zor olsa bile bir şekilde farkedilip değiştirilerek yetkisiz erişime sebep olabilir
Referer Tabanlı Erişim
Bu türde güvensiz erişim için uygulama Header’lar arasında Referer kısmını kontrol ediyor olabilir. Örnek olarak admin yetkisindeki bir sayfaya erişmek için admin panelini sayfasını kaynak olarak Refererde kontrol ediyor olabilir. Bu şekilde bir varsayım kullanıcı kontrolünde referer parametresiyle bir zaafiyete dönüşebilir.
Location Tabanlı Erişim
Bazı durumlarda erişim için uygulamalar IP’den aldıkları coğrafi veriyi kullanır. Bu da VPN veya Proxy gibi veya Client-side verilerin değiştirilmesiyle exploit edilebilir.