Prevenire l'abuso di un'API Web RESTful (il server può fidarsi dell'indirizzo IP remoto?)

3

Sto progettando un'API RESTful per la mia organizzazione. Usiamo l'autenticazione basata su password, che genera token. Una parte della nostra API richiede che gli utenti siano fisicamente in ufficio, vale a dire che non vi è alcun caso di utilizzo in cui qualcuno avrebbe bisogno di utilizzare quegli endpoint particolari mentre lavorano in remoto. (Ha a che fare con uno scenario fisico di scansione delle carte di controllo.)

Stiamo scrivendo l'API REST in API Web ASP, quindi la mia prima inclinazione era semplicemente quella di controllare l'oggetto Request per vedere qual è l'indirizzo IP remoto e consentire l'accesso alla risorsa solo se quell'indirizzo IP rientra in un lista bianca. (Per quelle chiamate che dovrebbero essere limitate)

Il mio collega, tuttavia, ritiene che questo sia insicuro. Ritiene che vi siano modi per abusare di HTTP in modo tale che un client dannoso possa causare a ASP.NET di segnalare l'indirizzo IP remoto errato; quindi, si sente fino a quando qualcuno conosce la gamma valida di indirizzi (ad esempio un lavoratore potrebbe semplicemente "ipconfig" sulla propria macchina mentre è in ufficio per determinare un IP valido), quella persona potrebbe abusare dell'API e accedervi da qualsiasi luogo.

Suggerisce, invece, di dipendere esclusivamente da un segreto del cliente. Stiamo già utilizzando l'autenticazione della password, quindi non è questo il problema. Quello di cui non sono sicuro è come implementare un client secret in modo tale che 1. non possa essere copiato da una macchina all'altra, e 2. che non possa essere rimosso accidentalmente. Ovviamente tutto il lato client sarebbe in JavaScript, quindi la console "dev tools" è l'equivalente di un disassemblatore.

Devo pensare che una combinazione dei due metodi sia almeno un inizio - forse rendere il segreto del client coinvolgere l'indirizzo IP in questione, e poi fare in modo che l'API remota controlli il segreto del client contro l'IP che la richiesta sembra venire da (Tuttavia, se un utente può in qualche modo copiare il segreto del client, ciò non aiuterà comunque poiché potrebbero semplicemente combinare entrambi i metodi di hacking ...) Questo inoltre non risponde come avremmo "preinstallato" un segreto client nel cliente. Se avessimo l'API REST come segreto per un utilizzo futuro, sei tornato al punto in cui hai iniziato: un hacker malintenzionato potrebbe (apparentemente) alterare il proprio IP e recuperare un segreto che non dovrebbero avere.

La mia conoscenza del protocollo TCP / IP mi dice che non è possibile falsificare l'indirizzo IP di origine su qualsiasi cosa tu desideri e ottenere una connessione TCP di successo. Dato che stiamo usando una lista bianca, qualcuno dovrebbe in qualche modo essere in grado di spoofare il proprio IP dall'esterno per apparire nella nostra rete e impegnarsi in una connessione TCP completa al server HTTP. Non penso nemmeno che sia possibile, ma il mio collega crede ancora che ci sia un modo per abusare della whitelist IP.

Quale di noi ha ragione? O nessuno di noi ha proprio ragione e c'è un approccio completamente diverso e migliore?

    
posta fdmillion 12.06.2016 - 04:09
fonte

3 risposte

1

Credo che lo spoofing IP sia possibile, ma è molto difficile. O hai bisogno di un accesso amministratore in uno dei server nella stessa sottorete del client o in uno dei router tra il tuo server e il server finale.

Se utilizzi HTTPS, l'autenticazione basata su password sarebbe sufficiente, nessuno potrebbe acquisire la password in transito (supponendo che le vulnerabilità SSL come Heartbleed non si applichino al tuo server)

Se non usi HTTPS, considera l'aggiunta di qualcosa in più, come l'autenticazione basata su token che combina il segreto nascosto con un timestamp. OAuth può essere utilizzato come standard, ma se hai solo bisogno di una sicurezza veloce, potresti pensare al tuo metodo di firma dei token più semplice.

    
risposta data 12.06.2016 - 04:35
fonte
1

Penso che lo spoofing IP sia molto più facile di quello spiegato nell'altra risposta. Questo può essere ottenuto senza alcun diritto di amministratore sulla tua rete. Solo il software giusto (o alcuni dispositivi di livello consumer). Anche l' indirizzo MAC dell'hardware non è affidabile per i dispositivi di whitelist. No, questo approccio non protegge nulla.

Il segreto del client di cui parli sembra molto simile a un certificato client. È possibile optare per un certificato hardware (ad es. Su una chiave USB) o un certificato commerciale installato per l'account utente in un " archivio certificati " o un certificato temporaneo (acquisito durante la procedura di accesso, ma richiede un'autorità locale CA ed è più complesso da impostare -su).

Naturalmente, un tale certificato client ha senso solo se nessuno può intercettare parti di esso in rete. Quindi questo richiede l'installazione di una comunicazione HTTPS protetta (ad esempio HTTP con TLS o SSL, che potrebbe anche occuparsi di autenticazione client ).

Ulteriori letture:

risposta data 12.06.2016 - 14:32
fonte
0

Un modo per prevenire questo scenario è abbastanza pesante.

È possibile introdurre una latenza minima per la connessione in uscita, ad esempio 30 ms.

All'interno della vostra rete interna, è necessario fare in modo che si fa una serie di richieste di crittografia e risposta a misurare la latenza, in modo tale che la carta di accesso deve rispondere di sotto del limite di latenza.

Quindi la scheda deve essere connessa direttamente dalla rete per consentire la scansione.

Modi che potrebbero ancora essere sovvertiti:

  1. Il ladro potrebbe installare il proprio punto di accesso Internet all'interno della rete, ignorando la latenza obbligatoria
  2. Il ladro può estrarre il segreto dalla scheda di accesso

I problemi:

  1. Molte applicazioni legittime sono sensibili alla latenza o hanno un'esperienza peggiore con un aumento minimo della latenza. Ad esempio, ssh, VoIP.
  2. La carta deve essere abbastanza performante da eseguire operazioni crittografiche entro il limite di tempo
  3. L'aggiunta di una piccola latenza può aumentare i requisiti hardware del router

Personalmente, non mi preoccuperei di questi.

    
risposta data 13.06.2016 - 07:54
fonte

Leggi altre domande sui tag