¿Puede el verificador de suma de comprobación de ROM defender de manera confiable contra la manipulación / piratería no física de una máquina de votación?

1

Cada vez que hay elecciones en los EE. UU., surgen preguntas sobre las vulnerabilidades de seguridad y la piratería / manipulación de las máquinas de votación (estoy seguro de que tampoco es un fenómeno exclusivo de los EE. UU.).

Obviamente, la prevención de hacks a nivel de hardware es un hervidor de peces completamente diferente, pero si asumimos que la máquina está físicamente segura, si no por otra razón, porque hay tantas , en todo EE. UU., por lo que es casi imposible manipular una cantidad lo suficientemente significativa, incluso si solo se cuentan los estados de oscilación ), el siguiente enfoque sería una forma razonablemente confiable de evitar la manipulación / pirateo no físico de una votación. máquina?

  1. Tenga un real ROM (no grabable) que almacena el código de comprobación

  2. El código de verificación verifica que el software de la máquina de votación es válido (presumiblemente, calculando la suma de verificación y verificando la suma de verificación contra valores válidos conocidos, por ejemplo, almacenados en un sitio web de la oficina electoral federal).

    • Use el cifrado de clave pública para garantizar que las sumas de verificación recuperadas se obtengan correctamente (utilizando la clave pública de la oficina federal de elecciones).
  3. Si la suma de comprobación falla, use un hardware separado NO controlado por el resto de los componentes electrónicos en la máquina de votación, al menos para indicar un mal funcionamiento, o incluso bloquear la funcionalidad de votación.

Dado que el código de verificación es 100% en la ROM, se requeriría acceso físico a la máquina (y si está lo suficientemente bien protegido, por ejemplo, dentro de un compartimento soldado, sería más difícil de atornillar).

ACTUALIZACIÓN : para ser claros, las suposiciones aquí son:

  • Cualquier ataque es externo para el proveedor de la máquina y, por lo tanto, el software escrito para él hace exactamente lo que se supone que debe hacer, salvo que se explique adecuadamente por la estupidez .

    No hay troyanos inteligentes en el código, no hay un vector de ataque en el compilador utilizado por el proveedor. El contexto de la pregunta es defenderse contra un ataque de un tercero en una máquina que funciona perfectamente válida .

    Motivos: porque el contexto en el que hice la pregunta fueron los ataques de terceros en la vida real (y no en troyanos). Además, porque de lo contrario, la pregunta se vuelve trivial de responder y poco interesante. Por supuesto, puede sobornar al proveedor con suficientes recursos, duh.

  • También puede suponer que puede confiar en las firmas de suma de comprobación en el sitio web federal, por qué es irrelevante, pero, diablos, es tan simple como tener pasantes de todas las partes interesadas que se encuentran allí todos los días de las elecciones con impresión. de la suma de comprobación original y verificar que el sitio web aún coincida con la impresión.

  • Se plantearon objeciones al supuesto de que la seguridad física a través de la "oscuridad" (o volumen total) es lo suficientemente efectiva porque solo hay muy pocos precintos de swing. Esto es realmente una suposición válida para hacer.

    Motivo: en la política práctica de los EE. UU., dado el margen de error de la encuesta (testigo de las elecciones de 2016), es casi imposible saber cuáles serían los estados / recintos de swing. No importa que en las elecciones de cambio más amplio, como 2008 o 2016 o 1992, la cantidad de máquinas que necesita manipular para afectar el resultado del colegio electoral (en lugar de cambiar ligeramente su margen de voto) requiere TONELADAS de estados / precintos para cambiar. La elección del 2000 con los precintos específicos de la Florida fue un valor atípico, no una regla, e incluso en esa elección, predecir que Florida sería un estado cambiante con esos precintos específicos no fue fácil.

pregunta DVK 25.11.2016 - 18:08
fuente

3 respuestas

1

En tu descripción hay muchas suposiciones y no todas son válidas.

Suponer que la seguridad física es un problema. Los funcionarios electorales tienen acceso a las máquinas y, presumiblemente, tienen las llaves de las entrañas cerradas. La manipulación física oculta siempre es posible. Alguien podría ocultar una Raspberry Pi dentro del gabinete que reemplaza a la máquina principal, y podría responder de la manera correcta. Incluso los funcionarios electorales no sabrían la diferencia.

Suponer que hay seguridad en los números es un gran problema. No puedo encontrar la fuente ahora mismo, pero hace un tiempo leí un artículo en el blog de Schneier que dice que un atacante no tiene que corromper todo un estado de swing, sino solo unos pocos distritos de swing dentro de uno o dos distritos de swing dentro del estado . Predecir qué precintos corromper es totalmente posible. En teoría, el resultado de toda la elección presidencial podría modificarse manipulando solo unas pocas docenas de máquinas de votación en todo el país.

Suponiendo que hay una aplicación que debe verificarse es un problema. La máquina tiene un sistema operativo, una interfaz de usuario, un lector de boletas electorales, un registrador de cuentas, etc. La suma de control debe representar la totalidad de la máquina y todos sus periféricos, no solo un programa.

Está describiendo lo que es similar al proceso de arranque seguro de UEFI. Microsoft, Intel y otros han tenido problemas al intentar que esto sea una manera efectiva de proteger una máquina (una presentación de Blackhat mostró formas de evitarlo). Sin una implementación específica de trabajo y años de análisis y ataques, es imposible pronunciar " X es seguro "; incluso con una implementación operativa, no conozco a nadie que pueda apostar su reputación de seguridad profesional en un pronunciamiento de este tipo para las máquinas de votación.

    
respondido por el John Deters 25.11.2016 - 18:56
fuente
1

La respuesta de John ya hace el siguiente punto de una manera muy concisa, pero pensé que lo ampliaría un poco:

Ha encontrado una manera de verificar que el software que se está ejecutando en su máquina de votación coincida con la firma del software en los archivos de la oficina federal de elecciones. Para ello, utilice un verificador independiente almacenado en la ROM que verifica una firma digital de todo el estado del software de la máquina de votación utilizando la criptografía de clave pública.

Suponiendo que su máquina de votación es físicamente segura, la clave privada utilizada para firmar el software es segura, la criptografía de clave pública utilizada para crear la firma es segura, todo el hardware y el propio programa de verificación está bien y así sucesivamente, ¿esto garantiza que la máquina de votación está bien?

No . Lo único que se garantiza es que usted sabe que hay una copia binaria exacta del software que se ejecuta en la máquina de votación electrónica en el momento en que se realiza la verificación en algún lugar de la oficina electoral federal. Pero aún no sabe si este software está haciendo lo que se supone que debe hacer, y si seguirá haciendo lo que se supone que debe hacer cinco segundos después de que finalice la comprobación.

No sabe si el software contiene una pieza de código inteligente que descarga código malicioso desde algún lugar justo después de que se completa la verificación, y elimina las partes maliciosas antes de la próxima verificación. No sabes si realiza un poco de magia en el conteo final, o ignora cada décima votación "equivocada", o hace alguna otra cosa nefasta. Aún debe confiar en las personas que escribieron el software, las personas que inspeccionaron el software escrito, las personas que firmaron digitalmente el software y muchas otras personas de las que ni siquiera se da cuenta están involucradas.

Ahora, idealmente, el software en una máquina de votación consistiría en solo unos cientos de líneas de código c muy simple (básicamente, si se presiona este botón, aumente un contador aquí, e imprima este recibo en papel aquí ...) lo que podría ser verificado independientemente por una sola persona en una o dos horas, pero de alguna manera creo que es poco probable. En las imágenes de Google de las máquinas de votación de Diebold, veo pantallas con instrucciones gráficas de uso en ellas. Eso ya requiere muchos miles de líneas de código. Piense en el código para cargar estas instrucciones gráficas desde algún tipo de almacenamiento, lo que significa código de E / S, controladores de almacenamiento, analizadores de formato de archivo, controladores de pantalla, rutinas de visualización gráfica, etc. Y eso es solo para mostrar instrucciones gráficas en una pantalla. Todo este código podría contener partes maliciosas, y aún no hemos tocado la parte de votación. Así que el párrafo de John acerca de que no solo es una "aplicación" sino todo un zoológico de ellos, incluido un sistema operativo completo, es muy importante. ¿Quién puede verificar la corrección de todo un sistema operativo?

Eso es un sueño imposible. Un programador capaz responsable de escribir software para la máquina de votación siempre podría ser sobornado o chantajeado para agregar código malicioso en algún rincón oscuro del sistema, y supongo que las posibilidades de que se detecte serían pequeñas. Tendría que haber una enorme cantidad de revisión por pares; cada cambio de código que un programador realizó en cualquier parte del sistema tendría que verificarse de manera independiente, y luego tendría que haber un sistema implementado para asegurarse de que el sistema que se firmó en su oficina federal de elecciones era en realidad el sistema que se revisó.

Este es un problema horriblemente complicado. Por ejemplo, ¿cómo podemos estar seguros de que el código fuente que vemos produce el sistema compilado que firmaremos? ¿Podemos confiar en el compilador que se utiliza para compilar todo el sistema? ¿Qué sucede si alguien inserta código en el compilador que se da cuenta cuando se compila el sistema de votación electrónica e introduce código malicioso en el programa compilado que no está en la fuente?

Por lo tanto, ahora también debe revisar todos los cambios realizados en el compilador.

El compilador probablemente usa varias bibliotecas de código y un gran tiempo de ejecución. También debe revisar todos los cambios realizados en el tiempo de ejecución y las bibliotecas que utiliza el compilador. Por cierto, esto también se aplica a todas las bibliotecas utilizadas por su código de máquina de votación electrónica.

La verificación de la firma digital del software que se ejecuta en una máquina de votación electrónica es una parte muy, muy, muy pequeña de asegurarse de que la máquina de votación electrónica esté bien.

Como Xiong Chiamiov en el comentario a tu pregunta, diría que este no es el camino a seguir. Lo que realmente debe hacer es asegurarse de que cuando un votante vote, pueda descubrir más adelante que su voto influyó en el resultado final de la manera correcta. Esto generalmente sería muy fácil de hacer (entregue a cada votante un recibo y publique la lista de quién votó cómo en un servidor web del gobierno), pero se vuelve realmente difícil debido a las restricciones que nos impone la votación democrática: no podemos publicar el lista porque no la tenemos: las elecciones de los votantes deben permanecer en el anonimato.

    
respondido por el Pascal 25.11.2016 - 22:08
fuente
0

Otra respuesta, luego de actualizar tu pregunta.

Si sabía que el software firmado no contenía partes maliciosas, solo tendría que defenderse contra errores.

Supongamos que su verificador de ROM verificó todo el software del sistema, incluido todo el contenido de la RAM, repetidamente, digamos cada diez minutos en promedio.

En ese caso, incluso si un error permitiera la ejecución remota de código en la máquina de votación, el código malicioso cargado a distancia solo se ejecutaría diez minutos antes de ser detectado.

Por lo tanto, el código tendría que eliminarse y restaurar el estado original del sistema antes de la próxima comprobación, y el código remoto tendría que reinfectar la máquina después de que se completara la comprobación.

No creo que esto sea del todo imposible, pero puedes protegerte haciendo que la verificación se ejecute a intervalos cortos y aleatorios, lo que hace imposible que un ataque sepa cuándo tuvo que restaurar el estado del sistema y en qué momento era seguro reinfectar la máquina.

Sin embargo, estoy viendo un problema con la comprobación. Su sistema solo es seguro si el verificador de ROM comprueba la RAM. Por lo tanto, el verificador tendría que ser lo suficientemente inteligente como para saber qué partes necesitaban permanecer estáticas y qué partes de la RAM se esperaba que cambiaran durante la operación normal.

Por ejemplo, el software casi siempre usa una pila para pasar argumentos, almacenar valores de devolución y direcciones, etc. El verificador de ROM tendría que excluir la pila, por lo que esta podría ser un área en la que podría esconderse el código malicioso. Las CPU admiten pilas no ejecutables, pero esto solo haría imposible ejecutar el código, no almacenarlo.

Lo mismo ocurre con otros segmentos de datos, por ejemplo, aquellos que almacenan datos de votación. Partes de esta memoria podrían usarse para almacenar código malicioso. Nuevamente, los segmentos de datos se pueden proteger de la ejecución de código, al menos en las CPU de Intel.

Sin embargo, si la ejecución del código en las partes dinámicas y no verificadas de la RAM no se deshabilitara, permitiría que el código malicioso se ejecute de manera continua sin que se detecte para el corrector de ROM.

Estoy pensando en cómo el código malicioso se ejecutaría de forma periódica o continua sin tocar ninguno del código original que estaba comprobando el verificador de ROM. Es un problema realmente interesante, pero creo que también podría resolverse. Así que la seguridad de su sistema (ignorando la gran cantidad de suposiciones necesarias para llegar aquí) realmente dependió en gran parte de lo bien que pudiera bloquear las partes no verificables de la RAM.

    
respondido por el Pascal 26.11.2016 - 01:29
fuente

Lea otras preguntas en las etiquetas