Come possiamo proteggere le API di registrazione dalla registrazione della forza bruta?

5

Questa è una domanda generale, ma è suggerita da un'API abbastanza aperta che ho per un servizio di archiviazione di file che deve avere la porta principale bloccata in modo migliore.

Abbiamo un'API come POST '/signup' che richiede solo un nome utente e una password e crea un utente. È totalmente possibile che qualcuno scriva uno script molto semplice per chiamare /signup con ogni combinazione di lettere che si adatta alle nostre regole di nome utente e che ci blocca efficacemente dalle nuove registrazioni.

Non ho trovato una enumerazione concisa di tutti i possibili trucchi di sicurezza per l'iscrizione, quindi li avvierò ora e chiederò a qualcuno di contribuire con ciò che ho omesso o ulteriori dettagli di implementazione su un particolare oggetto.

  • Limitazione IP: per ogni registrazione, registra l'indirizzo IP e confrontalo con una tabella dei recenti IP di registrazione per garantire il numero di registrazioni e il tempo trascorso dall'ultima registrazione a questo IP non è sospetto. **

  • Altri accessi autorizzati: utilizza email verificate, numero di telefono o accessi OAuth di terze parti

  • Verifica umana: chiedi agli utenti di completare un Captcha o qualche forma di convalida troppo dispendiosa dal punto di vista computazionale per gestire uno script

** La limitazione IP sembra essere l'unica opzione che non influirà necessariamente sull'esperienza di registrazione del cliente, anche se a costo di implementare un nuovo sottosistema per orchestrare la memorizzazione e la convalida di IP (ci sono servizi di terze parti per questo?) . Inoltre non protegge dal caso estremo in cui una rete di aggressori (o di attaccanti che possono modificare l'IP pubblico) distribuiscono l'attacco su N IP per creare N nomi utente.

    
posta user 30.03.2016 - 23:21
fonte

2 risposte

2

Potresti usare uno strumento come Fail2Ban contro i registri API per bloccare un IP per 5 minuti (o qualsiasi cosa tu voglia) dopo 3 (o qualsiasi numero) di tentativi di creazione dell'account.

link

Sarebbe anche saggio conoscere alcune richieste API comuni fatte da tentativi di forza bruta che non esistono sul tuo sito e aggiungere automaticamente gli IP di blacklist che effettuano tali richieste (almeno per 30 minuti o giù di lì).

La lista nera sul livello IP basata su trigger di pozzo è un modo molto basso di costo della CPU per gestire i tentativi di forza bruta. È anche consigliabile inserire nella whitelist dei buoni IP noti nell'infrastruttura quando lo fai.

    
risposta data 30.03.2016 - 23:56
fonte
2

Innanzitutto, se stiamo parlando di un sito web, l'idea di avere un'API pubblica che viene utilizzata per creare utenti mi sembra strana. Di solito un account viene creato manualmente dalla persona che ne vuole uno, magari usando una pagina web e magari con un captcha. Le idee di API e captcha non vanno molto d'accordo poiché le API sono chiamate da Applicazioni (quindi A in API), e i captcha sono progettati per impedire alle applicazioni di risolverli.

Se hai davvero bisogno di un metodo non manuale per la creazione di utenti (esponendo così la funzionalità nell'API), potresti potenzialmente risolvere il tuo problema utilizzando un'API semi-pubblica . Dovresti richiedere agli sviluppatori che intendono utilizzare la tua API per registrarsi per ricevere una chiave API che è unica per quell'utente registrato. Qualsiasi chiamata API che esegue azioni di scrittura (come la creazione di un utente) dovrebbe fornire una chiave valida. Ora puoi tenere traccia di tutto ciò che è fatto e se vedi qualcuno che abusa del tuo sistema, puoi semplicemente spegnerli e persino annullare il loro abuso se lo desideri.

Uno scenario comune in cui potrebbe essere necessario disporre di un'API per la creazione di utenti è un'applicazione mobile. In questo caso, puoi tentare di rendere semi-pubblica l'API generando un token API per app mobile installata. Il token viene passato all'app tramite la crittografia che solo l'app può decrittografare e tale token può essere utilizzato solo per creare un certo numero di account utente (1 o comunque molti ha senso). Questo non è perfetto, in quanto qualcuno potrebbe decompilare teoricamente l'applicazione e tentare di estrarre le chiavi di crittografia, e se lo facessero potrebbero incorporare l'intero processo di handshake nel loro script, ma almeno dovrebbe rallentarlo.

Naturalmente puoi ancora (e probabilmente dovresti) aggiungere anche le regole del firewall.

    
risposta data 30.03.2016 - 23:56
fonte

Leggi altre domande sui tag