Öncelikle şu hatalı varsayımlara dikkat edilmeli :
- Kullanıcıların url,id vs gibi bilgileri bilmemesine güvenmeyin. Uygulamanın kendi güvenlik mekanizmalarının olmasını ve kullanıcıların tüm bilgileri bildiğini varsayın
- Kullanıcının gönderidiği hiçbir parametreye güvenmeyin
- Kullanıcıların uygulama sayfalarına mutlaka belli bir sırayla erişeceklerini varsaymayın.
- Her aşamada her yeniden iletilen veriyi yeniden kontrol edin.
Uygulamalara güvenli bir erişim sistemi kurmak için :
- Her fonksiyonun erişimi için gerekli yetkiyi,rolü ve kısıtlamayı net bir şekilde belirleyin
- Tüm kararları kullanıcı oturumundan alın
- Tüm erişim kontrolleri için merkezi bir sistem kullanın
- Kullanıcıların isteklerini doğrulamak için bu sistemi kullanın
- Her sayfaya erişim için programatik bir çözümle test yapın
- Hassas kısımlara erişim için IP kısıtlaması da getirilebilir.
- Statik sayfalar için ya sunucu tarafından oluşturulan dinamik url’ler kullanın ya da sayfaları bir şekilde wrap edip yetki kontrolü yapın.
- Kullanıcı tarafından gelen verilerin tamamı güvenilmezdir. Bu yüzden sunucu tarafında doğrulanmadan işlem yapılmamalıdır.
- Aşırı hassas işlemler için her işlemde yeniden yetkilendirme yapılabilir veya yeniden session ayarlanabilir.
- Herşeyi loglayın
Çok Katmanlı Yetki Modeli
Bir uygulamanın tek bir katmanında güvenlik ve erişim kontrolleri yeterli değildir. Sunucu düzeyinde, veritabanı düzeyinde ve işletim sistemi düzeyinde de erişim kontrolleri bulunmalıdır. Uygulamalara çeşitli şekilde çok katmanlı erişim kontrolleri uygulanabilir :
- Sunucu URL erişimlerinin yetkilere bağlı olması üzerine kullanılabilir
- Farklı yetkilerdeki kullanıcılar için farklı veritabanları kullanılabilir.
- Ayrıcalıklı erişim veritabanı üzerinden kullanıcı rollerine göre bir table ile de belirlenebilir.
- Altyapıda her bileşeni çalıştırmak için kullanılan işletim sistemi hesapları, bileşenin gerçekten gerektirdiği en az güçlü ayrıcalıklarla sınırlandırılabilir.
Hack Adımları
Bu türden çok katmanlı bir ayrıcalık modeli kullanan bir uygulamaya saldırıyorsanız, erişim kontrollerini uygularken yaygın olarak yapılan en bariz hataların çoğuna karşı savunma yapılması muhtemeldir. Diğer katmanlardaki koruma nedeniyle, uygulama içinde uygulanan kontrolleri atlatmanın sizi çok uzağa götürmediğini fark edebilirsiniz. Bunu akılda tutarak, birkaç potansiyel saldırı hattı sizin için hala mevcuttur. En önemlisi, sunmadığı koruma açısından her bir denetim türünün sınırlamalarını anlamak, onu etkileme olasılığı en yüksek olan güvenlik açıklarını belirlemenize yardımcı olacaktır:
- Uygulama katmanındaki kontroller programatik injectionlara açık olabilir
- Sunucu katmanındaki rollerde eksiklikler olabilir
- Uygulama bileşenlerinin ayrıcalıklı olmayan işletim sistemi hesaplarını kullanarak çalıştığı yerlerde, genellikle ana bilgisayar dosya sistemi içindeki pek çok tür hassas veriyi okuyabilirler. Rasgele dosya erişimi sağlayan tüm güvenlik açıklarından, yalnızca hassas verileri okumak için bile olsa, yararlı bir şekilde yararlanılabilir.
- Uygulama sunucu yazılımındaki açıklardan faydalanılabilir.
- Tek bir yetki yükseltme açığı bir anda hiçbirşey yapmadan çok daha fazla açığı elde etmeyi sağlayabilir.