Kullanıcı Giriş Güvenliği

Değerli arkadaşlar, merhaba! Bu yazımızda sizlere, özellikle web programlama alanında çalışan arkadaşlarımızın yaptığı, basit gibi görünen ama kritik olan bazı güvenlik önlemi eksikliklerine değineceğiz. Fakat unutmayın; ben bir web geliştirici değilim ve asıl alanım ağ güvenliğidir.

Bu blogumuzun konusu kullanıcı güvenliğidir. Amacımız, kullanıcı giriş yaparken bu bilgileri yönetmek ve kullanıcıyı bilgilendirmek olmalıdır fakat bu bilgiyi, sanki bir hacker ile konuşuyormuşsunuz gibi vermeniz gerekir. Bir hacker bakış açısı kazanmak zorundayız. Ne demek istiyorum?

Yukarıda, birçoğunuzun bildiği LinkedIn'in giriş sayfasını görüyorsunuz. Ben, e-posta adresimi doğru bir şekilde girdim fakat parolayı yanlış girdim. Şimdi, lacivert kutu ile gösterdiğim kısma bakın: "That's not the right password." yani "Bu, doğru parola değil." şeklinde bir uyarı mesajı görüyoruz. Şimdi, normal bir insan bunu önemsemeyecektir; "parolam yanlışmış" diyecektir. Peki, sizce kullanıcının e-posta adresini bilen bir hacker böyle mi düşünür?

Bu şekilde bir uyarı saldırgana, "parolanın yanış olduğunu ifade etmez, e-posta adresinin doğru olduğunu ifade eder"; anlatabiliyor muyum? Bunu gören saldırgan, e-posta adresinin doğruluğuna emindir ve çeşitli saldırı vektörleriyle bu e-posta adresine erişim sağlamak isteyebilir. Neden mi? 

Hesabınızı çeşitli kimlik doğrulama faktörleriyle koruyor olabilirsiniz yani saldırgan, e-posta adresinizi ele geçirse bile hesabınıza erişemeyebilir. Fakat az önceki uyarının devamına bakalım: "Try again or sign in with a one-time link." yani "Tekrar deneyin ya da tek kullanımlık bir link ile giriş yapın." Burada saldırgana e-posta adresinin doğru olduğunu göstermiş olmakla kalmamış, bununla birlikte nasıl saldıracağını da söylemiş. Eğer saldırgan, e-posta adresine erişim sağlarsa gönderilecek olan tek bir link ile hesaba erişmiş olacaktır. Bu da çeşitli saldırı vektörleriyle oldukça muhtemeldir.

Peki, bu sorunları nasıl halledebiliriz? Daha önce GoLang derslerinde bahsettiğim ve ilerleyen zamanlarda Python derslerinde de bahsedeceğim kodları yazarak bunu düzeltebilirsiniz. Elbette, bu düzeltmeleri bütün programlama dillerinde yapabilirsiniz. Dediğim gibi benim alanım web değil; ben sadece örnek göstereceğim.

GoLang örneği (GoLang bilmenize gerek yoktur):

Yukarıda, birçok kod satırı görüyorsunuz ama sadece en aşağıda kırmızı kutular ile işaretlediğim kısma odaklanın. 'fmt.Println("Kullanıcı adı veya parola yanlış.")' Bu kod satırı, çok ama çok basit gibi gözükse de aslında biraz önce anlattığımız her şeyi önleyen bir koddur. Burada, 'veya' bağlacını kullanıyor oluşumuz, saldırganlara elbette e-posta adresinin mi yoksa parolanın mı yanlış olduğu hakkında bir fikir vermeyecektir; ikisi de yanlış olabilir ya da sadece bir tanesi yanlış olabilir. Anlatım tarzının manipüle gücünü görüyorsunuz.

Hemen aşağıdaki 'return "", errors.New("3 başarısız deneme. Hesabınız geçici bir süreliğine kısıtlandı.")'. Peki, bu kod bize nasıl bir yarar sağlayacak? Bizim, BruteForce yani Kaba Kuvvet saldırısı dediğimiz bir saldırı türü vardır. Bu saldırı, parola saldırıları veya sözlük saldırıları olarak da geçer ve asıl amacı, bir e-posta veya tanımlayıcı herhangi bir veri üzerinde sürekli parola denemeleri yaparak doğru parolayı bulmaktır. İşte, 3 giriş denemesinden sonra kullanıcıyı kısıtlarsanız bir daha giriş de yapamayacaktır dolayısıyla BruteForce saldırısı önlenmiş olacaktır.

İsterseniz bunu bir de Python ile görelim.

Yukarıda gördüğünüz Python kodu, az önce gördüğünüz Go kodu ile aynı işi yapıyor; deneyebilirsiniz. Bu şekilde kullanıcılarınızı savunabilirsiniz. Hacker dediğimiz insanlar, kimsenin düşünemediğini düşünen; merak dolu insanlardır.

Fakat bir hacker gibi düşünmek zorunda olduğumuzu tekrarlamak istiyorum. Örneğin siz, bu kısıtlama süresini 5 dakika olarak ayarladınız. Bir saldırgan da bunu 5 dakika olarak ayarladığınızı, testleri sonucu fark ederse yapacağı saldırıyı da o şekilde ayarlayabilir; gayet mümkündür, emin olabilirsiniz. Peki, yine akıl yürütelim.

Eğer siz, ilk üç deneme için 5 dakika; sonraki 3 deneme için 15 dakika; sonraki 3 deneme için ise 45 dakika kısıtlama şartı getirseniz; ondan sonraki 3 deneme için ise bir doğrulama yöntemi şartı getirirseniz ne olur? Elbette, bu saldırı vektörü tamamen çöp olmuş olur. Fakat tabii ki, bu bir örnekti. Sizin, bunu kendi savunma algoritmanızı yazarak uygulamanız lazım ki saldırgan nasıl olduğunu anlayamasın. Örneğin ilk kısıtlamada 5 dakika; sonraki her kısıtlamada +10 dakika olarak da yapabilirsiniz, size kalmış.

Peki, "şifremi unuttum" kısmı için ne yapabiliriz?

Yukarıda gördüğünüz gibi yapabilirsiniz. Şifre sıfırlama konusunda bu şekilde bir uyarı verirseniz saldırgan, girdiği e-postanın gerçekten var olup olmadığını anlamayacaktır. Karşınızda şeytanlar varsa siz de şeytan gibi düşünmelisiniz.


Yayınlanma Tarihi: 2022-08-16 16:10:48

Son Düzenleme Tarihi: 2022-08-18 23:17:45