IDOR (Insecure Direct Object References) Zafiyeti - Detaylı İnceleme
IDOR (Insecure Direct Object References), web uygulamalarında erişim kontrolü eksikliği nedeniyle bir kullanıcının yetkisiz olarak başka bir kullanıcının verilerine erişmesine veya bu verileri değiştirmesine neden olan bir güvenlik açığıdır. Bu makalede, IDOR zafiyetinin tüm yönlerini detaylı bir şekilde açıklayacağız.
1. IDOR Nedir?
IDOR zafiyeti, doğrudan nesne referanslarının kullanıldığı web uygulamalarında ortaya çıkar. Bu tür uygulamalar, genellikle URL parametreleri veya form verileri aracılığıyla veri nesnelerine erişim sağlar. Eğer bu referanslar kontrol edilmeden işlenirse, kötü niyetli kullanıcılar yetkisi olmayan verilere erişebilir.
Örneğin:
https://example.com/user/profile?user_id=123
Burada, user_id
parametresi, profil bilgilerini belirler. Eğer uygulama, sadece belirtilen user_id
ile ilişkili verileri kontrol ediyorsa ve erişim yetkisini doğrulamıyorsa, saldırgan user_id
değerini değiştirerek başka kullanıcıların bilgilerine erişebilir.
2. IDOR Zafiyetinin Temel Yapısı
IDOR zafiyeti genellikle iki ana nedenden dolayı ortaya çıkar:
- Erişim Kontrolü Eksiklikleri: Kullanıcıların yalnızca kendi verilerine erişim yetkileri varken, başka kullanıcıların verilerine erişim sağlayabilmesi.
- Yetki Kontrolü Eksiklikleri: Kullanıcının yetkili olduğu eylemleri aşarak, yetkili olmadığı işlemleri gerçekleştirmesi.
3. IDOR Türleri
3.1. Erişim Kontrolü Eksiklikleri
Erişim kontrolü eksiklikleri, genellikle kullanıcıların yetkili olduğu veri kümesine erişimini sağlamazken, başka kullanıcıların verilerine erişim sağlamasına neden olur. Bu tür zafiyetler, uygulamanın veri erişim izinlerini doğru bir şekilde kontrol etmemesi durumunda ortaya çıkar.
3.2. Yetki Kontrolü Eksiklikleri
Yetki kontrolü eksiklikleri, kullanıcının sadece kendi verilerini değil, başkalarının verilerini de değiştirmesine veya görüntülemesine olanak tanır. Bu, uygulamanın kullanıcı yetkilerini doğru bir şekilde kontrol etmemesi durumunda oluşur.
4. IDOR Saldırı Teknikleri
4.1. Basit IDOR Saldırıları
Bu tür saldırılar, genellikle URL veya form parametrelerinin değiştirilmesiyle gerçekleştirilir. Basit IDOR saldırılarında, saldırgan genellikle URL'deki parametreleri değiştirir.
Örnek Senaryo:
https://example.com/profile?user_id=1001
Bir kullanıcı, user_id
parametresini değiştirerek:
https://example.com/profile?user_id=1002
başka bir kullanıcının profil bilgilerine erişebilir.
4.2. Veritabanı Sorgularında IDOR
Bu saldırı türü, veritabanı sorgularında kullanılan nesne referanslarıyla ilgilidir. Veritabanı sorgularında kullanılan ID değerlerinin doğrudan kontrol edilmemesi, saldırganların yetkisiz verilere erişim sağlamasına neden olabilir.
Örnek Senaryo:
https://example.com/orders/details?order_id=987
Bir saldırgan, order_id
parametresini değiştirerek:
https://example.com/orders/details?order_id=988
başka bir kullanıcının sipariş bilgilerine erişebilir.
4.3. Dosya Erişimlerinde IDOR
Dosya erişimlerinde IDOR saldırıları, genellikle dosya referanslarının kontrol edilmemesi nedeniyle gerçekleşir. Bu tür saldırılarda, saldırgan yetkisiz dosyalara erişim sağlayabilir.
Örnek Senaryo:
https://example.com/download?file_id=xyz123
Bir saldırgan, file_id
parametresini değiştirerek:
https://example.com/download?file_id=xyz124
yetkisiz dosyalara erişebilir.
5. IDOR Zafiyetlerini Tespit Etme ve Önleme
5.1. Tespit Yöntemleri
- Manuel Testler: URL ve form parametrelerini değiştirerek erişim kontrolünü test edin. Farklı kullanıcı hesaplarıyla testler yaparak yetki dışı erişimleri kontrol edin. Örneğin, farklı
user_id
değerlerini deneyerek erişim sınırlarını test edebilirsiniz. - Otomatik Araçlar: Güvenlik tarayıcıları ve penetrasyon test araçları kullanarak IDOR zafiyetlerini tespit edebilirsiniz. Bu araçlar, belirli parametreler üzerinde otomatik testler yaparak zafiyetleri belirler.
5.2. Önleme Yöntemleri
- Erişim Kontrolü: Her erişim isteğinde, kullanıcının yetkili olup olmadığını kontrol edin. Verilere erişim öncesinde kapsamlı yetki kontrolleri uygulayın. Bu, kullanıcının sadece kendi verilerine erişmesini sağlar.
- Güvenli Referanslar Kullanımı: Erişim kontrolü yapılan nesneler için güvenli referanslar kullanın. Kullanıcıların doğrudan nesne kimliklerini manipüle etmelerini engelleyin. Örneğin, kullanıcıların dosya referanslarını doğrudan URL'de belirtmek yerine, şifrelenmiş veya anonimleştirilmiş referanslar kullanın.
- Güvenlik Testleri: Uygulamanızı düzenli olarak güvenlik testlerine tabi tutarak IDOR ve diğer zafiyetleri tespit edin. Penetrasyon testleri, potansiyel güvenlik açıklarını belirlemenin etkili bir yoludur.
6. Örnek Uygulama
Kullanıcı Profili Erişim
Profile View:
https://example.com/profile/view?user_id=123
Saldırı Senaryosu: Bir kullanıcı user_id
değerini değiştirir ve başka bir kullanıcının profil bilgilerini görüntüler.
Kod Örneği (PHP)
Basit IDOR örneğinde, kullanıcıdan gelen user_id
parametresini doğrudan kullanarak veri getiriyoruz. Bu yöntem zayıf erişim kontrolüne sahip olup IDOR saldırılarına açıktır.
<?php
// Basit IDOR örneği
$user_id = $_GET['user_id']; // Kullanıcıdan gelen ID parametresi
// Kullanıcının yetkisini kontrol etmeden veriyi getiriyoruz
$sql = "SELECT * FROM users WHERE id = $user_id";
?>
Yukarıdaki kod, kullanıcının yalnızca kendi verilerine erişimini kontrol etmez. Herhangi bir user_id
değeri girildiğinde, o ID'ye sahip kullanıcının verilerini döndürür.
Güvenli bir IDOR önleme stratejisi, kullanıcının sadece kendi verilerine erişim sağladığından emin olmalıdır. Aşağıdaki kod, bu erişim kontrolünü sağlar:
<?php
// Erişim kontrolü ile güvenli IDOR örneği
session_start();
$user_id = $_GET['user_id'];
// Kullanıcının yetkisini kontrol etme
if ($_SESSION['user_id'] == $user_id) {
// Kullanıcının kendi verilerini görüntülemesine izin ver
$sql = "SELECT * FROM users WHERE id = $user_id";
} else {
// Yetkisiz erişim, hata mesajı
echo "Yetkisiz erişim!";
}
?>
Bu kodda, $_SESSION['user_id']
kullanılarak kullanıcının yetkisi kontrol edilmekte ve yalnızca kendi verilerine erişim sağlanmaktadır. Yetkisi olmayan kullanıcılar için "Yetkisiz erişim!" mesajı gösterilmektedir.
IDOR zafiyetleri, web uygulamalarında ciddi güvenlik riskleri oluşturabilir. Erişim ve yetki kontrollerini titizlikle uygulayarak ve düzenli güvenlik testleri yaparak bu tür zafiyetlerden korunabilirsiniz.
Yorumlar
Yorum Gönder