2FA, bir kullanıcıyı doğrulamak için iki bağımsız bilgi veya varlık gerektiren bir güvenlik mekanizmasıdır. Bu iki faktör şu unsurlardan oluşur:
- Bildiğiniz bir şey: Şifre veya PIN.
- Sahip olduğunuz bir şey: Telefon, donanım anahtarı veya uygulama.
- Siz olan bir şey: Parmak izi, yüz tanıma veya diğer biyometrik veriler.
Örneğin, bir kullanıcı şifresini girdikten sonra telefonuna gelen bir kodla doğrulama yapar. Bu sayede, şifre tek başına çalınsa bile hesaba erişim sağlamak mümkün olmaz.
Günümüzde dijital güvenlik, yalnızca güçlü şifreler kullanmanın ötesine geçmiştir. Özellikle kritik hesaplar ve hizmetler için İki Faktörlü Kimlik Doğrulama (2FA), ek bir güvenlik katmanı sağlayarak kullanıcı hesaplarının daha güvenli olmasını sağlar. Ancak, kötü amaçlı kişiler bu mekanizmaları atlamak için çeşitli yöntemler geliştirmiştir. Bu yazıda, 2FA’nın ne olduğunu, türlerini, saldırı yöntemlerini ve bu saldırılara karşı alınabilecek önlemleri derinlemesine ele alacağız.
2FA, bir kullanıcıyı doğrulamak için iki bağımsız bilgi veya varlık gerektiren bir güvenlik mekanizmasıdır. Bu iki faktör şu unsurlardan oluşur:
- Bildiğiniz bir şey: Şifre veya PIN.
- Sahip olduğunuz bir şey: Telefon, donanım anahtarı veya uygulama.
- Siz olan bir şey: Parmak izi, yüz tanıma veya diğer biyometrik veriler.
Örneğin, bir kullanıcı şifresini girdikten sonra telefonuna gelen bir kodla doğrulama yapar. Bu sayede, şifre tek başına çalınsa bile hesaba erişim sağlamak mümkün olmaz.
Kullanıcının telefonuna kısa mesaj olarak bir doğrulama kodu gönderilir.
- Avantajları: Kolayca uygulanabilir, kullanıcı dostudur.
- Dezavantajları: SIM swap saldırılarına ve SMS’in güvenli olmayan doğasına karşı savunmasızdır.
Google Authenticator, Authy veya benzeri uygulamalarla üretilen, zamana bağlı geçici kodları içerir.
- Avantajları: SMS'e göre daha güvenlidir.
- Dezavantajları: Uygulamanın kaybolması durumunda erişim sorunları yaşanabilir.
Mobil cihazlara gelen bir bildirim aracılığıyla doğrulama yapılır.
- Avantajları: Kod girme gerekliliğini ortadan kaldırır.
- Dezavantajları: Uygulamalara güvenli erişim sağlanmazsa riskli olabilir.
YubiKey gibi fiziksel cihazlarla doğrulama yapılır.
- Avantajları: Fiziksel erişim gerektirdiği için çok güvenlidir.
- Dezavantajları: Kaybolduğunda erişim sorunları yaratır.
Bazen iki faktörlü kimlik doğrulamadaki hatalı mantık, bir kullanıcının ilk giriş adımını tamamladıktan sonra, web sitesinin aynı kullanıcının ikinci adımı tamamladığını yeterince doğrulamaması anlamına gelir. Örneğin, kullanıcı ilk adımda normal kimlik bilgileriyle aşağıdaki gibi giriş yapar:
POST /login-steps/first HTTP/1.1
Host: vulnerable-website.com
...
username=carlos&password=qwerty
Kullanıcı, ardından hesabıyla ilişkili bir çerez atanarak giriş işleminin ikinci adımına yönlendirilir:
HTTP/1.1 200 OK
Set-Cookie: account=carlos
GET /login-steps/second HTTP/1.1
Cookie: account=carlos
Doğrulama kodunu gönderirken, istek bu çerezi kullanarak kullanıcının hangi hesaba erişmeye çalıştığını belirler:
POST /login-steps/second HTTP/1.1
Host: vulnerable-website.com
Cookie: account=carlos
...
verification-code=123456
Bu durumda, bir saldırgan kendi kimlik bilgileriyle giriş yapabilir, ancak doğrulama kodunu gönderirken hesap çerezinin değerini herhangi bir rastgele kullanıcı adına değiştirebilir:
POST /login-steps/second HTTP/1.1 Host: vulnerable-website.com Cookie: account=victim-user ... verification-code=123456
Uygulamanın bir kullanıcının 2FA'yı devre dışı bırakmasına izin verdiği sayfayı iframe ile deneyin.
Eğer iframe başarılı olursa, mağduru tuzağınıza düşürmek için sosyal mühendislik saldırısı gerçekleştirmeye çalışın.
2FA isteğinin yanıtını kontrol edin.
Yanıtta "Success" değerini gözlemliyorsanız, bunu "Success" olarak değiştirin ve 2FA'nın atlatılıp atlatılmadığını kontrol edin.
Yanıt durum kodu 4XX (örneğin, 401, 402 vb.) ise, yanıt durum kodunu "200 OK" olarak değiştirin ve 2FA'nın atlatılıp atlatılmadığını kontrol edin.
Bir 2FA kodu isteyin ve kullanın.
Şimdi, 2FA kodunu yeniden kullanmayı deneyin; eğer başarıyla kullanılıyorsa bu bir sorundur.
Ayrıca, birden fazla 2FA kodu istemeyi deneyin ve yeni bir kod istendiğinde önceki istenen kodların süresinin dolup dolmadığını kontrol edin.
Daha sonra, önceki kullanılan kodu uzun bir süre (örneğin, 1 gün veya daha fazla) sonra yeniden kullanmayı deneyin. Bu, 6 haneli bir 2FA kodunu kırmak ve tahmin etmek için yeterli bir süre olabilir.
Kullanıcının 2FA devre dışı bırakma işlemini CSRF yoluyla manipüle etmeye çalışın.
Yedek kodları devre dışı bırakmak ve sıfırlamak için yanıt/durum kodu manipülasyonu, kaba kuvvet gibi 2FA'da kullanılan teknikleri uygulayın.
Uygulamaya iki farklı tarayıcıda giriş yapın ve birinci oturumdan 2FA'yı etkinleştirin.
Diğer oturumu kullanın; eğer bu oturum süresiz kalıyorsa, yetersiz oturum süresi dolma sorununu gösterebilir.
Bu durumda, bir saldırgan 2FA'dan önce aktif bir oturumu ele geçirirse, 2FA olmadan tüm işlemleri gerçekleştirme olasılığı vardır.
2FA'dan sonra gelen sayfaya veya uygulamanın diğer herhangi bir kimlik doğrulama yapılmış sayfasına doğrudan gidin.
Eğer başarılı olmazsa, referans başlığını 2FA sayfasının URL'si ile değiştirin. Bu, isteğin 2FA koşulu yerine getirildikten sonra geldiği izlenimini yaratabilir.
2FA kodunu tetikleyen istekte (örneğin, OTP gönderme işlevi), isteği yakalayın.
Bu isteğin yanıtını kontrol edin ve 2FA kodunun sızıp sızmadığını analiz edin.
2FA kodu isteğini tetiklerken, yanıt içinde referans verilen tüm JS dosyalarını analiz edin.
2FA kodunu atlatmanıza yardımcı olabilecek herhangi bir bilgi içeren bir JS dosyası olup olmadığını kontrol edin.
2FA kodu isteyin ve bu isteği yakalayın.
Bu isteği 100-200 kez tekrarlayın; eğer bir sınırlama yoksa, bu bir oran sınırı sorunudur.
2FA kodu doğrulama sayfasında, geçerli 2FA kodu için kaba kuvvet denemesi yapın.
Mağdur kullanıcının e-posta değişikliği veya şifre sıfırlama işlemini gerçekleştirmenizin mümkün olduğunu varsayalım ya da mağduru bunu yapmaya zorlayın.
Eğer e-posta değiştirildiğinde veya şifre sıfırlandığında 2FA devre dışı bırakılıyorsa, bu bir güvenlik sorunudur.
Saldırgan hesabından bir 2FA kodu isteyin.
Bu geçerli 2FA kodunu mağdurun 2FA isteğinde kullanın ve 2FA korumasını atlatıp atlatamayacağını kontrol edin.
2FA sayfasını atlayıp kimlik doğrulaması yapılmış sayfalara doğrudan giderek atlatma yapabilirsiniz.
Referrer başlığını değiştirerek, 2FA engellemelerini geçip geçemediğini kontrol edin.
Hesabınızda daha önce kullanılan bir token’ı kimlik doğrulaması için yeniden kullanmayı deneyin.
Hesabınızdan bir jeton alın ve bu jetonu başka bir hesapta kullanarak 2FA’yı atlatmayı deneyin.
Web uygulamalarından sızan jetonların 2FA’yı bypass etmek için kullanılıp kullanılamadığını kontrol edin.
Aynı oturumu kullanarak 2FA’yı geçmeyi deneyin. Kendi hesabınızla 2FA’yı tamamlayın, ancak mağdurun hesabında bu işlemi atlatmayı hedefleyin.
Şifre sıfırlama bağlantılarını yeniden kullanarak 2FA’yı bypass etmeye çalışın.
Oran sınırlaması yoksa kaba kuvvet yöntemi ile 2FA’yı aşmayı deneyin.
Sınır koyulmuşsa, sabırlı şekilde 2FA kodlarını zorlayarak geçebilirsiniz.
Kodu yeniden gönderdiğinizde, oran sınırlaması sıfırlanırsa, bunu kullanarak 2FA’yı aşın.
Tarayıcı tarafındaki limitleri geçmek için belirli bir yöntem kullanın.
Hesap içindeki işlemleri korumak için oran sınırlaması olmayabilir.
SMS kodu yeniden gönderildiğinde oran sınırlamasının olmaması ile manipülasyon yapın.
OTP’yi sürekli üretip aynı token’larla 2FA’yı aşmayı deneyin.
Tahmin edilebilir bir cookie ile “beni hatırla” fonksiyonunu kullanarak kimlik doğrulamasını atlatın.
IP adresini manipüle ederek, mağdurun kimlik doğrulamasını atlatmaya çalışın.
Test alt alan adlarını kullanarak 2FA’yı atlayabilecek eski sürümler veya zayıf uç noktalar bulun.
2FA API uç noktalarını test ederek atlatma açığı bulabilirsiniz.
2FA etkinleştirildiğinde önceki oturumların sonlandırıldığından emin olun.
Yedek kodlara izinsiz erişim ile 2FA’yı atlatmaya çalışın.
2FA sayfasında sızdırılan bilgiler ile güvenlik açığı araştırın.
2FA sayfasındaki varsayılan null veya sabit kodlarla atlatma yapın.
E-posta doğrulamasını atlayarak 2FA’yı etkinleştirmeye çalışın.
Şifre doğrulama olmadan 2FA’yı devre dışı bırakmayı deneyin.
Güvenilir cihaz süresi dolmadan MFA’yı aşmak için cihaz bilgilerini manipüle edin.
Yanlış OTP göndererek oturum açmayı deneyin.
Bu teknikler ve senaryolar, 2FA (iki faktörlü kimlik doğrulama) sistemlerinin güvenlik açıklarını keşfetmeye yönelik potansiyel saldırı yöntemleridir. Bu tür testlerin yalnızca etik hacking çerçevesinde ve izinli ortamlarda gerçekleştirilmesi önemlidir. Amacımız, sistemlerin zayıf noktalarını keşfederek güvenliklerini artırmak ve potansiyel saldırılara karşı daha dayanıklı hale getirmektir.
Her zaman unutulmamalıdır ki, güvenlik testleri ve saldırılar yalnızca uygun izinlere sahip olduğunuz ortamlarda yapılmalıdır.