un

guest
1 / ?
back to lessons

Bir Depolama Biçimini Gerinebilir Kılan Ne

Dört depolama formatı, geri getirilebilirlik açısından sıralanmış durumda:

| Format | Geri Getirilebilir? | Örnek | Geri Getirme Yöntemi |

|--------|-------------|---------|-----------------|

| Düz metin | Evet | password: hunter2 | Dosyayı okuyarak |

| Base64 | Evet | cGFzc3dvcmQ= | base64 --decode |

| Geri dönüştürülebilir şifre (AES) | Evet | ENC[AES256:...] | Şifreyi decryptle kullanarak |

| Tek yönlü hash (bcrypt) | Hayır | $2b$12$... | Geri çevrilmez; brute-force kullanarak |

Düz metin, base64 ve geri dönüştürülebilir şifre: hepsi geri getirilebilir. Tek bir parola veritabanı dump'ı, tüm parolaları aynı anda açık metinde attacker'a sunar. İki ayrı saldırı; tam açıklama.

Mailman 2.x Örneği

Mailman 2.x (GNU posta listesi yöneticisi): abone parolarını düz metin olarak sakladı. Aylık parola hatırlatma e-postası: tüm abonelerin parolalarını açık metinde gönderdi. İki ayrı kusur, her ikisi de MOAD-0006:

1. Depolama: listeyi içeren veri tabanı'nda düz metin. Sunucu komplozu, tüm abone parolarını ortaya çıkarır.

2. Yaygınlaştırma: aylık e-posta, parolayı düz metinde SMTP'yi abone e-posta sunucusuna gönderir. E-posta, farklı SMTP geçişlerinde açık metinde seyahat eder.

Mailman ekibi, her iki davranışı da tasarladı. Geri getirme özellikti: aboneler unutulan parolalarını geri alabilirdi. Cam Safe ismi, bu yüzden gelir: güvenli, içerikleri görünür formda saklar. Güvenliye ulaşan herkes, tüm içeriği aynı anda aynı operasyonda okuyabilir.

Zaten Soyutlanmış İlke

Bir parola, geri getirilebilir formda saklandığında, zaten soyutlanmış demektir. Saldiran, hala gelmedi. Saldırı henüz olmadı. Ama mimari, aynı anda tüm parolaların düşmesini garanti eder. Her parola, geri getirilebilir depolama transferi sırasında aynı anda attacker'a geçer.

MOAD-0006 vs MOAD-0004

MOAD-0004 (Gizli Log): parolar, tesadüfen loglara yazılır. Log yazma, niyet değildi; başlangıçta header loglama etkinleştirilmesi için bir yan etkisiydi.

MOAD-0006 (Cam Safe): parolar, geri getirilebilir formda mimarik tasarımıyla tasarlanmıştır. Geri getirme, niyetti. Parola hatırlatma özellği, parolayı saklamak gerekti. Görüntü-parola özellği, saklamak gerekti. Geri getirme taahhüdü, kusuru oluşturan mimari taahhüt oldu.

Bir satırlık ayrım: MOAD-0004, kimlik bilgilerinini kasıtlı olarak günlere yazarken; MOAD-0006, kimlik bilgilerinini amaçlı olarak geri getirilebilir formda saklar. Fix'ler farklı katmanlarda çalışıyor.

Güçlü vs. Kırılgan

MOAD-0006 & MOAD-0004 arasındaki mimari fark, fix stratejisi belirler. Kasıtlı bir log yazma: seri hale getirme katmanını düzelt. Bir tasarım-için-kurtarma depolama: kurtarma gerektiren özelleği yeniden tasarla.

Neden Glass Safe MOAD-0004'ten yapısal olarak farklı? Her bir kusura bir satır açıklama. Fix'in anlamı ne?

Neden bcrypt Çalışır

Bir bir yönlü işlev, bir parolayı kabul eder ve sabit uzunlukta bir imha üretir. İmha verildiğinde, orijinal parola geri kazanılamaz. 'Geri kazanılması zor': Geri dönüştürülmesi imkansız. İşlem sadece bir yönde çalışır.

Kimlik bilgisi depolama için gereken üç özelliğe sahip:

1. Bir Yönlü (önceki görüntü direnci). hash(password) verildiğinde, hiçbir algoritma password geri kazanmak için daha hızlı bir yöntem yoktur. bcrypt, scrypt ve argon2 tüm bu özelliklere sahiptir.

2. Tuz. Parolanın başına rastgele bir değer eklenir ve ardından işlenir. Aynı parola, farklı tuz, farklı imha. Amaç: rengi tablosu (önceden hesaplanmış imha dizikleri) aşmak. Tuz olmadan: bir saldırı, hash('password123') bir kez hesaplar ve ardından tüm 1 milyon kullanıcının aynı anda kontrolünü yapar. Tuzla: her kullanıcının, aynı parolaya sahip olduğu için değişen bir imha olması gerekir.

3. Yavaş tasarlanmış. bcrypt, bir iş faktörü kabul eder. Yüksek iş faktörü: daha fazla iterasyon, her bir parola işlemi için daha fazla işlem süresi. Giriş: 300ms her bir parolayı hashlemek için. Kabul edilebilir. Sözlü saldırı: 300ms her girişim için. 1 milyar girişim için: 9,5 yıl her parola. Saldırı için kabul edilebilir değil. Yavşaklık: bir özelleştirme, değil bir eksiklik.

import bcrypt

# Depolama: bir yönlendirici hash ile tuz
def store_password(plaintext: str) -> bytes:
    return bcrypt.hashpw(plaintext.encode(), bcrypt.gensalt(rounds=12))

# Doğrulama: hash'i kandida ve karşılaştırmalar
def verify_password(plaintext: str, stored_hash: bytes) -> bool:
    return bcrypt.checkpw(plaintext.encode(), stored_hash)

# Hiçbir zaman depolama: düz metin parola
# Hiçbir zaman geri dönüş: hash'ten düz metin
# Parola sıfırlama, değil parola hatırlatma

Ticareti Ortaya Koyma

Bir yönlendirici hash ile parola geri dönüşü mümkün olamaz. Parolanızı unutan bir kullanıcı, parolayı geri alamaz. Parola hatırlatma e-postası olamaz. Sistem, 'parolanızı unuttuğunuzda sıradışı bir şifre oluşturun' deneyimi değiştirir. Bir gerileme değil: bir güvenlik sınırlaması. Parolayı geri alamaz bir sistem, parolayı ifşa edemez bir sistem.

bcrypt hash'lerini ifşa eden bir veri tabanı ihlalinde: tüm hash'ler görünür, hiçbir parola görünür. Bir saldırıya uğrayan bir saldırgan, her bir hash'i bireysel olarak brute-force etmelidir, her girişim için 300ms, kullanıcı başına tuz, önceden hesaplanmış tabloları devre dışı bırakmalıdır. Parola metinlerini ifşa eden bir ihlal: tam bir anlık ifşadır.

Güçlü Şifreleme Yeterli Değil

Bir güvenlik denetimi, bir parola depolama sistemi tanımlar. Parolalar, AES-256-CBC şifrelemesi ile bir sunucu tarafı anahtar kullanarak saklanır. Denetim raporunda, bu Glass Safe eksikliği olarak işaretlenir.

Mühendislik ekibi yanıt verir: 'AES-256 en güçlü simetrik şifrelemeyi sağlar. Anahtar, bir HSM'de (Hurdurulabilir Güvenlik Modülü) yaşamaktadır. Hiçbir saldırı, bu parolaları decrypt edemez.'

Bu, güçlü şifreleme ile bile neden MOAD-0006 olarak kalıyor? Ne şekilde düzeltilmelidir?