Kimlik doğrulama ve oturum hataları
- Kaba kuvvet, püskürtme ve doldurma saldırılarını loglardan ayır, kullanıcı adı sayımını kapat, oturum çerezini doğru bayraklarla ve yenilemeyle kur.
- Otomatik giriş saldırılarını kayıtlardan tanı. Yanıtların içeriği ve süresiyle sızan bilgiyi azalt. Oturum çerezinin güvenlik ayarlarını yap ve yetki değiştiğinde oturumu yenile.
Puan bütün etkinlikleri cevaplayınca hesaba yazılır. Bu dersi tamamlayınca +55 XP alacaksın. Giriş yapmadan ilerlersen puan yalnız bu tarayıcıda durur.
Kimlik doğrulama, uygulamanın kim olduğunu doğru bilmesidir. Bu doğrulama kırıldığında saldırgan başkasının kimliğine bürünür. Bu derste giriş kapısına yapılan üç otomatik saldırıyı ayırt eder, loglarda bıraktıkları izi okur, giriş yanıtının sızdırdığı ipuçlarını kapatır ve girişten sonra seni tanıyan oturum kimliğini doğru kurarsın.
Konu tek bir cümlede toplanır: sahte bir girişi gerçek sanan her adım bir açıktır. Önce saldırıları tanı, sonra hepsini aynı savunma desenleriyle kapat.
Üç otomatik giriş saldırısı ve savunma
Kimlik doğrulama hatası çoğu zaman otomatik denemeyle başlar; saldırgan elle değil, betikle çalışır. Üç saldırıyı ayırt et. Kaba kuvvet (brute force) tek bir hesaba çok sayıda parola dener; MITRE ATT&CK bunu T1110.001 parola tahmini olarak sınıflar. Parola püskürtme (password spraying, T1110.003) tersini yapar: tek bir yaygın parolayı çok sayıda hesapta dener.
Her hesaba bir iki deneme düştüğü için hesap kilidi tetiklenmez ve saldırı sayacın altında kalır. Kimlik bilgisi doldurma (credential stuffing, T1110.004) başka bir sitenin sızıntısından gelen kullanıcı adı ve parola çiftlerini dener; kullanıcı aynı parolayı iki sitede kullanıyorsa çift tutar. Üçü de aynı kapıyı zorlar, ama yoğunlaştıkları yer farklıdır.
Bu üç saldırı loglarda farklı iz bırakır. Kaba kuvvette tek hesap, çok sayıda farklı parolayla görünür. Püskürtmede çok sayıda hesap, aynı tek parolayla görünür. Doldurmada her hesaba bir kez, sızıntıdan gelen kendi parolasıyla dokunulur.
Ayırt edici soru şudur: deneme hesap başına mı yoğunlaşıyor, parola başına mı, yoksa dışarıdan gelen bir liste boyunca mı dağılıyor? Bu soruyu doğru sormak, alarmı doğru kurmanın ilk adımıdır. Çünkü tek hesabı kilitleyen bir savunma, çok hesaba yayılan püskürtmeyi hiç görmez.
Bu saldırıların hepsi ölçek ister ve saldırganlar bu ölçeği hazır altyapıyla kurar. Kullanıcı adı listeleri, sızmış parola derlemeleri ve isteği binlerce konut aboneliği adresine dağıtan vekil ağları karaborsada satılır. Dağıtık adres, tek bir kaynağı engelleyen basit savunmayı işe yaramaz kılar; her istek başka bir adresten gelir.
Gelişmiş bir saldırgan denemeleri de yavaşlatır: hesap başına birkaç deneme yapıp bekler, böylece kilit eşiğinin ve hız sınırının altında kalır. Bu yüzden tespit tek bir sayaca değil; hesap, adres ve parola boyutlarını birlikte gören bir bakışa dayanır. 2024 başında duyurulan bir ulus-devlet saldırısı, büyük bir yazılım şirketinin kurumsal hesaplarını tam bu desenle hedef aldı. Az sayıda hesaba düşük sayıda deneme yapıldı ve trafik konut vekil ağlarına dağıtıldı; püskürtme böylece olağan trafiğe karıştı.
Etkinlik 1 / 6
Giriş kaydında parola püskürtmesine ait satırları işaretle.
Şüpheli satırlara tıkla. Birden fazla olabilir.
Her saldırıyı en iyi kesen önlem farklıdır. Kaba kuvvet hesap başına sayaçla durur: art arda başarısız deneme bir eşiği aşınca o hesap için bekleme süresi ya da geçici kilit devreye girer. Kilidin süreli olması önemlidir, çünkü kalıcı kilit saldırgana gerçek kullanıcıyı dışarıda bırakma imkânı verir.
Püskürtmeyi hesap sayacı görmez; adres başına sayaç ve yaygın parolaları baştan reddeden bir engel listesi gerekir. Doldurmada her deneme gerçek bir parolayla gelir ve başarı oranı ötekilerden yüksektir. Burada belirleyici olan, sızmış parola denetimi ve ikinci faktördür. OWASP'ın doldurmayı önleme rehberi de çok faktörlü doğrulamayı bu saldırılara karşı açık ara en iyi savunma olarak gösterir.
Tespit yalnız yarısıdır; parola politikası saldırının işini baştan zorlaştırır. Modern rehber NIST SP 800-63B, tek faktörde en az 15, çok faktörlü kullanımda en az 8 karakterlik parola ister ve karma karakter zorunluluğunu açıkça yasaklar. Kullanıcıyı belli aralıklarla parola değiştirmeye zorlamak da artık önerilmez; değişim yalnız sızıntı kanıtı varsa istenir.
Bilinen sızmış parolalar bir engel listesiyle (blocklist) reddedilir. Aynı belge, tek bir hesaba yapılan art arda başarısız denemeyi en çok 100 ile sınırlamayı ister. Dördüncü bir kapı ise otomatik saldırı bile gerektirmez: kurulumda gelen varsayılan bir hesap değiştirilmeden yayına çıkarsa, saldırganın betiğe ihtiyacı kalmaz. Bu yüzden yayın öncesi kontrolde varsayılan hesapların kapatıldığı ayrıca doğrulanır.
Derinleş:NIST 800-63B: kuralların gerekçesi
NIST SP 800-63B'nin parola kuralları sezgiye değil, sızmış parola veritabanlarının çözümlemesine dayanır. Karma karakter kuralını kaldırmasının nedeni kullanıcı davranışıdır. Belgenin verdiği örnekte password seçecek bir kullanıcı, büyük harf ve rakam istenince Password1, sembol de istenince Password1! yazar.
Saldırganın sözlüğü bu dönüşümleri zaten bilir; kural kullanıcıyı yorar ama tahmini zorlaştırmaz. Belge, engel listesinin içeriğini de tarif eder: önceki sızıntılardan gelen parolalar, parola olarak seçilen sözlük sözcükleri ve hizmetin kendi adı gibi bağlama özgü sözcükler. Uzunluk tarafında doğrulayıcı üst sınırı en az 64 karakter tutmalı, boşluğu ve Unicode karakterleri kabul etmeli, her Unicode kod noktasını tek karakter saymalıdır.
Parola yöneticisi ve otomatik doldurma serbesttir; yapıştırmayı açık tutmak da önerilir. Parola ipucu saklanmaz ve parola seçerken güvenlik sorusu sorulmaz. Kurallar birlikte, uzun ama akılda kalan parolayı ödüllendirir.
Etkinlik 2 / 6
Saldırıyı loglarda bıraktığı izle eşleştir.
Kullanıcı adı sayımı ve zaman sızıntısı
Giriş yanıtı da bilgi sızdırır. Uygulama Bu e-posta kayıtlı değil ve Parola hatalı diye iki ayrı mesaj dönerse, saldırgan hangi hesabın var olduğunu öğrenir; buna kullanıcı adı sayımı (user enumeration) denir. Sayım, doldurma ve püskürtme için hedef listesini keskinleştirir. Süre de sızdırır: hesap yoksa kod parolayı hiç özetlemeden döner ve yanıt belirgin biçimde hızlanır.
Saldırgan mesaj aynı olsa bile bu süre farkını ölçebilir. Güvenli sürümde her başarısız giriş aynı kodu, aynı mesajı ve yakın bir süreyi alır; hesap olsa da olmasa da doğrulama aynı işi yapar.
// Güvensiz: iki mesaj, iki farklı süre
const k = await db.kullanici.findUnique({ where: { eposta } });
if (!k) return res.status(404).json({ hata: "Bu e-posta kayıtlı değil" });
if (!(await argon2.verify(k.parolaOzeti, parola)))
return res.status(401).json({ hata: "Parola hatalı" });
// Güvenli: tek mesaj, her yolda özet doğrulaması
const tamam = await argon2.verify(k?.parolaOzeti ?? SAHTE_OZET, parola);
if (!k || !tamam) return res.status(401).json({ hata: "E-posta ya da parola hatalı" });Kullanıcı adı sayımı yalnız giriş formunda olmaz. Kayıt formu Bu e-posta zaten kullanılıyor derse, saldırgan hangi adreslerin sistemde olduğunu oradan öğrenir. Parola sıfırlama formu da aynı tuzağı taşır: kayıtlı adrese sıfırlama gönderdik, kayıtsız adrese göndermedik biçiminde farklı yanıtlar sayımı besler. Doğru davranış her üç formda da aynıdır.
E-posta ister kayıtlı olsun ister olmasın, aynı nötr mesajı gösterirsin. Sıfırlama akışında her iki durumda aynı ekranı verir, işlemi sessizce arka planda yaparsın. Böylece hiçbir form, bir adresin var olup olmadığını dışarıya söylemez. Sayım kapatılmazsa, sonraki püskürtme ve doldurma boşa deneme yapmaz; yalnız var olan hesapları hedefler.
Etkinlik 3 / 6
Güvensiz sürüm, kayıtlı olmayan bir e-postayla girişe hangi yanıtı döner?
Önce kodu oku, sonra çıktıyı seç.
const k = await db.kullanici.findUnique({ where: { eposta } });
if (!k) return res.status(404).json({ hata: "Bu e-posta kayıtlı değil" });
if (!(await argon2.verify(k.parolaOzeti, parola)))
return res.status(401).json({ hata: "Parola hatalı" });Oturum kimliği ve çerez bayrakları
Girişten sonra seni tanıyan şey parolan değil oturum kimliğidir. Kimlik rastgele ve anlamsız üretilir; kullanıcı numarası ya da zaman damgası taşımaz. OWASP'a göre oturum kimliği en az 64 bit rastgelelik (entropy) taşımalı ve kriptografik bir üreticiyle kurulmalıdır; öngörülebilir bir kimlik tahminle ele geçer.
Kimliği taşıyan çerezin üç bayrağı vardır. Secure, çerezi yalnız HTTPS üzerinden yollar. HttpOnly, sayfadaki betiğin çerezi okumasını engeller ve çalınmasını zorlaştırır.
SameSite, çerezin siteler arası isteklerde gidişini sınırlar. Modern kurulumda çerez adı __Host- önekiyle yazılır. Tarayıcı bu öneki taşıyan çerezi yalnız Secure bayrağıyla, Domain özniteliği olmadan ve Path=/ ile kabul eder. Böylece çerez tek bir ana makineye bağlanır.
Oturum kimliği yalnız doğru üretilmez, doğru zamanda da yenilenir. Kimlik girişte ve her yetki değişiminde yeniden üretilir. Yenilenmezse oturum sabitleme (session fixation) açığı doğar. Saldırgan önceden bildiği bir kimliği kurbanın tarayıcısına yerleştirir.
Kurban o kimlikle giriş yapınca aynı değer yetkili hale gelir ve saldırgan da aynı kimliği elinde tutar. Çözüm basittir; giriş anında sunucu eski kimliği atar ve yenisini üretir. Böylece girişten önce bilinen hiçbir değer, girişten sonra işe yaramaz. Bu CWE-384 olarak kayıtlı, iyi bilinen bir hata sınıfıdır.
SameSite bayrağının değeri de kararı etkiler. Strict, çerezi başka bir siteden gelen hiçbir istekte yollamaz; en güvenli ama en katı seçenektir, çünkü dışarıdan gelen bir bağlantıyla siteye düşen kullanıcı oturumsuz görünür. Lax, başka siteden gelen isteklerde çerezi yalnız GET gibi güvenli fiille yapılan üst düzey gezinmede, örneğin kullanıcının tıkladığı bir bağlantıda yollar; başka siteden gönderilen bir POST formunda yollamaz.
Çoğu oturum çerezi için Lax dengeli bir varsayılandır ve siteler arası istek sahteciliğine karşı ek bir katman kurar. Bunu HttpOnly ve Secure ile birlikte, çerezi tek ana makineye bağlayan önekle kullanınca çerez hem çalınmaya hem yanlış bağlama karşı korunur. Bayrakları tek tek değil, birlikte düşünürsün; her biri farklı bir saldırıyı keser.
Etkinlik 4 / 6
Girişten önce bilinen bir oturum kimliğinin, kurbanın girişiyle yetkili hâle gelmesine ____ denir.
Çıkışı sunucuda bitirmek
Oturumu kurmak kadar bitirmek de sunucunun işidir. Kullanıcı çıkış yaptığında tarayıcıdaki çerezi silmek yeterli görünür, ama değildir. Çerezin bir kopyası saldırganın elindeyse, o kopya sunucuda hâlâ geçerli olduğu sürece çalışmayı sürdürür.
Çıkış, kimliği yalnız tarayıcıdan değil, sunucudaki oturum kaydından da düşürmelidir. Aynı durum parola değişiminde de geçerlidir: kullanıcı parolasının çalındığından şüphelenip parolasını değiştirse bile, saldırganın açık kalmış eski oturumu bu değişiklikle kendiliğinden düşmez. Bu yüzden şüpheli bir olayda kullanıcının bütün oturumları sunucudan topluca kapatılır.
Oturum çerezinin çalınması ayrı bir saldırı yüzeyidir. Zararlı bir betik, araya giren bir ağ ya da paylaşılan bir bilgisayarda açık unutulan bir oturum, çerezi saldırganın eline geçirebilir; MITRE ATT&CK bunu ayrı bir teknik olarak sayar. HttpOnly bayrağı çerezi betikle okumayı, Secure bayrağı ağda açık taşımayı engeller. Ama çalınan çereze karşı asıl kalıcı savunma, oturumu sunucudan kısa sürede iptal edebilmektir.
Kimin nereden bağlandığını izleyen bir kayıt, tanıdık olmayan bir konumdan gelen oturumu erken yakalar. Çalınan bir çerez, ancak sunucu onu geçerli saymayı sürdürdüğü sürece işe yarar; bu yüzden iptal yeteneği her oturum tasarımının parçasıdır.
Etkinlik 5 / 6
Kullanıcı çıkış yaptı ama sunucu oturum kaydını silmedi, yalnız tarayıcıdaki çerez kalktı. Kopyası çalınmış oturum ne olur?
Saldırıyı loglardan çıkarmak
Savunmanın ilk adımı saldırıyı görmektir. Giriş kaydında her satır boşlukla ayrılmış alanlar taşır; örnek biçimde üçüncü alan kaynak adres, dördüncü alan denenen hesaptır. Adres ile hesap çiftini çıkarıp tekrarları eledikten sonra her adresin kaç farklı hesaba dokunduğunu sayarsın.
Bir adres az sayıda denemeyle çok sayıda hesaba dokunuyorsa, bu bir püskürtme kaynağıdır. Tek hesaba çok deneme yapan kaba kuvvet ise farklı bir imza verir. Bu ayrımı bir metin işleme boru hattıyla dakikalar içinde çıkarır, sonucu bir eşikle alarma bağlarsın.
2026-09-23T02:14:07Z giris=basarisiz ip=198.51.100.23 kullanici=ayse.k 2026-09-23T02:14:08Z giris=basarisiz ip=198.51.100.23 kullanici=mert.d 2026-09-23T02:14:08Z giris=basarili ip=192.0.2.14 kullanici=hakan.a
$ grep 'giris=basarisiz' giris.log | awk '{print $4}' | sort | uniq -c | sort -rn | head -3
41 kullanici=selin.t
3 kullanici=ayse.k
3 kullanici=mert.dBoru soldan sağa okunur. grep yalnız başarısız giriş satırlarını bırakır. awk her satırdan dördüncü alanı, yani hesabı yazdırır. sort aynı hesapları alt alta getirir; bu adım şarttır, çünkü uniq -c yalnız art arda gelen tekrarları sayar.
sort -rn sayıları büyükten küçüğe dizer, head de ilk üç satırı gösterir. Çıktıda selin.t 41 başarısız denemeyle öne çıkar. Tek hesaba yığılan bu deneme kaba kuvvetin imzasıdır.
ayse.k ve mert.d'nin üçer denemesi ise tek başına bir şey söylemez; unutulmuş bir parola da olabilir, hesaplara yayılan bir püskürtmenin parçası da. Bunu ayırmak için soruyu çevirir, her adresin kaç farklı hesaba dokunduğunu sayarsın. Alarm eşiğini de ölçerek koyarsın: olağan bir gecede tek adresin dokunduğu hesap sayısını bulur, onun belirgin biçimde üstünü sınır yaparsın.
Derinleş:Sızan parola, senin sitende açılan kapı
2023 sonbaharında bir genetik test şirketi, kimlik bilgisi doldurma saldırısına uğradığını açıkladı. Saldırganlar şirketin sistemini kırmamıştı; başka sitelerden sızmış kullanıcı adı ve parola çiftlerini denemişlerdi. Kullanıcıların bir bölümü aynı parolayı birden çok sitede kullandığı için çiftler tuttu ve yaklaşık 14 bin hesaba, yani 14 milyonluk müşteri tabanının binde birinden azına doğrudan girildi.
Asıl büyük etki dolaylı oldu: bu hesaplar bir akraba eşleştirme özelliğiyle başka profillere bağlıydı; doğrudan girilen 14 bin hesap üzerinden yaklaşık 5,5 milyon profilin bilgisine ulaşıldı. Olaydan sonra şirket bütün kullanıcılara parola sıfırlattı ve iki adımlı doğrulamayı zorunlu yaptı. Ders iki katmanlıdır: parola tekrarı bir kullanıcının hatasıdır, ama doldurmaya karşı hız sınırı ve zorunlu ikinci adım koymamak sitenin hatasıdır.
Bu derste parolayı ve oturumu kırmanın yollarını ve loglardan nasıl ayırt edeceğini gördün. Bir sonraki derste ikinci bir kanıt isteyerek, çalınan parolayı bile tek başına değersiz kılan çok adımlı doğrulamaya geçeceksin.
Orada savunma parolanın ötesine, sahip olduğun ve olduğun şeye taşınır. Bu geçiş önemlidir, çünkü bu dersteki her savunma parolayı korur ama hiçbiri parolanın hiç çalınmayacağını varsayamaz. İkinci kanıt, çalınmayı baştan hesaba katan savunmadır.
Etkinlik 6 / 6
giris.log içinde her adresin kaç farklı hesabı başarısız denediğini çoktan aza sıralayan boruyu kur.
Parçalara tıklayarak komutu soldan sağa kur.
Okumayı istediğin sırayla sürdürebilirsin. Ders, bütün etkinlikleri cevapladığında tamamlanır.