Garantire che un servizio Web elabori solo le richieste da computer specifici

4

Sono in procinto di progettare un sistema che consiste in un'applicazione client e un singolo servizio web. Il client è distribuito su più macchine (installate da me o da un collega) e la comunicazione tra client e server avviene tramite Internet.

Quello che sto cercando è un modo per garantire che il servizio web possa ricevere solo le richieste da quelle macchine fisiche su cui ho originariamente installato l'applicazione client.

I computer eseguiranno una sorta di Windows, non sono ancora sicuro di quale edizione ancora. E il servizio web sarà basato su WCF.

Il mio attuale pensiero è installare un certificato client sulle macchine e usarlo per l'autenticazione sul servizio web. Non sono sicuro di come o se ci sia un meccanismo per bloccare il certificato sulla macchina fisica, o semplicemente per proteggerlo con una password per impedirne l'esportazione e l'installazione su un'altra macchina.

La mia conoscenza dei certificati è molto semplice, motivo per cui ti sto chiedendo se questo sembra un approccio praticabile, o se c'è un altro modo per funzionare meglio.

Modifica : Mi rendo conto che la mia domanda iniziale era un po 'vaga su quanto sicuro avrei voluto che fosse.

L'applicazione client può essere considerata come un fastidio quotidiano per gli utenti che sono costretti a usarlo. E uno dei punti con l'applicazione, è quello di essere in grado di dire che una persona era in questa posizione / computer in un determinato momento. Quindi voglio essere in grado di dire dal mio servizio web che la richiesta non proviene da "la mia macchina". Tutto ciò al fine di impedire all'utente "infastidito" di pensare a schemi per evitare di trovarsi nella posizione in cui si trova il computer client-app. Ad esempio copiare l'applicazione su un computer portatile.

Quindi, si tratta di prevenire i semplici modi per aggirare le mie installazioni dell'applicazione da uno dei miei computer. E il tipo di utente non è qualcuno con uno sfondo IT.

Grazie per le numerose risposte utili finora

    
posta Tom Jelen 09.06.2011 - 21:40
fonte

4 risposte

7

Quanto sei preoccupato per una minaccia interna e per quanto esperto ti aspetteresti da addetti ai lavori? Questo è il tuo più grande fattore. Quasi tutti i meccanismi di sicurezza che si inseriscono nel disco fisso della macchina possono essere danneggiati se l'attaccante subisce una presa o accede troppo al disco rigido. Quanto tempo ci vorrà sarà un fattore di quanto bene hai protetto il disco.

Posso pensare a molti modi per farlo:

  • Filtraggio IP (spoofable)

  • imposta i tunnel IPSEC durante l'installazione

  • Autenticazione basata su certificato

  • Richiede l'autenticazione VPN con qualcosa come un generatore di chiavi pseudo casuali su un token

Qualsiasi cosa è hackerabile, data la minaccia giusta.

Ogni meccanismo ha diversi modi di essere attaccato o compromesso. Gli indirizzi IP possono essere falsificati, i tunnel IP Sec o i certificati possono essere compromessi se l'utente malintenzionato entra nel disco rigido o le persone fanno qualcosa di stupido con i dati di sicurezza del computer. I token generatori di chiavi sono ottimi per essere separati dalla macchina, ma richiedono un software COTS e possono essere costosi.

L'autenticazione del certificato tramite SSL autenticato dal client di solito non è male da configurare - i server Web eseguiranno uno scenario di autenticazione molto semplicistico e dovresti essere in grado di limitare il server a un elenco di client attendibili in base al nome distinto del certificato . Se si utilizzano i certificati software, significa che sarà necessario installare una chiave privata separata per ciascun client. Ciò significa un certo livello di diligente gestione delle chiavi. È possibile caricare chiavi private in browser o altri archivi di certificati con una regola per il sistema operativo per non esportare la chiave privata. Alcuni di questi possono essere compromessi o modificati a seconda dei privilegi dell'utente, quindi la questione delle minacce interne.

Se si limita l'autenticazione del certificato all'autorizzazione del client SSL, non sarà necessario modificare alcuna logica del servizio Web a meno che non si disponga anche di requisiti di gestione dei privilegi più specifici.

    
risposta data 09.06.2011 - 22:44
fonte
3

Prima di tutto, hai bisogno della buona gestione dell'ID di sessione nei tuoi servizi Web .

In secondo luogo, consiglierei qualcosa come il Cookie Revolver Framework per legare il certificato lato client agli ID macchina (ad es. MAC indirizzo di NIC e / o numero di serie da un disco rigido) e indirizzi IP statici. Tuttavia, questi possono probabilmente essere falsificati utilizzando hardware virtualizzato in questo giorno ed età molto facilmente.

Vado per qualcosa in cui il certificato sul lato client è stato archiviato su qualcosa come un eDoken USB Aladdin (2048 bit sarebbe bello), ma poi si incollano fisicamente e altrimenti si impedisce la manomissione del dispositivo in una presa USB. Neanche questo funziona davvero bene - ma forse un chip TPM integrato sarebbe? Prova TrouSerS , sembra che abbiano l'autenticazione EAP-TLS basata su identità TPM.

    
risposta data 10.06.2011 - 22:31
fonte
2

Mi sembra che l'approccio migliore qui sia installare un certificato client con l'installazione thick-client. Se si desidera aggiungere un altro livello, è possibile fare qualcosa con il filtro del firewall, con il client che aggiorna una whitelist quando diventa attivo.

    
risposta data 10.06.2011 - 02:10
fonte
2

Puoi fare diverse cose che rendono difficile per l'utente finale estrarre il certificato. L'utilizzo di CryptoAPI di Windows e dell'archivio certificati locale può rendere difficile l'esportazione della chiave privata (se non impossibile) e consentire all'applicazione di usufruire dei CSP per passare le richieste al servizio Web.

Dal tuo profilo, suppongo che tu abbia scritto il client in .NET, quindi è probabile che tu possa trovare la maggior parte di questo sulle risorse MSDN a portata di mano. (Anche se questo è un punto di partenza: link )

Non riesco a trovare nulla riguardo alla possibilità o meno di impedire l'esportazione della chiave privata dall'archivio certificati, non significa che non sia possibile, ma se è stato fatto, è più difficile che una ricerca su Google sia trovare.

    
risposta data 10.06.2011 - 05:09
fonte

Leggi altre domande sui tag