Tamam, yeterince durma; işte şu ana kadar bulduğum şey
(üzgünüm, uzun mesaj önde. Cesur ol arkadaşım, yolculuk buna değecek)
Orijinal postadan yöntem 3 ve 4'ü bir tür 'bulanık' veya dinamik beyaz listeye birleştirin ve sonra - ve işte burada - beyaz listeye alınmamış IP'leri engellememek, sadece cehenneme ve arkaya sıkıştırmak .
Bu önlemin yalnızca bu çok spesifik saldırı türünü önlemeye yönelik olduğunu unutmayın. Uygulamada, elbette, otantikliğe yönelik diğer en iyi uygulamalar yaklaşımlarıyla birlikte çalışır: sabit kullanıcı adı azaltma, IP başına azaltma, kod tarafından zorlanan güçlü şifre politikası, kontrolsüz çerez girişi, onları kaydetmeden önce tüm şifre eşdeğerlerini hash etme, asla güvenlik soruları vb. kullanma
Saldırı senaryosu ile ilgili varsayımlar
Bir saldırgan değişken kullanıcı adlarını hedefliyorsa, kullanıcı adımız kısıtlamamız tetiklenmez. Saldırgan bir botnet kullanıyorsa veya geniş bir IP aralığına erişiyorsa, IP azaltma güçsüzdür. Saldırgan, kullanıcı listemizi önceden kazıdıysa (genellikle açık kayıt web hizmetlerinde mümkündür), 'kullanıcı bulunamadı' hatalarının sayısına dayalı olarak devam eden bir saldırı tespit edemeyiz. Kısıtlı bir sistem çapında (tüm kullanıcı adları, tüm IP'ler) daraltmayı zorlarsak, bu tür saldırılar tüm sitemizi saldırı süresi ve azaltma süresi boyunca DoS yapar.
Bu yüzden başka bir şey yapmalıyız.
Karşı önlemin ilk kısmı: Beyaz liste
Oldukça emin olabileceğimiz şey, saldırganın binlerce kullanıcının (+) IP adreslerini tespit edememesi ve dinamik olarak aldatmamasıdır. Bu da beyaz listeyi uygulanabilir kılar . Başka bir deyişle: her kullanıcı için, kullanıcının daha önce (son zamanlarda) oturum açtığı (karma) IP'lerin bir listesini saklarız.
Böylece, beyaz liste şemamız kilitli bir 'ön kapı' olarak işlev görecektir; burada kullanıcının giriş yapmak için tanınmış 'iyi' IP'lerinden birine bağlanması gerekir. Bu 'ön kapıya' kaba kuvvet saldırısı neredeyse imkansız olurdu (+).
(+) saldırgan sunucuya, tüm kullanıcılarımızın kutularına veya bağlantının kendisine 'sahip' değilse ve bu durumlarda artık bir 'kimlik doğrulama' sorunumuz yoksa, gerçek bir franchise boyutunda çekme -plug FUBAR durumu
Karşı önlemin ikinci kısmı: Tanınmayan IP'lerin sistem genelinde kısılması
Kullanıcıların bilgisayarları sık sık değiştirdiği ve / veya dinamik IP adreslerinden bağlandığı bir açık kayıt web hizmetinde beyaz listenin çalışması için, tanınmayan IP'lerden bağlanan kullanıcılar için bir 'kedi kapısını' açık tutmamız gerekir. İşin püf noktası, kapıyı botnetlerin sıkışıp kalması ve meşru kullanıcıların mümkün olduğunca az rahatsız olması için tasarlamak .
Şemamda, bu, onaylanmamış IP'ler tarafından, örneğin 3 saatlik bir süre boyunca (hizmet türüne bağlı olarak daha kısa veya daha uzun bir süre kullanmak daha akıllıca olabilir) çok kısıtlayıcı bir maksimum başarısız giriş denemesi sayısı ayarlanarak elde edilir ve bu kısıtlamayı küresel hale getirmek , yani. tüm kullanıcı hesapları için.
Yavaş (denemeler arasında 1-2 dakika) kaba kuvvet bile bu yöntem kullanılarak hızlı ve etkili bir şekilde tespit edilir ve engellenir. Tabii ki, gerçekten yavaş bir kaba kuvvet hala fark edilmeden kalabilir, ancak çok yavaş hızlar kaba kuvvet saldırısının amacını yener.
Bu azaltma mekanizması ile başarmayı umduğum, maksimum sınıra ulaşıldığında, 'kedi kapısı' çarpmalarının bir süre kapalı kalması, ancak ön kapımızın normal yollarla bağlanan meşru kullanıcılara açık kalmasıdır:
- Ya tanınan IP'lerinden birinden bağlanarak
- Veya kalıcı bir giriş çerezi kullanarak (her yerden)
Saldırı sırasında etkilenecek tek meşru kullanıcı - yani. kısıtlama etkinleştirildiğinde - bilinmeyen bir yerden veya dinamik bir IP ile giriş yapan kalıcı giriş çerezleri olmayan kullanıcılar olurdu. Bu kullanıcılar azaltma bitene kadar giriş yapamazlar (saldırganın azaltmaya rağmen botnetini çalışır tutması durumunda bu biraz zaman alabilir).
Bu küçük kullanıcı alt kümesinin, aksi halde kapalı kedi kapısından sıkılmasına izin vermek için, botlar hala çarpıyor olsa bile, bir CAPTCHA ile 'yedek' giriş formu kullanacağım. Böylece, "Üzgünüz, ancak şu anda bu IP adresinden giriş yapamıyorsunuz" mesajını görüntülediğinizde, " güvenli yedekleme girişi - YALNIZCA HUMANS ( botlar: yalan söyleme ) " yazan bir bağlantı ekleyin . Şaka bir yana, bu bağlantıyı tıkladıklarında, onlara site genelinde azaltmayı atlayan bir reCAPTCHA kimlik doğrulamalı giriş formu verin. Bu şekilde, eğer insan ise VE doğru giriş + şifresini biliyorlarsa (ve CAPTCHA'ları okuyabilirlerse), bilinmeyen bir ana bilgisayardan bağlanıp otomatik oturum açma çerezini kullanmasalar bile asla reddedilmezler.
Oh, ve sadece açıklığa kavuşturmak için: CAPTCHA'ların genel olarak kötü olduğunu düşündüğüm için, 'yedekleme' giriş seçeneği sadece azaltma etkinken görünecektir .
Bunun gibi sürekli bir saldırının hala bir tür DoS saldırısı teşkil edeceğini inkar etmek mümkün değildir, ancak açıklanan sistem yerinde olduğunda, yalnızca küçük bir kullanıcı alt kümesi olduğundan, yani "beni hatırla" kurabiyesi VE bir saldırı olurken giriş yapıyor VE her zamanki IP'lerinden giriş yapmıyor VE CAPTCHA'ları okuyamıyor. Bot saldırısı sırasında sadece bu kriterlerin TÜMÜNE hayır diyebilenler, özellikle botlar ve gerçekten şanssız engelli insanlar geri çevrilecek.
DÜZENLEME: Aslında, CAPTCHA meydan okumalı kullanıcıların bile bir 'kilitlenme' sırasında geçmesine izin vermenin bir yolunu düşündüm: Yedek CAPTCHA girişinin yerine veya ek olarak, kullanıcıya tek kullanımlık bir seçenek sunma , e-postasına gönderilen ve daha sonra daralmayı atlamak için kullanabileceği kullanıcıya özel kilitleme kodu. Bu kesinlikle 'rahatsızlık' eşiğimi aşıyor, ancak sadece küçük bir kullanıcı alt kümesi için son çare olarak kullanıldığından ve hesabınızdan kilitlenmeyi hala devirdiğinden, kabul edilebilir.
(Ayrıca, saldırının burada açıkladığım kötü dağıtılmış sürümden daha az karmaşık olması durumunda bunların hiçbirinin gerçekleşmeyeceğini unutmayın . Saldırı sadece birkaç IP'den geliyorsa veya sadece birkaç kullanıcı adına isabet ediyorsa, çok daha önce engellenecektir ve site genelinde sonuçları olmadan )
Bu, sağlam olduğuna ve kaçırdığım çok daha basit bir çözüm olmadığına ikna olduktan sonra, kimlik doğrulaması kütüphanemde uygulayacağım karşı önlem. Gerçek şu ki, güvenlikte yanlış şeyler yapmanın pek çok ince yolu var ve yanlış varsayımlar yapmanın veya umutsuzca kusurlu mantık yapmanın üstünde değilim. Bu nedenle, lütfen, herhangi bir geri bildirim, eleştiri ve iyileştirme, incelik vb. Çok takdir edilmektedir.