Los programadores de computadoras a menudo recitan el mantra de que las instrucciones x86 son totalmente opacas: Intel nos dice que están haciendo algo, pero no hay esperanza de que alguien pueda verificar lo que está sucediendo, por lo que si la NSA les dice que bloqueen sus RNG, entonces no podemos realmente hacer algo al respecto.
Bueno, creo que los programadores de computadoras no pueden hacer nada al respecto. Pero, ¿cómo lo atacaría un ingeniero eléctrico? ¿Existen técnicas que un ingeniero eléctrico podría usar para verificar que un circuito realmente realiza las operaciones descritas en su especificación y no otras operaciones?
cpu
reverse-engineering
usuario14717
fuente
fuente
Respuestas:
El mejor artículo que he leído sobre el tema es "Troyanos de hardware de nivel dopante sigiloso" (Becker et al) de 2014.
El documento describe cómo se realiza el cambio, cómo es extremadamente difícil de detectar al inspeccionar el silicio, las técnicas para ocultarlo de la prueba de producción y cómo se puede hacer para reducir la seguridad de un RNG criptográfico de hardware o para filtrar información clave a través de un canal lateral de riel de potencia de una implementación de AES.
Los canales laterales son un campo emergente de interés. Intel ha estado plagado de problemas relacionados con la ejecución especulativa que filtra información de la memoria que ni siquiera estaba siendo utilizada por el programa. ¿Podría haber sido un defecto de diseño deliberado? Es casi imposible saberlo.
fuente
¿Existen técnicas que un ingeniero eléctrico podría usar para verificar que un circuito realmente realiza las operaciones descritas en su especificación y no otras operaciones?
En teoría, sí, creo que esto es posible. Sin embargo, para una CPU compleja tomará mucho tiempo y dinero. Además, si no conoce y comprende completamente el diseño, no podrá juzgar si alguna actividad es "legítima" o no.
Una CPU es "solo" un circuito digital complejo que consta de muchas celdas lógicas.
Es posible realizar ingeniería inversa del chip y reconstruir el diseño observando las conexiones metálicas. Puede haber muchas de estas capas de conexión, como hasta 8 capas o más.
Necesitará expertos en el campo para reconocer las celdas lógicas y luego tal vez algún software pueda descubrir cómo están todos conectados para que pueda reconstruir la lista de redes.
Una vez que tenga la lista de redes, "conocerá" el diseño. ¡Eso no significa que ahora también sepa cómo funciona!
Podría ser que una determinada función active 2 secciones del diseño mientras cree que una debería ser suficiente, por lo que sospecha que está ocurriendo alguna actividad sospechosa. Sin embargo, el diseño hace algún truco inteligente que no conoce para acelerar las operaciones.
Sin conocer y comprender el diseño, cualquier conclusión que extraiga podría estar equivocada. Solo los ingenieros que diseñaron la CPU tienen toda la información de diseño y tienen la mejor oportunidad de ser capaces de descubrir o adivinar qué sucede realmente o qué debería ocurrir en una CPU.
fuente
No hay buenas maneras de encontrar puertas traseras, una forma de encontrar una puerta trasera de hardware sería probar combinaciones o instrucciones no documentadas. Aquí hay una buena charla de alguien que realmente hace esto y realiza auditorías en hardware x86 . Esto se puede hacer sin romper el chip. Un problema con Intel (no estoy seguro acerca de otros chips) es que en realidad tiene un procesador con Linux ejecutándose, por lo que también hay software ejecutándose en algunos procesadores, y supuestamente no tiene acceso a eso.
Hay formas de probar el uso del hardware para probar la funcionalidad. Dado que x86 tiene una parte no documentada de su conjunto de instrucciones, sería inusual introducir puertas traseras en las instrucciones normales porque introduciría la posibilidad de errores (como si tuviera una puerta trasera en una instrucción add o mult), por lo que es el primer lugar para buscar estaría en las instrucciones indocumentadas.
Si necesita probar la funcionalidad de las instrucciones regulares, puede observar el tiempo que lleva ejecutar las instrucciones, observe la cantidad de energía que se necesita para ejecutar las instrucciones para ver si hay diferencias con respecto a lo que esperaría.
fuente
La única forma sería eliminar el chip capa por capa y registrar cada transistor con un microscopio electrónico, y luego ingresarlo en algún tipo de programa de simulación y luego verlo funcionar.
Este es esencialmente el problema de la caja negra en el que intenta reconstruir las partes internas de las entradas y salidas de medición. Una vez que la complejidad de los elementos internos, o el número de E / S, va más allá de lo trivial, hay una explosión combinatoria donde el número de posibles estados internos se vuelve astronómico. Donde se arrojan números como Googol .
fuente
Probar que la CPU no está haciendo algo astuto es extraordinariamente difícil. El ejemplo clásico es una máquina de votación. Si tiene un solo elemento que toma una copia de su voto y luego se lo escapa a algún dictador, podría ser vida o muerte para usted en algunos lugares. Y demostrar que no hay un solo tipo de ese tipo entre los miles de millones es bastante difícil.
Puede pensar en aislar el chip físicamente, por lo que es práctico ver que no hay conexiones de cables inadecuadas. Y poniendo otro chip, o más de un chip en serie (de diferentes fuentes) en su conexión de red que garantiza que solo se conecta al lugar correcto. Luego enciéndalo después de que haya emitido su voto. Y esperando que no haya trozos no volátiles allí. O furtivas conexiones inalámbricas. ¿Pero confiarías en tu vida?
fuente
La transmisión de cualquier información a la NSA requerirá acceso a la red, por lo que será bastante fácil detectar dicha puerta trasera ejecutando un sistema operativo con servicios de red deshabilitados y verificando el tráfico en las interfaces de red. Para un sistema operativo de código abierto, incluso es posible ejecutarlo con soporte de red completo y detectar conexiones falsas por su IP de destino, que no coincidirá con ninguna dirección a la que el sistema operativo pueda acceder legítimamente.
Una puerta trasera basada en RNG sin transmisión de datos tendrá una utilidad muy limitada. A menos que el CPU RNG sea la única fuente de entropía, las posibilidades de que dicha puerta trasera proporcione alguna ventaja al atacante sin ser obvia al mismo tiempo son prácticamente nulas . A menos que insista en que la tetera de Russel está ahí afuera a pesar de no tener una buena razón para existir, debería poder aplicar el mismo argumento a las puertas traseras RNG de hardware.
fuente
rdrand
ordseed
como Intel sugirió: como la única fuente de entropía para una semilla PRNG. Linux (el kernel) decidió no hacer eso/dev/random
, pero la corriente de glibc / libstdc ++std::random_device
sí se usa solordrand
si está disponible en tiempo de ejecución en lugar de abrirse/dev/random
. Ingrese a la llamada estándar de la biblioteca con Godboltstd::random_device
no es un RNG criptográficamente fuerte. El estándar C ++ le permite implementarlo con un PRNG, devolviendo efectivamente la misma secuencia cada vez , por lo que es bastante obvio que nadie debería usarlo para el cifrado.