Information Disclosure

Web uygulamalarında bilgi sızıntısı zafiyetlerini anlayın ve engelleyin

Bilgi Güvenliği = Gizlilik + Bütünlük + Erişilebilirlik

Bilgi Sızıntısı (Information Disclosure) Nedir?

Bilgi sızıntısı (Information Disclosure/Information Leakage), bir web sitesinin kullanıcılara hassas bilgileri istemeden açığa çıkarması durumudur. Bu zafiyetler doğrudan bir saldırı olmasa da, saldırganlar için değerli bilgiler sağlayarak daha ciddi saldırıların temelini oluşturabilir.

Bilgi sızıntısı, basit teknik detaylardan kritik iş verilerine kadar geniş bir yelpazede ortaya çıkabilir. Bazen bu bilgiler normal kullanım sırasında görülebilirken, çoğu zaman saldırgan web sitesiyle beklenmedik veya kötü niyetli şekillerde etkileşime geçerek bilgi elde etmeye çalışır.

Sızan Bilgi Türleri:
  • Kullanıcı Verileri: E-posta adresleri, telefon numaraları, hesap bilgileri
  • İş Verileri: Finansal bilgiler, ticari sırlar, müşteri listeleri
  • Teknik Bilgiler: Sunucu detayları, framework versiyonları, veritabanı bilgileri
  • Sistem Bilgileri: Dosya yolları, yapılandırma detayları, API anahtarları
💡 Bilgi Sızıntısı Özellikleri:
• Kasıtsız Açığa Çıkarma: Genellikle programcı hatası sonucu
• Zincirleme Etki: Diğer saldırıların başlangıç noktası
• Değişken Etki: Basit bilgiden kritik veriye kadar
• Tespit Zorluğu: Normal işleyişte fark edilmeyebilir
Tarihsel Örnekler
Büyük şirketlerde yaşanan bilgi sızıntıları: Amazon S3 bucket'larının yanlış yapılandırılması, debug modunun production ortamında aktif bırakılması, hata mesajlarında veritabanı şemalarının açığa çıkması gibi durumlar milyonlarca kullanıcıyı etkilemiştir.

Bilgi Sızıntısı Türleri

Bilgi sızıntısı zafiyetleri çeşitli kaynaklardan ortaya çıkabilir. Bu bölümde en yaygın sızıntı türlerini ve örneklerini inceleyeceğiz.

Kritik Seviye Sızıntılar
• Kredi kartı bilgileri ve finansal veriler
• Parola hash'leri ve kimlik doğrulama bilgileri
• Kişisel kimlik bilgileri (SSN, TC No vb.)
• API anahtarları ve gizli tokenlar
Yüksek Seviye Sızıntılar
• Kullanıcı hesap detayları
• İş süreçleri ve ticari bilgiler
• Veritabanı şemaları ve tablo yapıları
• İç ağ topolojisi bilgileri
Orta Seviye Sızıntılar
• Framework ve teknoloji versiyonları
• Sunucu yapılandırma detayları
• Dosya ve dizin yapıları
• Geliştirici yorumları ve metadata
Düşük Seviye Sızıntılar
• Genel sistem bilgileri
• Herkese açık dokümantasyon linkleri
• Temel hata mesajları
• Public API endpoint'leri
Önemli Not: Düşük seviye bilgi sızıntıları tek başına zararsız görünse de, bir araya geldiğinde ciddi güvenlik açıklarının keşfedilmesine yol açabilir.

Hata Mesajlarında Bilgi Sızıntısı

Hata mesajları, bilgi sızıntısının en yaygın kaynaklarından biridir. Ayrıntılı hata mesajları, saldırganlar için değerli bilgiler içerebilir ve saldırı vektörlerini daraltmalarına yardımcı olabilir.

Kötü Örnek - SQL Hata Mesajı:
MySQL Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''admin' AND password='wrongpass'' at line 1 Query: SELECT * FROM users WHERE username='admin' AND password='wrongpass'
💡 Hata Mesajlarından Çıkarılabilecek Bilgiler:
• Veritabanı Türü: MySQL, PostgreSQL, MSSQL
• Tablo ve Sütun Adları: users, username, password
• Dosya Yolları: /var/www/html/config.php
• Framework Bilgileri: Laravel, Django, Spring
Güvenli Hata Mesajı Tasarımı:
// ❌ Kötü - Fazla Bilgi "Database connection failed: Access denied for user 'root'@'localhost'" // ✅ İyi - Genel Mesaj "Service temporarily unavailable. Please try again later." // ✅ İyi - Hata Kodu ile "Error Code: 500-DB-001. Please contact support."

Debug Bilgileri ve Geliştirici Araçları

Geliştirme sürecinde kullanılan debug araçları ve detaylı loglama, production ortamında aktif bırakıldığında ciddi bilgi sızıntılarına yol açabilir. Bu bilgiler saldırganlar için gerçek bir hazine olabilir.

Django Debug Sayfası Örneği:
Debug Mode: ON Exception Type: AttributeError Exception Value: 'User' object has no attribute 'is_admin' Request Information: POST: {'username': 'admin', 'password': 'secret123'} Session: {'user_id': 1, 'role': 'admin', 'api_key': 'sk-abc123...'} Environment Variables: DATABASE_URL: postgres://user:pass@db.internal:5432/app SECRET_KEY: django-insecure-$@#%^&*() AWS_ACCESS_KEY_ID: AKIA...
Debug Bilgilerinin İçerebileceği Hassas Veriler:
  • Oturum Verileri: Kullanıcı ID'leri, roller, tokenlar
  • Veritabanı Bilgileri: Bağlantı stringleri, şifreler
  • API Anahtarları: Üçüncü parti servis anahtarları
  • Dosya Yolları: Sunucu yapısı ve konfigürasyon dosyaları
  • Stack Trace: Kod yapısı ve kullanılan kütüphaneler
Yaygın Debug Araçları
Web Frameworks: Django Debug Toolbar, Laravel Debugbar
PHP: Xdebug, phpinfo() çıktıları
Node.js: Express error handlers, Winston logs
ASP.NET: YSOD (Yellow Screen of Death), trace.axd
Production Kontrol Listesi:
✓ DEBUG = False/Off
✓ Error reporting = Off
✓ Stack trace = Disabled
✓ Verbose logging = Restricted
✓ Development tools = Removed

Kaynak Kod Sızıntısı

Kaynak kod sızıntısı, web uygulamasının kaynak kodunun kısmen veya tamamen saldırganlar tarafından erişilebilir hale gelmesidir. Bu, en ciddi bilgi sızıntısı türlerinden biridir çünkü saldırgana uygulamanın iç yapısını tamamen gösterir.

Kaynak Kod Sızıntısının Yaygın Nedenleri:
  • Backup Dosyaları: .bak, .old, .tmp uzantılı dosyalar
  • Version Control: .git, .svn dizinlerinin erişilebilir olması
  • Text Editör Dosyaları: .swp, ~ ile biten dosyalar
  • Yanlış Yapılandırma: Web sunucusunun PHP dosyalarını işlememesi
  • Archive Dosyaları: .zip, .tar.gz olarak yedeklenen kodlar
Örnek Sızıntı Senaryoları:
# Version Control Sızıntısı https://example.com/.git/config https://example.com/.git/HEAD # Backup Dosya Sızıntısı https://example.com/config.php.bak https://example.com/database.php~ https://example.com/admin.php.old # Archive Sızıntısı https://example.com/backup.zip https://example.com/source.tar.gz # Text Editör Dosyaları https://example.com/index.php.swp https://example.com/.index.php.swp
💡 Kaynak Kod Sızıntısından Elde Edilebilecek Bilgiler:
• Veritabanı bağlantı bilgileri ve şifreler
• API anahtarları ve gizli tokenlar
• İş mantığı ve güvenlik kontrolleri
• Saklı SQL injection ve XSS zafiyetleri
• Şifreleme anahtarları ve salt değerleri

Kullanıcı Hesap Sayfaları ve IDOR

Kullanıcı profil sayfaları doğası gereği hassas bilgiler içerir. Ancak yetersiz erişim kontrolü nedeniyle, kullanıcılar başkalarının hesap bilgilerini görme yetisine sahip olabilir. Bu, Insecure Direct Object Reference (IDOR) zafiyetiyle yakından ilişkilidir.

IDOR ile Bilgi Sızıntısı Örneği:
# Normal kullanım GET /user/profile?id=1234 Response: John Doe'nun profil bilgileri # IDOR saldırısı GET /user/profile?id=1235 Response: Jane Smith'in profil bilgileri (!) # API endpoint'i GET /api/users/1236/details Response: { "email": "admin@company.com", "phone": "+1234567890", "api_key": "sk-1234abcd...", "role": "administrator" }
Kullanıcı Sayfalarında Sızabilecek Bilgiler:
  • Kişisel Bilgiler: Ad, soyad, doğum tarihi, adres
  • İletişim: E-posta, telefon, sosyal medya hesapları
  • Finansal: Kredi kartı son 4 hanesi, fatura adresleri
  • Teknik: API anahtarları, webhook URL'leri
  • Davranışsal: Satın alma geçmişi, tercihler
Güvenli Erişim Kontrolü
Session-based Kontrolü: Kullanıcının sadece kendi verilerine erişmesini sağlayın
Role-based Access: Yetki seviyelerine göre bilgi filtreleme
UUID Kullanımı: Öngörülebilir ID'ler yerine rastgele UUID'ler
Rate Limiting: Aşırı istekleri engelleyin

Dosya Listeleme (Directory Listing)

Directory Listing, web sunucusunun bir dizinin içeriğini index dosyası olmadığında otomatik olarak listelemesidir. Bu, saldırganların sunucudaki dosya yapısını keşfetmesini ve hassas dosyalara erişmesini sağlayabilir.

Directory Listing Örneği:
Index of /uploads/ [ICO] Name Last modified Size Description [DIR] admin/ 2024-01-15 10:30 - [DIR] backup/ 2024-01-10 14:20 - [ ] database_backup.sql 2024-01-15 09:15 2.1M [ ] config.php.bak 2024-01-12 16:45 1.5K [ ] users.csv 2024-01-14 11:30 850K [ ] api_keys.txt 2024-01-13 08:20 234B [DIR] logs/ 2024-01-15 12:00 - [ ] error.log 2024-01-15 12:15 45K
Directory Listing ile Keşfedilebilecek Hassas Dosyalar:
  • Yedek Dosyalar: .bak, .old, .backup uzantılı dosyalar
  • Konfigürasyon: config.php, settings.ini, .env
  • Log Dosyaları: access.log, error.log, debug.log
  • Veritabanı: database.sql, db_backup.sql
  • Geçici Dosyalar: .tmp, .temp, session dosyaları
Önlem Yöntemleri:
• Web sunucusunda directory listing'i devre dışı bırakın
• Her dizine index.html veya index.php dosyası ekleyin
• Hassas dosyaları web erişiminin dışında tutun
• .htaccess ile erişimi engelleyin (Apache)

Geliştirici Yorumları (Developer Comments)

HTML, CSS ve JavaScript kaynak kodunda bırakılan geliştirici yorumları, saldırganlar için değerli bilgiler içerebilir. Bu yorumlar genellikle tarayıcıda görünmez ancak kaynak kodu incelemesi ile kolayca keşfedilebilir.

Hassas Yorum Örnekleri:
<!-- HTML Yorumları --> <!-- TODO: Remove debug user admin/password123 before production --> <!-- API endpoint: https://internal-api.company.com/v2/users --> <!-- Bu kısım beta sürümde kaldırılacak --> /* CSS Yorumları */ /* Old admin panel: /admin-old/ (backup için saklandı) */ /* Test kredisi: 4532-1234-5678-9012 */ // JavaScript Yorumları // API Key: sk-test-1234567890abcdef // Prod DB: mysql://root:admin123@db.internal:3306/app // FIXME: SQL injection vulnerability in search function
Yorumlarda Bulunabilecek Bilgiler:
  • Test Hesapları: Demo kullanıcı adı/şifre bilgileri
  • API Bilgileri: Test API anahtarları, endpoint'ler
  • Dosya Yolları: Gizli dizinler, yedek sayfalar
  • TODO Listeleri: Gelecek özellikler, güvenlik düzeltmeleri
  • Teknik Detaylar: Veritabanı, sunucu konfigürasyonları
💡 Yorum Temizleme Stratejileri:
• Build process'te otomatik yorum temizliği
• Code review'da yorum kontrolü
• Production minification kullanımı
• Sensitive information için ayrı config dosyaları

Güvenli Yapılandırma ve Insecure Configuration

Yanlış yapılandırma, bilgi sızıntısının en yaygın nedenlerinden biridir. Web sunucuları, framework'ler ve üçüncü parti araçların varsayılan ayarları genellikle geliştirme ortamı için optimize edilmiştir ve production ortamında güvenlik riski oluşturur.

Yaygın Yapılandırma Hataları:
  • Debug Mode: Production'da debug modunun aktif kalması
  • Error Reporting: Detaylı hata mesajlarının gösterilmesi
  • Directory Listing: Dizin listelemeinin aktif olması
  • Default Credentials: Varsayılan kullanıcı/şifre kombinasyonları
  • Unnecessary Services: Gereksiz servislerin çalışır durumda olması
HTTP TRACE Method Örneği:
# HTTP TRACE isteği TRACE /index.php HTTP/1.1 Host: example.com Authorization: Bearer secret-token-12345 X-Custom-Header: internal-use-only # Sunucu yanıtı (bilgi sızıntısı!) HTTP/1.1 200 OK Content-Type: message/http TRACE /index.php HTTP/1.1 Host: example.com Authorization: Bearer secret-token-12345 X-Custom-Header: internal-use-only X-Forwarded-For: 192.168.1.100 X-Real-IP: 10.0.0.5
Production Güvenlik Kontrol Listesi:
✓ Debug/development mode kapatılmış
✓ Error reporting sınırlandırılmış
✓ Gereksiz HTTP methodları devre dışı
✓ Server signature gizli
✓ Directory browsing kapalı
✓ Güvenlik header'ları aktif

Test Teknikleri ve Araçları

Bilgi sızıntısı zafiyetlerini tespit etmek için sistematik yaklaşım gerekir. Bu bölümde en etkili test tekniklerini ve kullanılabilecek araçları inceleyeceğiz.

Manuel Test Teknikleri:
  • Fuzzing: Beklenmedik input'larla hata mesajları tetikleme
  • Error Engineering: Kasıtlı hata durumları oluşturma
  • Source Code Analysis: Kaynak kod inceleme
  • HTTP Method Testing: Farklı HTTP methodları deneme
  • Parameter Manipulation: Parametre değerleri değiştirme
Popüler Test Araçları
Burp Suite: Web uygulama güvenlik testi
OWASP ZAP: Açık kaynak güvenlik proxy'si
Nikto: Web sunucu tarayıcı
Dirb/Dirbuster: Dizin ve dosya keşif araçları
Nmap: Port tarama ve servis keşfi
# Burp Suite ile Information Disclosure Testi 1. Proxy ayarları ve hedef site tarama 2. Intruder ile parameter fuzzing 3. Scanner ile otomatik zafiyet tespiti 4. Logger++ ile detaylı log analizi # Command Line Araçları curl -X TRACE http://target.com/ ffuf -w wordlist.txt -u http://target.com/FUZZ nikto -h http://target.com

Önlem ve Savunma Yöntemleri

Bilgi sızıntısı zafiyetlerini önlemek için çok katmanlı bir yaklaşım benimsenmelidir. Bu bölümde etkili savunma stratejilerini inceleyeceğiz.

Geliştirme Aşaması Önlemleri:
  • Secure Coding: Güvenli kodlama standartları
  • Code Review: Kod inceleme süreçleri
  • Static Analysis: Statik kod analizi araçları
  • Error Handling: Merkezi hata yönetimi
  • Logging Strategy: Güvenli loglama stratejisi
// ❌ Kötü Örnek - Bilgi Sızıntısı try { $user = getUserById($_GET['id']); echo "User: " . $user->email; } catch (Exception $e) { die("Database Error: " . $e->getMessage()); } // ✅ İyi Örnek - Güvenli Hata Yönetimi try { $user = getCurrentUserProfile(); // Session tabanlı echo "Welcome " . htmlspecialchars($user->displayName); } catch (Exception $e) { error_log("Profile Error: " . $e->getMessage()); header("HTTP/1.1 500 Internal Server Error"); echo "Service temporarily unavailable"; }
💡 Production Ortamı Güvenlik Önlemleri:
• Environment Variables: Hassas bilgileri env dosyalarında saklama
• Generic Errors: Genel hata mesajları kullanma
• Log Sanitization: Log dosyalarından hassas veri temizleme
• Access Control: Sıkı erişim kontrolü uygulama
• Regular Audits: Düzenli güvenlik denetimleri
Acil Durum Müdahale Planı:
1. Bilgi sızıntısı tespit edildiğinde hemen kaynağı kapatın
2. Sızan bilgilerin kapsamını belirleyin
3. Etkilenen kullanıcıları bilgilendirin
4. Yasal yükümlülükleri yerine getirin (GDPR, vb.)
5. Kök neden analizini yapın ve önlemleri alın

Bilgi Güvenliği Yolculuğunuz Devam Ediyor!

Information Disclosure zafiyetleri çoğunlukla küçük yapılandırma hatalarından kaynaklanır ancak büyük güvenlik ihlallerinin kapısını açabilir. Sürekli dikkat ve sistematik yaklaşım ile bu riskler minimize edilebilir.

Öğrenmeye Devam Etmek İçin
Güvenlik Kaynakları: OWASP Top 10, SANS, NIST
Test Araçları: Burp Suite, OWASP ZAP, Nikto
Geliştirme: Secure coding guidelines, SAST/DAST araçları
Sertifikasyonlar: CEH, OSCP, CISSP

"Security is not a product, but a process" - Bruce Schneier