Elección de opciones de QOS de seguridad
Las opciones de QOS de seguridad se pasan como parte del parámetro SecurityQOS proporcionado a la función RpcBindingSetAuthInfoEx . Use los procedimientos recomendados siguientes.
Uso de la autenticación mutua
La autenticación mutua verdadera solo está disponible para determinados proveedores de seguridad: Negotiate (cuando negocia Kerberos), Kerberos y Schannel. NTLM no admite la autenticación mutua. El uso de la autenticación mutua requiere que se proporcione un nombre principal de servidor correcto. Muchos desarrolladores usan la siguiente práctica de seguridad errónea: se llama al servidor para solicitar su nombre principal (RpcMgmtInqServerPrincName) y, a continuación, solicitan ciegamente la autenticación mutua con ese nombre principal. Este enfoque interrumpe toda la idea de autenticación mutua; La idea de la autenticación mutua es que solo se llama a determinados servidores porque son de confianza para analizar y controlar los datos. Con la práctica de seguridad errónea que acaba de describir, los desarrolladores proporcionan sus datos a cualquier persona lo suficientemente inteligente como para devolver su nombre.
Por ejemplo, si el software cliente debe llamar solo a un servidor que se ejecuta en las cuentas de Joe, Pete o Alice, se debe llamar a la función RpcMgmtInqServerPrincName y se debe comprobar el nombre devuelto. Si es Joe, Pete o Alice, se debe solicitar la autenticación mutua con su nombre principal del servidor. Esto garantiza que ambas mitades de la conversación vayan a la misma entidad de seguridad.
Si el software cliente debe llamar a un servicio que se ejecuta solo en la cuenta de Joe, redacte directamente el nombre principal del servidor de Joe y realice la llamada. Si el servidor no es Joe, simplemente se producirá un error en la llamada.
Muchas veces, los servicios se ejecutan como servicios del sistema de Windows, lo que significa que se ejecutan en la cuenta del equipo. Todavía se recomienda la autenticación mutua y la creación de un nombre principal de servidor.
Use el valor de ImpersonationType más bajo que permite que la llamada pase a través
Este procedimiento recomendado es bastante explicativo por sí mismo. Incluso si se usa la autenticación mutua, no conceda al servidor más derechos de lo necesario; un servidor legítimo puede haber estado en peligro y, aunque los datos que envíe se encuentren en las manos equivocadas en tales casos, al menos el servidor no podrá acceder a otros datos de la red en su nombre. Algunos servidores rechazarán una llamada que no tiene suficiente información para determinar, y posiblemente suplantar al autor de la llamada. Además, tenga en cuenta que algunas secuencias de protocolo admiten la seguridad de nivel de transporte (ncacn_np y ncalrpc). En tales casos, el servidor siempre puede suplantar a usted si especifica un nivel de suplantación suficientemente alto a través del parámetro NetworkOptions al crear el identificador de enlace.
Por último, algunos proveedores de seguridad o transportes pueden aumentar de forma transparente ImpersonationType a un nivel superior al especificado. Al desarrollar un programa, asegúrese de intentar realizar llamadas con el impersonationType previsto y compruebe si está obteniendo un valor superior de ImpersonationType en el servidor.