¿Cómo leer de forma segura una dirección de memoria física en Linux?

6

Estoy intentando leer una dirección de memoria física en un dispositivo que ejecuta Linux integrado con nuestra aplicación. El método ampliamente sugerido es usar mmap , convertirlo en una dirección virtual y luego leer el valor.

Ahora me gustaría saber si es un man en el midde es posible reemplazando el biblioteca mmap estándar con una biblioteca mmap espuria? Es decir, ¿puede un pirata informático impedir que lea el valor deseado del hardware subyacente? ¿Hay una forma segura de leer la dirección física?

En otras palabras, estoy buscando leer una dirección física y me gustaría saber que el valor que leo es del hardware real y no un valor falsificado.

    
pregunta Vasu 06.11.2015 - 13:27
fuente

3 respuestas

19

No te preocupes por eso. Si un atacante puede reemplazar las bibliotecas del sistema que está utilizando su aplicación, entonces está totalmente comprometido y no puede confiar en nada en su aplicación. No es una situación contra la que puedas protegerte realmente.

    
respondido por el Neil Smithline 06.11.2015 - 15:53
fuente
7

Mi comprensión de su pregunta es que usted controla la aplicación que accederá al dispositivo pero no al sistema operativo del dispositivo en sí.

En tal caso, no tendrá la capacidad de asegurar que lo que se lee del hardware sea correcto, excepto si esa información es firmado por el hardware y puede verificar la firma en otro lugar (no en el propio dispositivo).

mmap es solo una rutina de una biblioteca y sí, podría reemplazarse y proporcionar todo tipo de funciones además de los proporcionados por mmap , incluidos los maliciosos.

Si confía en el proveedor de su dispositivo, puede tener la posibilidad de verificar si el software incorporado es genuino (a través de algún tipo de suma de comprobación, si el proveedor proporciona dicha capacidad)

    
respondido por el WoJ 06.11.2015 - 14:04
fuente
3

Si desea un acceso seguro al hardware, la única manera de hacerlo es mediante una aplicación de espacio del kernel (generalmente conocida como controlador), que es la forma "correcta" de hacerlo de todos modos.

    
respondido por el Sam 06.11.2015 - 17:53
fuente

Lea otras preguntas en las etiquetas