Esiste un modello di controllo dell'accesso definito in termini di struttura dell'applicazione?

3

Sto lavorando al componente di controllo degli accessi di un'applicazione web complessa. Uno degli obiettivi è avere un modello rigorosamente definito per chi può fare cosa, ma non riesco a trovare un modello esistente che soddisfi i nostri bisogni.

Il problema è definire un sistema che posso interrogare con coppie di oggetti (in genere un utente e qualcos'altro, ma non necessariamente) per trovare il livello appropriato di accesso in base alla struttura dell'applicazione. Questi 'oggetti' sono - nel mio caso - 'modelli' in una webapp in stile MVC. Supponi che uno dei modelli sia un blog e un altro sia un gruppo di interesse di qualche tipo; un blog può appartenere a un gruppo, un utente può appartenere a un blog o a un gruppo e il gruppo può appartenere a un altro gruppo. Un esempio del tipo di regole che voglio utilizzare: "un utente può pubblicare commenti su un blog se l'utente è membro di un gruppo a cui appartiene quel blog"; 'un utente può visualizzare un blog se l'utente è membro di un gruppo che è esso stesso un membro di un gruppo a cui appartiene il blog', e così via.

Questi casi sono abbastanza facili da implementare esplicitamente nel codice, ma mi piacerebbe un modello formale come RBAC e amici. Esiste una cosa del genere? Se no, c'è una buona ragione per cui?

(Modificato per - si spera! - chiarezza)

Ulteriori modifiche per maggiore chiarezza:

Per gentile concessione del collegamento di Dennis, una definizione di RBAC:

Unlike ACLs, access to a resource is determined based on the relationship 
between the requester and the organization or owner in control of the
resource; in other words, the requester’s role or function will determine 
whether access will be granted or denied.

In questi termini, sono interessato a "relazioni [s] più complesse tra il richiedente e l'organizzazione ...", insieme a relazioni simili tra le organizzazioni e le risorse del sistema: piuttosto che ogni risorsa ha una lista , stabilito dal suo proprietario, dicendo che "tale e tale ruolo ha un tale e un tale livello di accesso", voglio che il livello di accesso sia determinato dalla (eventualmente complessa) relazione tra l'utente e il "proprietario" 'e tra il proprietario e la risorsa.

Concettualmente ho un grafico che include utenti, organizzazioni e risorse e voglio che le regole di controllo degli accessi siano determinate (in parte) dalla struttura di quel grafico.

Modifica: il tipo di cosa di cui sto parlando è del tutto simile ai "predicati della politica" in S4.2 di link .

    
posta jimw 24.07.2012 - 16:40
fonte

5 risposte

3

Generalmente non esiste un solo modello formale che puoi semplicemente adottare - e per una buona ragione. La corretta struttura di controllo degli accessi deve dipendere dalle specifiche dell'applicazione, quindi non esiste una risposta valida per tutti.

In generale, capire come definire il controllo degli accessi richiede alcune domande:

  • Quali sono le risorse che devo proteggere? Quali sono le risorse più critiche per la sicurezza? Ciò dipenderà dalla tua applicazione, ma potrebbe essere cose come singoli post del blog, i commenti su un post del blog, o il tema / layout per un particolare blog.

  • Quali sono le azioni che è possibile eseguire su tali risorse? Quindi, definire le operazioni o le azioni che qualcuno potrebbe voler eseguire su tali risorse. Spesso queste sono le basi come view (leggi), edit (scrivi), create e delete.

  • Chi sono gli individui che potrebbero voler eseguire un'azione del genere su tale risorsa? Nel linguaggio del controllo degli accessi, a volte vengono chiamati i "principal". Ad esempio, questo potrebbe essere il set di utenti con account sul tuo sito (ogni utente è un principal). Puoi anche definire gruppi (ad esempio, tutti gli amministratori, tutti gli utenti associati a un determinato blog) oppure puoi consentire agli utenti del tuo sito di definire i gruppi.

  • Quali limiti voglio mettere su queste azioni? È possibile definire una politica di sicurezza. Un modo per definire una politica di sicurezza è determinare, per ogni risorsa, quali azioni può eseguire ciascun principale su quella risorsa. Questo potrebbe essere descritto in modo più conciso in termini di gruppi (ad esempio, qualsiasi amministratore può modificare qualsiasi post del blog). È possibile decidere se una singola politica di sicurezza fissa è più appropriata per la propria applicazione o se è più utile consentire agli utenti di determinare la politica di sicurezza. Spesso è troppo pretendere che gli utenti annuncino tutte le combinazioni consentite di (principal, action, resource), quindi dovrai pensare a quali sono le politiche più comuni che potrebbero avere senso per la tua applicazione, per renderlo più facile utenti.

Alcuni altri commenti.

Suggerirei di dare un'occhiata ad altre applicazioni di esempio simili a quella che si desidera creare, per vedere come eseguono il controllo degli accessi. Ci sono molte piattaforme di blogging; perché non dai un'occhiata per vedere come consentono agli amministratori di blog e ai blogger di controllare l'accesso al blog? Guarda cosa ti piace e cosa non fai, e cosa sembra che funzioni bene per gli utenti e cosa no, e impara da quello.

Inoltre, voglio presentarti il concetto di controllo degli accessi guidato dall'utente, in cui invece di te (lo sviluppatore / amministratore del software) che tenta di impostare una politica di sicurezza per il tuo sito, permetti agli utenti di determinare la propria politica di sicurezza attraverso le proprie azioni. Ad esempio, ogni post del blog potrebbe avere il proprio link "view" che gli utenti possono condividere con gli altri; se condividi questo link con Alice, allora Alice sarà in grado di visualizzare il post del blog. È possibile includere un token casuale non percettibile in questo collegamento e quindi la conoscenza dell'URL è tutto ciò che è necessario per visualizzare il post del blog. Come altro esempio, ogni post del blog potrebbe avere un link "edit" che il proprietario del blog può condividere con qualcun altro per consentire loro di modificare il post del blog in modo collaborativo - pensa come puoi condividere un documento di Google Documenti con qualcun altro, per esempio. In questo modello, ciascuno di questi link è una capacità che concede l'autorizzazione ad eseguire una determinata azione su una particolare risorsa o raccolta di risorse. In alcune circostanze, questo approccio può essere utile, poiché fornisce agli utenti la flessibilità necessaria per determinare i propri modelli di condivisione sicuri.

    
risposta data 24.07.2012 - 23:25
fonte
2

Sostituisci la parola "gruppo" con "ruolo" e ciò che hai descritto è RBAC, o almeno la sua parte gerarchica. Pensa in questo modo:

  • Gli utenti vengono inseriti in gruppi (ruoli).
  • I singoli gruppi (ruoli) possono avere qualsiasi numero di privilegi.
  • L'accesso agli oggetti è deciso dal gruppo (ruolo) dell'entità che accede.
  • Alcuni gruppi (ruoli) possono avere gruppi figlio (ruoli).
  • Un gruppo genitore (ruolo) ha, come minimo, gli stessi privilegi di un gruppo figlio (ruolo).
risposta data 24.07.2012 - 17:52
fonte
1

(Sono consapevole che questo non è esattamente pre-scritto, ma è meglio di un'implementazione ground-up)

Forse dovresti usare il controllo a grana fine delle autorizzazioni SQL .

La gestione del gruppo verrà scritta manualmente e il codice controllato. Dovrai creare il tuo creatore di comandi grant che crei gli utenti SQL in base ai loro gruppi.

Una volta completato, è possibile passare le credenziali dell'utente SQL al codice meno controllato, garantendo in tal modo quali dati SQL può raggiungere. Potresti anche voler utilizzare il sistema operativo per limitare le autorizzazioni a livello di file del codice meno controllato.

Si noti che gli utenti SQL non devono necessariamente essere uno per utente dell'applicazione. Possono essere uno per checksum delle autorizzazioni, possono essere dinamici, ricreati totalmente all'avvio. Dipende da te.

Ti suggerirei comunque di aggiungere ulteriori dettagli alla tua domanda. Hai bisogno di una gestione dei permessi a livello di file nella tua webapp, permessi a livello SQL, qualcos'altro?

    
risposta data 24.07.2012 - 18:56
fonte
1

Provalo subito: csrc.nist.gov/news ... / PvM-Model-Survey-Aug26-2009.pdf

Quello che posso dirvi è davvero, davvero pensare a questo. Molte app partono come prova del concetto; come uno script di shell nei decenni passati - e sono così utili che vengono distribuiti. Quelle prime decisioni di architettura possono realmente, realmente effettuare la scalabilità e la manutenibilità successive; quando migliaia, decine di migliaia o più persone usano il sistema / strumento progettato per poche centinaia.

Gestione delle identità e controllo degli accessi sono i due peggiori trasgressori. In realtà è meglio se puoi usare qualcosa come le asserzioni SAML e creare un'identità separata e un punto di controllo di accesso. A lungo termine, sarete in grado di mantenere questo e adattarlo alle necessità. Sembra costoso dal punto di vista delle prestazioni fin dalle prime fasi, ma nel lungo periodo è più economico.

Se non riesci a farlo, devi essere molto coscienzioso per tenere insieme tutte le identità e il codice di controllo degli accessi in modo da poterlo rifattorizzare facilmente per soddisfare le richieste.

Assicurati di controllare il foglio di controllo di accesso OWASP: link

Buona fortuna.

    
risposta data 24.07.2012 - 22:20
fonte
1

L'acqua è volata sotto il ponte dell '"autorizzazione". Sono felice di dire che esiste un modello ben accettato che fa esattamente quello che stai cercando.

Si chiama ABAC o controllo degli accessi basato sugli attributi ed è una naturale evoluzione del controllo degli accessi basato sui ruoli (RBAC).

Dove, con RBAC, ci si concentra quasi esclusivamente sull'utente, con ABAC è possibile considerare gli attributi dell'utente, la risorsa, l'azione e persino il contesto (ora del giorno ...). La tua autorizzazione non riguarda più chi sei. Si tratta di chi, cosa, quando, dove, perché e come.

Il NIST ha svolto numerose indagini nello spazio ABAC e ha raccolto le sue note e i suoi rapporti sul suo sito del progetto ABAC .

XACML, il eXtensible Access Control Markup Language , è uno standard OASIS (lo stesso corpo come quello dietro SAML) che definisce:

  • un'architettura di autorizzazione
  • un linguaggio della politica e
  • un formato richiesta / risposta

che può essere utilizzato per implementare ABAC. In breve, XACML implementa il modello proposto da ABAC.

La cosa migliore di ABAC e XACML è che è neutrale dal punto di vista tecnologico. Funziona praticamente su qualsiasi cosa significhi che puoi usarlo per il controllo degli accessi su API, servizi web, ESB, portali e persino database.

    
risposta data 29.04.2014 - 23:33
fonte

Leggi altre domande sui tag