Parola sıfırlama testleri neden ihmal edilir
Parola sıfırlama, herhangi bir uygulamadaki en çok saldırıya uğrayan akışlardan biri — ve çelişkili biçimde en az test edilenlerden biridir. Sebebi basit: geliştiriciler geliştirme sırasında kendi e-posta adreslerini kullanır. Üçüncü veya dördüncü test çalışmasından sonra gelen kutunuz aynı görünen "Parolanızı sıfırlayın" mesajlarının altına gömülür. Konu satırları tek bir konuşmaya toplanır, hangi bağlantının hangi çalışmaya ait olduğunu takip edemezsiniz ve sonunda test etmek, kapsamlı yapmak için fazla sinir bozucu hale gelir. Geçen sefer çalıştığı için bu sefer de çalıştığı varsayımına güvenmeye başlarsınız. Ciddi hataların üretime sızmasına izin veren tam da bu tür bir rehavettir.
Riskler yüksektir. Parola sıfırlama, kullanıcıların hesapları kurtardığı — ve saldırganların onları ele geçirmeye çalıştığı — birincil mekanizmadır. Süresi dolmayan kusurlu bir jeton, yeniden kullanılabilen bir bağlantı veya hız sınırlaması olmayan bir sıfırlama uç noktası, küçük bir kimlik bilgisi sızıntısını tam bir hesap ele geçirmesine dönüştürebilir. Have I Been Pwned tarafından dizine eklenen verilere göre, eski ihlallerden gelen milyarlarca kimlik bilgisi aktif olarak dolaşımdadır ve saldırganlar keşfettikleri hesaplara karşı rutin olarak parola sıfırlamaları dener. Sıfırlama akışınızın zayıflıkları varsa, onları bulacaklardır.
Parola sıfırlama akışında gerçekte ne test etmeniz gerekiyor
Basit bir "e-posta gönderiyor mu" duman testi yeterli değildir. OWASP Authentication Cheat Sheet, güvenli bir parola sıfırlama için kapsamlı bir gereksinim seti ana hatlarıyla belirtir ve her biri özel test almayı hak eder. İşte gerçekten doğrulamanız gerekenlerin tam listesi:
- E-posta teslimi — sıfırlama e-postası geliyor mu, ve hızlı mı geliyor? 10 dakika süren bir sıfırlama e-postası kullanıcıları şaşırtır ve destek talepleri oluşturur.
- Bağlantı doğruluğu — e-postadaki bağlantı, URL veya gövdede doğru jeton ile doğru sayfaya mı gidiyor?
- Jeton süresi dolumu — 25 saat bekleyip sonra bağlantıya tıklarsanız, uygulama süresi dolmuş jetonu doğru şekilde reddediyor mu? Bunu teorik olarak değil, açıkça test edin.
- Tek kullanım uygulaması — aynı sıfırlama bağlantısına iki kez tıklayabiliyor musunuz? Başarılı bir parola değişikliğinden sonra jeton geçersiz kılınmalıdır. Bu, OWASP'a göre zorunlu bir gereksinimdir ve sıklıkla atlanır.
- Yeni istekte geçersizleştirme — bir kullanıcı sıfırlama isteyip iki dakika sonra bir tane daha isterse, ilk jeton geçersiz kılınıyor mu? Her iki jetonun aynı anda geçerli olması bir güvenlik açığıdır.
- SSO hesaplarının işlenmesi — Google, GitHub veya başka bir OAuth sağlayıcısı üzerinden kaydolan bir kullanıcı parola sıfırlama istediğinde ne olur? Bu akış, hesabın sıfırlanacak yerel bir parolası olmadığı için sıklıkla bozuktur.
- HTTPS uygulaması — sıfırlama bağlantısı HTTPS kullanıyor mu? Düz HTTP üzerinden bir sıfırlama bağlantısı, jetonu ağda ele geçirilmeye maruz bırakır.
- Hata mesajı kalitesi — bir bağlantının süresi dolduğunda uygulama net, yardımcı bir mesaj mı gösteriyor, yoksa genel bir 500 hatası mı? Buradaki kullanıcı deneyimi önemlidir.
- Hız sınırlaması — birisi aynı adres için bir dakikada 10 sıfırlama isteği gönderirse ne olur? Numaralandırmayı ve kötüye kullanımı önleyen makul bir sınır olmalıdır.
- E-posta numaralandırma önleme — yanıt, e-posta adresinin sistemde var olup olmamasına göre değişiyor mu? Farklı bir yanıt, saldırganların geçerli hesapları numaralandırmasına olanak tanıyan bir bilgi sızıntısıdır.
Geçici e-posta yaklaşımı — adım adım kılavuz
Tüm bu test zorluklarına en temiz çözüm, her test çalışması için yeni bir geçici e-posta adresidir. İşte pratikte tam olarak nasıl çalıştığı.
Geçici bir gelen kutusu açın, üstte gösterilen adresi kopyalayın ve uygulamanıza gidin. O adresle yeni bir test hesabı kaydedin; bu, kayıt doğrulama e-postasını test etmenin de başlangıç noktasıdır. Giriş sayfasına gidin ve "Parolamı unuttum"a tıklayın. Adresi girin ve isteği gönderin. Geçici gelen kutusuna geri dönün — sıfırlama e-postası gerçek zamanlı olarak, genellikle birkaç saniye içinde gelir. E-postanın tamamını görebilir, konu satırını ve gönderen ayrıntılarını inceleyebilir, bağlantıya tıklayabilir, doğru sayfaya gittiğini doğrulayabilir, yeni bir parola ayarlayabilir ve girişin çalıştığını onaylayabilirsiniz. Baştan sona toplam süre: iki dakikanın altında. İkinci bir senaryo test etmeniz gerektiğinde yeni bir tarayıcı sekmesi açarsınız — farklı bir adrese sahip tamamen bağımsız bir gelen kutusu elde edersiniz. Temizlik yok, konuşma karışıklığı yok, önceki bir çalışmadan yanlışlıkla yanlış bağlantıya tıklama riski yok.
Gerçek bir örnek: bir sürümden önce test etme
Kimlik doğrulama kütüphanesinde bir güncelleme içeren küçük bir sürüm için bir SaaS uygulamasını hazırlıyordum. Parola sıfırlama akışı açıkça değiştirilmemişti, ancak kimlik doğrulama kütüphanesi güncellemelerinin e-posta jeton üretimini sessizce bozma alışkanlığı vardır. İşte izlediğim tam sıra.
Her biri bağımsız bir geçici gelen kutusuna sahip beş tarayıcı sekmesi açtım. Sekme bir: mutlu yol — kaydol, sıfırlama iste, bağlantıyı iki dakika içinde kullan, girişi onayla. Sekme iki: süresi dolmuş jeton — kaydol, sıfırlama iste, e-postanın gelmesini bekle, 25 saat bir kenara koy (ertesi gün geri döndüm) ve sonra bağlantıyı dene. Uygulama onu doğru şekilde reddetti. Sekme üç: çift sıfırlama — kaydol, sıfırlama iste, hemen tekrar sıfırlama iste ve sonra her iki bağlantıyı da dene. İlk bağlantı geçersiz kılınmış olmalıydı; öyleydi. Sekme dört: kullanılmış bağlantının yeniden kullanımı — kaydol, sıfırlama iste, bağlantıyı parolayı başarıyla değiştirmek için kullan ve sonra aynı bağlantıyı ikinci kez dene. Doğru şekilde reddedildi. Sekme beş: hız sınırlaması — hız sınırlayıcının çalıştığını doğrulamak için sıfırlama isteklerini hızlıca tetikledim.
Her senaryo temiz, bağımsız bir gelen kutusu kullandı. Hangi e-postanın hangi teste ait olduğu konusunda hiçbir belirsizlik yoktu. Kimlik doğrulama kütüphanesi güncellemesi hiçbir şeyi bozmamıştı ve elimde belgelenmiş kanıt vardı. Gece boyunca süren süresi dolmuş jeton kontrolü dahil tüm test çalışması yaklaşık 30 dakika sürdü.
Aynı anda birden fazla geçici gelen kutusuyla sınır durumlarını test etme
Geçici bir e-posta hizmetindeki her tarayıcı sekmesi, kendi benzersiz adresine sahip bağımsız bir gelen kutusudur. Bu, paralel testi kolaylaştırır. Üç sekme açın ve üç benzersiz adresiniz olsun. Üç test hesabı kaydedin, üçü için de aynı anda parola sıfırlamaları tetikleyin ve her hesabın yalnızca kendi jetonunu — bir başkasınınkini değil — aldığını doğrulayın. Bu çapraz kontaminasyon testi, kötü uygulanmış bir sıfırlama sisteminin tüm jetonları ilk kaydedilen adrese veya yanlış yapılandırılmış bir ortamdaki sabit kodlanmış bir adrese gönderdiği özellikle kötü bir hatayı yakalar.
Ayrıca bir kullanıcının zaten giriş yapmışken sıfırlama istediğinde ne olduğunu veya sistemde var olmayan bir e-posta adresi için sıfırlama istendiğinde ne olduğunu da test edebilirsiniz. Bu sınır durumlarının her biri kendi temiz gelen kutusunu, kendi temiz durumunu alır ve kesin sonuçlar üretir.
Jeton güvenlik kontrol listesi
Parola sıfırlama jetonları, web uygulamalarındaki en yaygın saldırı yüzeylerinden biridir. OWASP, güvenli bir uygulamanın neyi gerektirdiği konusunda açıktır ve çıta birçok ekibin fark ettiğinden daha yüksektir. Bu listedeki her öğe, testleriniz aracılığıyla doğrulanabilir olmalıdır:
- En az 32 karakter, kriptografik olarak rastgele — kısa veya tahmin edilebilir jetonlar kaba kuvvetle kırılabilir. Math.random() veya eşdeğerlerini değil, platformunuzun kriptografik olarak güvenli rastgele sayı üretecini kullanın.
- 24 saat içinde, ideal olarak 1 saat içinde sona erer — asla sona ermeyen bir jeton kalıcı bir saldırı yüzeyidir. Bir saat, çoğu uygulama için önerilen maksimumdur.
- Yalnızca tek kullanım — jeton, kullanıldığı anda geçersiz kılınmalıdır. Yeniden kullanılabilir bir sıfırlama jetonu kritik bir güvenlik açığıdır.
- Yeni bir sıfırlama istendiğinde geçersiz kılınır — kullanıcı tekrar sıfırlama isterse, o hesap için önceki tüm bekleyen jetonlar iptal edilmelidir.
- E-posta adresi başına hız sınırlamalı — bir zaman penceresi içinde adres başına yapılabilecek sıfırlama isteği sayısını sınırlayarak otomatik numaralandırmayı ve kötüye kullanımı önleyin.
- Asla düz metin olarak kaydedilmez — günlük altyapınız istek parametrelerini yakalıyorsa, sıfırlama jetonlarının kaydedilmeden önce hariç tutulduğundan veya karma işleminden geçirildiğinden emin olun.
Sıfırlama e-postasının kendisi nasıl görünmeli
Sıfırlama e-postasının içeriği ve sunumu, çoğu ekibin takdir ettiğinden daha önemlidir. İyi hazırlanmış bir sıfırlama e-postası sade ve işlevseldir: net bir konu satırı ("Parolanızı sıfırlayın"), tek bir belirgin düğme veya bağlantı, net bir süre dolumu ifadesi ("Bu bağlantı 1 saat içinde sona erer") ve kullanıcı bunu istemediyse e-postayı güvenle yok sayabileceğine dair bir not. Pazarlama metni yok, sosyal medya simgeleri yok, bülten alt bilgisi yok. İşlemsel bir e-posta işlemsel görünmelidir.
Gönderen ayrıntıları da önemlidir. Gönderen adı markanızla açıkça eşleşmeli ve gönderen adresi düzgün şekilde kimliği doğrulanmış olmalıdır. Eşleşmeyen bir gönderen adıyla gelen veya kötü kimlik doğrulama yapılandırması nedeniyle spam klasörüne düşen bir e-posta, gerçek kullanıcı kafa karışıklığına ve destek yüküne neden olur. Etki alanınızın SPF, DKIM ve DMARC yapılandırmasını MXToolbox gibi bir araçla kontrol edin ve bu terimlerden herhangi biri size yabancıysa e-posta kimlik doğrulama kılavuzunu okuyun.
Teknik e-posta belirtimi — neyin geçerli bir e-posta olup olmadığı, teslimatın uçtan uca nasıl çalıştığı — RFC 5321 içinde belgelenmiştir. Yoğun bir okumadır, ancak genel bakış bölümleri, e-posta altyapınızın bir sıfırlama e-postası gönderdiğinde gerçekte ne yaptığını anlamak için yararlı bir bağlamdır.
Gerçek gelen kutunuz neden bunun için yanlış araçtır
Test hesapları için kişisel veya iş e-posta adresinizi kullanmak, rahatsızlığın ötesinde bir dizi soruna yol açar. Adresiniz, kendi uygulamanızın veritabanında bir test kaydı olarak kalır. Uygulama günlüklerinde, posta sunucunuzun gönderilenler geçmişinde, hazırlık ortamı dışa aktarımlarında ve zaman zaman yüklenicilerle veya dış QA ekipleriyle paylaşılan veritabanı dökümlerinde görünebilir. Hazırlık ortamlarının erişim denetimleri genellikle üretime göre daha gevşektir. Electronic Frontier Foundation, temel bir gizlilik ilkesi olarak veri minimizasyonunu savunur — gerçek adresinizi geliştirme ve test sistemlerinden uzak tutmak, bu ilkenin doğrudan bir uygulamasıdır. Geçici bir gelen kutusu doğal olarak sona erer, asla kimliğinize bağlanmaz ve hiçbir iz bırakmaz.
Parola sıfırlamayı regresyon paketinize dahil edin
Parola sıfırlama, kimlik doğrulama kütüphaneleri güncellendiğinde, e-posta sağlayıcıları değiştirildiğinde veya API anahtarları yenilendiğinde sessizce bozulan türden bir akıştır. Çoğu ekip bunu otomatikleştirilmesi zor, yalnızca kullanıcı arabirimine dayalı bir entegrasyon testi olarak ele aldığı için nadiren özel otomatik testleri vardır. Bu akıl yürütme anlaşılabilir ama tehlikelidir.
En azından, hazırlık veya CI ortamınıza tüm kayıt yolculuğunu kapsayan temel bir uçtan uca test eklemeyi düşünün: oluşturulmuş bir adresle programatik olarak bir test hesabı oluşturun, bir sıfırlama isteği tetikleyin, giden e-postayı doğrudan posta hizmetinizin API'sinden yakalayın veya inceleyin, jetonu çıkarın, kullanımı deneyin ve sonuç durumunu doğrulayın. Bunun ayrıntılı olması gerekmez. Her dağıtımdan sonra sıfırlama akışının çalıştığını doğrulayan tek bir otomatik kontrol bile en yaygın regresyon sınıfını yakalar: jeton üretimini sessizce bozan kimlik doğrulama bağımlılığı değişiklikleri.
Güvenli kimlik doğrulama için ek kaynaklar
Güvenli parola işlemenin pratikte neden önemli olduğuna dair daha geniş bir bakış açısı için Troy Hunt, gerçek dünya ihlal analizini erişilebilir ve iyi kanıtlanmış ayrıntılarla ele alır. Kimlik bilgisi doldurma ve hesap ele geçirme üzerine yazıları, sıfırlama akışının neden ciddi ilgiyi hak ettiğiyle doğrudan ilgilidir. OWASP Authentication Cheat Sheet, kimlik doğrulama sisteminizin yapması gereken her şey için en kapsamlı tekil referans olmaya devam ediyor. Bu iki kaynak ile her çalışma için yeni gelen kutuları kullanan disiplinli bir test pratiği arasında, gerçek dünyanın incelemesine dayanacak bir kimlik doğrulama sisteminin temeline sahip olursunuz.