El pasado fin de semana se celebró la
famosa conferencia de seguridad DefCon en su 25ª edición. En esta ocasión, el gobierno norteamericano cedió algunas
máquinas de votación ya retiradas para que los investigadores disfrutaran y a
la vez encontraran agujeros de seguridad para mejorar las nuevas remesas de
máquinas.
Una de las máquinas cedidas fue la
“ExpressPoll 5000”, que utilizaba un antiguo slot PCMCIA para transferir
archivos, además de almacenar distintas bases de datos. Para empezar, hicieron
un pequeño chequeo al sistema para sacar información general, como:
1. Sistema operativo
Windows CE 5.0
2. El software estaba
desarrollado en una aplicación usando .NET.
3. El software utilizaba
WinForms en la interfaz de usuario.
4. El “bootloader” era
propietario.
5. La arquitectura del
procesador era ARM.
6. Contenía un fichero
de base de datos en una tarjeta de memoria.
Tras probar múltiples exploits típicos
para esta versión de Windows sin éxito, los investigadores se centraron en otro
vector de ataque: la tarjeta de memoria.
Al arrancar el sistema con la tarjeta
de memoria insertada, el bootloader comprueba un archivo llamado NK.BIN. Si
está presente, lo carga en memoria RAM sin ningún tipo de comprobación de
autenticidad. En ese momento se puede cambiar el firmware de manera permanente.
En este caso el archivo NK.BIN se
utiliza para actualizaciones de Windows CE 5.0 en dicha máquina, pero un
atacante puede subir y ejecutar cualquier Kernel NT e incluso una imagen con
Linux (aunque esta última posibilidad no fue probada).
Inyección del nuevo
bootloader
De manera similar a la que se cambia
el firmware, también es posible cambiar el bootloader del sistema utilizando el
fichero “EBOOT.BIN”. Se carga sin comprobar ninguna firma de integridad, al
igual que el NK.BIN. Por desgracia esta vez la inyección no funcionó y el
dispositivo quedó inservible.
Sobreescribiendo el
archivo de recursos de la aplicación .NET
Cuando el software de ExpressPoll se
lanza desde el botón “Lanzar” carga desde la tarjeta de memoria el archivo
llamado “ExPoll.resources”. La idea de este archivo es poder definir imágenes,
cadenas, botones, layouts, etc. Está pensado para personalizar la aplicación,
por ejemplo sustituyendo el logotipo de Diebold.
El punto de fallo en el sistema es que
los botones (y potencialmente otros elementos de la interfaz) se pueden
sobreescribir para hacer otras acciones diferentes, como ejecutar un archivo
almacenado en la tarjeta de memoria o ejecutar un comando en Windows CE.
La vulnerabilidad ha sido confirmada
creando un archivo de recursos aleatorio de .NET, nombrándolo ExPoll.resources
y copiándolo a la tarjeta de memoria. Como era de esperar, el sistema mostró un
error, lo que significa que la carga del archivo funcionó. Pero al cargar un
archivo corrupto se copió a memoria y dejando el sistema inservible en el
proceso.
Bases de datos
SQLite3
Pero sin duda una de las
vulnerabilidades que más llamaron la atención es la del archivo de base de
datos llamado “PollData.db3” en la tarjeta de memoria. Esta base de datos
contenía toda la información de las encuestas, votantes… Usando esta
información nos encontramos con varios tipos de posible ataques:
Filtración de información: Un atacante
puede fácilmente extraer la tarjeta de memoria y reemplazarla por una que esté
vacía.
Falsificación de información: Un
atacante podría crear su propia base de datos y, reemplazando la tarjeta,
cambiar los votos por unos falsos.
Puertos USB abiertos
El dispositivo dispone de una serie de
puertos USB donde un atacante puede introducir un dispositivo para lanzar un
ataque. A partir de aquí, las posibilidades quedan abiertas a la imaginación
del lector.
Servidor web por
defecto en WinCE
Windows CE tiene por defecto un
servidor web abierto en el puerto 80 que se podría considerar como un riesgo de
seguridad. Por ahora no han conseguido ningún ataque usando este vector, pero
la investigación sigue abierta.
Los investigadores probaron otra serie
de ataques, como desbordamientos de memoria usando “Bash Bunny” a través de los
puertos USB, o introduciendo una base de datos de SQLite mayor de 1GB, sin que
llegara a funcionar.
Más información:
- Hacking Voting
Machines at DEF CON 25 https://blog.horner.tj/post/hacking-voting-machines-def-con-25