s27anonym 0x27 | Akıncı
|
|
Yüzbaşı
|
İstanbul 20 Mart 2022 27 Mesaj
Durum: Urfalıyam
|
|
|
- WEB | OWASP TOP 10 | Weak Randomness
- CloudZone, geliştiriciler, yeni başlayanlar ve kurumsal müşteriler için sanal sunucular sunan bir bulut barındırma sağlayıcısıdır.
CloudCity'nin CTO'su Alice, ağ yedeklemelerini düzenlemek için kullanılan eski bir CloudZone web uygulamasına karşı bir sızma testi yapmak üzere bizi görevlendirdi.
devam ederken CloudZone web sitesine tarayıcımızda açalım.
- Web site tarayıcımızda yüklendikten sonra CloudZone'un kullanıcı doğrulama ve parola sıfırlama işlevini test ederek güvenlik değerlendirmesine başlyalım.
NOT Çoğu uygulamada, self servis parola sıfırlama akışı, bir kullanıcının parolasını sıfırlamak için belirteçler oluşturmaya dayanır.
Bu belirteçler herhangi bir şekilde tahmin edilebilirse, kullanıcının parolası, kullanıcının bilgisi olmadan kötü niyetli bir oyuncu tarafından sıfırlanabilir.
- self servis parola sıfırlama akışı tarafından oluşturulan belirteçlerin benzersizliğini ve rastgeleliğini test etmemiz için birden çok parola sıfırlama işlemi başlatmamız gerekir.
Ancak, bunu yapmaya devam etmeden önce, bu değerleri bir grafiğe yükleyerek belirteç değerlerini çizelim.
- kendi e-posta adresimizle en fazla 10 parola sıfırlama işlemi başlatalım.
NOT Şifre talebinin gönderildiği zamana bağlı olarak sayısal belirteç değerini çizerken grafik konsolundaki belirteç değerlerini inceleyelim. Veri noktalarının üzerine gelerek belirteç değerlerini görebiliriz.
- Belirteçlere dikkat edelim, hepsinin şüpheli bir artımlı modeli var. Hepsi tahmin edilebilir görünüyor... daha iyi anlamak için, bir sonraki adımda kaynak kodu görelim.
Güvenlik açığının temel nedenini anlamak için, parola sıfırlama belirteçleri oluşturmaktan sorumlu arka uç koduna bir göz atalım.
- String token = generateTokenBy(email);
Kullanıcıların parolalarını sıfırlamalarına izin vermek için, kullanıcıyı tanımlamak için kullanılan bir oturum belirteci oluşturulur.
private String generateTokenBy(String email) { Ancak oturum belirtecini oluşturan yöntem, rastgele bir belirteç oluşturmaz.
.append(LocalTime.now().getHour()) Bunun yerine geçerli zaman damgasına dayanır.
return Base64.getEncoder().encodeToString(stringBuilder.toString().getBytes()): Bu, saldırganlar tarafından tahmin edilebilecek zayıf bir oturum tanımlayıcısına yol açar. Bu şekilde, bir kurbanın şifresini sıfırlayabilir ve böylece hesabını ele geçirebilirler.
- Peki Bu Saldırları Nasıl Azaltacağız?
Uygulamalarda Zayıf Rastgeleliği etkin bir şekilde azaltmak için geliştiriciler, özel şifreleme ilkelleri ve rastgele sayı üreteçleri yazmaktan kaçınmalıdır.
Bunun yerine geliştiriciler, FIPS ve NIST gibi kriptografik standartlar tarafından iyi test edilmiş ve kanıtlanmış çok çeşitli rastgele sayı üretme işlevleri sunan web çerçevelerinden veya işletim sistemlerinin kriptografik kitaplıklarından yararlanmalıdır.
Zayıf Rastgelelik saldırılarını önlemek için yukarıdaki en iyi uygulamaların savunmasız kod örneğimize nasıl uygulanabileceğini görelim.
SecureRandom Bu değiştirilmiş kod örneğinde, güvenli bir sözde rastgele sayı üreteci SecureRandom sağlayan Java sınıfını kullanıyoruz.
generateSeed kullanarak generateSeed, rastgele bir bayt dizisi elde ederiz. Bu, tahmin edilemeyen kriptografik olarak güçlü oturum belirteçlerine yol açar.
___________________________________________
Cyber-Warrior TIM
|
|
|