Los errores de corrupción de memoria están entre los más frecuentes de los programadores de lenguajes como C o C++. Para colmo, presentan un gran desafío desde el punto de vista de la seguridad del programa ya que pueden ser fácilmente utilizados para atacar un sistema.

Hace ya varios años se han realizado importantes desarrollos en el área de robótica móvil debido a las ventajas que provee en diversos campos de aplicación, entre los que se pueden enunciar: búsqueda y rescate de personas, detección de incendios y agricultura de precisión, entre otras. En este marco, uno de los principales problemas a resolver es el de SLAM (Simultaneous Localization And Mapping) donde un robot móvil debe ir construyendo un mapa del entorno al mismo tiempo que estima su posición en el mismo. Por otro lado, el uso de cámaras como principal unidad de sensado ha sido foco de interés debido a que estas son sensores pasivos (no interfieren con otros sensores), captan gran información del ambiente (permitiendo realizar detección de objetos, por ejemplo), y su bajo costo comercial. En esta charla se presentará un nuevo método desarrollado por el Laboratorio de Robótica y Sistemas Embebidos de la UBA, denominado STAM (Stereo Tracking And Mapping) que utiliza una cámara estéreo para abordar el problema de SLAM. Además, se mostrarán otros métodos de navegación basada en visión desarrollados por el grupo.

En esta charla presentaré IEPY (Information Extraction for Python), una plataforma de software libre para el desarrollo de aplicaciones de Extracción de Información. La Extracción de Información trata el problema del análisis de documentos de texto no estructurado para encontrar y estructurar determinada información de interés. En IEPY, la información se estructura en entidades, como personas, lugares y fechas, y relaciones entre las entidades, como la presencia de una persona en determinado lugar y/o momento.

La era digital ya está aquí hace más de una década. En los últimos diez años se produjo un crecimiento exponencial de la cantidad de datos visuales digitales (imágenes, videos, etc) gracias al desarrollo y abaratamiento de dispositivos de adquisición. Hoy en día, la mayoría de las personas posee un dispositivo de captura de imágenes (filmadoras, tablets, cámaras, celulares...). Sin imaginarlo, estos dispositivos pueden abrir infinidad de nuevas oportunidades. Cambio de paradigmas en el uso de dispositivos, automatización de procesos, simplificación de tareas, para mencionar algunas.

Bitcoin es una cryptodivisa digital creada en el año 2009 que usa tecnología peer-to-peer y que opera sin una autoridad central, lo que significa que no está producida ni sancionada por bancos o gobiernos. La gestión de las transacciones y la emisión es llevada a cabo de forma colectiva por los nodos de la red. Bitcoin es de código abierto; su diseño es público, nadie es dueño o lo controla y todo el mundo puede participar.

Hoy en día los gobiernos están adoptando tecnologías de la Web 2.0 para interactuar con los ciudadanos, empoderándolos para compartir sus visiones, opiniones y puntos de vista. En particular, las redes sociales juegan un papel preponderante en este contexto, en función de su uso extendido. Para los gobiernos, un desafìo técnico significativo es la carencia de herramientas inteligentes automatizadas para procesar la opinión ciudadana en el contexto de redes sociales orientadas a cuestiones de gobierno. El Proyecto DECIDE 2.0 (financiado por LACCIR - Microsoft Research) apunta al desarrollo de un framework para integrar tecnologías de argumentación y de búsqueda sensible al contexto para procesamiento inteligente de opinión ciudadana en redes sociales. El framework se basa en técnicas de text mining y opinion mining para detectar los tópicos que tienen preponderancia, y las potenciales contradicciones que surgen entre los distintos puntos de vista. La principal contribución de DECIDE 2.0 es proveer una herramienta automática para extraer argumentos a partir de la opinión ciudadana, confrontando automáticamente opiniones "pro" y "con" a partir de términos. La idea es que dicha aplicación facilite el proceso de toma de decisiones para los funcionarios responsables en distintos niveles organizacionales.

El proyecto enfoca en el desarrollo modular de componentes (en C++) para que fácilmente se puedan desarrollar herramientas utilizando diferentes componentes. En el caso del front-end clang, éste provee módulos para el desarrollo de aplicaciones basadas en la manipulación de código fuente.

El proyecto llvm (Low Level Virtual Machine) y clang (frontend de C/C++/Objective C) ha alcanzado un nivel de madurez tal que hoy es el sistema de desarrollo base utilizado por Apple y otros. Actualmente se considera como la alternativa a GCC.

Por ejemplo, A implica (B y C) es isomorfo a A implica B y A implica C. Si consideramos un sistema de pruebas módulo este tipo de isomorfismos, desde el punto de vista del cálculo (o del sistema de pruebas), una función que toma un argumento y devuelve un par, es equivalente (o "igual" si se quiere, para algún concepto de igualdad) a un par de funciones, cada una tomando el mismo argumento, y devolviendo sólo un elemento del par. Por lo tanto, también se podría, por ejemplo, proyectar un elemento de un par que será resultado de la aplicación de una función... antes de aplicar la función, proyectando sólo una parte de la misma. Esto puede trae aparejado una simplificación importante del cómputo.

Certificación de algoritmos criptográficos constant-time

Los ataques basados en cache constituyen una clase de ataques encubiertos que son particularmente efectivos cuando son realizados en ambientes virtualizados o en la cloud, donde son utilizados para recuperar claves secretas en aplicaciones que involucran algoritmos criptográficos.

Un enfoque comúnmente utilizado para contrarrestar este tipo de ataques es utilizar implementaciones de estos algoritmos cuya ejecución es constant time. Sin embargo, no existe una prueba rigurosa y formal de que implementaciones constant-time están efectivamente protegidas contra ataques concurrentes basados en cache en un ambiente de virtualización donde máquinas virtuales huéspedes de la plataforma comparten la memoria cache de la misma. Más aún, muchas de las implementaciones usualmente utilizadas de estos algoritmos no son constant-time. Un enfoque alternativo es utilizar mecanismos a nivel de sistema; un mecanismo reciente de este tipo es el conocido como memoria stealth. Este mecanismo provee un espacio privado y reducido de memoria cache para que programas cuya ejecución podría dejar fugar información puedan computar en forma segura. El uso de memoria stealth induce una forma débil de constant/time, que nosotros convenimos en llamar S-constant-time, que puede ser aplicada a implementaciones extensivamente usadas de algoritmos criptográficos. Sin embargo, no existe un análisis riguroso de memoria stealth y S-constant-time así como tampoco existen herramientas que provean soporte para verificar que una implementación es S-constant-time.

En esta charla presentaremos un novel análisis de flujo de información que permite verificar si una aplicación x86 ejecuta en (S-)constant-time. Nosotros hemos probado que programas constant-time (respectivamente S-constant-time) no sufren de fuga de infomación a través de la memoria cache hacia otros sistemas operativos ejecutando concurrentemente sobre la plataforma de virtualización (respectivamente plataformas que implementan memoria stealth). Estos resultados han sido formalizados usando el asistente de pruebas Coq. Hemos demostrado la efectividad de nuestro análisis sobre implementaciones criptográficas, incluyendo las versiones PolarSSL de AES, DES y RC4, así como sobre SHA256 y Salsa20.

Un artículo donde se presenta en forma detallada el trabajo de investigación descrito y sus resultados ha sido aceptado par su presentación en CCS 2014: the 21st ACM Conference on Computer and Communications Security.

por Gustavo Betarte (Universidad de la República - Uruguay)

Slides