it-swarm.dev

Come impedire l'accesso a un'applicazione Web solo ai dispositivi autorizzati?

Ho sviluppato un'app Web MVC. In questo momento, il client utilizza questa app nell'area ufficio. Il client ha richiesto che nessuno dovesse usare questa app su qualsiasi dispositivo tranne il PC/tablet dell'ufficio.

Ora il problema è che si tratta di un'app Web, quindi come posso porre restrizioni affinché nessuno possa utilizzare questa app dall'esterno dell'ufficio o con dispositivi diversi dal PC/tablet dell'ufficio?

11
bnil

Ci sono un paio di cose che puoi fare per aiutare a limitare l'uso dell'applicazione a una posizione specifica dell'ufficio e a dispositivi specifici, anche se come altre risposte sottolineano che nessuna di esse è una protezione assoluta

  • Configurare un firewall davanti all'applicazione per limitare gli indirizzi IP autorizzati ad accedere all'applicazione all'intervallo di indirizzi IP esterni del client. La maggior parte delle aziende disporrà di indirizzi IP statici sui propri router con connessione Internet e se imposti l'applicazione in modo che sia accessibile solo da quegli indirizzi IP, sarebbe più difficile per una persona non autorizzata accedervi a meno che non si trovasse nel proprio ufficio. TBH sembra l'approccio che funzionerà meglio per le esigenze dei tuoi clienti
  • È inoltre possibile utilizzare i certificati client su dispositivi autorizzati. Come sottolinea @adnan, potrebbe essere possibile spostarli su un'altra macchina, ma ciò richiederebbe che l'attaccante sia uno dei membri dello staff per avere accesso non autorizzato a uno dei loro sistemi
  • forse come controllo investigativo potresti combinarlo con l'impronta digitale del browser (ad es. panopticlick ). Crea un elenco di dispositivi e la loro impronta digitale, quindi se il certificato client viene utilizzato su un dispositivo che non corrisponde all'impronta digitale, puoi bloccarlo.

Come ho già detto, questi non sono assoluti, ma nulla di sicuro lo è. Se tutto ciò che il tuo cliente sta cercando è di impedire alle persone di evitare che la società veda il loro sito, sceglierei l'approccio del filtro dell'indirizzo IP di origine.

15
Rory McCune

Devi solo ospitare l'app Web su un server sull'intranet che non è connesso a Internet.

Il corretto routing e la misura del firewall dovrebbero garantire che nessuno che non sia connesso alla rete locale abbia accesso all'app Web.

Se le persone al di fuori della rete necessitano dell'accesso all'app Web, fagli configurare una connessione VPN alla tua rete locale.

6
user10211

Quanto devi andare sicuro?

Questo è probabilmente il più "sicuro" possibile. Non è tecnicamente sicuro. Come diceva Rook , ci sono ancora cose che possono essere sfruttate. Questi sono alcuni passaggi che puoi eseguire per provare e rafforzare il sistema:

  1. Configurare il server Web su un server fisico sulla LAN dell'ufficio. NON utilizzare NAT per connettere qualsiasi traffico esterno al server web. Se il server viene utilizzato per altri siti, dovrebbero trovarsi su un altro server o VM.

  2. Imposta un SSL VPN firewall (mi viene in mente Cisco). Cisco ha app per iPad che possono essere utilizzate per configurare un tunnel "sicuro" con il router.

  3. Dopo aver effettuato l'autenticazione tramite VPN (in remoto), assegneresti un indirizzo IP locale entro un determinato intervallo (questo dipende dal numero di client che si connettono al server). A seconda del router è possibile assegnare regole. Poiché non puoi controllare la rete dall'altra parte della VPN (diciamo la rete domestica dell'utente), questo è un potenziale vettore di attacco.

  4. Il traffico locale e il traffico VPN dovrebbero avere intervalli IP diversi per il tracciamento. Il traffico locale dovrebbe avere indirizzi IP statici assegnati dall'indirizzo MAC (spoofable) dal server DHCP che sono tutti registrati. Ciò ti aiuterà a verificare la presenza di collisioni e indirizzi IP e indirizzi MAC contraffatti.

  5. Sul firewall del server Web è necessario impostare una sottorete di indirizzi in grado di connettersi al server Web. Ciò include l'intervallo VPN assegnato nel router per gli utenti e gli indirizzi IP statici interni autorizzati.

  6. Quindi sul server Web stesso è possibile limitare l'accesso al sito Web tramite gli indirizzi IP autorizzati ( IIS 7 e Apache ) impostati nel server DHCP e in locale firewall (questo è ridondante nel caso in cui qualcuno trovi un exploit per alterare iptables in una casella * Nix).

Se si utilizza un firewall software after market aziendale come Kaspersky (su un box Windows o Linux), è possibile bloccare anche il traffico in questo modo.

Per apportare modifiche a questo sistema: 1. gli elenchi di indirizzi IP dovrebbero essere aggiornati sul server DHCP interno 2. nel firewall del server web 3. e nella configurazione del server web

In questo modo "blocca" l'accesso al server web effettivo ...

Successivamente dovrai eseguire SSL sul server web e richiedere un nome utente e una password specifici per l'utente. La password deve contenere almeno 16 caratteri.

Una volta che l'utente si autentica sul server web, invieresti loro un messaggio, tramite SMS o e-mail che contiene una sola o una volta password che consente all'utente di essere autorizzato per un determinato periodo di tempo sul server. (Se qualcuno ha accesso al cellulare dell'utente questo potrebbe essere compromesso). Se l'utente chiude la finestra del browser deve essere riautenticato (e ciò dovrebbe terminare la sessione). È possibile impostare uno script keep-alive che viene eseguito in una lingua come Javascript che prevede una trasmissione dal client entro un determinato intervallo di tempo. Se il client non risponde, quindi interrompere la sessione. (Ciò impedisce di disabilitare javascript per l'accesso. Inoltre aiuta le persone a chiudere il browser e provare ad aprire nuove sessioni prima della scadenza della sessione precedente.) Dovrebbero essere in grado di accedere solo da una posizione alla volta.

Dovresti impedire all'utente di memorizzare le proprie password sui propri dispositivi. (Questo può essere bypassato con plugin nei browser come Firefox.)

Per rendere le cose più rigorose potresti persino arrivare a richiedere ai tablet di accedere a un terminale virtuale tramite qualcosa come VNC o RDP (non ideale su un telefono). Quindi dovrebbero utilizzare il client Web sulla macchina virtuale. Questo VM verrebbe ripristinato per essere pulito alla prossima esecuzione o connessione.

Chiunque conosca il sistema può sfruttarlo. Chiunque al di fuori del sistema dovrebbe impiegare molto tempo a tentare di entrare e dovrebbe sapere che il sistema esiste.

Tutti gli aspetti dovrebbero essere documentati. Se qualcuno avesse la documentazione, potrebbe provare a trovare un punto debole nel sistema.

Ancora una volta, questo dipende dalle persone. Chiunque abbia accesso alle informazioni nel tempo potrebbe archiviare copie di tutte le informazioni (schermate con un telefono cellulare, PDF con testo di documenti dell'ufficio, ecc.) SSL è anche crackabile, quindi anche le connessioni "sicure" crittografate possono essere lette dalla destra persone.

5
AbsoluteƵERØ

Ciò che stai cercando di ottenere non è possibile. HTTP non è progettato per fornire identificatori specifici dell'hardware, l'unico "identificatore" è l'Utente-Agente che non si identifica affatto, e può essere falsificato, quindi i browser non hanno nemmeno accedere a tali informazioni.

Anche con un certificato client, può essere esportato dal browser su un altro dispositivo.

Di 'al tuo cliente che tecnicamente non è possibile.

4
Adi

Chi possiede il codice? Con quale probabilità qualcun altro vorrebbe utilizzare l'app? Quanto sarebbero gravi le conseguenze se qualcun altro usasse l'app? Quali tipi di dispositivi? L'accesso è limitato agli indirizzi IP statici? Queste sono solo alcune delle domande a cui avresti dovuto rispondere nel tuo post prima di chiedere consigli sul design.

Gli indirizzi IP VPN e i certificati client sono già stati menzionati, ma i certificati client possono essere difficili da installare su alcuni dispositivi. Gli IP statici funzionano solo all'interno di una LAN ben gestita. Una VPN richiederebbe una stretta integrazione tra il server, la rete e la configurazione dell'applicazione.

La memorizzazione di un token semplice in un cookie persistente (senza autorizzazioni e processi adeguati attorno alla registrazione del dispositivo) è una soluzione semplice, ma non molto resistente al reverse engineering/spoofing.

1
symcbean

Soluzione numero uno Se si utilizza IIS, dispone di un servizio integrato in cui è possibile limitare l'accesso dell'applicazione in base all'indirizzo IP.

Soluzione numero due: tenta di implementare il blocco terminale che richiede la programmazione;

È possibile implementare la soluzione di blocco terminale che è identificatori specifici dell'hardware. Seguire i passaggi seguenti.

Nota: è necessario impostare l'IP statico per ciascun dispositivo.

  • A: Usa i controlli Active-x per acquisire le informazioni MACAddress sul lato client, che ho implementato solo per Internet Explorer. Per aggiungere maggiore sicurezza è possibile acquisire MACAddress, IPAddress e il nome del computer. Nota: Active-x non firmato e x attivo firmato devono essere abilitati nel browser.
  • B: A livello di applicazione deve essere implementata la stessa cosa per leggere le informazioni dal passaggio A e archiviare/verificare le informazioni passate nel database.
  • C: a livello di database, seguire i passaggi seguenti;

  • Passaggio 1: quando si accede all'applicazione per la prima volta, il sistema deve acquisire l'indirizzo IP e memorizzarlo in una tabella, ad es. crea una tabella con il nome dbo.Terminals e, attraverso la tua applicazione, prova a leggere e memorizzare l'indirizzo IP e generare automaticamente un ID univoco per ogni IP. Questa tabella deve contenere alcuni campi con il nome MACADDRESS e campi aggiuntivi per gli utenti che eseguono il mapping con questo CODICE UNICO, ad es. user1, user2, user3 e così via.

  • Passaggio 2: ora modifica la tabella dbo.user e aggiungi il campo con il nome Terminale statico applicabile che funzionerà come interruttore (On/OFF)

  • Passaggio 3: Accesso utente: scrivere alcuni codici per verificare se il passaggio B è ATTIVATO. In caso affermativo, controlla se al terminale è assegnato il passaggio A. Ora controlla se questo terminale ha un elenco utenti registrato (vedi passaggio A utente1, utente2 ecc.). infine controlla che macaddress sia acquisito e disponibile in dbo.terminals, se non acquisito, procurati e archivia nel database. La soluzione di cui sopra è stata testata in molte banche, ovvero l'accesso basato su dispositivi al dominio bancario e ai sistemi di servizi finanziari.
1