Konuyu Oyla:
  • Derecelendirme: 5/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Güvenlik Önerileri#2 | Replay Saldırısı | 2FA Dikkat Edilmesi Gerekenler
#1
Star 
Merhabalar Arkadaşlar,

Bu makalede 2 faktörlü kimlik doğrulama ile ilgili dikkat edilmesi gereken hususlara değineceğim. Bir yazılım sistemine eklenen 2 faktörlü kimlik doğrulama mekanizmaları maalesef birçok projede yeterli düzeyde koruma sağlayamamaktadır. Sebebi ise tamamen yapılan hatalı tercihlerdir. Güvenlik dediğimiz faktör tamamen bir süreçtir ve devamlı güncelliğini koruması gerekmektedir. Zayıf algoritmalar kullanılmamalıdır. 

Dikkat Edilmesi Gereken Hususlar

  • Gizli anahtar uzunluğu
  • Güvenli Hash algoritma tercihi
  • Kaba kuvvet/Sözlük saldırıları tedbirleri
  • Replay saldırısı ve korunma tedbirleri

Gizli Anahtar Uzunluğu


Gizli anahtar oluşturma aşaması son derece önemlidir. Yeterli uzunlukta oluşturulmayan gizli anahtar yapılabilecek saldırılara (kaba kuvvet, sözlük vb.) karşı direnç gösteremez. Oluşturulan gizli anahtarların güvenlik zaafiyeti göstermemesi için minimum 16 karakter uzunluğunda olması (önerim: 24 karakter) son derece önemlidir. 2 Faktörlü kimlik doğrulama sistemleri (Google Authenticator, Microsoft Authenticator vb.) oluşturulan gizli anahtarın base32 kodlaması yapılarak ilgili Authenticator uygulamalarına eklenir.

passwordcombination.png


Güvenli Hash Algoritmasının Tercihi

OTP süreçlerinde en sık kullanılan SHA1 hash algoritmasıdır. Bir hash algoritmasının en büyük sorunu farklı 2 veriden aynı hash değerinin üretilmesidir. SHA1 güvenirsizliği kanıtlanmış bir hash algoritmasıdır. Bu konuyla ilgili 2 kaynağı aşağıdaki bağlantılardan inceleyebilirsiniz.

https://www.nist.gov/news-events/news/20...-algorithm

https://shattered.io/

Güvenirsizliği kanıtlanmış SHA1 algoritmasına güvenmemiz ne kadar doğru olabilir ki? Bu sebeple OTP süreçlerinizde SHA256, SHA384, SHA512 hash algoritmalarından birini tercih etmemiz ve sistemlerimizi buna uygun tasarlamamız daha doğru olacaktır.

Standart koruma: SHA256
Yüksek koruma: SHA512

Kaba kuvvet/Sözlük Saldırıları Tedbirleri

Söz konusu kaba kuvvet (brute force) ve sözlük (wordlist) saldırıları olunca günümüz donanımların gücüne değinmeden olmaz. Çok fazla detaya girmeden bahsedecek olursam günümüz koşullarda kullanılan işlemci ve ekran kartı işlemcileri yüksek performans sağlamaktadır. Hash algoritmalarıyla ilgili daha önceden yapmış olduğum bir sözlük saldırısına ait istatistikler aşağıda bilginize sunulmuştur.

hashtest.png

Yukarıdaki görsel donanımlarımızın artık ne kadar hızlı ve saldırılarda tehlikeli olduğunu gösteriyor. Konumuza dönecek olursak 2FA uygulamalarında brute force ve sözlük saldırıları varsayılan olarak (TOTP için) 30 saniye olan 2 faktörlü kimlik doğrulama aşamasında gerçekleşmektedir. 30 saniyelik süreçte kullanıcı 2 faktörlü kimlik doğrulama kodunu girmek durumundadır. Bu kod genel olarak 6 karakterli (8 ve 10'da tercih edilmektedir.) ve rakamlardan oluşur. Şimdi yukarıdaki istatistiklere baktığımızda rahatlıkla anlayabiliriz ki 6 veya 8 karakterli bir 2FA kodunu kırmak 1 saniye bile sürmeyecektir.

68_combinations.png

Bu yüzden uygulamalarımızda 2fa kodu doğrulaması içinde engelleyici, geciktirici bir çözüm oluşturmak gerekmektedir. Saldırganın çeşitli saldırılarla (mitm vb.) server tarafına yaptığımız isteği yakaladığını düşünün. Yukarıdaki olasılık miktarını göz önüne alırsak eğer ki 2fa doğrulaması için saldırı engelleyici bir çözüm yoksa saldırgan başarıyla saldırısını sonuçlandıracaktır.

Saldırılar aşamasında yapılan istek sayısına göre hesabı kilitlemek elbetteki bir çözümdür. Fakat bunun kötü niyetle kullanılmasıda mümkündür. Saldırgan ele geçirdiği hesapları bu şekilde kilitleyerek kullanıma engel bir durumda oluşturabilir.

Tavsiye;
Şahsi olarak uyguladığım algoritma:  Yukarıda yapılabilecek saldırıya istinaden ben herhangi bir bloklama yapmıyorum. Bunun yerine geciktirme işlemi uyguluyorum. Yani kullanıcı 2fa kodunu yanlış girdiğinde veya olası saldırıda son yanlış girme zamanını bir yerde depoluyor ve sonraki istekte öncelikle son yanlış giriş zamanını sorgulayarak aralarında 10 saniye gecikme eklettiriyorum. Yani kullanıcı 2fa kodunu yanlış girerse 2. giriş için 10 saniye beklemek zorundadır. Aksi halde sunucu uygulaması hata döndürür ve erişime izin vermez. Saldırı göz önüne alındığında 30 saniye geçerli olan bir kod için 10 saniye gecikme işlemi maksimum 3 giriş hakkı sunar. Böylelikle olası saldırının başarıya ulaşma ihtimali son derece zayıflamış olur.

Replay Saldırısı ve Korunma Tedbirleri

Replay saldırısının görsel olarak anlaşılabilmesi kolaydır. Bu sebeple lütfen aşağıdaki aşamaları dikkatlice inceleyiniz.

replayattack.png


Yukarıdaki görselde 2FA süreçlerinin güvenli bir şekilde gerçekleşmesi için doğrulama işlemi yapıldıktan sonrada güvenlik tedbirlerinin mutlaka alınması gerekmektedir. Kullanıcı başarılı bir şekilde 2FA'dan geçebilir ve servisten token alabilir. Peki 30 saniyelik 2FA sürecinde ya bir saldırgan mitm uygulayarak yapılan isteği aynı kod ile tekrarlarsa? Eğer ki server tarafta 2fa doğrulama işlemi başarıyla gerçekleştirdikten sonra aynı kod ile yapılan 2. ve sonraki isteklere izin verirsek saldırgan sistemden başarılı bir şekilde yeni bir token almayı gerçekleştirebilir.

Öneri;
Sunucu tarafta 2fa kodu doğrulaması 1.kez gerçekleştikten sonra aynı kod ile 2. ve sonraki doğrulama işlemlerine izin vermemek ve engellemek gerekir.

Öncelikle sabırla okuduğunuz için teşekkür ederim. Sorularınız varsa, bilgim dahilinde yanıtlamaya çalışırım.
Faydalı olması ümidiyle.
Cevapla
#2
brute force ve wordlist saldırılarında saniyede milyonlarca ataktan bahsedilmiş, gelen yoğun istek üzerine kullanıcıyı kilitlemenin de kötü niyetli olarak kullanılabileceği mümkün peki gelen istekleri saniye bazında sınırlamak doğru bir yaklaşım olmaz mı? Normal kullanıcı saniyede 2 istek bile gönderemez bu şekilde bir sınırlama mümkün mü acaba
Cevapla
#3
Information 
(28-04-2025, Saat: 13:45)Javs Adlı Kullanıcıdan Alıntı: brute force ve wordlist saldırılarında saniyede milyonlarca ataktan bahsedilmiş, gelen yoğun istek üzerine kullanıcıyı kilitlemenin de kötü niyetli olarak kullanılabileceği mümkün peki gelen istekleri saniye bazında sınırlamak doğru bir yaklaşım olmaz mı? Normal kullanıcı saniyede 2 istek bile gönderemez bu şekilde bir sınırlama mümkün mü acaba

Bu tamamen tercih meselesidir. Projenin nasıl tasarlandığına bağlı olarak uygulanabilir. Bazı uygulamalar aynı kullanıcı bilgileriyle 1'den fazla erişime izin vermektedir. Böyle bir durumda kimin ne zaman giriş yapılacağı bilinmediğinden dolayı çakışma durumunda gereksiz bekletme süreci uygulanmış olur. Ben bu tarz bir yöntem uygulamıyorum. Genelde yazdığım sistemlerde 1 kullanıcı 1 token alabiliyor ve 2. bir giriş olduğunda diğer oturumu otomatik sonlanıyor. Burada amaç hem güvenlikken hemde gereksiz bekletme yapmayarak performans düşürmemektedir. Tabi akıl akıldan üstündür. Güzel fikirler önerilirse bende tekniklerimi geliştirebilirim.  Shy

Farklı örnek fikirler;
Her yanlış girişte süreyi uzatmak. Örneğin;
1. yanlışta 2 saniye,
2. yanlışta 10 saniye,
3. yanlışta 1 dk vb. şeklinde gider. 

Telefonlarımızdaki ekran kilitlerinin yanlış girişlerde uyguladığı yöntemde uygulanabilir.

Yukarıdaki örnekte ben tamamen "yanlış girilen bilgi saldırı amaçlı olabilir ve min 10 saniye bir sonraki giriş için bekletilsin" diye düşünerek tasarlayıp uyguladım.

Değerli öneriniz için teşekkür ederim.
Cevapla
#4
Elinize sağlık, çok güzel anlatmışsınız.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
Star Güvenlik Testleri#1 | Rar, 7z, Zip | Hangisi daha güvenli? bakyuz 5 1.001 02-05-2025, Saat: 15:49
Son Yorum: shooterman
Star Güvenlik Testleri#2 | Hash Algoritma Saldırıları Testi bakyuz 3 628 29-04-2025, Saat: 12:13
Son Yorum: bakyuz
Star Güvenlik Önerileri#1 | Pass the Hash | 2FA Önemi bakyuz 0 408 27-04-2025, Saat: 00:28
Son Yorum: bakyuz
Star SECProxy Proje Önerileri bakyuz 2 779 22-04-2025, Saat: 17:54
Son Yorum: bakyuz



Konuyu Okuyanlar: 1 Ziyaretçi