Seguridad del software V.S Seguridad del hardware

8

En teoría, las aplicaciones de software perfectas son posibles, pero en la vida real, no existen. Cuando los atacantes conocen el software, pueden enviar cargas útiles para explotar vulnerabilidades y ejecutar cualquier código arbitrario que deseen de forma remota. Por otro lado, tenemos HSM (Módulos de seguridad de hardware), por ejemplo, programamos tarjetas inteligentes para ejecutar códigos básicos (por ejemplo, algoritmos criptográficos) que están libres de ataques sin acceso físico al chip. Preguntas:

  • ¿Es posible utilizar un sistema basado en chip, tan barato como raspberrypi , y hacer que ejecute códigos complejos? puede ser un navegador básico - ¿para revisar correos electrónicos sin preocuparse por códigos maliciosos?
  • ¿Es posible crear un compilador que aleatorice códigos, tal vez un navegador en netbsd, para ejecutar funciones de muchas maneras diferentes para cada usuario, de modo que cuando los atacantes descubren vulnerabilidades en el código público, no puedan explotar a los usuarios que tienen versiones compiladas al azar? ?
pregunta vulner 24.03.2013 - 20:45
fuente

2 respuestas

9

Módulos de seguridad de hardware

Ejecutar el código en un chip protegido físicamente como un HSM o una tarjeta inteligente no se trata de proteger de errores de software. Si hay un error de software en un HSM, puede ser explotado como cualquier servidor web, computadora portátil, teléfono inteligente, lo que sea. La diferencia entre un HSM y una PC es que con el acceso físico a una PC, simplemente puede iniciar desde una memoria USB o cambiar el disco. Con el acceso físico al exterior de un HSM, todavía tiene que ingresar y los HSM están diseñados para autodestruirse cuando hace un intento serio de abrirlos.

Ejecutando un navegador en una Raspberry Pi

Una PC es un "sistema basado en chip" tanto como una Raspberry Pi. No hay una diferencia fundamental entre ellos: una Raspberry Pi no es de alguna manera "más segura" que una PC.

Más personas usan PC, por lo que las PC son un objetivo más valioso para explotar, por lo que más personas intentan explotar PC. Las PC también tienen una pesada carga de compatibilidad histórica y una gran variedad de software, lo que los pone en mayor riesgo. Pero si las personas ejecutaran rutinariamente navegadores en Pis en lugar de Pentiums, habría más exploits para Pis.

Mover el navegador a una máquina diferente lo aísla. ¿Pero qué ganas? Una gran cantidad de hazañas se entregan a través del navegador. A menudo, el propio navegador es el objetivo. Tiene acceso a la red, por lo que es un objetivo valioso para propagar la infección a otras máquinas. Es la forma en que el usuario interactúa con muchas cosas, por lo que es un objetivo primordial para los ladrones y estafadores. No importa dónde coloques tu navegador, si está infectado, has perdido.

Código de aleatorización

Aleatorizar el código de alguna manera es una técnica de defensa, pero solo hace que los exploits sean más difíciles, no los hace imposibles.

Por ejemplo, algunos sistemas operativos modernos practican aleatorización del diseño del espacio de direcciones : cada vez que se inicia un programa, se carga en una Dirección aleatoria diferente. Esto significa que hay cosas que no puede hacer en un exploit, como referirse directamente a la dirección de un fragmento de código en el programa original. No hace que los exploits sean imposibles: tiene que haber una manera en que el programa pueda encontrar sus propias piezas (por ejemplo, un pequeño salto relativo seguirá funcionando bien), y si alguna pieza es difícil de encontrar, el exploit puede buscarla. (Es un problema común incluso sin ASLR porque a menudo el código de explotación se cargará en una dirección impredecible).

El código de asignación aleatoria en el compilador no te compraría mucho y es caro. Todas estas formas de aleatorización hacen que la depuración sea más difícil. Si aleatoriza antes de distribuir el programa, debe administrar la distribución y el mantenimiento (actualizaciones) de todas estas diferentes versiones. Y, desde el punto de vista de la seguridad, el beneficio es mínimo porque, al final, el programa todavía tiene que hacer lo mismo.

Cómo ayuda el hardware con la seguridad

Para los sistemas de ejecución (no los HSM y similares), la función del hardware es hacer cumplir el aislamiento entre los componentes. Es un componente de hardware, el MMU , que hace imposible que un programa acceda directamente a la memoria de otro programa. El diseño de la CPU también hace imposible que los programas ordinarios accedan directamente a los periféricos de hardware, para eso tienen que pasar por las interfaces de los sistemas operativos. El hardware debe usarse correctamente: depende del sistema operativo configurar las tablas MMU correctamente, etc.

No puedes poner demasiada inteligencia en el hardware. Cuanto más haga, más riesgo habrá de que haya un error en su diseño. Los errores de hardware son bastante difíciles de solucionar. Por lo tanto, el hardware proporciona algunas capacidades básicas, y la complejidad se maneja en el software tanto como sea posible.

    
respondido por el Gilles 24.03.2013 - 21:15
fuente
2

@vulner, creo que indirectamente intentas preguntar si una arquitectura de Harvard es inherentemente más segura que una arquitectura de Von Neuman. (Una arquitectura de Harvard tiene una memoria separada para instrucciones y datos, mientras que una máquina Von Neuman usa memoria compartida para ambos propósitos).

Un ataque en el que una máquina de Harvard podría estar más segura es en un exceso de búfer. Incluso si la aplicación comete un error y sobrescribe la memoria de la aplicación debido a una saturación del búfer, es posible que los punteros de la aplicación no tengan acceso físico a la memoria de la pila y, por lo tanto, no sería posible realizar un ataque clásico de aplastamiento de pila.

Pero ese no es el único problema de seguridad que encontrarás en la web. El problema con la seguridad de un navegador no está solo en la arquitectura de la máquina. El problema es que la aplicación de navegación procesa información no confiable que se interpreta como datos e instrucciones, y que el navegador puede retener estado .

Considere una secuencia de comandos ( no confiable> fuente) que podría publicar aquí en stackexchange que coloque lo que parece un anuncio falso para su banco en la columna de la derecha. Su navegador no tiene idea de si son datos legítimos o no, pero si ingresa el nombre de usuario y la contraseña de su banco, lo descubrirá rápidamente.

O considere un javascript (instrucciones interpretadas ) que roba información de cookies. Si ejecuto un punto de acceso WiFi malicioso, podría inyectar un javascript en la parte inferior de la página de inicio de www.google.com que me envía todos los datos que publicas y cada cookie que recibes. Podría modificar el tiempo de la memoria caché para decir "mantener esta página y la secuencia de comandos en la memoria caché durante un año". (almacenado estado ) Y el script podría agregarse al final de cada página nueva que visite a través de esa página de Google en caché. Solo el borrado de la memoria caché del navegador lo eliminaría.

Tu navegador basado en chip podría detener un tipo específico de ataque, pero darías una falsa sensación de seguridad debido a todos los otros ataques que hay.

    
respondido por el John Deters 25.03.2013 - 19:44
fuente

Lea otras preguntas en las etiquetas