2010-06-03 16 views
13

Sto per implementare un'API RESTful sul nostro sito Web (basata sui servizi di dati WCF, ma probabilmente non importa).Come si prevengono gli attacchi di forza bruta sui servizi dati RESTful

Tutti i dati offerti tramite questa API appartengono a determinati utenti del mio server, quindi devo assicurarmi che solo gli utenti abbiano accesso alle mie risorse. Per questo motivo, tutte le richieste devono essere eseguite con una combinazione login/password come parte della richiesta.

Qual è l'approccio consigliato per prevenire attacchi di forza bruta in questo scenario?

Stavo pensando di registrare le richieste non riuscite negate a causa di credenziali errate e ignorando le richieste provenienti dallo stesso IP dopo che una certa soglia di richieste non riuscite è stata superata. È questo l'approccio standard o mi manca qualcosa di importante?

risposta

8

Il blocco basato su IP è rischioso a causa del numero di gateway NAT disponibili.

Si potrebbe rallentare (tar pit) un client se fa troppe richieste rapidamente; cioè, inserire deliberatamente un ritardo di un paio di secondi prima di rispondere. È improbabile che gli umani si lamentino, ma hai rallentato i robot.

+7

Hm, come si desidera inserire CAPTCHA in API RESTfull? AFAIU tutti i clienti non dovrebbero essere esseri umani. – SergGr

+0

Buon punto, devo aver battuto le palpebre sul bit RESTful. Difficile. – crazyscot

+0

Un captcha è quello che sto usando in questo momento per il mio normale sito web. Ma come ha sottolineato il principiante Iphone, questa non è un'opzione per una riposante api. Il tarpitting potrebbe essere una buona idea. –

3

Vorrei utilizzare lo stesso approccio di un sito web. Tieni traccia del numero di tentativi di accesso non riusciti all'interno di una determinata finestra, ad esempio consenti 3 (o 5 o 15) entro un intervallo ragionevole, ad esempio 15 minuti. Se la soglia viene superata, bloccare l'account e contrassegnare l'ora in cui si è verificato il blocco. Puoi registrare anche questo evento. Dopo che è trascorso un altro periodo adatto, ad esempio un'ora, sblocca l'account (al successivo tentativo di accesso). Gli accessi riusciti ripristinano i contatori e l'ultimo tempo di blocco. Tieni presente che non esegui mai effettivamente un login su un account bloccato, ma semplicemente il login non è riuscito.

Ciò limiterà efficacemente qualsiasi attacco di forza bruta, rendendo molto improbabile il successo di un attacco contro una password ragionevole. Un attaccante, usando i miei numeri sopra, potrebbe provare solo 3 (o 5 o 15) volte per 1.25hrs. Utilizzando i tuoi registri è possibile rilevare quando un tale attacco si è verificato semplicemente cercando più lockout dallo stesso account nello stesso giorno. Poiché il tuo servizio è destinato a essere utilizzato dai programmi, una volta che il programma che accede al servizio ha le sue credenziali impostate correttamente, non si verificherà mai un errore di accesso a meno che non ci sia un attacco in corso. Questo sarebbe un altro segnale che potrebbe essere un attacco. Una volta che si è a conoscenza di un attacco in corso, è possibile adottare ulteriori misure per limitare l'accesso agli IP incriminati o coinvolgere le autorità, se appropriato, e arrestare l'attacco.

+2

Non sarebbe ancora più facile lanciare attacchi DOS su account utente? Ad esempio un concorrente malvagio del nostro sito Web potrebbe bloccare deliberatamente gli utenti pubblicando password errate. Non avrebbe avuto accesso ai loro account, ma sarebbe riuscito a rendere il nostro sito Web inaffidabile. Ecco perché ho considerato l'approccio basato su IP: un utente malintenzionato dovrebbe spoofare l'indirizzo IP dell'utente reale per bloccarlo. –

+0

@Adrian - sì, ma questo è un tipo diverso di problema. L'utilizzo di un approccio basato su IP per risolverlo potrebbe rendere il tuo servizio inaffidabile in quanto potrebbe essere che un utente si sia semplicemente dimenticato di aggiornare il suo script dopo una modifica della password.In tal caso, l'utente può semplicemente attendere fino al timeout e riprovare senza coinvolgerti. Usando il logging, saresti ancora in grado di rilevare un attacco DOS e inserire un blocco IP dal sito malevolo e, in questo caso, chiamare di sicuro le autorità. – tvanfosson

Problemi correlati