Şifresi sızan çoğu insan bunu tek seferlik bir kaza gibi hayal eder: bir servisin günü kötü geçmiş, haber olmuş, sen şifreni değiştirmişsin, olay kapanmış. Kapanmadı. Sızıntı günü hiçbir şeyin sonu değil: yıllarca sürecek bir montaj hattının ilk günü ve o hatta sen hiçbir zaman adınla görünmeyeceksin. Hikâyeyi baştan sona anlatmaya değer, çünkü neredeyse kimse tamamını görmüyor.
Birinci adım: birisi veritabanını dışarı çıkarır
İlk kısımda gösterişli hiçbir şey yok. Biri bir SQL enjeksiyonu bulur, açıkta duran bir yedek, varsayılan parolayla duran bir yönetim paneli. Ve bir tabloyu alıp gider.
O tablo, şansın varsa, e-postanı ve şifrenin bir hash’ini içerir. Şansın yoksa e-postanı ve şifreni içerir. Düz metin. Yazdığın hâliyle.
2009 düz metin hâlinde otuz iki milyon şifre
Aralık 2009’da, sosyal ağlar için widget yapan RockYou adlı bir şirket SQL enjeksiyonu yedi. Yaklaşık 32 milyon şifre alındı ve kırılacak bir hash de yoktu: şirket şifreleri düz metin saklıyordu.
RockYou için felaketti, geri kalan herkes için hediye. İlk kez, kimsenin okuyacağını bilmeyen insanların yazdığı gerçek şifrelerden oluşan devasa bir külliyat ortaya çıkmıştı. Araştırma değil: şeyin kendisi.
Dosya rockyou.txt oldu ve bugün hâlâ saldırıların denendiği başvuru sözlüğü.
Değeri senin şifreni içermesi değil: insanların şifreyi nasıl yazdığını
içermesi. Bir isim ve bir yıl, kelime ve 123, sona bir !. RockYou 32 milyon
sır sızdırmadı. Kalıbı sızdırdı. Kalıbın ise son kullanma tarihi yok.
İkinci adım: kırılabilen kırılır, hem de hiç acele etmeden
Sezgimizin yanıldığı yer burası. Biri bir servisin giriş ekranında şifreni tahmin etmeye kalkarsa servis onu keser: üç deneme, bir CAPTCHA, bir kilit. Sunucuya karşı tahmin etmek yavaştır ve gürültülüdür.
Zaten kendi diskinde duran bir hash dosyasına karşıysa sunucu diye bir şey yok. Karşı tarafta hayır diyecek kimse yok. Yerelde denenir, GPU’larla, deneme sınırı olmadan ve dünyanın bütün zamanıyla. Servis hash’i kötü yaptıysa —hızlı algoritma, tuzsuz— düz metinle arasındaki fark bir güvenlik farkı değil, kolaylık farkıdır.
Denemeler de rastgele yapılmıyor: önce rockyou.txt, ardından ondan türetilen
kurallar. a yerine @ koy. Sona bir yıl ekle. Sana zekice görünen her numara,
on yıldan fazladır bir yapılandırma dosyasında yazılı.
Dökümün bir kısmı böylece okunabilir şifrelere dönüşüyor. Geri kalanı —uzun olan, rastgele olan, hiçbir sözlükte bulunmayan— gürültü olmaya devam ediyor. Kontrol aracının çizdiği çizgi de tam olarak bu: seni azarlamıyor, hangi tarafa düştüğünü söylüyor.
Üçüncü adım: çaprazlanır ve para ettiğin yer burasıdır
Tek başına bir döküm pek bir şey etmez. Değerli olan birleştirme: farklı
sitelerden on sızıntıyı alıp e-postaya göre çaprazlamak ve elde açık hâldeki
e-posta:şifre çiftleriyle kalmak. Sonuca combolist deniyor ve artık kimsenin
veritabanı değil o. Bir insan listesi.
2013 envanter gün yüzüne çıkıyor
Aralık 2013’te Troy Hunt, Have I Been Pwned’i hayata geçirdi: sızıntılarda görünen e-postaların herkese açık bir veritabanı; isteyen içeride olup olmadığını sorabilsin diye. Arkasındaki fikir basit ve rahatsız edici: saldırganların envanteri zaten varsa, onu kurbanlardan saklamak kimseyi korumuyor. Yıllar sonra Pwned Passwords geldi; aynı şeyi şifrelerle yapıyor ve şifreni göndermeden sorgulamana izin veriyor: hash’in bir parçasını yolluyorsun, sunucu bir yığın aday döndürüyor, seninkinin hangisi olduğunu bilmeden.
2017 NIST sembol istemeyi bırakıp liste istemeye başlıyor
NIST SP 800-63B’yi yayımladığında, form ortodoksisinin neredeyse tamamını çöpe attı ve yerine pek az kişinin beklediği bir şart koydu: bir şifre belirlenirken sistem onu bilinen ele geçmiş değerler listesiyle karşılaştırmalı ve listede çıkıyorsa reddetmeli.
Bu bir ayrıntı değişikliği değil, teori değişikliği. Artık soru şifrenin güçlü görünüp görünmediği değil, çoktan yayımlanmış olup olmadığı. Üretecin yaptığı da bu yüzden yapılabilecek tek makul şey: şifreyi hiç bulunmadığı bir yerden çıkarmak.
2019 kendisi zaten başkalarının ısıtılmışı olan sızıntı
Ocak 2019’da Collection #1 adıyla ün kazanan bir paket dolaştı. Hunt paketi inceledi ve içinde ne olduğunu anlattı: binlerce kaynaktan derlenmiş, yaklaşık 773 milyon benzersiz e-posta adresi ve düz metin hâlinde yaklaşık 21 milyon benzersiz şifre.
Önemli olan boyutu değildi. Nereden geldiğiydi: büyük ölçüde daha önceki sızıntıların ısıtılmışıydı, çoktan kırılmış ve kullanışlı bir biçime sokulmuştu —gerçi Hunt o güne dek kayıtlarında olmayan malzeme de buldu. Ürün, sızma değildi. Envanterdi. Böyle bir envanterin de tek bir kullanımı var.
Credential stuffing: kimse sana saldırmıyor
Sana kimse saldırmıyor. İçselleştirmesi zor olan kısım bu.
Kimse oturup senin hesabını düşünmüyor. Biri yüz milyonlarca satırlık bir combo listesi alıyor, bunları bir bankanın ya da bir e-posta servisinin giriş formunda deneyen bir araca veriyor, kilitleri tetiklememek için denemeleri bir sürü IP adresine dağıtıyor ve bekliyor. Ezici çoğunluk başarısız oluyor. Fark etmez: maliyetleri neredeyse sıfır.
İşte bu credential stuffing ve bu tahmin etmek değil. Doğrulamak. Şifre zaten ellerinde; öğrendikleri tek şey onu başka nereye yazdığın.
O forumdaki şifren önemli değildi. Forum da değildi. Önemli olan, aynı karakter dizisinin e-postanı açması ve e-postanın da “şifremi unuttum” yoluyla geri kalan her şeyi açması. Asıl günah şifrenin zayıf olması değil: aynı olması. Otuz karakterlik, rastgele, kusursuz bir şifre iki yerde kullanıldığında ancak ikisinin kötüsü kadar iyidir. İkisinin kötüsünün hash’i nasıl yaptığı da senin elinde değil.
Bütün bundan çıkan sonuç
- Sızan şifreyi değiştirmek, onu tekrarladıysan yetmez. Acil olan, haberlere düşen site değil. Diğerleri.
- Her siteye bir şifre, üstelik unutsan da umurunda olmayan cinsten. Bütün şifrelerini ezbere biliyorsan ya çok azı vardır ya da çok kötüdürler.
- İkinci faktör zinciri kırar. Credential stuffing
e-posta:şifredeniyor. Bu girmeye yetmiyorsa envanterin değeri kalmaz.
Sızan şifren bir düşmanın elinde değil. Bir dosyanın bir satırında, yüz milyonlarca satırın arasında, birinin onu bir sitede daha denemeyi kârlı bulmasını bekliyor. Ve bunun işe yarayıp yaramayacağına karar veren tek şeye sen yıllar önce, aynı kelimeyi ikinci kez yazdığın gün karar verdin.
Kaynaklar: RockYou sızıntısı (Aralık 2009) ve rockyou.txt’in sonrasında saldırı
sözlüğü olarak kullanımı · Troy Hunt’ın Have I Been Pwned ve Pwned Passwords
projeleri · şifrelerin ele geçmiş değerler listelerine karşı kontrol edilmesi
hakkında NIST SP 800-63B · Troy Hunt’ın Collection #1 analizi (Ocak 2019) ve
yayımladığı rakamlar · OWASP’ın credential stuffing tanımı.