Hashcat ile Gelişmiş Parola Kırma Teknikleri ve Parola Politikası Sıkılaştırma

Parola güvenliği, sistem yöneticilerinin en çok görmezden geldiği ama en kritik konuların başında geliyor. Bir penetrasyon testi sırasında ya da kendi ortamınızı denetlerken parola zayıflıklarını tespit etmek için Hashcat gibi araçları anlamak şart. Bu yazıda hem saldırgan perspektifinden Hashcat kullanımını derinlemesine inceleyeceğiz, hem de bu bilgiyi kullanarak parola politikalarınızı nasıl sıkılaştıracağınızı ele alacağız. Amaç sadece “hashcat çalıştırmak” değil, gerçek dünya senaryolarında ne işe yaradığını anlamak.

Hashcat Nedir ve Neden Önemlidir

Hashcat, GPU tabanlı çalışabilen dünyanın en hızlı parola kırma araçlarından biri. CPU ile de çalışıyor ama asıl gücünü modern GPU’lardan alıyor. MD5, SHA-1, SHA-256, bcrypt, NTLM, WPA2 gibi yüzlerce hash türünü destekliyor. Sysadmin olarak bu aracı iki amaçla kullanıyorsunuz: ya mevcut hash veritabanınızı test edip zayıf parolaları buluyorsunuz, ya da gerçek bir sızma testinde kullanıyorsunuz.

Önemli bir not: Bu araçları sadece yetkili olduğunuz sistemlerde ya da kendi test ortamınızda kullanın. Başkasının sistemine yetkisiz erişim girişimi her ülkede suç.

Kurulum

Ubuntu/Debian tabanlı sistemlerde:

# Paket yöneticisi ile kurulum
sudo apt update
sudo apt install hashcat

# Ya da en güncel sürüm için
wget https://hashcat.net/files/hashcat-6.2.6.tar.gz
tar -xvzf hashcat-6.2.6.tar.gz
cd hashcat-6.2.6
make
sudo make install

# GPU sürücülerini ve OpenCL desteğini kontrol et
hashcat -I

Kurulumdan sonra hashcat -I komutu size mevcut GPU ve CPU bilgilerini gösterir. Eğer GPU göremiyorsanız OpenCL veya CUDA sürücülerinizi güncellemeniz gerekiyor.

Hash Türlerini Tanımak

Hashcat kullanmadan önce elimizdeki hash’in türünü bilmemiz gerekiyor. Hash tanımlama için hashid veya hash-identifier araçlarını kullanabilirsiniz.

# hashid kurulumu ve kullanımı
pip install hashid
hashid '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi'

# hash-identifier ile
hash-identifier
# Açılan arayüze hash'i yapıştırın

# Ya da doğrudan hashcat ile örnek hash'leri listele
hashcat --example-hashes | grep -A 3 "bcrypt"

Yaygın hash türleri ve Hashcat numaraları:

  • 0: MD5
  • 100: SHA-1
  • 1400: SHA-256
  • 1800: sha512crypt (Linux shadow dosyası)
  • 3200: bcrypt
  • 1000: NTLM (Windows)
  • 2500: WPA-EAPOL-PBKDF2 (WiFi)
  • 5600: NetNTLMv2

Saldırı Modları

Hashcat’in altı temel saldırı modu var. Her birini ne zaman kullanacağınızı bilmek, işi hızlandırır.

Mod 0: Düz Sözlük Saldırısı

En basit ve çoğu zaman en etkili yöntem. Bir kelime listesi alıp her kelimeyi hash’leyip karşılaştırıyor.

# Temel sözlük saldırısı
hashcat -m 0 -a 0 hashes.txt /usr/share/wordlists/rockyou.txt

# Parametreler:
# -m 0: Hash türü (MD5)
# -a 0: Saldırı modu (sözlük)
# hashes.txt: Kırmak istediğimiz hash dosyası
# rockyou.txt: Kelime listesi

# İlerlemeyi görmek için çalışırken 's' tuşuna bas
# Çıktıyı dosyaya kaydet
hashcat -m 0 -a 0 hashes.txt rockyou.txt -o bulunanlar.txt

# Potansiyel dosyası (daha önce kırılmış hash'ler)
hashcat -m 0 -a 0 hashes.txt rockyou.txt --potfile-path ~/.hashcat/hashcat.potfile

Mod 3: Brute Force (Kaba Kuvvet)

Belirli bir karakter seti içinde tüm kombinasyonları deniyor. Kısa parolalar için işe yarıyor.

# 8 karakterlik sadece rakam içeren parolalar
hashcat -m 0 -a 3 hashes.txt ?d?d?d?d?d?d?d?d

# Karakter maskeleri:
# ?l: küçük harf (a-z)
# ?u: büyük harf (A-Z)
# ?d: rakam (0-9)
# ?s: özel karakter
# ?a: tüm karakterler

# Büyük harf + küçük harf + rakam, 6 karakter
hashcat -m 0 -a 3 hashes.txt ?u?l?l?l?l?d

# Özel karakter seti tanımla
hashcat -m 0 -a 3 hashes.txt -1 ?u?l -2 ?d?s '?1?1?1?2?2'

Mod 6 ve 7: Hibrit Saldırılar

Sözlük ile maske kombinasyonu. Gerçek dünyada insanlar “parola123” veya “2024parola” gibi şeyler yazıyor. Bu mod tam bu alışkanlıkları hedef alıyor.

# Sözlük + rakam eklentisi (parola123 gibi)
hashcat -m 0 -a 6 hashes.txt rockyou.txt ?d?d?d

# Rakam ön eki + sözlük (2024parola gibi)
hashcat -m 0 -a 7 hashes.txt ?d?d?d?d rockyou.txt

# Yıl eki ile (parola2023, parola2024)
hashcat -m 0 -a 6 hashes.txt rockyou.txt 202?d

Kural Tabanlı Saldırılar

Hashcat’in en güçlü özelliklerinden biri kural motoru. İnsanların parola oluştururken yaptığı değişiklikleri (büyük harf yapma, sayı ekleme, ters çevirme vb.) otomatik olarak uygulayabiliyor.

# Hashcat ile birlikte gelen kuralları listele
ls /usr/share/hashcat/rules/

# best64.rule: En yaygın 64 dönüşüm
hashcat -m 0 -a 0 hashes.txt rockyou.txt -r /usr/share/hashcat/rules/best64.rule

# Birden fazla kural dosyası kullan
hashcat -m 0 -a 0 hashes.txt rockyou.txt 
  -r /usr/share/hashcat/rules/best64.rule 
  -r /usr/share/hashcat/rules/toggles1.rule

# Özel kural dosyası oluştur
cat > ozel_kurallar.rule << 'EOF'
:
c
u
l
r
d
$1
$2
$3
$!
$@
$1$2$3
^2$0$2$4
EOF

# Kural açıklamaları:
# : değişiklik yapma (olduğu gibi dene)
# c ilk harfi büyük yap
# u tüm harfleri büyük yap
# l tüm harfleri küçük yap
# r ters çevir
# d çift yaz (parolaparola)
# $X sona X ekle
# ^X başa X ekle

hashcat -m 0 -a 0 hashes.txt rockyou.txt -r ozel_kurallar.rule

Gerçek Dünya Senaryosu: Linux Shadow Dosyası Testi

Diyelim ki kendi sunucunuzun parola güvenliğini test etmek istiyorsunuz. Elimizde /etc/shadow dosyasından çekilmiş hash’ler var.

# Shadow dosyasından hash çekme (root yetkisi gerekir)
sudo cat /etc/shadow | grep -v '!' | grep -v '*' | cut -d: -f1,2 > shadow_hashes.txt

# Ya da sadece belirli kullanıcı
sudo getent shadow testuser | cut -d: -f2 > test_hash.txt

# Hash türünü belirle (genellikle $6$ sha512crypt ya da $y$ yescrypt)
cat shadow_hashes.txt | head -3

# $6$: sha512crypt -> hashcat mod 1800
# $y$: yescrypt -> hashcat mod 3400  
# $2y$: bcrypt -> hashcat mod 3200
# $5$: sha256crypt -> hashcat mod 7400

# Linux sha512crypt hash kırma
hashcat -m 1800 -a 0 shadow_hashes.txt rockyou.txt 
  -r /usr/share/hashcat/rules/best64.rule 
  --status --status-timer 60

# Yavaş hash'ler için optimizasyon
hashcat -m 1800 -a 0 shadow_hashes.txt rockyou.txt 
  -O --kernel-accel 1 --kernel-loops 1024

Gerçek Dünya Senaryosu: NTLM Hash Kırma

Windows ortamında çalışıyorsanız veya Active Directory testleri yapıyorsanız NTLM hash’leri sıkça karşılaşacağınız bir durum.

# NTLM hash örneği (Mimikatz veya secretsdump ile elde edilmiş)
echo "administrator:500:aad3b435b51404eeaad3b435b51404ee:8846f7eaee8fb117ad06bdd830b7586c:::" > ntlm.txt

# Sadece NTLM kısmını al
cat ntlm.txt | cut -d: -f4 > ntlm_hash.txt

# NTLM kırma
hashcat -m 1000 -a 0 ntlm_hash.txt rockyou.txt 
  -r /usr/share/hashcat/rules/best64.rule

# NetNTLMv2 kırma (Responder ile yakalandıysa)
hashcat -m 5600 -a 0 netntlm_hashes.txt rockyou.txt 
  -r /usr/share/hashcat/rules/best64.rule 
  --force

# Sonuçları göster
hashcat -m 1000 ntlm_hash.txt --show

Özel Wordlist Oluşturma

Hedef odaklı testlerde kurumun adı, sektörü, coğrafi konumu gibi bilgilerle özelleştirilmiş kelime listeleri çok daha etkili oluyor. CeWL ve CUPP bu iş için kullanılan araçlar.

# CeWL ile web sitesinden kelime listesi oluştur
cewl https://hedefsite.com -d 3 -m 6 -w site_wordlist.txt

# CUPP ile kişi odaklı wordlist (sosyal mühendislik)
pip install cupp
cupp -i
# İsim, doğum tarihi, evcil hayvan adı gibi bilgileri gir

# Mevcut listeleri birleştir ve tekrarları kaldır
cat rockyou.txt site_wordlist.txt custom.txt | sort -u > combined.txt

# Hashcat maskegen ile maske istatistikleri çıkar
# Önce örnek parolaları maskegen formatına çevir
cat bilinen_parolalar.txt | hashcat --stdout -a 3 > masks.txt

Performans Optimizasyonu

Hashcat’i verimli kullanmak için birkaç kritik ayar var.

# Mevcut cihazları listele
hashcat -I

# Sadece GPU kullan
hashcat -m 0 -a 0 hashes.txt wordlist.txt -D 2

# Birden fazla GPU kullan
hashcat -m 0 -a 0 hashes.txt wordlist.txt -D 2 --opencl-device-types 1,2

# Workload profili (1=düşük, 2=ekonomik, 3=yüksek, 4=kabuk donabilir)
hashcat -m 0 -a 0 hashes.txt wordlist.txt -w 3

# Optimize edilmiş kernel (bazı hash türlerinde 2x hız)
hashcat -m 0 -a 0 hashes.txt wordlist.txt -O

# Checkpoint (uzun işlemlerde ara kayıt)
hashcat -m 1800 -a 0 hashes.txt wordlist.txt 
  --restore-file-path session1.restore 
  --session session1

# Kaldığı yerden devam et
hashcat --session session1 --restore

Parola Politikası Sıkılaştırma

Artık saldırı tarafını gördük. Şimdi bu bilgiyle sistemlerimizi nasıl güçlendireceğimize bakalım.

Linux’ta PAM ile Parola Politikası

# pwquality modülünü kur
sudo apt install libpam-pwquality

# Parola politikasını yapılandır
sudo nano /etc/security/pwquality.conf

# Önerilen ayarlar:
cat >> /etc/security/pwquality.conf << 'EOF'
minlen = 14
dcredit = -2
ucredit = -1
lcredit = -1
ocredit = -1
maxrepeat = 3
maxsequence = 3
gecoscheck = 1
dictcheck = 1
usercheck = 1
enforcing = 1
EOF

# PAM yapılandırması
sudo nano /etc/pam.d/common-password

# Bu satırı ekle/düzenle:
# password requisite pam_pwquality.so retry=3 minlen=14 dcredit=-2 ucredit=-1 lcredit=-1 ocredit=-1

# Parola geçmişi (son 10 parolayı engelle)
# /etc/pam.d/common-password içine:
# password required pam_pwhistory.so remember=10 use_authtok

# Hesap kilitleme (5 başarısız denemede kilitle)
sudo nano /etc/pam.d/common-auth
# Ekle: auth required pam_faillock.so preauth silent deny=5 unlock_time=900

Parola Yaşlandırma Politikası

# Sistem geneli parola yaşlandırma ayarları
sudo nano /etc/login.defs

# Şu değerleri ayarla:
# PASS_MAX_DAYS 90
# PASS_MIN_DAYS 1
# PASS_WARN_AGE 14
# PASS_MIN_LEN 14

# Mevcut kullanıcıya parola politikası uygula
sudo chage -M 90 -m 1 -W 14 kullanici_adi

# Tüm kullanıcılara toplu uygula (root hariç)
for user in $(awk -F: '$3 >= 1000 && $3 < 65534 {print $1}' /etc/passwd); do
    sudo chage -M 90 -m 1 -W 14 "$user"
    echo "Güncellendi: $user"
done

# Kullanıcının parola durumunu kontrol et
sudo chage -l kullanici_adi

Zayıf Parola Tespiti için Düzenli Denetim

Aşağıdaki script ile sisteminizde zayıf parolaları düzenli olarak test edebilirsiniz:

#!/bin/bash
# Zayif parola denetim scripti
# Cron ile haftalik calistirin

SHADOW_FILE="/etc/shadow"
WORDLIST="/usr/share/wordlists/rockyou.txt"
RULES="/usr/share/hashcat/rules/best64.rule"
OUTPUT_DIR="/var/log/parola_denetim"
DATE=$(date +%Y%m%d_%H%M%S)
TEMP_HASH="/tmp/denetim_hash_$DATE.txt"
RESULT_FILE="$OUTPUT_DIR/zayif_parolalar_$DATE.txt"

mkdir -p "$OUTPUT_DIR"

# Hash'leri çek (sadece aktif kullanıcılar)
sudo grep -v '!' /etc/shadow | grep -v '*' | grep -v '::' | cut -d: -f1,2 > "$TEMP_HASH"

echo "Denetim basladi: $(date)" >> "$RESULT_FILE"
echo "Kontrol edilen kullanici sayisi: $(wc -l < $TEMP_HASH)" >> "$RESULT_FILE"

# Hashcat calistir (sadece yaygın parolalar, 30 dakika limit)
hashcat -m 1800 -a 0 "$TEMP_HASH" "$WORDLIST" 
  -r "$RULES" 
  --runtime 1800 
  --quiet 
  -o /tmp/kirilan_$DATE.txt 2>/dev/null

# Kırılan parolaların kullanici adlarını raporla (parolayı degil)
if [ -f "/tmp/kirilan_$DATE.txt" ]; then
    echo "UYARI: Zayif parola tespit edilen kullanicilar:" >> "$RESULT_FILE"
    while IFS=: read -r hash parola; do
        kullanici=$(grep "$hash" "$TEMP_HASH" | cut -d: -f1)
        echo "- $kullanici (parola detayi loglanmadi)" >> "$RESULT_FILE"
    done < /tmp/kirilan_$DATE.txt
    
    # Sonuclari mail gonder
    mail -s "Zayif Parola Uyarisi - $(hostname)" [email protected] < "$RESULT_FILE"
fi

# Temizlik
rm -f "$TEMP_HASH" /tmp/kirilan_$DATE.txt
chmod 600 "$RESULT_FILE"

echo "Denetim tamamlandi: $(date)" >> "$RESULT_FILE"

Fail2Ban ile Brute Force Koruması

# Fail2Ban kurulumu
sudo apt install fail2ban

# SSH için jail yapılandırması
sudo cat > /etc/fail2ban/jail.local << 'EOF'
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
backend = systemd

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400

[sshd-ddos]
enabled = true
port = ssh
filter = sshd-ddos
logpath = /var/log/auth.log
maxretry = 10
findtime = 60
bantime = 86400
EOF

sudo systemctl enable fail2ban
sudo systemctl restart fail2ban

# Durumu kontrol et
sudo fail2ban-client status sshd

# Manuel ban ekle/kaldır
sudo fail2ban-client set sshd banip 192.168.1.100
sudo fail2ban-client set sshd unbanip 192.168.1.100

Hashcat Sonuçlarını Analiz Etmek

Testlerden elde ettiğiniz verileri doğru yorumlamak, politikanızı şekillendirmenize yardımcı oluyor.

# Kırılan parolaların uzunluk dağılımını analiz et
cat kirilan_parolalar.txt | awk -F: '{print length($2)}' | sort | uniq -c | sort -rn

# En çok kullanılan parola kalıpları
cat kirilan_parolalar.txt | awk -F: '{print $2}' | 
  sed 's/[0-9]//g' | sort | uniq -c | sort -rn | head 20

# Hashcat ile parola istatistikleri
hashcat --stdout -a 3 kirilan_parolalar.txt | 
  awk '{
    len = length($0)
    has_upper = ($0 ~ /[A-Z]/) ? 1 : 0
    has_lower = ($0 ~ /[a-z]/) ? 1 : 0
    has_digit = ($0 ~ /[0-9]/) ? 1 : 0
    has_special = ($0 ~ /[^a-zA-Z0-9]/) ? 1 : 0
    complexity = has_upper + has_lower + has_digit + has_special
    print len, complexity
  }' | sort | uniq -c

Güvenlik Kontrol Listesi

Hashcat testleri ve parola politikası sıkılaştırma sonrasında kontrol etmeniz gereken maddeler:

  • Minimum uzunluk 14 karakter olarak ayarlanmalı, standart 8 karakter günümüzde yetersiz
  • bcrypt veya Argon2 gibi yavaş hash algoritmaları kullanılmalı, MD5 veya SHA-1 kesinlikle kullanılmamalı
  • Parola geçmişi aktif olmalı, son en az 10 parola tekrar kullanılamamalı
  • Hesap kilitleme mekanizması devrede olmalı, art arda başarısız denemeler hesabı kilitlemeli
  • MFA (Çok Faktörlü Doğrulama) kritik sistemlerde zorunlu olmalı
  • Parola manager kullanımı teşvik edilmeli, kullanıcıların her sistem için farklı parola kullanması sağlanmalı
  • Haveibeenpwned gibi servislerle parola veritabanı sızıntı kontrolü yapılmalı
  • Düzenli parola denetimleri otomatize edilmeli, zayıf parolalar tespit edilir edilmez ilgili kullanıcı bilgilendirilmeli

Sonuç

Hashcat’i öğrenmek bir saldırı aracı edinmek değil, saldırganın bakış açısını kazanmak demek. Kendi sisteminizdeki hash’leri dakikalar içinde kırabildikten sonra “minimum 8 karakter büyük-küçük harf” kuralının ne kadar yetersiz olduğunu bizzat görüyorsunuz. Bu yazıda anlattığımız testleri kendi ortamınızda düzenli aralıklarla çalıştırın.

Önemli olan nokta şu: parola politikası sadece teknik bir kural seti değil. Kullanıcılarınız anlayamadıkları veya takip edemeyecekleri kadar karmaşık bir politikaya uymak yerine, onu devre dışı bırakmanın yolunu arar. 14 karakterlik bir passphrase (“deniz-mavi-bulut-2024” gibi) hem güvenli hem de akılda kalıcı. Kullanıcılarınızı eğitin, parola yöneticisi kullanmalarını teşvik edin ve MFA’yı mümkün olduğunca zorunlu kılın. Teknik sıkılaştırma ile kullanıcı farkındalığı bir arada olunca ortamınız gerçekten güvenli hale gelir.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir