Protezione di un semplice webservice contro la brute-force con mod-security

4

Voglio fornire una difesa di base contro gli attacchi a forza bruta contro un semplice servizio web HTTPS. Il servizio web fornisce un metodo login (diciamo al link ) che ottiene un nome utente e una password come parametri HTTP GET o come campi di un oggetto JSON dato da HTTP POST. Il servizio restituisce il codice di stato HTTP 403 sui tentativi di accesso non riusciti. Posso pensare a due tipi di attacchi per garantire contro:

  • Troppi tentativi di accesso non riusciti dallo stesso IP in un dato intervallo di tempo
  • Troppi tentativi di accesso non riusciti per lo stesso nome utente in un determinato intervallo di tempo

Per quanto ho capito, mod-security è adatto a rilevare questi attacchi come richieste di blocco, ma le esercitazioni che ho trovato sono molto complesse e la sintassi mod-security mi imbarazza. Potresti fornire un set di regole di esempio per proteggersi dagli attacchi specificati sopra? In pseudo codice direi qualcosa di simile al seguente, con numeri appropriati di n , m e x :

<LocationMatch /login>
  IF response_status == 403 THEN
    user = fetch_user_from_request
    IF  ++fail_count_per_IP[IP] > n  
    OR  ++fail_count_per_USER[USER] > m THEN
       block IP FOR x minutes
</LocationMatch>
    
posta Jakob 26.02.2013 - 16:08
fonte

1 risposta

1

Esistono serie di regole di limitazione della velocità in ModSecurity CRS che non correlano direttamente se il tentativo di autenticazione ha avuto esito positivo o meno. Di seguito è riportata una delle regole

SecRule IP:BRUTE_FORCE_COUNTER "@gt %{tx.brute_force_counter_threshold}" 
"phase:5,id:'981042',t:none,nolog,pass,t:none,
setvar:ip.brute_force_burst_counter=+1, 
expirevar:ip.brute_force_burst_counter=%{tx.brute_force_burst_time_slice},  
setvar:!ip.brute_force_counter"

Nella regola sopra stiamo mantenendo un BRUTE_FORCE_COUNTER contro un IP che viene mantenuto ogni IP che puoi anche mantenerlo contro Session. Quindi stiamo mantenendo una soglia che è il numero di tentativi legali mantenuti in brute_force_counter_threshold. Per ogni transazione stiamo incrementando il contatore che è ip.brute_force_burst_counter = + 1 . Dopo tx.brute_force_burst_time_slice che è l'intervallo di tempo dopo il quale aggiorniamo il contatore

    
risposta data 26.02.2013 - 17:43
fonte

Leggi altre domande sui tag