Tu navegador no soporta las características requeridas por esta presentación, por lo que se mostrará una versión simplificada.

Para obtener una mejor experiencia, utiliza Firefox, Chrome o Safari.

Vot.Ar: una mala elección

Presentación sobre el sistema Vot.Ar (o BUE), su HW, SW y Vulnerabilidades.



Y también, un poco sobre voto electrónico.

#VotArUnaMalaEleccion #eko11

¿Cómo lo hicimos?

Public constultation point

Vot.Ar o BUE (Boleta Única Electrónica), hecho por el Grupo MSA, es un sistema de voto electrónico que cuenta con dos elementos principales:


¿Su vulnerabilidad más evidente?

entre otras...

Requerimientos de Vot.Ar (según su patente y la Ley)

  1. Universal*
  2. Igual*
  3. Secreto*
  4. Obligatorio*
  5. Libre
  6. Un voto por elector

* Derechos Constitucionales

Cosas a tener en cuenta respecto de Vot.Ar

Timeline
Timeline

El sistema aquí reportado es tal cual fue usado en las elecciones de este año en la CABA

Visión general de Vot.Ar

overview

Unidad portable, algo más grande que un maletín

Tiene a la izquierda:

Tiene a la derecha:

Tiene arriba:

* BadUSB?...

Tiene por debajo:

Luego está la boleta, que tiene un chip RFID + papel térmico al dorso.

También cuenta con un troquel en una esquina, para verificar que la boleta no haya sido intercambiada.

Enseguida los detalles...

Pero la propaganda decía:

¡Es una impresora, no una computadora!

¡y todos lo creyeron!

Tweeting from a Vot.Ar machine Así que acá tuiteabamos, desde una "impresora"...

Vistazo rápido: Abriendo la mesa

DVDs and President Id card Credenciales y DVDs
  1. Encender la máquina e insertar el DVD.
  2. Seguir las instrucciones para calibrar la pantalla táctil.
  3. Usar credencial de Presidente para abrir pantalla de inicio, ingresar # mesa y PIN.
  4. Seleccionar la opción de Apertura de Mesa, ingresar la información solicitada.
  5. Insertar boleta especial que se imprimirá con los nombres del Presidente y Fiscales, la hora de apertura y un código QR conteniendo esa misma info, que también se grabará en el chip.

Vistazo rápido: Votando

  1. Presentarse en la mesa, entregar DNI y obtener la boleta:
    El Presidente de Mesa rentendrá una parte del troquel.
Ballot 1
  1. Boleta en mano, dirigirse a la máquina.
  1. Insertar la boleta en el slot:
Inserting ballot 3
  1. Elegir candidato o lista en la pantalla:
Picking candidate 4
  1. Al terminar, seleccionar la opción de votar (imprime la boleta y graba el chip). Retirar la boleta del slot.
Ballot printed 5
  1. Acercar la boleta al lector (o insertarla nuevamente) para verificar el voto, doblarla y volver a la mesa.
  2. El Presidente verificará y removerá la otra parte del troquel. Luego, depositar la boleta en la urna y recuperar el DNI.

Vistazo rápido: Cerrando la mesa

Al término de la votación (18hs):

  1. Iniciar sesión como Presidente.
  2. Insertar la Boleta de Apertura de Mesa.
  3. Seleccionar la opción de Cierre de Mesa, ingresar la hora actual.
  4. Insertar boleta especial de Cierre que tendrá información similar a la de Apertura.

Vistazo rápido: Escrutinio

  1. Inmediatamente luego de cerrar la mesa, se activa el modo escrutinio.
  2. Elegir una boleta de la urna, verificar impresión y que no tenga marcas extrañas.
  3. Acercarla a la máquina para contabilizarla.
  4. Repetir para toda la urna.
  5. Al terminar, insertar boleta especial que será impresa con el resultado del escrutinio. Se pueden imprimir tantas como se necesiten.
  6. Ahora debe insertarse una Boleta de Transimisón de Escrutinio para continuar.

Vistazo rápido: Transmisión del escrutinio

  1. Conectar la máquina a la LAN.
  2. Insertar boleta especial.
  3. ¿¿¿???

No hemos podido obtener información respecto de este punto.

Durante nuestras pruebas, no logramos crear una boleta especial de transmisión, por lo que nunca pudimos completar este procedimiento.

Ahora veamos el HW en profundidad

¿Qué hay dentro de la máquina?

Inside the machine

Más adentro (detrás de la pantalla):

Behind the inside of the machine
JTAG exposed during elections ¡Algunas lo tenían durante las elecciones! Threat level: high

¡Puede usarse para reprogramar el uC!

Más sobre esto en el blog de Javier

Así que, encontramos un subsistema desconocido:

Secret microcontroller

El uC ARM controla la impresora térmica y el lector/escritor RFID.

Su memoria E2PROM interna es suficiente para almacenar
todos los votos emitidos y más.

No sabemos nada, Jon Snow!

Sobre las boletas (BUE)

Ballot
Patente voto electronico

El chip RFID

Marca Modelo Memoria (Bytes) Nota
NXP ICODE SLI SL2ICS20 o SLIX SL2S2002 (ISO 15693) 112 código ID único
Categorías de Tag
Tag Vacío 0x0000 Voto 0x0001 Técnico MSA 0x0002
Presidente de Mesa 0x0003 Escrutinio Finalizado 0x0004 Apertura de Mesa 0x0005
Demostración 0x0006 Transmisión de Escrutinio 0x007F
Tag Virgen 0x0007 (?) Addendum 0x007F (?) Tag desconocido 0xFFFF (?)

Estructura de datos dentro del Tag

K1 T2 T1 L1 C4 C3 C2 C1 D1...Dn W1 W2 W3 W4
Tipo Desc Tamaño (bytes) Endianness Guardado como Valor fijo
K Token 1 - HEX 0x1C
T Categoría Tag 2 little-endian HEX -
L Longitud de Datos 1 - HEX -
C CRC32(Datos) 4 little-endian HEX -
D Datos n - ASCII -
W Write test? 4 - ASCII W_OK

Más info sobre el chip y cómo se almacenan datos: ver punto IV. B del informe

Momento de analizar el SW

Pudimos hacerlo gracias a alguien llamado Prometheus, que publicó el código fuente.

Esto hace que el código sea difícil de leer, auditar, mantener, mejorar...

...pero es ideal para gestar bugs desagradables...

...tales como #multivoto y otros...

Inyección de Comandos

Alfredo Ortega encontró una vulnerabilidad de inyección de comandos en la rutina de generador de códigos QR.

  1. msa/core/clases.py, línea 190: a_qr_str() devuelve una lista de valores separados por comas.
  2. msa/core/clases.py, línea 206: a_qr() envía esos valores a la función vulnerable.
  3. msa/core/qr.py, línea 13: crear_qr() función vulnerable, ejecuta el comando sin sanitizar.

Esta rutina se ejecuta para imprimir el QR de los nombres del Presidente de Mesa y Fiscales.

La pantalla de ingreso de nombres sí sanitiza y tiene un límite de longitud, por lo que explotar esta vulnerabilidad es complicado.

Threat level: medium

Multivoto

Esta vulnerabilidad permite a un atacante añadir varios votos al chip RFID, tantos como soporte la memoria del chip (cerca de 10~12 votos).

No es obligatorio distribuir los votos de forma especial: pueden ser para un único candidato, o divirse entre varios candidatos, en la misma categoría u otra.

Threat level: critical (CVE-2015-6839)

No es posible diferenciar entre una boleta multivoto y una normal a simple vista.

Así que, un atacante con acceso a una impresora térmica y boletas (no es muy difícil de conseguir) podría emitir votos de antemano que son muy difíciles de detectar.

Fue reconocido por la auditoría del Prof. Righetti en su última publicación (pero disminuido de importancia).

Multivotar es fácil, solo hay que construir el string de voto

Este sería un voto normal para “Diputado” (DIP), “Jefe de Gobierno” (JEF) y “Jefe Comunal” (COM) para la CABA: 06CABA.1COM567DIP432JEF123.

Y este sería el string de multivoto: 06CABA.1JEF123JEF123JEF123COM567DIP432 donde el Jefe de Gobierno obtuvo tres votos y el resto de las categorías, uno.

Ver punto IV. B. 1 y Apéndice B. C del informe

Por ejemplo, es factible conseguir algo de info online, en la página de la autoridad electoral:

https://www.eleccionesciudad.gob.ar/simulador/datos/ https://www.eleccionesciudad.gob.ar/simulador/datos/CABA/Candidatos.json

Salteando pantalla de inicio de sesión

Suplantar al Técnico o Presidente de Mesa

Esto es trivial dado que ninguna autenticación es usada para con los datos del chip.

Obtener algunos chips RFID y:

  1. Crear una boleta falsa de Apertura de Mesa.
  2. Crear una boleta de Presidente de Mesa.
  3. Crear una boleta de Técnico.
Home Screen Usar la boleta de Presidente para
abrir la pantalla de inicio de sesión
Log-in Screen Usar la boleta de Apertura de Mesa
para saltear el ingreso de PIN
Logged-in Screen ¡Listo!

Ahora con la boleta de Técnico...

Maintenance screen ...ingresar al modo mantenimiento

Threat level: high

Permite eyectar el DVD y algunos DoS. Otra evidencia de un mal diseño...

Algunas palabras sobre la BUP

voto economia

Infografías por Andres Snitcofsky

bateria

dvds
boleta

BUE significa Boleta Única Electrónica y BUP, Boleta Única de Papel

BUE BUP
Ambos: mejor que el sistema tracional (francés)
~U$D 9 por voto ~U$D 2 por voto
1.84Kg de baterías por máquina * 9k máquinas = 16.5Tn! No requiere baterías
Boletas de difícil reciclaje Facilmente reciblable
1 DVD por máquina... ¿qué hacemos con ellos? ¿Posavasos? No se necesitan DVDs
Escrutinio provisorio más rapido que manual (~30%) Escrutinio provisorio manual, pero podría automatizarse
Es voto electrónico No es voto electrónico

Viejas amenazas actualizadas

Algunos ataques comunes a los sistemas electorales

Explicación mucho más detallada por Javier

No hay mayor ventaja de uno u otro sistema en ningún punto.

(entonces, ¿sin mejoras respecto de un simple papel?)


Y sin embargo, este sistema introduce una nueva forma de comprar votos, que puede ser explotada por los punteros.

Es muy fácil ocultar un teléfono celular entre la ropa con una aplicación para leer el contenido del chip:

Buying votes
eVoting around the world

Referencia

Resumiendo...

Como la Suprema Corte de Alemania dictaminó, de acuerdo a su Constitución:

Cuando se utilizan máquinas de voto electrónico, debe ser posible para el ciudadano verificar los pasos escenciales del proceso electoral y verificar los resultados de forma fiable y sin ningún conocimiento especial de experticia.

Conclusión

Después de todo lo visto:

Concluimos que este sistema no cumple sus objetivos e introduce riesgos al proceso electoral

¿Preguntas?

¡Esperamos que hayan disfrutado de esta presentación!. Pueden realizar cualquier pregunta, sin restricciones.

Planteamos nosotros algunas:

¡Gracias por escuchar!

Queremos también agradecer a todos los que nos apoyaron:

Y a los organizadores de la EKOparty por darnos un lugar para compartir:

¿Más información?


Pueden ver el informe, esta presentación y más en el repo git:

bit.ly/votar-report


Feel free to share! (CC BY-SA v4.0).




Powered by impress.js

Presentadores: Iván & Javier

Colaboradores: Francisco Amato, Enrique Chaparro, Sergio Demian Lerner, Alfredo Ortega, Juliano Rizzo, Fernando Russ, Nicolas Waisman.

Y la gente de internet...

Utiliza las flechas del teclado para avanzar/retroceder