Günümüzde kırılmayan şifre yoktur. Maalesef. Siz her ne kadar bilgisayarınızı en temiz şekilde de kullansanız, şifreleriniz ne kadar uzun olursa olsun , hacker lar şifrenizi çalamasada sisteminizi zorlayıp şifrenizi bulabiliyorlar. En bilinen ve etkili yöntem olan brute force attack ile. brute force attack nedir ? nasıl çalışır ? çok uzun konular. En basit şekliyle anlatmak gerekirse örneğin;

login.php yada login.aspx vb. her ne olursa olsun, web uygulamanızda bir giriş dosyanız var. Hacker kişi, bu dosyayı hedef alıyor. Kullanıcı adı ve şifrenin olabilecek tüm ihtimallerini ki bu her ikisininde uzunluğuna göre milyarlarca ihtimal yapıyor, hacker yazdığı bir bot ile hepsini tek tek bot a denetiyor. Teknik olarak en sonunda doğru kullanıcı adı ve şifre kombinasyonunu yakalıp sisteminize giriyor. Tabiki ben çok çok sığ bir şekilde anlattım konuyu. Konu hakkında detaylı bilgileri https://en.wikipedia.org/wiki/Brute-force_attack adresinden ve http://www.howtogeek.com/166832/brute-force-attacks-explained-how-all-encryption-is-vulnerable/ adresinden edinebilirsiniz.

Aşağıdaki resimde gördüğünüz gibi 250.000 dolarlık sistemler kurulmuş ve bu sistemlerin saniyede kaç adet kombinasyonu deneyebildiğini ve o çok karışık şifrenizi kaç dakika içinde bulabileceğini siz hayal edin 🙂

 

Peki sitemize böyle bir saldırı geliyor ? Şifremizin çalınmaması için neler yapabiliriz ?

Aslında en iyi çözüm, login işlemi gerçekleştiren dosyanıza erişimi kısıtlamak. Sadece belirli ip ve iplerden bu dosyaya erişim yaptırmak. Bu çözüm sadece yönetim panellerinde işler. Bu paneller nereleri olabilir ? Mesela bu blog ta da kullanılan wordpress cms’ in yönetim paneli. Çünkü buraya sadece benim girmem yeterli. Siz kullanıcıların giriş işlemi yok (Üyelik sistemini kapadım 🙂 ) Yada e-ticaret sitelerinin yönetim panelleri.

Yani sitenizde üyelik ile işlemler yapılıyorsa bu iş tutmaz.

Peki ne yapabiliriz ?

Login işlemi yapan dosyamıza erişime süre sınırı getireceğiz. Normalde serverımız, kullanıcıdan gelen her isteğe cevap vermek üzere bekliyor. Lakin bizim yapacağımız ayarlar sonrasında, belirlediğimiz süre içinde belirlediğimiz adet sorgu yapabilecek. Sınırı geçerse sorgu yapamayacak.

Sunucunuzda Nginx ve Php kullandığınızı varsayarak anlatacağım. login dosyasını da wordpress üzerinden örneklendireceğim lakin sizin wordpress kullanıyor olmanız şart değil. İlgili php dosyası yerine kendi sisteminizin login dosyasını yada hangi dosyaları istiyorsanız yazabilirsiniz.

Aşağıdaki işlemleri Nginx’ in “Limit Req Module” ü sayenizde yapabiliyoruz. Bu Modül dahili geliyor, sonradan kurmanıza gerek yok.

  • Öncelikle “/etc/nginx/nginx.conf” dosyasını açıyoruz http{..} bloğunun içine aşağıdaki satırı kendi isteğinize göre şekillendirip ekliyorsunuz, ardından kaydedip çıkıyorsunuz.

    Yukarıdaki ayarlarda şu diyor;

    Bir kural oluştur, bu kuralın aktif edildiği yerlere saniye başına sadece 1 request(istek) gerçekleşebilsin. Ve bu sınırlamanın ip adreslerini 10mb lık bir dosyada tut.

    2 parametrede de kendi ihtiyacınıza göre değişiklik yapacağız. 10Mb lık bir kayıt dosyası, eğerki sitenizin ziyaretçi sayısı yüksek ise sizi zorlar. Bu yüzden bunu 100mb yapabilirsiniz. Saniye 1 istek yapılabiliyor, isterseniz 1r/m yaparak dakika da 1 isteğe izin verebilirsiniz.

  • Sitemizin server yapılandırmasını yaptığımız nginx dosyasına girip (örneğin: /etc/nginx/sites-enabled/default) server{..}  parametresinin içine aşağıdaki kod bloğunu ekliyoruz. Ekliyoruz derken, kendinize göre şekillendirip ekleyin. Ardından kaydedip çıkın ve “sudo service nginx restart” komutunu çalıştırıp, nginx sunucunuzu tekrar başlatın.

     
  • Artık wp-login.php dosyasına saniyede 1 den fazla istek yaptığımda aşağıdaki uyarıyı alıyorum ve saldırım gerçekleşmiyor.
    nginx 503
     1 saniye sonra tekrar istek yaptığımda ise cevap geliyor.
  • Lakin ben bazı ipleri bu sınırlamadan hariç tutmak istiyorsanız aşağıdaki işlemleri yapmalısınız.
    Az önce de girdiğiniz “/etc/nginx/nginx.conf” dosyamızı açıp http bloğunun içine aşağıdaki map bloğunu ekliyoruz. Eklerken benim yazdığım ip adresleri yerine kendi istediğiniz ip adreslerini yazınız.

    Ve ardından en başta aynı dosyada tanımladığımız kuralı aşağıdaki gibi güncelliyoruz.

    Önceden kuralın ipleri ele alışı

    değeri üzerinden gerçekleşiyordu lakin artık $rt_filtered_ip üzerinden gerçekleşiyor.
    Yine “sudo service nginx restart” ile nginx serverı restart ladıktan sonra, bu kuralı kullanmaya başlayabilirsiniz.

1 Comment PHP dosyalarınızı brute force attack ‘ a karşı koruyun

Leave A Comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir