paint-brush
Web Uygulamanızı Koruma: Hız Sınırlama ve Kaba Kuvvet Saldırısını Önleme Kılavuzuile@shad0wpuppet
26,872 okumalar
26,872 okumalar

Web Uygulamanızı Koruma: Hız Sınırlama ve Kaba Kuvvet Saldırısını Önleme Kılavuzu

ile Constantine4m2024/01/22
Read on Terminal Reader
Read this story w/o Javascript

Çok uzun; Okumak

Web uygulamalarının kaba kuvvet saldırılarını ve potansiyel hizmet aşırı yüklemesini önlemek için sağlam hız sınırlayıcı önlemlerin uygulanması önemlidir. Hız sınırlama teknikleri ve hız sınırlarının test edilmesine ve aşılmasına ilişkin bilgiler. Makale otomasyon yaklaşımını, başlık manipülasyonlarını, uç nokta varyasyonlarını ve oturum açmayla ilgili stratejileri kapsamaktadır. Orijinal ziyaretçi IP'lerini geri yüklemek için Cloudflare'in kullanımı da araştırılıyor ve uygulama öncesinde uygulama üzerindeki potansiyel etkileri kapsamlı bir şekilde test edip değerlendirmeye dikkat ediliyor.
featured image - Web Uygulamanızı Koruma: Hız Sınırlama ve Kaba Kuvvet Saldırısını Önleme Kılavuzu
Constantine HackerNoon profile picture
0-item


Uygulamanız oturum açma, kayıt, parola sıfırlama/kurtarma, onay bağlantılarını yeniden gönderme ve sunucu istekleri gerektiren diğer belirli işlevler gibi temel özellikleri içeriyorsa, kaba kuvvet saldırılarına ve hizmetiniz üzerinde önemli bir yük oluşmasına karşı mekanizmaların uygulanması çok önemlidir. Bu tür mekanizmalar olmadan uygulamanız, kullanıcılara aşırı sayıda e-posta/OTP gönderilmesi de dahil olmak üzere çeşitli tehditlere karşı savunmasız kalabilir ve bu durum potansiyel olarak mali ve itibar açısından zarara yol açabilir.


Çoğu web uygulaması , bir ödeme modeline dayalı olarak istek sayısını kısıtlamak gibi yalnızca iş mantıklarının dayattığı sınırlamalara dayanan, yeterli hız sınırlayıcı önlemlerden yoksundur. Ancak bazı uygulamalar, özellikle oturum açma denemeleri, kayıt ve diğer kritik işlevler gibi işlemler için hız sınırları içerir. Bu uygulamalar genellikle IP adresi takibi için X-Forwarded-For başlığına bağlıdır.


Basit bir örneği açıklamak için Flask'ta bu kod pasajını buldum


 from flask import Flask, request, jsonify from flask_limiter import Limiter from flask_limiter.util import get_remote_address app = Flask(__name__) limiter = Limiter(    app,    key_func=get_remote_address,    storage_uri="memory://",) def get_ipaddr():    # Retrieve the client's IP address from the request    # X-Forwarded-For header is used to handle requests behind a proxy    ip_address = request.headers.get('X-Forwarded-For', request.remote_addr)    return ip_address # Rate limit to 5 requests per minute per IP @limiter.limit("5 per minute") @app.route('/') def index(): ip_address = get_ipaddr() return ip_address

Aşağıdaki bölümlerde, uygulamanızda hız limitlerini test etmeye ve aşmaya yönelik çeşitli yaklaşımları açıklayacağım.


Uygulamanızı bu tür güvenlik açıklarına karşı verimli bir şekilde test etmek için otomasyon güçlü bir araçtır. Bunu, Python'dakiler gibi komut dosyaları kullanarak (benim sıklıkla yaptığım gibi) veya Burp Suite gibi araçları (bu arada test uzmanları ve siber güvenlik uzmanları için harika bir araç) kullanarak başarabilirsiniz. Ayrıca, çekleri nispeten kolay bir şekilde otomatikleştirmek için Postman gibi araçlar kullanılabilir.

Test Oranı Limiti

X-Forwarded-For başlığındaki IP değerini değiştirme

 X-Originating-IP: 127.0.0.1

Gönderdiğiniz her istekte farklı IP değerleri kullanın.


Çift X-Forwared-For başlığını kullanın.

 X-Forwarded-For: X-Forwarded-For: 127.0.0.1

Aynısını farklı başlıklarla deneyin.

 X-Originating-IP: 127.0.0.1 X-Remote-IP: 127.0.0.1 X-Remote-Addr: 127.0.0.1 X-Client-IP: 127.0.0.1 X-Host: 127.0.0.1 X-Forwared-Host: 127.0.0.1

Diğer başlıkları değiştir

Kullanıcı aracısını, içerik türünü, kabul edilen dili vb. veya çerezleri, kullanıcı tanımlayıcı olarak kullanılabilecek herhangi bir şeyi değiştirmeyi deneyin.


IP başına 3 denemelik bir hız sınırı varsa, her üç denemede, başlığın (veya isteklerinizdeki diğer başlıkların veya parametrelerin) IP değerini değiştirin.

Paramlara boş karakterler ekleyin

Gönderdiğiniz parametrelere eklemeyi deneyin

 %00, %0d%0a, %0d, %0a, %09, %0C, %20

Örneğin

 param1=value1%%0d%0a param2=value2%00

Örneğin, e-posta doğrulaması için OTP talep ediyorsanız ve yalnızca 3 deneme hakkınız varsa, bu 3 denemeyi kullanın.

 [email protected] [email protected]%00 [email protected]%0d%0a And so on

Benzer uç noktaları kullanın

Örneğin,/API/v1/signup uç noktasını test ediyorsanız, /Signup, /SignUp ve /signup'a kaba kuvvet uygulamayı deneyin. Orijinal uç noktalara boş karakterler (yukarıdakilerden) eklemeyi deneyin.

İstenen API uç noktasına ekstra parametreler ekleme

Sınır, /api/v1/resetpassword uç noktasının istekleri üzerindeyse, bazı sorgu parametreleri ekleyerek kaba zorlamayı deneyin - hız sınırına ulaşıldığında, örneğin /api/v1/resetpassword?param1=value1'i deneyin.

Oturum açma bilgileri önemlidir

Bir uygulamanın hatalı bir mantığı olabilir - her denemeden/deneme serisinden önce hesabınıza giriş yaparsanız, IP'niz için hız sınırı sıfırlanır ve şifre kaba kuvvet saldırınıza devam edebilirsiniz. Eğer bir giriş özelliğini test ediyorsanız, her deneme/deneme serisi için bunu Burp Suit'te ayarlarda Pitchfork saldırısı ile yapabilirsiniz (veya bunun için kendi komut dosyanızı yazabilirsiniz).


İşte sadece bir POW almak için X-Forwarded-For başlığına yönelik basit bir kontrolü nasıl otomatikleştirdiğime dair örneğim:


 from random import randint import requests import json url = "https://yourapp.net/api/v1/regconfirm-resend" data = {   "email": "[email protected]" } N = 100 def generate_random_ip():   return '.'.join(       str(randint(0, 255)) for _ in range(4)   ) for _ in range(N):   headers = {       "Host": "yourapp.net",       "Content-Type": "application/json",       "X-Forwarded-For": generate_random_ip()   }   response = requests.post(url, headers=headers, data=json.dumps(data))   print(headers)   print(f"Status Code: {response.status_code}, Response: {response.text}")

Orijinal ziyaretçi IP'lerini geri yükleme

Olası bir çözüm Cloudflare ve mekanizmalarının kullanılması olabilir. Burada ayrıntılı bir açıklamayı restoreing-original-visitor-ips bulabilirsiniz. Savunma mekanizmalarına sadece kısa bir genel bakış sunacağım.


Orijinal ziyaretçinin gelen IP adresine bağlı uygulamalar kullanıyorsanız varsayılan olarak bir Cloudflare IP adresi günlüğe kaydedilir. Orijinal ziyaretçi IP adresi, CF-Connecting-IP adı verilen, eklenen bir HTTP başlığında görünür. Web sunucusu talimatlarımızı takip ederek orijinal ziyaretçi IP adresini kaynak sunucunuza kaydedebilirsiniz. İstekler kaynak sunucunuza ulaştığında bu HTTP üstbilgisi kullanılamıyorsa Dönüşüm Kurallarınızı ve Yönetilen Dönüşümler yapılandırmanızı kontrol edin.


Pseudo IPv4, Başlıkların Üzerine Yaz olarak ayarlandıysa - Cloudflare, CF-Connecting-IPv6 başlığındaki gerçek IPv6 adresini korurken, sahte IPv4 adresiyle mevcut Cf-Connecting-IP ve X-Forwarded-For başlıklarının üzerine yazar.


NOT: Böyle bir savunma mekanizmasını uygularken kapsamlı testler yapmayı unutmayın. Bu yaklaşım daha sonra kümenin tamamına uygulanabilir ve gereksiz olduğu durumlarda belirli işlevleri ve mikro hizmetleri olumsuz yönde etkileyebilir. Özetle, bir güvenlik ihlalini düzeltirken dikkatli olun çünkü bu durum tüm uygulamayı etkileyebilir. Sisteminizin hangi bölümünün olumsuz etkilenebileceğini analiz edin ve değişiklikleri ürün ortamına göndermeden önce her şeyi test edin.


Burada da yayınlandı.