WCF: ¿es esta una buena arquitectura de seguridad?

5

Estoy creando un sistema de registro de información (basado en WCF) para una empresa a la que el personal puede acceder a través de Internet. Este software no se distribuirá y solo habrá un puñado de usuarios con la aplicación cliente instalada.

Debido al hecho de que la información almacenada es altamente sensible, obviamente me gustaría autenticar y autorizar cualquier solicitud de servicio. Por lo tanto, habrá alrededor de 4 puntos finales de servicio dedicados al manejo de una variedad de solicitudes. Para proteger estos servicios, pensaba autenticar cualquier solicitud con un sistema basado en token (que en realidad es solo un GUID). Esto significaría que, a menos que el cliente compile sus solicitudes con este token, ¡no podrán acceder a esos servicios! ¿Derecha? Ahora, para recuperar un token válido, el cliente debe conectarse al servicio de token de seguridad, que comienza con la autenticación SSL mutua (para evitar ataques de intermediarios), luego el usuario debe proporcionar sus datos de inicio de sesión (cifrados). por supuesto), luego, si los detalles son válidos, se les proporciona un token. El token se registra, junto con los detalles de los usuarios. Ahora el cliente puede enviar solicitudes válidas a los otros servicios. Cuando uno de los otros servicios recibe una solicitud, el token y las credenciales de usuario se comparan con el "almacén de usuarios actual" y se recupera su función. Si el rol del usuario permite esa solicitud, se procesa.

Lo siento si todo esto es un poco largo sinuoso! Pero básicamente, lo que les estoy preguntando a los gurús de la seguridad es: ¿esto suena como una arquitectura decente para este sistema? ¿Debo hacer alguna mejora? ¿O debería desechar toda esta arquitectura e ir por algo más? (Si es así, cualquier orientación sería apreciada!)

Respeto el hecho de que no soy un asistente de seguridad, ¡sin embargo estoy dispuesto a aprender! Así que por favor sea amable;)

    
pregunta Sam 15.08.2013 - 12:12
fuente

1 respuesta

6

Si sabes lo que estás haciendo, usar WCF no es difícil. Si sabes lo que estás haciendo, usar WCF con un STS no es terriblemente difícil. Si no sabes lo que estás haciendo, todo es terriblemente difícil. A quién estoy engañando, es WCF, por lo que es todo difícil. :)

En términos generales, su arquitectura cae en la categoría de confianza federada, ya que está utilizando el STS para proporcionar autenticación. Estoy un poco confundido en cuanto a por qué dices que el token es efectivamente solo un GUID. Normalmente con WCF es un token SAML (envuelto en un contenedor WS-Trust), que contiene atributos / reclamos sobre la identidad dada. Muchas veces los roles del usuario ya están contenidos en el token. Depende del STS proporcionar las funciones, y sus servicios solo verifican si la identidad entrante tiene las funciones necesarias (en un escenario simple, de todos modos).

Desde una perspectiva de seguridad, todo se complica un poco por varias razones:

  • WCF es un PITA
  • La seguridad de WCF se basa en gran medida en certificados, que presentan sus propios problemas
  • Los STS son difíciles de compilar de manera segura, por lo que la recomendación es usar un STS precompilado
  • El uso de STS preconstruidos rara vez hace lo que quiere que hagan fuera de la caja

Si puede resolver estos problemas, puede tener una implementación de los servicios razonablemente segura, sin embargo, eso es relativo a aquello contra lo que desea protegerse. ¿Contra qué quiere protegerse y qué no quiere o desea contra?

Uno de los puntos más débiles de un sistema federado es el criptografía. ¿Cómo protege las llaves de modo que el STS pueda usarlas, pero las personas no puedan robarlas? Usted dijo que quería usar certificados de clientes para la autenticación mutua ... ¿cómo están protegiendo esas claves los clientes? ¿Cómo estás emitiendo esas claves? Dijo que los certificados de cliente para la autenticación mutua SSL ... ¿eso incluye la autenticación basada en certificados para la autenticación STS de los usuarios, o va a utilizar el nombre de usuario / contraseñas? ¿Va a cifrar el token entre el servicio STS- > client- > o será texto plano? Normalmente, cifrarías el token ya que contiene información confidencial. ¿Cómo protege las claves de cifrado de los servicios?

Una confianza federada es una buena arquitectura, pero realmente depende del caso de uso. Por lo general, es cuando se desea desacoplar la autenticación / autorización de los usuarios de los servicios y centralizarlos en una sola fuente. Ya que tienes 4 servicios, parece que podría ser algo bueno. Sin embargo, hay una gran sobrecarga agregada con el STS (esto ahora hace que sea 5 servicios), y por lo general se aloja en su propio sitio.

Para obtener más información, consulte el proyecto Thinktecture.IdentityServer: enlace . Es un STS de código abierto creado por personas que han trabajado en estrecha colaboración con el equipo WCF y WIF de Microsoft.

    
respondido por el Steve 15.08.2013 - 20:29
fuente

Lea otras preguntas en las etiquetas