Genel AI Üretimi

A'dan Z'ye Sızma Testi (Penetration Testing) Metodolojisi ve OWASP Top 10 Güvenlik Açıklarının Kapatılması: Zafiyet Analizi, Saldırı Vektörleri ve Üretim Kodu Çözümleri

1. Sızma Testi Metodolojisine Giriş: Saldırganın Gözünden Sistem Analizi

Sızma testi (penetration testing), bir sistemin güvenlik zafiyetlerini tespit etmek için kontrollü saldırı senaryolarının uygulandığı bir süreçtir. Bu süreç, saldırganın bakış açısını benimseyerek sistemin savunmasız noktalarını ortaya çıkarır. Ancak, metodolojik bir yaklaşım olmadan yapılan testler, yüzeysel sonuçlar üretir ve kritik açıkları gözden kaçırabilir.

1.1. Sızma Testi Fazları: Adım Adım Derinlemesine Analiz

Sızma testleri genellikle beş ana fazdan oluşur:

  1. Keşif (Reconnaissance): Hedef sistem hakkında bilgi toplama.
  2. Tarama (Scanning): Açık portlar, servisler ve potansiyel zafiyetlerin tespiti.
  3. Zafiyet Analizi (Vulnerability Assessment): Tespit edilen açıkların derinlemesine incelenmesi.
  4. Sömürme (Exploitation): Zafiyetlerin aktif olarak istismar edilmesi.
  5. Raporlama (Reporting): Bulguların belgelenmesi ve çözüm önerilerinin sunulması.
🚨 Prodüksiyon Faciası 2021 yılında bir finans kuruluşu, dışarıdan erişilebilir bir Jenkins sunucusunu güncellemeyi ihmal etti. Saldırganlar, CVE-2018-1000861 kodunu kullanarak uzaktan kod çalıştırma (RCE) gerçekleştirdi ve tüm müşteri verilerini şifreledi. Bu olay, keşif fazının ne kadar kritik olduğunu gösteriyor: Jenkins sunucusu, Shodan taramasında kolayca tespit edilebiliyordu.

1.2. Keşif Fazı: OSINT ve Pasif Bilgi Toplama

Keşif fazı, saldırganın hedef hakkında bilgi topladığı ilk adımdır. Bu aşamada kullanılan araçlar ve teknikler:

  • DNS Sorguları: dig, nslookup, dnsrecon
  • WHOIS Kayıtları: Alan adı sahibi, IP bloğu bilgileri
  • Sosyal Medya ve Metadata: LinkedIn, GitHub, PDF/Office dosyalarındaki metadata
  • Arama Motorları: Google Dorks, Shodan, Censys
# Örnek: Google Dorks ile hassas dosyaların tespiti
import requests

dorks = [
    'site:hedef.com filetype:env',
    'site:hedef.com intitle:"index of" "passwords.txt"',
    'inurl:/wp-admin/ intext:"WordPress"'
]

for dork in dorks:
    response = requests.get(f'https://www.google.com/search?q={dork}')
    if 'Did you mean:' not in response.text:
        print(f'Potansiyel zafiyet bulundu: {dork}')
ℹ️ Best Practice Keşif fazında elde edilen bilgiler, saldırganın sonraki adımlarını şekillendirir. Bu nedenle, dışarıya sızdırılan bilgileri minimize etmek için: - **GitHub/GitLab repolarınızda hassas verileri (API anahtarları, şifreler) kontrol edin.** - **Metadata temizleme araçları kullanın** (örn: `exiftool`). - **Robots.txt dosyasını saldırganların işine yarayacak şekilde yapılandırmayın.**

2. OWASP Top 10: Kritik Güvenlik Açıkları ve Savunma Stratejileri

OWASP Top 10, web uygulamalarında en sık karşılaşılan güvenlik açıklarını sıralar. Bu bölümde, her bir açığı saldırı vektörleri, exploit kodları ve üretim seviyesinde çözümler ile inceleyeceğiz.

2.1. A01:2021 - Broken Access Control (Yetki Kontrolündeki Kusurlar)

Yetki kontrolündeki kusurlar, saldırganların yetkisiz erişim elde etmesine olanak tanır. Örneğin:

  • IDOR (Insecure Direct Object Reference): Kullanıcı ID'si üzerinden yetkisiz veri erişimi.
  • Forceful Browsing: Yetkisiz sayfalara doğrudan erişim.

Saldırı Vektörü SVG: IDOR Saldırı Vektörü Kullanıcı A Kullanıcı B Yetkisiz Erişim GET /api/user?id=123 → Kullanıcı B'nin Verisi

Exploit Kodu:

// IDOR zafiyeti içeren bir API endpoint'i
app.get('/api/user/:id', (req, res) => {
    const userId = req.params.id;
    // ❌ Yetki kontrolü yapılmıyor!
    db.query('SELECT * FROM users WHERE id = ?', [userId], (err, result) => {
        if (err) throw err;
        res.json(result);
    });
});

// Saldırgan, kendi ID'si yerine başka bir kullanıcının ID'sini girerek veri çalabilir:
// GET /api/user/123 → Başka bir kullanıcının verilerine erişim

Çözüm Kodu:

// ✅ Yetki kontrolü eklenmiş güvenli endpoint
app.get('/api/user/:id', authenticateToken, (req, res) => {
    const userId = req.params.id;
    const currentUserId = req.user.id; // JWT'den gelen kullanıcı ID'si
    
    // Kullanıcının sadece kendi verilerine erişebilmesini sağla
    if (userId !== currentUserId) {
        return res.status(403).json({ error: 'Yetkisiz erişim' });
    }
    
    db.query('SELECT * FROM users WHERE id = ?', [userId], (err, result) => {
        if (err) throw err;
        res.json(result);
    });
});

2.2. A02:2021 - Cryptographic Failures (Kriptografik Hatalar)

Kriptografik hatalar, verilerin güvenli bir şekilde şifrelenmemesi veya şifreleme anahtarlarının yanlış yönetilmesi sonucu ortaya çıkar. Örnekler:

  • Zayıf şifreleme algoritmaları (MD5, SHA1)
  • Sabit şifreleme anahtarları (hardcoded keys)
  • SSL/TLS yanlış yapılandırmaları

Saldırı Senaryosu: Bir e-ticaret sitesinde kullanıcı şifreleri MD5 ile hashleniyor. Saldırgan, bir veri ihlali sonucu elde ettiği hashleri rainbow table ile kırabilir.

Exploit Kodu:

# MD5 hash'lerini kırmak için basit bir script
import hashlib

passwords = ['password123', 'admin123', 'qwerty']
rainbow_table = {}

for pwd in passwords:
    hash = hashlib.md5(pwd.encode()).hexdigest()
    rainbow_table[hash] = pwd

# Veri ihlali sonucu elde edilen hash
leaked_hash = '202cb962ac59075b964b07152d234b70'
print(f'Kırılan şifre: {rainbow_table.get(leaked_hash, "Bulunamadı")}')

Çözüm Kodu:

// ✅ Güvenli şifre depolama (bcrypt ile)
import bcrypt from 'bcrypt';

const saltRounds = 12;
const plainPassword = 'kullaniciSifresi123';

bcrypt.hash(plainPassword, saltRounds, (err, hash) => {
    if (err) throw err;
    console.log('Güvenli hash:', hash);
    // $2b$12$N9qo8uLOickgx2ZMRZoMy... (bcrypt hash örneği)
});

// Şifre doğrulama
bcrypt.compare(plainPassword, hash, (err, result) => {
    if (result) {
        console.log('Şifre doğru');
    }
});
💡 Mimari Karar Kriptografik hataları önlemek için: - **Şifreleme algoritmaları olarak Argon2, bcrypt veya PBKDF2 kullanın.** - **Şifreleme anahtarlarını environment variable veya secret management sistemlerinde saklayın.** - **TLS 1.2+ zorunlu kılın ve HSTS (HTTP Strict Transport Security) kullanın.**

2.3. A03:2021 - Injection (Enjeksiyon)

Enjeksiyon saldırıları, saldırganın kötü niyetli kodları uygulama mantığına enjekte etmesiyle gerçekleşir. En yaygın türleri:

  • SQL Injection
  • NoSQL Injection
  • Command Injection
  • XSS (Cross-Site Scripting)

SQL Injection Exploit Kodu:

-- Kötü niyetli giriş: admin' --
SELECT * FROM users WHERE username = 'admin' --' AND password = 'herhangiBirSifre';

-- Sonuç: Tüm kullanıcı verileri sızdırılır

Çözüm Kodu (Prepared Statements):

// ✅ Güvenli SQL sorgusu (TypeORM ile)
import { getRepository } from 'typeorm';
import { User } from './entity/User';

const username = req.body.username;
const password = req.body.password;

// Prepared statement kullanımı
const user = await getRepository(User)
    .createQueryBuilder('user')
    .where('user.username = :username AND user.password = :password', { username, password })
    .getOne();

XSS Saldırı Vektörü SVG: XSS Saldırı Vektörü Kullanıcı Girişi Kötü Niyetli Kod <script>alert(1)</script> Tarayıcıda Çalıştırılan Kötü Niyetli Kod

XSS Çözüm Kodu:

// ✅ XSS saldırılarını önlemek için input sanitization
import { sanitize } from 'dompurify';
import { JSDOM } from 'jsdom';

const window = new JSDOM('').window;
const DOMPurify = sanitize(window);

const userInput = '';
const cleanInput = DOMPurify.sanitize(userInput);
// Sonuç: &lt;script&gt;alert(

Etiketler

Bu yazı nasıldı? Bir emoji bırak!

Yorumlar

0 Yorum

Bir Yorum Bırakın

💬

Henüz yorum yapılmamış. İlk yorumu siz yapın!