Nuevo cuatrimestre, nuevas clases… y proyecto
El lunes pasado comenzó el segundo cuatrimestre y ya tengo nuevos frentes en los que lidiar en clase. Este cuatrimestre voy a hacer dos asignaturas y el PFC, con lo cual a finales de julio probablemente habrá concluido mi carrera a la espera de presentar el PFC en Valencia por septiembre.
Las asignaturas que tengo este nuevo cuatrimestre pintan interesantes, aunque parece que tengan una carga matemática importante y que me van a mandar unos cuantos trabajitos semanales para ir haciendo:
- Cryptography 2: se divide en dos partes, protocolos y sistemas. En la primera parte Berry Schoenmakers nos dará nociones sobre protocolos criptográficos incluyendo pruebas de su seguridad y concluirá con un examen parcial. En la segunda parte, Benne de Weger (el mismo de las colisiones en MD5 ) hablará de criptosistemas: PKI, Single sign-on, SSL, Kerberos, etc. y concluiremos la asignatura con dos papers.
- Verification of Security Protocols: en esta asignatura aprenderemos a verificar la seguridad de protocolos de comunicación que empleen criptografía, ya sea con métodos manuales o utilizando herramientas como proVerif. Tiene trabajos (70%) y examen final (30%).
En los enlaces se pueden encontrar las notas de clase y/o transparencias, si no ahora conforme vaya avanzando el curso.
Finalmente, ya he empezado el proyecto en la empresa Riscure en temas relacionados con smart cards y side channel analysis aunque de momento no he avanzado demasiado. Ahora tengo dos semanitas de vacaciones para irme de viaje final de carrera con la gente de Valencia, y luego vuelta al trabajo de nuevo.
FireGPG: GnuPG en tu Firefox
Hace un par de días estuve buscando cómo podía integrar GPG con Firefox y/o Gmail para poder cifrar/firmar correos desde el navegador sin tener que irme a copiar el texto a un archivo, cifrar/firmar el texto y luego copiarlo a Gmail cada vez.
Al poco de empezar encontré una extensión de Firefox llamanda FireGPG que necesita de GPG instalado y te permite utilizar las funciones de GPG desde Firefox. Se integra perfectamente en Gmail añadiendo botones de Firmar, Cifrar, Firmar y Enviar, Cifrar y Enviar, ... y verificando las firmas recibidas de manera automática.
Además añade una opción al botón derecho que te permite cifrar,firmar y verificar firmas de selecciones y contenidos de los formularios, importar y exportar firmas, y abrir una ventana de un editor propio para realizar allí las acciones que desees.
Es bastante cómodo y resuelve a la perfección el problema de usar GPG desde un Webmail 🙂
Presentaciones de 24C3
Javi comentó hace unos días sobre una de las presentaciones del congreso 24C3 sobre smart cards (gracias 😉 ). Ayer noche estuve echando un ojo a las otras presentaciones y algunas me resultaron interesantes.
Hoy les he estado echando un ojo y viendo alguno de los videos porque no me encuentro muy bien para leer ni programar con lo del proyecto, y además tenía parte de la mañana ocupada con una entrevista con un profesor para comentar un trabajo de una asignatura y que me dijera la nota.
Estas son las presentaciones que he visto por el momento, sea el video o solo el PDF:
- Inside de Mac OS X kernel: en esta presentación lucy presenta (valga la redundancia) las características más importantes de XNU, el kernel de Mac OS X, dejando claro qué hay de BSD, de Mach y de microkernel (uh?) en éste. Muestra el diseño del kernel (sus bloques principales y su situación [userspace/kernelspace] , el área de memoria que recibe cada proceso, los conceptos que aporta Mach, etc.) . Me ha parecido interesante, en el video se ve mejor pues hay cosas (algunas animaciones y tal) que no salen en el PDF.
- Mifare security: Se presentan las características del chip RFID Mifare de NXP Semiconductors (formerly Philips :P) y su cifrado propietario, en base a un estudio via ingeniería inversa de dicho chip. Por aquí se ha hablado mucho estos días de Mifare y de la tarjeta OV Chipkaart, que es una tarjeta para transporte público que se está implementando y que han conseguido clonar hace poco de forma que pueden realizar viajes infinitos pagando una tarjeta de dos :roll:. Está interesante la charla, aunque aun estoy a mitad ahora mismo 🙂
- Smartcard protocol sniffing: esta es la que comentaba Javi en el otro post, muestra cómo realizar sniffing de la comunicación entre la smart card y el terminal, viendo las APDUs que circulan y demás. Solo he leído la presentación, pero personalmente no me ha aportado demasiado porque ya vi algún circuito de este estilo; de todas formas es interesante si no se conoce nada del tema.
Además de esto, he bajado la que habla de kernel exploitation, embedded devices, replay attacks on payment cards, windows post-exploitation y puede que alguno más. Si alguno de ellos lo encuentro especialmente interesante o tengo algo que comentar lo haré en unos días 🙂
Ataques a smart cards: side channel analysis (I)
Volvemos a darle un poquito al tema de las smart cards ;-). Antes de continuar, sería recomendable que quien no conozca prácticamente nada sobre smart cards lea los posts anteriores al respecto:
- Introducción
- Normas y comunicación
- Clasificación de ataques
Pese a que hay mucha información al respecto en Internet y en libros, no sé si la hay en español así que espero que siga resultando útil/interesante a la gente :-).
En este post vamos a ahondar un poco más en uno de los ataques más famosos sobre smart cards. Se trata del llamado Side Channel Analysis o SCA ( en español supongo que se traduciría como análisis de canales adyacentes o algo similar) que consiste en analizar datos procedentes de la smart card por canales alternativos.
Como ya vimos, una smart card se comunica con el exterior únicamente mediante una interfaz serie a través de uno de sus contactos. En cambio, como cualquier dispositivo electrónico, estas tarjetas 'sufren' algunos fenómenos físicos que permiten obtener información. Veamos los principales canales utilizados:
- Información temporal: realizando mediciones de lo que tardan distintas operaciones.
- Consumo: midiendo el consumo de potencia del dispositivo también es posible determinar qué está haciendo.
- Radiaciones electromagnéticas: como todos sabemos, cualquier movimiento de electrones genera un campo electromagnético, y nuestras tarjetitas no iban a ser menos.
En este primer post sobre side channel analysis vamos a ver un ejemplo de información temporal que nos puede ayudar a romper un algoritmo considerado seguro como RSA debido a una 'mala' implementación. Para ello primero (en la página extendida para no alargar mucho la portada) explicaré brevemente cómo funciona RSA, la implementación base que usaremos y luego el problema que tiene y cómo podríamos solucionarlo.
Eindhoven: Fin del primer round
Pues sí, ya llegó la Navidad y con ella acaba la primera etapa de mi estancia en Eindhoven. Han pasado 4 meses desde que nos vinimos (a lo que hay que descontar mi vuelta durante 12 días a mitad septiembre...) y la verdad es que me han pasado volando.
Ahora mismo estoy en casa preparando las cosas para volar mañana hacia Valencia... y llevo unos días absolutamente solo porque la gran mayoría de gente volvió a casa durante la semana y yo por g-piiiiiii-s aquí estoy (quien me mandaría coger el vuelo tan tarde 😳 ).
Resumiendo, en el aspecto académico estoy bastante contento pues he aprendido bastante: linux (con un profesor que ha colaborado durante unos 15 años en el kernel, utilidad mount y otros siempre se aprende algo interesante 😉 ), criptografía, seguridad a nivel hardware (ejemplificada en las smart cards) y algo de web semántica aunque esto último ha sido lo que menos me ha gustado 🙄 .
En cuanto a lo personal, la gente, fiestas, etc. pues no ha estado nada mal. Hemos conocido a bastante gente por aquí, aunque casi siempre acabamos juntándonos los españoles; hemos salido de fiesta, sin pasarse mucho pero tampoco sin descansar demasiado y lo hemos pasado bien en general :-).
Ahora toca estudiar un poco y acabar los trabajos finales para enero, y cuando acabe los exámenes a currar en el PFC con Riscure. Por mi parte, animar a quien se esté pensando irse de Erasmus y no lo tenga claro a que lo haga; es una experiencia que si no tienes ahora posiblemente no vuelvas a tener la oportunidad, y si no te gusta siempre estás a tiempo de echarte atrás y volverte a los pocos meses... aunque seguramente te guste ;-).
And last but not least...
Feliz Navidad a todos!
Smart cards: clasificación de ataques
Seguimos con la serie de smart cards. Tras introducir el tema y hablar de los estándares al respecto, la idea inicial era seguir explicando la evolución de los SOs para estas tarjetitas (que es muy similar a lo que pasó con computadoras y ordenadores personales 😉 ) e introducir JavaCard, pero creo que resultará más interesante meternos en posibles ataques a este tipo de dispositivos seguros.
En este primer post sobre ataques vamos a definir una clasificación de los ataques y nombrar los más comunes, y en unos días dedicaré algún post a varios de estos ataques.
Antes de la clasificación, definiremos un par de conceptos que como no sé cómo traducir al español (no encuentro una traducción que me guste) nombraré en inglés:
- Se dice que un dispositivo es tamper-resistant cuando no se pueden realizar modificaciones del dispositvo ( to tamper with the device ) de manera no autorizada.
- Se dice que un dispositivo es tamper-evident cuando deja señales de que ha sido modificado de manera no autorizada.
En base a estos conceptos, vamos a definir los ataques como invasivos y no invasivos. Un ataque no invasivo no modifica el dispositivo, y por tanto es capaz de violar las propiedades de tamper-resistance y tamper-evidence. En cambio, un ataque invasivo deja evidencias del mismo, por tanto únicamente viola la propiedad de tamper-resistance.
Dentro de ataques de tipo no invasivo podemos encontrar:
- Ataques lógicos, explotando fallos en el software o los protocolos empleados
- Ataques de tipo Side channel analysis (¿análisis del canal adyacente?) que se basan en analizar fugas de información por canales diferentes al bus serie de comunicación de las tarjetas ( consumo de potencia, radiación EM, tiempos...).
- Ataques con fault injection, que introducen fallos en la tarjeta ( modificando la alimentación, el reloj...).
En cuanto a ataques invasivos nombramos los siguientes:
- probing, consistente en conectar agujas de medida sobre algunas líneas de la tarjeta, por ejemplo el bus de datos.
- fibbing, realizado con un focus ion beam (FIB), de ahí el nombre. Permite observar y realizar cambios en la tarjeta, añadiendo puntos de conexión, cables, etc.
- Ingeniería inversa óptica, para reconocer las partes del circuito e incluso con algunas técnicas obtener el contenido de la memoria.
- Algunos tipos de fault injection son invasivos.
Obviamente, los ataques dependen mucho del tipo de atacante. Cualquiera con pocos medios (un lector de tarjetas y poco más) puede intentar estudiar el protocolo e inducir fallos lógicos, mientras que para realizar side channel analysis se necesita equipamiento algo más caro, y para los ataques invasivos generalmente se necesita equipamiento muy especializado.
Existen laboratorios que realizan este tipo de ataques para sus clientes, por ejemplo aquí en Holanda Riscure (donde voy a hacer el PFC finalmente) y Brighsight (que visitaremos el 29 de enero) realizan este tipo de análisis de seguridad, ambos en Delft.
Además, Riscure (que es el que conozco un poco) realiza análisis de Set Top Boxes para PayTV, analizó el sistema IPTV de Microsoft y está acreditado por Mastercard para realizar auditorías mediante el programa de certificación CAST.
Esto es todo de la descripción, próximamente algún ejemplo de Side Channel Analysis y enlaces a documentos interesantes al respecto 🙂
De MD5, colisiones, presidentes de EE.UU. y PS3
Ayer Lunes comentaron en Barrapunto ( y previamente en meneame ) acerca de una predicción sobre el resultado de las próximas elecciones de los Estados Unidos realizada por unos investigadores de la universidad donde estoy ( TU Eindhoven ), concretamente Benne de Weger ( profesor de Cryptography 2, a parte de haber dado este año la parte de RSA de Cryptography 1 ) junto con Marc Stevens y Arjen Lenstra.
Lo que han hecho ha sido crear varios documentos PDF con las posibles predicciones, pero que todos tengan el mismo hash MD5 (es decir, encontrar colisiones en MD5). Aquí voy a explicar sin entrar en mucho detalle y lo mejor que pueda qué es lo que han hecho para quien esté interesado y no tenga ganas/tiempo de leer el documento.
Antes de empezar, conviene conocer un par de términos (enlace a Wikipedia en inglés): hash collision y hash function (ver también el enlace a función hash criptográfica) . Desde allí se puede ir también a la versión española 🙂
Asumiendo que ya conocemos qué es un hash y qué es una colisión, cabe mencionar que generalmente las funciones de hash funcionan en base a varias iteraciones sobre una función de compresión, utilizando en cada iteración un bloque de datos del mensaje y un valor de hash intermedio ( IHV, Intermediate Hash Value ). El valor obtenido con el último bloque del mensaje (al que probablemente se haya añadido relleno para que sea múltiplo del tamaño de bloque ) es el hash buscado.
Pese a que en 2004 ya se publicó cómo obtener colisiones con MD5 ( prof. Xiaoyun Wang ), en este caso se trataba de mensajes aleatorios, lo cual hace que aunque dos mensajes tengan el mismo hash, probablemente solo uno de ellos tenga cierto significado. En el caso del nuevo ataque, que describen como chosen-prefix collisions, el documento puede tener una parte inicial arbitraria, siempre que a partir de cierto momento todos los documentos sean iguales.
Lo que describen en su paper Benne de Wenger y sus co-autores es un mensaje con los 3 siguientes campos:
- Un prefijo cualquiera
- Un relleno aleatorio, para que el tamaño de los 3 campos sea múltiplo del bloque
- Una cadena elegida de forma que la diferencia entre IHVs en este campo tenga ciertas propiedades
Con esto, la diferencia entre IHVs conseguida no es nula, pero es posible obtener una colisión mediante lo que ellos llaman near-collision blocks, consturidos para reducir estas diferencias.
A partir de aquí, tenemos dos documentos con un hash idéntico, aunque con cierta basura, y podemos añadir lo que queramos detrás siempre que sea igual para ambos archivos.
Lo que han hecho en este caso, es poner esa basura en una imagen oculta dentro del PDF, y aunque no he examinado los documentos, supongo que la parte final idéntica en todos cierra la imagen y añade todos los campos que necesite el formato PDF (que desconozco) para tener un documento válido.
La mejora de este método frente a lo descrito en el CITS, es que en el nuevo método no es posible encontrar rastros de que existe el documento fraudulento, mientras que en el anterior el documento postscript contenía dos bloques de contenido y se podía ver el otro documento.
¿Y qué tiene que ver la PS3 con todo esto? Pues simplemente que han usado una PS3 con sus múltiples cores para realizar los cálculos, además de un PC quad core. En su paper inicial comentan que les tomó unos 6 meses de trabajo con miles de PCs para encontrar las colisiones, pero con la técnica nueva unos 2 días son suficientes, usando una PS3 y un PC quad core.
Smart cards: normas y comunicación con el terminal
Vamos a seguir comentando un poquito más acerca de las smart cards, las tarjetas inteligentes de las que empecé a hablar hace casi un mes. En este post voy a comentar algo que en principio no tiene mucho que ver con la seguridad de los sistemas con estas tarjetas, pero que conviene conocer: los estándares que definen las características de estas tarjetas y la forma de comunicarse con el exterior.
El estándar actual de smart cards (de contacto, para RFID hay otros estándar) es la familia ISO 7816, que define básicamente todo lo que se pueda imaginar relacionado con las tarjetas:
- 7816-1: Carcaterísticas físicas
- 7816-2: Dimensiones y contactos de las tarjetas
- 7816-3: Señales eléctricas y protocolos de transmisión.
- 7816-4:Conjunto de comandos estándar
- ...
Hay más, hasta 15 según la wikipedia, pero aquí simplemente voy a comentar ciertas características y el formato de los mensajes.
Anatomy Of… en IBM developerWorks
Ya dí un enlace a IBM developerWorks hace un tiempo en el post de inotify, y este post es simplemente para comentar que existe una serie de Tim Jones sobre el kernel Linux bastante interesante, que da una idea de algunos de los principales subsistemas de Linux.
La serie se llama Anatomy of the Linux... y por el momento incluye 6 artículos, sobre el slab allocator, sistema de ficheros, networking, el kernel en general, el subsistema SCSI y los métodos de sincronización presentes en el mismo.
Y ya puestos aprovecho para recomendar un excelente libro sobre el tema que leí el año pasado aunque no he puesto en práctica nada de lo aprendido allí: Linux Kernel Development de Robert M. Love . Es una excelente introducción al kernel Linux y a los sistemas operativos en general, en un lenguaje que se puede entender aunque no se conozcan muchos de los conceptos de SO de antemano. La segunda edición se basa en el kernel 2.6.10, aunque obviamente los conceptos aprendidos sirven para estudiar otras versiones.
Si se quiere un libro con mucho más detalle en las implementaciones de Linux, pero bastante más complejo de seguir también, se puede tirar por Understanding the Linux kernel (3a edición) y si se quiere aprender acerca de módulos y drivers de dispositivos, Linux Device Drivers (3a edición) que está disponible para descarga.
Microkernels, hypervisors y seguridad por Hendrik Tews
Después de estar jodido el fin de semana con un trabajo para HW & OS Security, en el que me tuve que encargar de mi parte del código y gran parte del resto, además de hacer todo el testing, el lunes fui a la clase de dicha asignatura habiendo dormido algo así como 3 horas. Además, el sábado tuvimos en casa cena de despedida de Javi que ya se nos ha ido a España (ya le tocaba, llevaba aquí desde septiembre de 2006), y luego evidentemente salimos por ahí... Total, que al final había dormido desde el viernes bastantes horas menos de las que tocaba, pero creo que valió la pena porque la clase estuvo bastante interesante.
Vino Hendrik Tews, que trabaja en la universidad de Dresden en el tema del que nos estuvo hablando: microkernels e hypervisors. Como la mayoría de la gente que ha leído un poquito sobre sistemas operativos sabe, se suele hablar de dos grandes tendencias en el diseño de sistemas operativos: los nucleos monolíticos y los microkernels o micronúcleos.
Los primeros son una gran pieza de software que provee toda la funcionalidad necesaria en el sistema operativo, funcionando en modo privilegiado. Por el contrario, los microkernels tratan de minimizar el código que funciona en modo privilegiado, proporcionando las tareas necesarias y una interfaz para acceder a ellas desde espacio de usuario.
Esta minimización de las aplicaciones en espacio de kernel permite que un fallo en un cierto driver no influya en todo el sistema operativo y se venga abajo. Por ejemplo, una simple imagen de un sistema de ficheros en linux puede hacer que se venga abajo el sistema (de ello se habló en meneame via eyeideas que enlazaba aquí, pero a parte de esa cosa tan tonta que muchos consideran una feature, esta imagen echaba abajo cualquier kernel anterior a 2.6.22 según las pruebas que hice la semana pasada).
En el caso de un sistema basado en microkernel, el driver del sistema de ficheros se vendría abajo, el usuario (o el propio SO) se daría cuenta y lo volvería a iniciar. Nada de una caída de la maquina completa.
Además de microkernels, como he dicho, también hablo de hypervisors , qué son, cómo implementarlos sobre IA32 y algunas cosillas interesantes más. También nos ofreció una demo con el TuDOS CD Demo en la que pudimos ver cómo el típico xeyes no era capaz de seguir el ratón cuando éste estaba fuera sobre una de las aplicaciones aisladas por el servidor gráfico seguro que incorpora. Es fácil imaginar que si no puede obtener la posición del ratón, tampoco será capaz de obtener las teclas pulsadas por ejemplo.
A quien le interese minimamente el tema le recomiendo descargar las transparencias de la lecture. De momento he puesto el link desde la página de mi profesor, pero si por alguna razón dejara de funcionar y alguien lo quiere que me avise y lo subiré aquí.