Sosyal Mühendislik Saldırıları ve Korunma Yöntemleri
Yıllar önce bir müşterimizin ofisine danışmanlık için gittiğimde, resepsiyondaki görevli beni hiç sormadan içeri aldı. “IT’den geliyorum, sunucu odasını kontrol etmem lazım” demem yeterliydi. O gün fark ettim ki en pahalı firewall’lar, en güçlü IDS sistemleri, insan faktörü karşısında ne kadar yetersiz kalabiliyor. Sosyal mühendislik tam da bu noktada devreye giriyor: teknik açıkları değil, insanları istismar eden bir saldırı vektörü.
Sosyal Mühendislik Nedir, Neden Önemlidir?
Sosyal mühendislik, teknik araçlar yerine psikolojik manipülasyon kullanarak hedef kişiyi istenen eylemi yapmaya ikna etme sanatıdır. Saldırganlar sistem açıklarını aramak yerine doğrudan insanları hedef alır çünkü insanlar genellikle en zayıf halkadır.
Linux sistemleri yönetiyorsunuz, SELinux politikalarınız mükemmel, fail2ban çalışıyor, iptables kurallarınız sıkı. Ama bir kullanıcı phishing maili ile SSH anahtarını bir yabancıya verdiyse, tüm bu önlemler anlamsızlaşır.
Gerçek dünyadan bir senaryo: Büyük bir e-ticaret firmasında çalışan bir DevOps mühendisi, “GitHub Security Team” adından gelen bir mail alıyor. Mail, GitHub hesabının şüpheli aktivite nedeniyle kilitlendiğini, bağlantıya tıklayıp kimliğini doğrulaması gerektiğini söylüyor. Mail birebir GitHub’ın tasarımını taklit ediyor. Mühendis giriş yapıyor, artık saldırganın elinde production ortamına erişim yetkisi var.
Yaygın Sosyal Mühendislik Teknikleri
Phishing ve Spear Phishing
Phishing geniş kitleye atılan genel saldırılardır. Spear phishing ise hedefe özel, araştırılmış, kişiselleştirilmiş saldırılardır. Bir sysadmin’i hedef alan spear phishing maili şöyle başlayabilir: “Merhaba [İsim], [Şirket Adı]’nın Palo Alto yönetim paneline erişim bilgilerinizin süresi dolmuş…”
Pretexting (Sahte Kimlik)
Saldırgan kendini IT desteği, üst yönetim, denetçi ya da tedarikçi olarak tanıtır. Telefonda “Acil bir sunucu sorunu var, şu an root şifresine ihtiyacım var” demesi yeterli olabilir bazı ortamlarda.
Baiting
USB bellek, QR kod veya indirilebilir dosya gibi cazip görünen tuzaklar. Şirket otoparkına bırakılan “Maaş Listesi 2024.xlsx” yazılı USB’yi merak eden biri takıyor makineye.
Vishing (Voice Phishing)
Telefon üzerinden gerçekleştirilen sosyal mühendislik. Saldırgan kendini helpdesk olarak tanıtıp kullanıcının şifresini “sıfırlamak” için eski şifreyi soruyor.
Tailgating / Piggybacking
Fiziksel güvenlik ihlali. Yetkili bir kişinin arkasından kapıdan geçmek. Yukarıda anlattığım deneyim tam olarak bu kategoriye giriyor.
Linux Sistemlerinde Tespit Mekanizmaları Kurmak
Teknik önlemler sosyal mühendisliği tamamen engelleyemez ama hasarı minimize etmek ve olayları tespit etmek için kritik önemdedir.
Kimlik Doğrulama Loglarını İzlemek
# Başarısız SSH giriş denemelerini izle
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -rn | head -20
# Başarılı ama şüpheli saatlerden yapılan girişleri bul
grep "Accepted" /var/log/auth.log | awk '{print $1, $2, $3, $9, $11}' | grep -v "^$(date +%b)"
# Son 24 saatte sudo kullanan kullanıcıları listele
grep "sudo:" /var/log/auth.log | grep "COMMAND" | tail -50
Auditd ile Kritik Dosya Erişimlerini İzlemek
auditd sosyal mühendislik sonrası gerçekleşen iç saldırıları yakalamak için güçlü bir araçtır. Bir saldırgan içeri girdikten sonra ne yapıyor? Dosya okuyor, kopyalıyor, değiştiriyor. Bunları yakalayalım.
# auditd kurulumu
apt install auditd audispd-plugins -y # Debian/Ubuntu
# ya da
yum install audit -y # RHEL/CentOS
# /etc/audit/rules.d/sysadmin.rules dosyasına ekle
cat >> /etc/audit/rules.d/sysadmin.rules << 'EOF'
# /etc/passwd ve shadow dosyası değişikliklerini izle
-w /etc/passwd -p wa -k identity_change
-w /etc/shadow -p wa -k identity_change
-w /etc/sudoers -p wa -k sudoers_change
# SSH authorized_keys değişikliklerini izle
-w /root/.ssh/ -p wa -k ssh_keys
-w /home/ -p wa -k home_dirs
# Yetkisiz setuid kullanımını izle
-a always,exit -F arch=b64 -S setuid -k setuid_call
EOF
# Kuralları yeniden yükle
augenrules --load
systemctl restart auditd
Fail2ban Konfigürasyonu
# /etc/fail2ban/jail.local
cat > /etc/fail2ban/jail.local << 'EOF'
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
ignoreip = 127.0.0.1/8
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
maxretry = 3
bantime = 86400
[sshd-ddos]
enabled = true
port = ssh
logpath = %(sshd_log)s
maxretry = 10
findtime = 120
EOF
systemctl restart fail2ban
fail2ban-client status sshd
Phishing Simülasyonu ile Farkındalık Ölçmek
En iyi savunma, kendi çalışanlarınızı test etmekten geçiyor. GoPhish, açık kaynaklı ve ücretsiz bir phishing simülasyon aracıdır.
# GoPhish kurulumu
wget https://github.com/gophish/gophish/releases/download/v0.12.1/gophish-v0.12.1-linux-64bit.zip
unzip gophish-v0.12.1-linux-64bit.zip -d /opt/gophish
chmod +x /opt/gophish/gophish
# Konfigürasyon dosyasını düzenle
cat > /opt/gophish/config.json << 'EOF'
{
"admin_server": {
"listen_url": "127.0.0.1:3333",
"use_tls": true,
"cert_path": "gophish_admin.crt",
"key_path": "gophish_admin.key"
},
"phish_server": {
"listen_url": "0.0.0.0:80",
"use_tls": false
},
"db_name": "sqlite3",
"db_path": "gophish.db",
"logging": {
"filename": "gophish.log"
}
}
EOF
# Servisi başlat
cd /opt/gophish && ./gophish &
GoPhish ile aylık simülasyonlar yapıp kim tıkladı, kim bildirdi, kim formu doldurdu diye raporlar çıkarabilirsiniz. Bu rakamlar zamanla düşüyorsa farkındalık eğitimleriniz işe yarıyor demektir.
E-posta Güvenliğini Sertleştirmek
Phishing’in en büyük silahı sahte e-posta adresleridir. SPF, DKIM ve DMARC üçlüsü bu konuda temel savunma hattıdır.
# Postfix ile SPF kontrolü için python-policyd-spf kurulumu
apt install postfix-policyd-spf-python -y
# /etc/postfix/master.cf'e ekle
echo "policy unix - n n - 0 spawn
user=nobody argv=/usr/bin/python3 /usr/lib/python3/dist-packages/spf_engine/policyd-spf" >> /etc/postfix/master.cf
# /etc/postfix/main.cf'e ekle
cat >> /etc/postfix/main.cf << 'EOF'
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
check_policy_service unix:private/policy
EOF
# SPF DNS kaydı örneği (zone dosyanıza ekleyin)
# example.com. IN TXT "v=spf1 mx a:mail.example.com ~all"
# DKIM kurulumu
apt install opendkim opendkim-tools -y
opendkim-genkey -t -s mail -d example.com
cat /etc/opendkim/keys/example.com/mail.txt # DNS'e eklenecek kayıt
systemctl restart postfix
DMARC kaydınızı da DNS’e eklemeyi unutmayın:
# DMARC DNS kaydı (zone dosyasına veya DNS yönetim panelinize)
# _dmarc.example.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:[email protected]; pct=100"
# Gelen maillerdeki DMARC durumunu kontrol et
apt install opendmarc -y
# /etc/opendmarc.conf içine
cat > /etc/opendmarc.conf << 'EOF'
AuthservID OpenDMARC
TrustedAuthservIDs mail.example.com
RejectFailures false
IgnoreAuthenticatedClients true
RequiredHeaders true
EOF
Kullanıcı Hesapları ve Yetki Yönetimi
Sosyal mühendislik saldırısı başarılı olsa bile “least privilege” prensibi hasarı sınırlar. Bir kullanıcı kandırıldığında, o kullanıcının erişebildiği şeyler ne kadarse zarar o kadar büyük olur.
# Sudo yetkilerini denetleme scripti
#!/bin/bash
echo "=== Sudo yetkisi olan kullanıcılar ==="
grep -Po '^sudo.+:K.*$' /etc/group | tr ',' 'n'
echo ""
echo "=== /etc/sudoers.d/ içindeki özel kurallar ==="
ls -la /etc/sudoers.d/
for f in /etc/sudoers.d/*; do
echo "--- $f ---"
cat "$f"
done
echo ""
echo "=== Son 7 günde giriş yapmayan ama aktif hesaplar ==="
lastlog | awk 'NR>1 && $2 != "**Never" {print}' | awk -v date="$(date -d '7 days ago' '+%b %d')" '$0 < date'
# Şüpheli yetki yükseltme girişimlerini tespit et
#!/bin/bash
# Cron'a ekle: */15 * * * * /usr/local/bin/check_privilege_escalation.sh
LOG="/var/log/auth.log"
ALERT_MAIL="[email protected]"
SUSPICIOUS=$(grep "sudo:" $LOG | grep -E "(authentication failure|3 incorrect password)" | tail -20)
if [ -n "$SUSPICIOUS" ]; then
echo "$SUSPICIOUS" | mail -s "[UYARI] Şüpheli sudo girişimi tespit edildi" $ALERT_MAIL
logger -p security.warn "Şüpheli sudo girişimi tespit edildi"
fi
Fiziksel Güvenlik ve Politika Kontrolleri
Teknik önlemlerin yanı sıra politika düzeyinde kontroller şart. Bunları script ile denetleyemezsiniz ama sonuçlarını denetleyebilirsiniz.
Ekrana kilit politikası: Çalışanların bilgisayarlarını kilitsiz bırakması büyük risk. GPO veya Linux’ta şu şekilde zorunlu kılabilirsiniz:
# GNOME masaüstü için otomatik ekran kilidi (5 dakika)
sudo -u kullanici_adi DCONF_PROFILE=user dconf write /org/gnome/desktop/screensaver/lock-enabled true
sudo -u kullanici_adi DCONF_PROFILE=user dconf write /org/gnome/desktop/session/idle-delay "uint32 300"
# Merkezi yönetim için /etc/dconf/db/local.d/00-screensaver dosyası oluştur
mkdir -p /etc/dconf/db/local.d/
cat > /etc/dconf/db/local.d/00-screensaver << 'EOF'
[org/gnome/desktop/screensaver]
lock-enabled=true
lock-delay=uint32 0
[org/gnome/desktop/session]
idle-delay=uint32 300
EOF
# Kullanıcıların değiştirmesini engelle
mkdir -p /etc/dconf/db/local.d/locks/
cat > /etc/dconf/db/local.d/locks/screensaver << 'EOF'
/org/gnome/desktop/screensaver/lock-enabled
/org/gnome/desktop/session/idle-delay
EOF
dconf update
Olay Müdahale: Sosyal Mühendislik Sonrası Ne Yapmalı?
Saldırı gerçekleşti diyelim. Bir kullanıcı phishing’e düştü ve credentials’ını verdi. Paniklemeden adım adım gidelim.
#!/bin/bash
# Acil hesap kilitleme ve oturum sonlandırma scripti
# Kullanım: ./incident_response.sh kullanici_adi
USERNAME=$1
if [ -z "$USERNAME" ]; then
echo "Kullanıcı adı belirtilmedi!"
exit 1
fi
echo "[+] $USERNAME hesabı kilitleniyor..."
passwd -l $USERNAME
usermod -e 1 $USERNAME # Hesabı expire et
echo "[+] Aktif oturumlar sonlandırılıyor..."
pkill -u $USERNAME
# SSH oturumlarını da kapat
ps aux | grep "sshd.*$USERNAME" | awk '{print $2}' | xargs -r kill -9
echo "[+] Authorized keys yedekleniyor ve temizleniyor..."
if [ -f "/home/$USERNAME/.ssh/authorized_keys" ]; then
cp /home/$USERNAME/.ssh/authorized_keys /root/incident_backup_${USERNAME}_$(date +%Y%m%d).keys
echo "" > /home/$USERNAME/.ssh/authorized_keys
fi
echo "[+] Son aktivite logları toplanıyor..."
last $USERNAME > /root/incident_last_${USERNAME}_$(date +%Y%m%d).log
grep $USERNAME /var/log/auth.log >> /root/incident_last_${USERNAME}_$(date +%Y%m%d).log
echo "[+] Tamamlandı. Lütfen detaylı inceleme için forensics ekibini bilgilendirin."
logger -p security.crit "INCIDENT RESPONSE: $USERNAME hesabı güvenlik ihlali şüphesiyle kilitlendi"
Eğitim ve Kültür: En Güçlü Savunma
Bütün bu teknik önlemlerin yanında, kurumsal güvenlik kültürü oluşturmak en etkili uzun vadeli savunmadır. Şunu çok net söyleyeyim: insanlar neyi neden yapmamaları gerektiğini anlamadan, sadece “yapma” denildiği için yapmamaz.
Etkili bir güvenlik farkındalık programı için pratik öneriler:
- Gerçek vakalarla anlatın: Soyut tehditler yerine “Geçen ay şu sektörde şu saldırı oldu, nasıl gerçekleşti” diye anlatın
- Kısa ve sık eğitimler verin: Yılda bir 4 saatlik eğitim yerine, ayda bir 15 dakikalık mini dersler çok daha etkilidir
- Bildirimi ödüllendirin: Phishing mailini bilen ve bildiren çalışanı kutlayın, cezalandırmayın
- Simülasyon sonuçlarını paylaşın: “Bu ay çalışanlarımızın %23’ü tıkladı” demek, herkesin konuyu ciddiye almasını sağlar
- IT ekibine özel protokoller tanımlayın: “Biz asla telefonda şifre sormayız” gibi net kurallar koyun ve herkese duyurun
Sonuç
Sosyal mühendislik savunması tek bir araç veya politikayla çözülemez. Katmanlı bir yaklaşım şart: teknik kontroller, politikalar ve insan faktörü hep birlikte ele alınmalı.
Özetlemek gerekirse en kritik adımlar şunlar:
- Auditd ve merkezi log yönetimi ile şüpheli aktiviteleri kayıt altına alın
- SPF, DKIM, DMARC ile e-posta kimlik sahteciliğini engelleyin
- GoPhish gibi araçlarla düzenli phishing simülasyonları yapın
- Least privilege prensibini ödünsüz uygulayın, her hesabın yetki düzeyini düzenli denetleyin
- Olay müdahale prosedürlerinizi önceden hazırlayın, kriz anında yazmayın
- Güvenlik kültürünü ceza değil farkındalık üzerine inşa edin
Teknik altyapınız ne kadar sağlam olursa olsun, insanlar her zaman hedef olacak. Fark yaratan şey, bu hedefin ne kadar kolay ya da zor vurulabildiğidir.
