WCF - Questa è una buona architettura di sicurezza?

5

Sto costruendo un sistema di registrazione delle informazioni (basato su WCF) per un'azienda accessibile dal personale su Internet. Questo software non sarà distribuito e ci sarà solo una manciata di utenti con l'applicazione client installata.

Dato che le informazioni memorizzate sono altamente sensibili, vorrei ovviamente autenticare e autorizzare qualsiasi richiesta di servizio. Quindi, ci saranno circa 4 endpoint di servizio dedicati alla gestione di una varietà di richieste. Per proteggere questi servizi, stavo pensando di autenticare qualsiasi richiesta con un sistema basato su token (che è effettivamente solo un GUID). Ciò significherebbe che, a meno che il client non pacchi le loro richieste con questo token, non possano accedere a tali servizi! Destra? Ora, per recuperare un token valido, il client deve connettersi al servizio token di sicurezza, che inizia con l'autenticazione SSL reciproca (per prevenire attacchi man-in-the-middle), quindi l'utente deve fornire i propri dettagli di accesso (crittografati ovviamente), quindi se i dettagli sono validi vengono forniti con un token. Il token viene quindi registrato, insieme ai dettagli degli utenti. Ora il client può inviare richieste valide agli altri servizi. Quando uno degli altri servizi riceve una richiesta, il token e le credenziali dell'utente vengono confrontati con "l'archivio utenti corrente" e il loro ruolo viene recuperato. Se il ruolo dell'utente consente quella richiesta, viene quindi elaborata.

Scusa se è tutto un po 'prolisso! Ma in fondo quello che ti sto chiedendo sono guru della sicurezza: questo suona come un'architettura decente per questo sistema? dovrei apportare miglioramenti? o dovrei scartare questa architettura tutti insieme e andare per qualcos'altro? (se sì, qualsiasi guida sarebbe apprezzata!)

Rispetto che non sono un mago della sicurezza, tuttavia sono disposto a imparare! Quindi, per favore sii gentile;)

    
posta Sam 15.08.2013 - 12:12
fonte

1 risposta

6

Se sai cosa stai facendo, usare WCF non è difficile. Se sai cosa stai facendo, usare WCF con un STS non è molto difficile. Se non sai cosa stai facendo è tutto terribilmente difficile. Chi sto prendendo in giro, è WCF, quindi è tutto difficile. :)

In generale, la tua architettura rientra nella categoria di trust federata, poiché stai utilizzando STS per fornire l'autenticazione. Sono un po 'confuso sul motivo per cui dici che il token è effettivamente solo un GUID. Normalmente con WCF è un token SAML (racchiuso in un contenitore WS-Trust), che contiene attributi / attestazioni sull'identità data. Molte volte i ruoli dell'utente sono già presenti nel token. È compito dell'STS fornire i ruoli e i tuoi servizi controllano solo se l'identità in entrata ha i ruoli richiesti (in uno scenario semplice, comunque).

Dal punto di vista della sicurezza tutto diventa un po 'complicato per alcuni motivi:

  • WCF è un PITA
  • La sicurezza di WCF dipende strongmente da certs, che introducono i propri problemi
  • Gli STS sono difficili da costruire in modo sicuro, quindi la raccomandazione è di utilizzare STS pre-compilazione
  • L'uso di STS precostruito raramente fa ciò che vuoi che facciano fuori dalla scatola

Se riesci a risolvere questi problemi, puoi avere un'implementazione ragionevolmente sicura dei servizi, tuttavia ciò è relativo a ciò che desideri proteggere. Che cosa vuoi proteggere e quali non vuoi / vuoi proteggere?

Uno dei punti più deboli di un sistema federato è la crittografia. Come proteggi le chiavi in modo che le STS possano usarle, ma le persone non possono rubarle? Hai detto che volevi utilizzare i certificati client per l'autenticazione reciproca ... come proteggono i client con quelle chiavi? Come stai emettendo quelle chiavi? Hai detto che i certificati client per l'autenticazione reciproca SSL ... includono l'autenticazione basata su certificato per l'autenticazione STS degli utenti o hai intenzione di utilizzare nome utente / password? Stai per crittografare il token tra il servizio STS- > client- > o sarà un testo in chiaro? Normalmente devi crittografare il token poiché contiene informazioni sensibili. Come proteggi le chiavi di crittografia per i servizi?

Un trust federato è una buona architettura, ma in realtà dipende dal caso d'uso. Di solito quando vuoi separare l'autenticazione / l'autorizzazione degli utenti dai servizi stessi e centralizzarli in un'unica fonte. Dato che hai 4 servizi, sembra che potrebbe essere una buona cosa. Tuttavia c'è un enorme sovraccarico con STS (questo ora rende 5 servizi), e di solito è ospitato nel proprio sito.

Per ulteriori informazioni, consulta il progetto Thinktecture.IdentityServer: link . È un STS open source creato da persone che hanno lavorato a stretto contatto con il team WCF e WIF di Microsoft.

    
risposta data 15.08.2013 - 20:29
fonte

Leggi altre domande sui tag