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.