«No es una computadora, es una impresora» es la frase que repiten, casi como un mantra, quienes intentan convencer a los ciudadanos que seleccionar candidatos mediante una pantalla táctil, para el sistema imprima la selección en papel y la transmita mediante ondas de radio a un chip RFID, no es votar electrónicamente.
Con «es una impresora» se intenta convencer al desprevenido de que el sistema no puede hacer «todas esas cosas» que sabemos que puede hacer una computadora (por ejemplo, espiar los votos emitidos). Pero la realidad es que las impresoras también son computadoras, y pueden hacer cosas bastante inesperadas por el común de la gente.
En 2016 en el Senado argentino, dos investigadores de la UBA mostraron cómo podía violarse el secreto del voto imprimiendo «micropuntos» en las boletas, algo que muchas impresoras hacen normalmente de fábrica para identificar el origen de los documentos impresos. Muchos hemos alertado sobre los peligros del uso de impresoras para votar, pero hace unos días al programador Ignacio Losiggio se le ocurrió hacer una prueba de concepto para mostrar cómo una (aparentemente inocua) impresora puede bastar para violar el secreto del voto de forma prácticamente indetectable.
La prueba
Esta es una breve demostración, hecha con una impresora vieja y sucia que alguien nos donó, con muy poco toner y que a veces «traga» más de una hoja de papel. (Sí, con tantos recursos contamos para mostrar los peligros del voto electrónico).
La prueba se realiza con 4 archivos PostScript (.ps): un acta de apertura, un voto para la lista 1, un voto para la lista 2 y un acta de cierre. Los mismos son enviados directamente a la impresora, sin ningún tipo de procesamiento en la computadora a la que ésta se encuentra conectada.
El acta de apertura, el primer documento en imprimirse, es la que hace la magia: inyecta en la impresora el código que luego reconocerá cada voto impreso y lo registrará en la memoria de la impresora.
Los archivos con los votos no tienen nada extraño, pero el código inyectado previamente en la impresora busca el texto «LISTA 1» o «LISTA 2» para contabilizarlos.
En nuestro ejemplo, imprimimos un voto por la lista 1 y luego dos votos por la lista 2, en ese orden.
Finalmente, el acta de cierre imprime dos páginas. En la primera ya da una pista de que algo no anda bien, al informar la cantidad de votos emitidos.
En la segunda página del acta de cierre se imprime el listado de todos los votos en el orden en que fueron emitidos. En la versión original desarrollada por Ignacio también se imprimía la hora exacta de emisión, ya que utilizó una impresora que tiene esa funcionalidad.
Sí, la impresora «sabe» qué votos fueron impresos. Adiós secreto del voto.
Por supuesto, ninguna de estas «rarezas» puede observarse si abrimos el acta de cierre con un visor de documentos en una computadora, ya que como dijimos son insertadas por la impresora.
Para más referencias, puede visitar el respositorio de GitHub donde Ignacio Losiggio publicó el informe detallado de la prueba realizada en la ekoparty, o ver la presentación (pronto estará disponible el video de la charla, por ahora hay una grabación desde el público).
Variantes
- El código malicioso es inyectado en el acta de apertura, pero podría ser enviado a la impresora mediante cualquier otro trabajo de impresión, y la misma quedaría configurada para realizar el truco. De la misma forma, los resultados (el listado de votos) podrían ser recuperados por otro documento impreso al finalizar. De esta forma, tanto las actas de apertura como de cierre quedarían «limpias», y pasarían cualquier auditoría sin despertar sospechas.
- También podría modificarse el firmware de la impresora para implantar el código malicioso en él, de forma de hacerlo persistente (de forma que no se pierda al reiniciar el equipo).
- Un ataque similar podría realizarse usando otros lenguajes de descripción de página y de trabajos de impresión, como PCL/PJL.
- Muchas impresoras modernas incluyen memoria flash, por lo que el ataque podría hacerse persistente almacenando en ella tanto el código malicioso como los votos registrados.
- Existe hasta un toolkit para explotar vulnerabilidades en impresoras (PRET, Printer Exploitation Toolkit), que fue presentado en la última conferencia BlackHat.
- También hay un sitio dedicado al hacking de impresoras: http://hacking-printers.net/.
Conclusión
Las computadoras utilizadas para votar no son impresoras. Y las impresoras tampoco dejan de ser computadoras. Dado el estado del arte de la informática, se hace imposible garantizar el secreto del voto cuando se usan computadoras para su emisión. Tan simple como eso.
Adenda
ekoparty publicó el video de la charla.