¿Existe un modelo de control de acceso definido en términos de la estructura de la aplicación?

3

Estoy trabajando en el componente de control de acceso de una aplicación web compleja. Uno de los objetivos es tener un modelo estrictamente definido para quién puede hacer qué, pero no puedo encontrar un modelo existente que satisfaga nuestras necesidades.

El problema es definir un sistema que pueda consultar con pares de objetos (normalmente un usuario y otra cosa, pero no necesariamente) para encontrar el nivel de acceso adecuado según la estructura de la aplicación. Estos 'objetos' son, en mi caso, 'modelos' en una aplicación web de estilo MVC. Digamos que uno de los modelos es un blog, y otro es un grupo de interés de algún tipo; un blog puede pertenecer a un grupo, un usuario puede pertenecer a un blog o un grupo y un grupo puede pertenecer a otro grupo. Un ejemplo del tipo de reglas que quiero usar: 'un usuario puede publicar comentarios en un blog si el usuario es miembro de un grupo al que pertenece ese blog'; "un usuario puede ver un blog si es un miembro de un grupo que es miembro de un grupo al que pertenece el blog", etc.

Estos casos son fáciles de implementar explícitamente en el código, pero me gustaría un modelo formal como RBAC y amigos. ¿Existe tal cosa? Si no es así, ¿hay alguna buena razón por la cual?

(Editado para - ¡con suerte! - Claridad)

Otras ediciones para mayor claridad:

Cortesía del enlace de Dennis, una definición de 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.

En estos términos, me interesan las "relaciones [s] más complejas entre el solicitante y la organización ... ', junto con las relaciones similares entre las organizaciones y los recursos del sistema: en lugar de que cada recurso tenga una lista , establecido por su propietario, diciendo que 'tal y cual rol tiene tal y tal nivel de acceso', quiero que el nivel de acceso esté determinado por la relación (posiblemente compleja) entre el usuario y el 'propietario 'y entre el propietario y el recurso.

Conceptualmente tengo un gráfico que incluye usuarios, organizaciones y recursos, y quiero que las reglas de control de acceso estén determinadas (en parte) por la estructura de ese gráfico.

Edit: el tipo de tema del que estoy hablando es bastante similar a los 'predicados de políticas' en S4.2 de enlace .

    
pregunta jimw 24.07.2012 - 16:40
fuente

5 respuestas

3

En general, no existe un solo modelo formal que pueda adoptar, y por una buena razón. La estructura de control de acceso correcta debe depender de los aspectos específicos de su aplicación, por lo que no hay una respuesta única para todos.

En general, descubrir cómo definir el control de acceso implica analizar algunas preguntas:

  • ¿Cuáles son los recursos que necesito proteger? ¿Cuáles son los recursos que son más críticos para la seguridad? Esto dependerá de su aplicación, pero puede ser cosas como publicaciones de blog individuales, los comentarios de una publicación de blog o el tema / diseño de un blog en particular.

  • ¿Cuáles son las acciones que uno puede realizar en esos recursos? A continuación, defina las operaciones o acciones que alguien podría querer realizar en esos recursos. A menudo, estos son los conceptos básicos como ver (leer), editar (escribir), crear y eliminar.

  • ¿Quiénes son las personas que podrían querer realizar tal acción en un recurso de este tipo? En el lenguaje de control de acceso, a veces se les llama "directores". Por ejemplo, este podría ser el conjunto de usuarios con cuentas en su sitio (cada usuario es el principal). También puede definir grupos (por ejemplo, todos los administradores; todos los usuarios asociados con un blog en particular), o puede permitir que los usuarios de su sitio definan grupos.

  • ¿Qué límites quiero poner en estas acciones? Puede definir una política de seguridad. Una forma de definir una política de seguridad es determinar, para cada recurso, qué acciones puede realizar cada principal en ese recurso. Esto podría describirse de manera más concisa en términos de grupos (por ejemplo, cualquier administrador puede editar cualquier publicación de blog). Puede decidir si una política de seguridad fija y única es más adecuada para su aplicación o si es más útil permitir que los usuarios determinen la política de seguridad. A menudo es demasiado esperar que los usuarios escriban todas las combinaciones permitidas de (principal, acción, recurso), por lo que deberá pensar cuáles son algunas de las políticas comunes que pueden tener sentido para su aplicación, para que sea más fácil para usuarios.

Algunos otros comentarios.

Le sugeriría que consulte otras aplicaciones de ejemplo que son similares a la que desea compilar para ver cómo controlan el acceso. Hay muchas plataformas de blogs; ¿Por qué no echa un vistazo para ver cómo permiten a los administradores de blog y bloggers controlar el acceso al blog? Vea lo que le gusta y lo que no, y lo que parece que funciona bien para los usuarios y lo que no, y aprenda de eso.

Además, quiero presentarle el concepto de control de acceso dirigido por el usuario, donde en lugar de usted (el desarrollador / administrador del software) que intenta establecer una política de seguridad para su sitio, permite a los usuarios determinar su propia política de seguridad a través de sus propias acciones. Por ejemplo, cada publicación de blog puede tener su propio enlace de "vista" que los usuarios pueden compartir con otros; Si comparte este enlace con Alice, Alice podrá ver la publicación del blog. Puede incluir un token no descargable al azar en este enlace, y luego todo lo que se necesita es el conocimiento de la URL para ver la publicación del blog. Como otro ejemplo, cada publicación de blog puede venir con un enlace de "edición" que el propietario del blog puede compartir con otra persona para permitirle editar la publicación de blog en colaboración; piense cómo puede compartir un documento de Google Docs con otra persona, por ejemplo. En este modelo, cada uno de estos enlaces es una capacidad que otorga la autorización para realizar una determinada acción en un recurso particular o Recopilación de recursos. En algunas circunstancias, este enfoque puede ser útil, ya que proporciona a los usuarios la flexibilidad para determinar sus propios patrones de uso compartido seguros.

    
respondido por el D.W. 24.07.2012 - 23:25
fuente
2

Reemplace la palabra "grupo" por "rol", y lo que describió es RBAC, o al menos la parte jerárquica de la misma. Piénsalo así:

  • Los usuarios se colocan en grupos (roles).
  • Los grupos individuales (roles) pueden tener cualquier número de privilegios.
  • El acceso a los objetos se decide por el grupo (rol) de la entidad de acceso.
  • Ciertos grupos (roles) pueden tener grupos secundarios (roles).
  • Un grupo principal (rol) tiene, como mínimo, los mismos privilegios que un grupo secundario (rol).
respondido por el Polynomial 24.07.2012 - 17:52
fuente
1

(Estoy consciente de que esto no está escrito previamente, pero es mejor que una implementación desde cero)

Tal vez debería usar el control detallado de los permisos SQL .

La administración del grupo se escribirá y se revisará manualmente. Deberá crear su propio creador de comandos de subvención, que crea los usuarios de SQL según sus grupos.

Una vez completado, puede pasar las credenciales de usuario de SQL a su código menos examinado, asegurando así a qué datos de SQL puede llegar. También es posible que desee utilizar el sistema operativo para restringir los permisos de nivel de archivo del código menos examinado.

Tenga en cuenta que los usuarios de SQL no necesitan ser uno por usuario de la aplicación. Pueden ser una suma de verificación por permisos, pueden ser dinámicas, recreadas totalmente en el inicio. Eso depende de ti.

Sin embargo, le sugiero que agregue más detalles a su pregunta. ¿Necesita administración de permisos a nivel de archivo en su aplicación web, permisos de nivel SQL, algo más?

    
respondido por el George Bailey 24.07.2012 - 18:56
fuente
1

Pruebe esto para empezar: csrc.nist.gov/news.../PvM-Model-Survey-Aug26-2009.pdf

Lo que puedo decirte es que realmente, realmente pienses en esto. Muchas aplicaciones comienzan como prueba de concepto; como un script de shell en décadas pasadas, y son tan útiles que se implementan. Esas decisiones tempranas de la arquitectura pueden realmente, realmente afectar la escalabilidad y el mantenimiento posteriores; cuando miles, decenas de miles o más personas utilizan el sistema / herramienta diseñado para unos pocos cientos.

La gestión de identidad y el control de acceso son los dos peores delincuentes. En realidad, es mejor si puede usar algo como aserciones SAML y construir un punto de control de acceso e identidad separado. A la larga, podrá mantener esto y escalar a la necesidad. Parece caro desde una perspectiva de rendimiento en las primeras etapas, pero a la larga es más barato.

Si no puedes hacer eso, ten mucho cuidado de mantener todos los códigos de control de acceso e identidad juntos para que puedas refactorizarlos fácilmente para satisfacer las demandas.

Asegúrese de consultar la Hoja de referencia de control de acceso de OWASP: enlace

La mejor de las suertes.

    
respondido por el Dennis Groves 24.07.2012 - 22:20
fuente
1

El agua ha volado bajo el puente de "autorización". Me complace decir que hay un modelo bien aceptado que hace exactamente lo que está buscando.

Se llama ABAC o control de acceso basado en atributos y es una evolución natural del control de acceso basado en roles (RBAC).

Donde, con RBAC, usted se enfoca en el usuario casi exclusivamente, con ABAC puede considerar los atributos del usuario, el recurso, la acción e incluso el contexto (hora del día ...). Su autorización ya no se trata de quién es usted. Se trata de quién, qué, cuándo, dónde, por qué y cómo.

NIST ha estado haciendo mucha investigación en el espacio de ABAC y han recopilado sus notas e informes en su sitio del proyecto ABAC .

XACML, el eXtensible Access Control Markup Language , es un estándar de OASIS (el mismo cuerpo como el que está detrás de SAML) que define:

  • una arquitectura de autorización
  • un lenguaje de política, y
  • un formato de solicitud / respuesta

que se puede utilizar para implementar ABAC. En resumen, XACML implementa el modelo presentado por ABAC.

Lo mejor de ABAC y XACML es que es neutral desde el punto de vista tecnológico. Funciona en casi todo lo que significa que puede usarlo para el control de acceso en API, servicios web, ESB, portales e incluso bases de datos.

    
respondido por el David Brossard 29.04.2014 - 23:33
fuente

Lea otras preguntas en las etiquetas