¿Existen técnicas que un ingeniero eléctrico podría usar para verificar que un circuito realmente realiza las operaciones descritas en sus especificaciones y ninguna otra operación?
En teoría, sí, creo que es posible. Sin embargo, para una CPU compleja llevará mucho tiempo y dinero. Además, si no conoces y comprendes completamente el diseño, no podrás juzgar si alguna actividad es "legítima" o no.
Una CPU es "simplemente" un circuito digital complejo que consta de muchas celdas lógicas.
Es posible ingeniería inversa el 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ás expertos en el campo para reconocer las celdas lógicas y luego tal vez algún software pueda averiguar cómo están todas conectadas para que puedas reconstruir el netlist.
Una vez que tengas el netlist, "conoces" el diseño. ¡Eso no significa que ahora también sepas cómo funciona!
Puede ser que una cierta función active 2 secciones del diseño mientras piensas que una debería ser suficiente, por lo que luego sospechas que está ocurriendo alguna actividad sospechosa. Sin embargo, el diseño realiza algún truco inteligente del que no sabes para acelerar las operaciones.
Sin conocer y comprender el diseño, cualquier conclusión que saques aún 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 poder descifrar o adivinar lo que realmente sucede o debería suceder en una CPU.
5 votos
Tendrías que hacer algo así como someter el dado a un análisis por rayos X y examinar todo para ver qué está haciendo en realidad. Básicamente hacer ingeniería inversa en el chip y tener en cuenta la función de cada circuito. Totalmente imposible.
7 votos
Ningún circuito eléctrico funciona exactamente según las especificaciones debido al ruido y a la ligera posibilidad de que un día haya una falla lo suficientemente "grande".
1 votos
Hay técnicas y herramientas para revertir chips - rayos X como se dijo, microscopios y demás. Los microprocesadores modernos son bestias extremadamente complejas, por lo que dicho trabajo será extremadamente difícil, pero posible.
1 votos
Esto es muy parecido a tratar de reconstruir el código fuente de Windows a partir de su imagen del kernel. Posible en teoría, cierto, pero demasiado esfuerzo...
5 votos
Divertida info: Esto está vagamente relacionado con el demonio de Laplace.
1 votos
Como una vista opuesta fascinante: Las empresas dedican mucho esfuerzo en fabricar CPUs a prueba de manipulaciones. Realizarán cosas divertidas para hacer que un chip se borre a sí mismo o incluso se destruya si intentas abrirlo (realmente útil si tienes tus claves en una tarjeta inteligente). El hecho de que se tomen este esfuerzo sugiere que es posible obtener información directamente de la CPU. Como otra nota interesante, en un mundo puramente de software, considera el famoso hack de inicio de sesión de Ken Thompson
0 votos
Solo es imposible si no tienes un diseño completo para la CPU, lo cual no tienes a menos que trabajes en el equipo de CPU en Intel.
6 votos
Va a ser más fácil robar documentos internos de la base de datos de contenido de Intel que hacer ingeniería inversa incluso en un solo CPU moderno y complejo de Intel.
2 votos
En principio, un ingeniero de silicio malvado podría idear una vía que solo se active después de muchos años debido a la migración iónica en los chips de silicio envejecidos. Esto podría permitir una característica o un cambio en el comportamiento que antes era imposible de observar. Aunque no tengas pesadillas :D
0 votos
Él comenzaría obteniendo un título de Ingeniería Eléctrica. Lo siento, pero es evidente que no tienes ni la más remota idea de cómo funcionan las CPUs, y simplemente estás repitiendo historias de terror. Desde el principio, las CPUs son demasiado primitivas para ocultar algo tan complejo como una puerta trasera criptográfica (que no podría ser detectada mediante pruebas). Eso estaría oculto en el software, que es muy fácil de ingeniería inversa si lo intentas. Para empezar, usarías un sistema operativo de código abierto, idealmente uno que hayas compilado tú mismo, en lugar de una caja de Windows de código cerrado... Hay mucho que puedes hacer; ¿por qué no intentarlo...
15 votos
@Harper tu actitud es poco constructiva, y tu afirmación de que una puerta trasera no puede ocultarse en el hardware no es cierta.
3 votos
@Harper: Las CPU modernas x86 no son simples y tienen mucho firmware, no solo hardware de función fija. Algunas instrucciones complejas están microcodificadas. Por ejemplo, Intel pudo agregar funcionalidad totalmente nueva a CPUs existentes mediante la liberación de una actualización de microcódigo para agregar características de mitigación contra Spectre. La instrucción Escribir-modelo-específico-registro (
wrmsr
) es básicamente un gancho que permite que el código x86 "llame" a un nuevo microcódigo arbitrario con el número de MSR como un "número de llamada". La mitigación para vulnerabilidades RIDL incluso modificó una instrucción de microcódigo poco utilizada no privilegiada (verw
) para añadirle semántica.3 votos
En cuanto a las puertas traseras en general, fácilmente podrías imaginar una actualización de microcódigo que "escuchara" una secuencia de instrucciones
verw
overr
con operandos específicos, y colocara la CPU en modo de gestión del sistema (anillo -1, por encima incluso del privilegio normal del kernel o hipervisor) aún ejecutando el código que "llamó" con el código correcto. La explotación definitiva de escalada de privilegios locales en cualquier sistema donde se pueda ejecutar código máquina en el espacio de usuario. La idea de la NSA de colar algo así en el microcódigo de Intel no está más allá del reino de lo posible.2 votos
@usuario14717: Las instrucciones x86 son totalmente opacas no del todo. Para muchas de las más simples, existen contadores de rendimiento que nos permiten descubrir cómo funcionan. p. ej.
xchg
son 3 uops en CPUs de Intel y podemos realizar algunos experimentos para descubrir que la dirección dst -> src tiene una latencia de 1c y la otra dirección tiene una latencia de 2c, presumiblemente con un uopmov
a un registro reservado para uso interno exclusivo por microcódigo. Sabemos (a través de patentes de Intel) bastante sobre los aspectos internos. Sin embargo, no podemos confiar verdaderamente en cosas que no podemos confirmar mediante experimentos.0 votos
Ten en cuenta que en la mayoría de los casos es incluso algo imposible decir qué es lo que realmente hace el software. Incluso el software de código abierto puede contener "bugs" pasados por alto, e incluso se ha sugerido el escenario de un compilador malicioso insertando código malicioso en ejecutables compilados a partir de un código fuente perfectamente seguro. Si bien el comportamiento del software es probablemente mucho más fácil de verificar que el hardware, aún no se hace con frecuencia. ¿Por qué? Mala relación coste/riesgo.