Artículos de interés

Meltdown

En este artículo explicamos de forma muy simplificada qué es y cómo funciona el ataque meltdown.

Con fines didácticos hicimos muchas omisiones y simplificaciones que pueden restarle precisión al ataque y a la información técnica, pero el objetivo de este artículo es que se entienda la dinámica del ataque y no los detalles del funcionamiento.

Qué es meltdown

Es una forma de explotar el funcionamiento de varias familias de microprocesadores para copiarse la memoria completa[1].

Copiarse la memoria completa implica tener acceso a regiones de memoria privilegiadas donde hay datos críticos como la llave de cifrado de particiones, llaves gpg, y todos los secretos que puedan imaginarse que guardan los programas y el sistema operativo en memoria.

Cómo funciona el microprocesador

Para el microprocesador la memoria está dividida en espacio de usuario (EU) y espacio de kernel (EK). Cada vez que el microprocesador ejecuta una instrucción valida los privilegios, si un programa del EU trata de mover memoria del EK a algún registro, el microprocesador falla.

Cada núcleo del microprocesador parte una instrucción en µOps o "micro instrucciones". Internamente el núcleo tiene "unidades de ejecución" (UE) que saben cómo ejecutar cada µOp específico. Algunas UE son la ALU (ejecuta operaciones aritméticas), la unidad de lectura de memoria y la unidad de escritura de memoria, entre otras.

Por ejemplo, la instrucción POPA para bajar datos del stack a un registro general se parte en 16 µOps o micro instrucciones. Por la cantidad de recursos que necesita (tiempo de las unidades de ejecución), podemos decir que POPA es una instrucción LENTA[2].

Para optimizar velocidad al ejecutar instrucciones lentas como POPA, el microprocesador tiene un mecanismo predictivo (branch predictor[3]) que evalúa cuáles son las próximas instrucciones a ejecutar del programa, y si tiene unidades de ejecución disponibles, las ejecuta en paralelo a la instrucción lenta. Esta estrategia se llama out-of-order execution o ejecución desatendida.

Cuando termina de ejecutarse la instrucción lenta, todas las otras instrucciones que predijo el branch predictor también terminaron de ejecutarse y escribieron sus resultados en la memoria cache del microprocesador (L1, L2 y L3). El microprocesador continúa ejecutando las siguientes instrucciones y como ya fueron ejecutadas gracias al mecanismo predictivo, no las vuelve a ejecutar, simplemente lee los resultados de la memoria cache.

El problema

El problema está en que la ejecución desatendida (out-of-order execution), al contrario de la ejecución normal del microprocesador, no valida privilegios. Por lo tanto, si algunas instrucciones de un programa de usuario se ejecutan gracias al mecanismo predictivo y leen datos desde el espacio de kernel de la memoria, estos datos se escribirán en la cache del microprocesador evadiendo la validación de privilegios.

El ataque consiste en usar este problema de la ejecución desatendida para escribir datos privilegiados en la cache interna del microprocesador, y luego leer esos datos[4]:

  1. Se escribe un programa que tenga una instrucción lenta.
push 0xdebf    ; coloca un valor en el stack
popa eax       ; eax ahora tiene el valor 0xdebf. Esta es la instrucción lenta.
  1. Justo después de la instrucción lenta se coloca una instrucción que provoque un error. Por ejemplo, división por cero:
mov edx, 0      ; borra el dividendo
mov eax, 0x10   ; dividendo
mov ecx, 0x0    ; divisor
div ecx         ; EAX / ECX -> error de division por cero

En este punto cuando se produzca el error, gracias al mecanismo predictivo se habrán ejecutado las instrucciones siguientes.

  1. Justo después de la instrucción que produce el error, se escriben las instrucciones que leen la memoria privilegiada.
mov eax, [0xe0000]      ; copia alguna dirección de memoria del kernel
  1. El error de división por cero corta la ejecución, pero el mecanismo predictivo hizo que la instrucción del punto 3 se ejecutara, y por cómo funciona la ejecución desatendida la instrucción mov escribió los datos en la memoria cache interna del microprocesador sin validar privilegios.

  2. Luego de terminar debido al error de división por cero, el programa que está realizando el ataque lee los datos que la instrucción mov del punto 3 escribió en la memoria cache del microprocesador. Para esto utiliza una técnica de ataque que se llama Flush+Reload, un ataque de la familia cache side-channel attacks[5]. Este ataque consiste en utilizar la función clflush de la librería estándar de C para forzar la recarga de la memoria cache del microprocesador y determinar si se escribieron datos a partir del tiempo que tarda esta función.

La solución

No hay soluciones para este ataque. Los sistemas operativos están subiendo parches para deshabilitar el mecanismo predictivo de los microprocesadores, pero esto implica que los microprocesadores funcionarán considerablemente más lentos[6][7].

Referencias

  1. https://meltdownattack.com/meltdown.pdf
  2. http://www.agner.org/optimize/instruction_tables.pdf
  3. https://danluu.com/branch-prediction/
  4. Prueba de concepto del ataque: https://github.com/gkaindl/meltdown-poc/blob/master/meltdown.c
  5. https://eprint.iacr.org/2013/448.pdf
  6. Ya hay reportes de pérdida de velocidad en sistemas que manejan volúmenes grandes de datos: https://twitter.com/chanian/status/949457156071288833
  7. En este repositorio están actualizando bastante rápido el estado de los parches para cada sistema operativo: https://github.com/hannob/meltdownspectre-patches

Ciencia ¿Abierta / Comunitaria / Ciudadana / Libre?

Almuerzo-debate y taller de trabajo colaborativo

imagen.png

Fecha: 9 junio 2018

Hora: Almuerzo-debate 13h - Hackatón 15h

Lugar: Uruguay y Bartolomé Mitre, CABA

Modalidad: libre y gratuito, inscripción por mail a eter@rlab.be (capacidad limitada)

Los proyectos de ciencia por fuera de la academia no son una novedad, desde los programas de extensión universitarios hasta las iniciativas de investigación participativa, existe una larga tradición de personas trabajando por acercar a “científicos” y “ciudadanos”. Pero, ¿Qué pasaría si pudiéramos borrar esa distinción?

Combinando la filosofía del software libre con la disponibilidad de tecnología a costos cada vez menores, resulta más fácil pensar proyectos que produzcan conocimiento y sean diseñados por y para las comunidades, en función de necesidades locales.

Desde Vuela y ETER, dos proyectos de ciencia comunitaria en Chile y Argentina, los invitamos a compartir un almuerzo-debate (13hs) para entender de qué va esto de la ciencia comunitaria, cuáles problemas comunes enfrentamos, qué colaboraciones podemos aprovechar y hacia dónde queremos ir. Durante la tarde (15-18hs), los invitamos a sumarse a una jornada de trabajo colaborativo, ayudándonos entre nosotras a seguir avanzando, junto a HuerTechno y otros proyectos que se sumen.

¡Las esperamos!


Más información de los proyectos:

Vuela es un proyecto que busca desarrollar un prototipo de kit de herramientas para hacer ciencia abierta con drones, accesible por igual para comunidades marginales, activistas, o investigadores, y útil para estudios o relevamientos en los que esta tecnología ya se utiliza pero está dominada por herramientas de código cerrado. Vuela se basa en hardware y software de código abierto disponibles, los que se integran en un proceso abierto, iterativo y colaborativo. Creemos que personas sin experiencia técnica previa pueden y deben trabajar codo a codo con quienes poseen experiencia o entrenamiento oficial. Este tipo de colaboración tiene el poder de promover los objetivos de la democratización de la ciencia y la tecnología, pero también de mejorar la efectividad y el impacto de las tecnologías abiertas en la sociedad.

ETER es un proyecto que mide la calidad del aire usando monitores abiertos de bajo costo que construimos nosotras mismas. Medimos material particulado (PM 1, 2.5 y 10), temperatura y humedad usando hardware abierto y software libre. Además diseñamos un juego online para divulgar recursos de ciencia abierta y documentamos los talleres donde construimos los dispositivos con las comunidades interesadas, para que otros puedan hacerlo. Empezamos trabajando con la comunidad de Área Reconquista, en San Martín - Buenos Aires y ahora estamos sumando nodos en Río Cuarto - Córdoba y en Mendoza. Nuestra idea es que cada vez más personas aprendan todo lo que pueden hacer usando tecnologías abiertas y puedan armar sus propios proyectos de ciencia comunitaria.

HuerTechno es un proyecto de huerto tecnológico que tiene por objetivo implementar la automatización del riego, luz y ventilación necesarios para la producción vegetal. Además, con nuestro dispositivo generamos un registro para posterior análisis de datos y estudio científico. Se desea que el sistema sea lo suficientemente flexible para controlar ¡cualquier especie de planta! Actualmente estamos trabajando con tomates cherry y en un futuro queremos elaborar prototipos de producción en hidroponia para controlar más y mejor las variables del sustrato. La posibilidad de monitorear, controlar y ajustar parámetros de automatización constantemente harán del horticultor amateur un productor profesional. El objetivo general es lograr un sistema sustentable con una máxima autonomía, rendimiento y eficacia. Un huerto conectado a través de Internet posibilita el intercambio de información y "recetas" con otros huertos, gracias a las redes de pares.

Comunicado #FreeOlaBini #FreeChelsea #FreeAssange

Como activistas del software libre, "transmisores de contenido social" y hackers, nos encontramos consternados ante los avances contra la libertad de miembros de comunidades hermanas y luchadores por la verdad como Ola Bini, Chelsea Manning y Julian Assange.

Horas después que Assange fuera expulsado de la embajada de Ecuador en Londres, y consecuentemente detenido por la policía local para ser extraditado a los Estados Unidos, nuestro compañero Ola Bini fue detenido en Ecuador bajo la premisa de que transmitía contenido social a través de sus sitios web, y que utilizaba perfiles falsos en la internet, aportando como única prueba la tenencia de dispositivos celulares y computadoras, elementos que la mayoría posee hoy en día pero que parecen ser probatorios de criminalidad por sí solos.

photo_2019-04-18_15-06-38.jpg

Ola fue denegado de su derecho a la defensa por horas, privado de su libertad y de conocer los cargos de los que se le acusaban, una acción digna del totalitarismo que atraviesa este mundo moderno. Luego de más de 30hs pasadas su detención logró tener acceso a un abogado. Los cargos en su contra finalmente publicados son "participación en el crimen de asalto a la integridad de sistemas informáticos" y "atentados para desestabilizar al país" (Ecuador).

Esto es totalmente absurdo y nos expresamos furiosamente contra estos actos barbáricos y represivos que atentan contra nuestras libertades, nuestros derechos al anonimato, a la autonomía y a la autodeterminación informativa. Ola es desarrollador y hacker, como la mayoría de nosotres. Su verdadero crimen es oponerse a los grandes poderes.

Exigimos su liberación inmediata, así como la de Chelsea y Julian.

-- R'lyeh hacklab