Filed Under (Identidad Digital, PAPI) by candido.rodriguez
Posted on 28-02-2010

El componente icGPoA de PAPI está experimentando un auge de popularidad en los últimos meses gracias a la labor de RedIRIS en su federación de identidad digital SIR.

Pero, ¿qué es un icGPoA?. Éste es un componente sencillo, extremadamente sencillo (y en cuanto se complique dejará de tener éxito), que permite actuar como GPoA o AS.

escenario

Así, el icGPoA sólo es capaz de responder a los siguientes mensajes:

  • Mensaje ATTREQ de GPoA a AS: este tipo de mensaje solicita una lista de atributos del usuario.
  • Mensaje CHECK de PoA a GPoA: donde el PoA solicita al icGPoA información de autenticación y atributos.

Para generar estas respuestas, el icGPoA sólo necesita una lista de atributos del usuario y una clave privada para firmarla (sobre esto ya hablaremos otro día…). En PHP tiene la siguiente “complejidad”:

if (isset($_REQUEST["ACTION"])) {
$theRef = $_REQUEST["DATA"];
}
else {
$theRef = $_REQUEST["PAPIPOAREF"];
}
$assertion = “attrA=val1,attrB=val2|val3@ID_AS”;
$now = time();
$ext = $now + 3600;
$reply = $assertion . “:” . $ext . “:” . $now . “:” . $theRef;
$safe = openssl_encrypt($reply, $pKey);

El resultado es la compatibilidad con el protocolo PAPI en muy pocas líneas de código. Obviamente no es un componente que escale, pero no se ha pensado para usarse como sistema de identidad digital en una organización sino como un sencillo conector fácilmente adaptable hacia una federación basada en PAPI.
Todavía no hemos hablado de cómo autentica al usuario… ¡de ninguna forma! Otro de los grandes éxitos del icGPoA es que delega a la organización que lo está desplegando la decisión de cómo realizar la autenticación del usuario, puesto que en la mayoría de los casos dicha organización ya tiene un procedimiento para ello. Existen dos formas típicas de incluir la autenticación del usuario:
  • Protegiendo el icGPoA, bien usando nuestro sistema favorito de Single Sign-On como simpleSAMLphp u Oracle Single Sign-On (OSSO), o bien utilizando módulos de Apache como mod_ldap o mod_auth (a través de un .htpassword). Sea cual sea el sistema, siempre obtenemos una referencia que identifica al usuario, como por ejemplo la cabecera REMOTE_USER en la petición HTTP. Gracias a esto podemos emitir los atributos en función de cada usuario.
  • Incluyendo el típico formulario HTML, donde el usuario pondrá su nombre y contraseña y se le comprobará en la tecnología que hayamos decidido.

Aunque ya está siendo utilizado por más de 30 organizaciones, no existe una versión “oficial” que descargarse. Esperemos que en breve podamos anunciar una URL en este blog.

(0) Comments    Read More   
Filed Under (PRiSE) by candido.rodriguez
Posted on 18-02-2010

successHemos añadido una nueva sección a la web de PRiSE: Casos de éxito. En esta sección iremos mostrando algunos de los proyectos en los que hemos participado y que, bien por el alcance del mismo o bien por su solución técnica, nos gustaría comentar.

El primer caso del que hablamos es la solución desplegada a la empresa norteamericana de McGohan Brabender, que gestiona wellvibe.com, un portal médico de detección y seguimiento orientado a trabajadores, el cual necesita utilizar el servicio de formulario de evaluación de riesgos para la salud, de Wellsource. La solución por la que optamos fue desplegar un simpleSAMLphp y hacer la interconexión utilizando SAML 2.

(0) Comments    Read More   
Filed Under (Identidad Digital, OAuth) by elena.lozano
Posted on 17-02-2010

Un perfil en OAuth especifica las credenciales que deben enviarse al Servidor de Autenticación y cómo las obtendrá el Cliente.

Dentro de los perfiles ya establecidos existen dos tipos: Perfiles de Clientes Autónomos (Autonomous Client Profiles), donde el Cliente actúa en su nombre y Perfiles de Delegación del Usuario (User Delegation Profiles), donde el Cliente actúa en nombre de un usuario determinado.

Los perfiles de Clientes Autónomos son dos:

Perfil de cuenta de Cliente con contraseña (Client Account and Password Profile):

Este perfil se utiliza cuando el Cliente es una aplicación que necesita un Recurso Protegido en nombre de una organización y el Servidor de Autorización acepta cuentas y contraseñas como método de autenticación.

Perfil de Aserción: (Assertion Profile)

Este perfil autoriza al cliente con una aserción, ya sea SAML u otro tipo que reconozca el Servidor de Autorización. El cliente presenta esta aserción al Servidor de Autorización y se intercambiarán por el Token de Acceso que permitirá acceder al recurso protegido.

Existen tres tipos de perfiles de Delegación del Usuario:

Perfil denombre de usuario y contraseña (Username and Password Profile):

El usuario da su nombre de usuario y contraseña a la aplicación Cliente que tiene instalada en su dispositivo. Con estos datos, el Cliente presenta sus credenciales al Servidor de Autorización para así intercambiarlas por un Token de Acceso que le permita acceder al recurso protegido.

Perfil Aplicación Web (Web App Profile)

Consiste en que el usuario se autentique de alguna forma determinada establecida de antemano en la aplicación web Cliente. Este perfil se utiliza cuando el Cliente es una aplicación web que accede al Recurso Protegido en nombre del usuario sin necesidad de adquirir las credenciales de los mismos.

Rich App Profile:

Se utiliza cuando el Cliente es una aplicación que el Usuario ha instalado en un dispositivo y está disponible en él un navegador web, pero el usuario no desea dar su nombre de usuario y contraseña a una aplicación o no necesita estos parámetros para autenticarse en el Servidor de Autorización.

(0) Comments    Read More   
Filed Under (Protección de datos) by elena.galvan
Posted on 09-02-2010

Anoche, un poco antes de las 20h, empecé un pequeño proceso de investigación sobre el servicio Cercador d’expertes (buscador de expertas). Un directorio del Institut Català de les Dones (ICD, Instituto Catalán de las Mujeres) para que los medios de comunicación se puedan poner en contacto con mujeres expertas en una determinada materia.

Mi primera búsqueda fue en la APDCAT. Al tratarse de un organismo público de Catalunya, las competencias de los ficheros de protección de datos son de la agencia autonómica.
Diferentes búsquedas con diferentes valores en los diversos campos no dan ningún resultado exitoso. Así que envié un correo al ICD a través de su formulario de contacto. Recuerda, todo esto fuera de su horario laboral.

Pues bien, esta mañana a las 9.15, recibo una llamada del ICD para aclararme la situación y darme todos los datos necesarios para saber de la creación del necesario fichero.
Resumiendo: http://www.gencat.cat/diari/5256/08284057.htm

Impresionante. Yo aún sin tomarme el café y en el ICD ya había funcionado correctamente los procedimientos necesarios para que un usuario tuviera respuesta sobre una consulta en Protección de Datos.

Y es que un personal bien formado en la materia que tratamos hace que los procedimientos funcionen: que un correo, una consulta a través de un formulario, sea recibido o traspasado a la persona que debe realizar una determinada acción o a la que tenga el conocimiento necesario para resolver la consulta, depende del buen funcionamiento de la organización.

Es muy fácil que la organización tenga un buen documento de seguridad, unos procedimientos perfectamente redactados. Pero no es tan fácil que toda esa documentación llegue a todo el personal.

Lo triste de todo, que me sorprenda justamente que funcione bien. ¿No debería ser lo más normal?. Y un gustazo, una llamada para que no quede dudas de ningún concepto :)

Haciendo hincapié a mi búsqueda en la APDCat, he vuelto a buscar según los campos: DOGC 5256, obteniendo un resultado de 1021 resultados… Y teniendo en cuenta que una búsqueda más específica tampoco resultó, he realizado una consulta directamente a la APDCat para conocer como se debe realizar la esperada búsqueda.

(0) Comments    Read More   
Filed Under (Identidad Digital, OAuth) by elena.lozano
Posted on 08-02-2010

Como comentábamos en otros posts, OAuth nos ofrece numerosas posibilidades a la hora de implementar la autorización y autenticación en nuestras aplicaciones.

En esta entrada vamos a comentar una extensión que está siendo definida actualmente y que amplía nuestra perspectiva a la hora de utilizar este protocolo.

Hablamos de OAuth WRAP (OAuth Web Resource Authorization Profiles), la cual nació para intentar simplificar a OAuth, eliminando sus procesos de firma y reemplazándolas por tokens de corta duración sobre SSL/TLS.

WRAP no pretende sustituir a OAuth, pero sí añadir nuevas características que completen y desarrollen elementos de los cuales carece el protocolo en su versión original.

Esta extensión permite la delegación de la autorización de recursos protegidos a una o más autoridades de confianza. Los Clientes que desean acceder a un Recurso Protegido primero obtienen autorización de un Servidor de Autorización, enviando para ello unas credenciales y perfiles determinados.

Una vez autorizados, el Cliente obtiene un Token de Acceso (Access Token) firmado digitalmente que podrá ser reemitido en caso de ser necesario y que permitira, como su nombre indica, acceder a los recursos protegidos.

OAuth WRAP define distintos perfiles que especifican las credenciales que deben enviarse al Servidor de Autenticación y cómo las obtendrá el Cliente. Es posible especificar perfiles propios e incluso adoptar los que ya están establecidos. En posteriores posts os comentaremos algunos de ellos.

(0) Comments    Read More   
Filed Under (Directorios, I+D+i) by candido.rodriguez
Posted on 05-02-2010

En el laboratorio de I+D de PRiSE hemos estado trabajando en un sencillo test de rendimiento de directorios virtuales, como primer paso para evaluar si éstos son una opción viable en nuestras infraestructuras tecnológicas.

Un directorio virtual nos ofrece un interfaz LDAP que actúa de intermediario con respecto a otro sistema de información, como una base de datos o otro LDAP. Además, antes de servir al cliente los datos tiene la capacidad de trabajar con ellos por lo que pueden ser adecuados previamente a nuestras necesidades.

El directorio virtual que hemos desarrollado está basado en Perl y utiliza los paquetes Net::LDAP::Server y DBI. El objetivo es ver si al conectar dicho directorio virtual con una base de datos MySQL los tiempos son aceptables o no. Para ello, hemos creado una batería de tests donde se realiza la búsqueda N veces de manera secuencial de una entrada en el directorio. No se trataba de ver el rendimiento ante pruebas de stress sino ver si al menos superaba esta sencilla prueba.

Se ha realizado la siguiente batería de tests:

  • 10 búsquedas
  • 50 búsquedas
  • 100 búsquedas
  • 250 búsquedas
  • 500 búsquedas
  • 750 búsquedas
  • 1000 búsquedas

Dicha batería se ha repetido 10 veces para quedarnos con el valor medio y evitar así resultados extraños. Los entornos que han sido probados y las búsquedas realizadas son:

  • Búsquedas en un OpenLDAP.
    • DN base: dc=test,dc=org
    • Scope: base
    • Filtro: (objectClass=*)
    • Atributo requerido: description
  • Búsquedas en un MySQL.
    • Sentencia SQL: select ‘dc=test,dc=org’ as dn, ‘dcObject\norganizationalUnit’ as objectClass, ‘test’ as dc, ‘test’ as ou, Test.Desc as description from Tabla where Id=’uno’
  • Búsquedas en un directorio virtual que conecta con dicho MySQL.
    • DN base: dc=test,dc=org
    • Scope: base
    • Filtro: (Id=uno)
    • Atributo requerido: description

El directorio virtual realizará la búsqueda indicada para el MySQL a la hora de obtener los datos y responder al cliente LDAP.

Los resultados obtenidos son:

Performance

Como podemos ver, a medida que incrementamos el número de búsquedas secuenciales seguidas, el directorio virtual es el más lento de los 3, aunque dicho retraso es bastante aceptable, como veremos más adelante. También podemos ver que el acceso a BD termina siendo más rápido que a un LDAP, y es debido al sistema de caché de MySQL.

Pero veamos los valores, expresados en segundos, que obtuvimos:

Tabla

Como podemos ver, al principio (con 10 búsquedas seguidas) el acceso a LDAP es más rápido que el acceso a la BD, ya que todavía el caché de la BD no ha comenzado a funcionar a pleno rendimiento. Además, el directorio virtual se comporta al mismo nivel que la base de datos. A medida que crece el número de peticiones, hay un retraso de un 35% aproximadamente, que gracias a que el tiempo de obtención de los resultados es bajo no va a implicar un coste elevado al integrar nuestras aplicaciones con el directorio virtual.

Tenemos claro que estas pruebas no son definitivas a la hora de evaluar un directorio virtual, pero al menos sabemos que si son cifras que prometen como para seguir trabajando en otro tipo de evaluaciones.

(0) Comments    Read More   
Filed Under (Identidad Digital, PAPI) by candido.rodriguez
Posted on 04-02-2010

En la comunidad de desarrolladores de PAPI estamos trabajando en la definición del protocolo PAPI v1.1, que traerá algunas mejoras sobre la versión inicial, que ya iremos desvelando poco a poco en este blog.

Una de estas mejoras es la inclusión del parámetro opcional PAPIOPOA en un mensaje ATTREQ, el cual corresponde a una petición de atributos por parte de un PoA o GPoA. Cuando un proveedor de identidad PAPI recibe este tipo de mensaje, en el caso de que el usuario no se hubiese autenticado previamente, necesitará realizar la autenticación del usuario antes de generar la respuesta al GPoA/PoA.

De esta forma, el mensaje ATTREQ queda definido con la siguiente URL:

Mensaje ATTREQ

Mensaje ATTREQ

Donde,

  • ATTREQ: contiene el ID del GPoA/PoA que ha realizado la petición.
  • PAPIPOAREF: es un valor que establece el emisor del mensaje y que le será devuelto en la respuesta.
  • PAPIPOAURL: es la URL del emisor que ha generado la redirección al proveedor de identidad.
  • PAPIOPOA: en el caso de que el emisor del mensaje sea un GPoA y haya enviado el mensaje tras recibir solicitud de credenciales por parte de un PoA, este parámetro opcional incluirá la URL de dicho PoA que generó el mensaje al GPoA.

La principal utilidad de PAPIOPOA es facilitar la política de emisión de atributos de los proveedores de identidad. Consideremos el siguiente escenario:

Escenario PAPIOPOA

Escenario PAPIOPOA

Como vemos, cada vez que el AS recibe un mensaje ATTREQ emitido por el GPoA, tendrá que emitir todos los atributos que podrían requerir cualquiera de los PoAs que están conectados con dicho GPoA.

Sin embargo, si en el mensaje ATTREQ recibe el parámetro PAPIOPOA, podremos saber cual fue el PoA que hizo la petición al GPoA y emitir sólo los atributos que dicho PoA necesita.

Además, este nuevo parámetro facilita enormemente la generación de unas estadísticas de acceso, ya que sabremos a qué recurso protegido intenta acceder un determinado usuario.

(0) Comments    Read More   
Filed Under (Protección de datos) by elena.galvan
Posted on 02-02-2010

La certificación CDPP promovida por el DPI ya tiene fecha para el primer examen, que se celebrará el sábado 19 de junio. El segundo examen tendrá lugar el 18 de diciembre.

La prueba teórica vendrá definida por:

•150 preguntas con una sola respuesta válida de 4 posibles

•Un caso práctico en el que se harán 20 preguntas con opción Verdadero/Falso.

•Se pasa con un 75% de respuestas correctas.

•No hay puntos negativos.

Será necesario la acreditación de experiéncia dentro de la Privacidad y la Protección de Datos.

Próximamente se publicará el temario y más detalles necesarios para su preparación.

Más información: https://www.ismsforum.es/img/a8/des98_CDPP_-_Certified_Data_Privacy_Professional.pdf

(0) Comments    Read More   
Filed Under (Identidad Digital, Privacidad, Seguridad) by candido.rodriguez
Posted on 31-01-2010

panopticlick-logo

La Electronic Frontier Foundation (EFF) está trabajando en un interesantísimo proyecto sobre privacidad: Panopticlick. Éste pretende investigar si nuestros navegadores, aun no emitiendo información de IP o a través de cookies, pueden ser fácilmente identificable por terceras aplicaciones web.

La información que proporciona el navegador, como la versión del sistema operativo, los plug-ins que tiene activado, las fuentes o tipos de letra que soporta, proporcionan una huella digital que podría servir para identificar nuestro puesto informático. De hecho, esta técnica se conoce como Device fingerprint y se sabe que es una de las técnicas que utilizan las empresas de publicidad en Internet, a la hora de personalizarnos los anuncios a mostrarnos.

Como vemos, el objetivo de esta investigación es obtener una base de datos anónima de navegadores de cara a saber si es posible o no identificar únicamente nuestro navegador con la información que envía y hasta que punto debería ser corregido este asunto.

Yo he probado con mi navegador Safari 4 y Firefox 3.5 y en ambos me ha informado que con su actual base de datos de más de 420.000 navegadores diferentes, podrían identificarlos unívocamente. Parece que la privacidad en Internet sigue siendo algo por lo que luchar, ¿no?

(0) Comments    Read More   

Últimamente me he visto envuelto en diferentes debates sobre si era seguro o no usar certificados con capacidades SSL, no sólo para asegurar conexiones TCP y/o autenticar servidores, sino también para firmar metadatos o aserciones.

El escenario en el que nos encontramos es el indicado en la figura, en el cual un cliente realiza conexiones HTTPS contra un IdP (Proveedor de Identidad) para acceder a un sistema SSO y por ende a recursos protegidos. Dónde al logarse el cliente con éxito, el IdP genera una aserción sobre quién es el cliente y qué atributos posee, el IdP firma esta aserción con el mismo certificado que se ha usado para establecer la conexión HTTPS.

Escenario

Escenario

El problema, o mejor dicho, el origen de las inquietudes reside en el uso del mismo certificado para la conexión HTTPS y para la firma de la aserción o de cualquier otro tipo de metadatos, y en el cual confían los SPs (proveedor de servicio) que han establecido relaciones de confianza con el IdP.

Pues bien, estas inquietudes se basan en la creencia incierta de que un servidor web firmará alegremente cualquier cosa presentada por el cliente en el ‘random binary blob‘ durante el SSL-handshake. Si esto fuese cierto un atacante tendría la capacidad de enviar como ‘random binary blob‘ una aserción falsa, que al ser firmada por el certificado x509 en el que confían los SPs, le diese la capacidad de acceder a recursos a los cuales no tiene acceso.

Esto es totalmente falso, ya que bajo ninguna circunstancia un servidor web firmará datos arbitrarios presentados por un cliente. Para aclarar esto voy a explicar que datos presenta el cliente al servidor y que son susceptibles de ser firmados.

Durante el handshake del  protocolo TLS/SSL se genera el master secret, el cual es un secreto compartido entre el cliente y el servidor, de 48 bytes y que es usado como clave simétrica para proteger la sesión. Este master secret, se genera mediante la siguiente función:

master_secret = PRF(pre_master_secret, "master secret",
                    ClientHello.random + ServerHello.random);

Donde PRF es la Pseudoroandom Function elegida de la cipher-suite- especificada en fases previas del handshake, la cual es una función basada en HMAC, que no usa en ningún momento la clave privada del certificado.
El pre_master_secret, es una cadena de 48 bytes enviada por el cliente al servidor y que es lo que nos interesa en este caso, ya que representa los únicos datos que el servidor cifra de forma “alegre”.
La cadena “master secret” es una constante con dicho valor.
Y por último las cadenas ClientHello.random y ServerHello.random son dos blob de 28 bytes, el primero enviado por el cliente en la fase ClientHello del handshake y el segundo enviado por el servidor en la fase ServerHello.

Como he dicho anteriormente, nos interesa el pre_master_secret, ya que esta cadena son 48 bytes, de los cuales 46 son generados aleatoriamente por el cliente y 2 indican el protocolo. Estos 48 bytes son cifrados con la clave pública del servidor. Y es este cifrado el punto que ha generado tanta controversia.
Pues bien, al cifrarse estos datos con la clave pública del servidor, es este servidor el único que puede descifrar y por tanto entender estos datos, ya que es el único en posesión de la clave privada correspondiente.
Con esto, si un cliente malintencionado en vez de generar 46 bytes aleatorios, introduce la aserción falsa, lo que obtendría es un mensaje cifrado que sólo puede leer quien posea la clave privada del servidor. La cual no está en posesión de los SPs, ya que estos sólo necesitan la clave pública, para comprobar la firma de las aserciones.

Como conclusión, decir que podemos estar seguros de usar el mismo certificado x509 tanto para asegurar sesiones con TLS/SSL como para firmar aserciones o metadatos ya que según la especificación del protocolo TLS los datos que un servidor cifra “alegremente”, sólo los puede descifrar él.

Por último decir que separar por roles el uso de claves privadas de los certificados x509, es decir, usar una para TLS y otra para firmar aserciones y/o metadatos, es una buena práctica de seguridad. Ya que  aunque TLS ha sido diseñado para resistir ataques contra autenticación y firmado, la historia nos ha demostrado muchas veces que confiar en la calidad de un algoritmo o protocolo y en su implementación debería evitarse en la medida de lo posible.

(0) Comments    Read More