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:
- Keşif (Reconnaissance): Hedef sistem hakkında bilgi toplama.
- Tarama (Scanning): Açık portlar, servisler ve potansiyel zafiyetlerin tespiti.
- Zafiyet Analizi (Vulnerability Assessment): Tespit edilen açıkların derinlemesine incelenmesi.
- Sömürme (Exploitation): Zafiyetlerin aktif olarak istismar edilmesi.
- Raporlama (Reporting): Bulguların belgelenmesi ve çözüm önerilerinin sunulması.
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}')
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:
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');
}
});
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 Çö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ç: <script>alert(
Yorumlar
Bir Yorum Bırakın
Henüz yorum yapılmamış. İlk yorumu siz yapın!