Ayude a traducir este artículo Confusión de tipos de Java y ataques de fallos
Las máquinas virtuales que ejecutan lenguajes de alto nivel se encuentran ahora en pequeños sistemas integrados consolidados. Aprendimos sobre las propiedades de la Máquina Virtual Java y que el lenguaje de la Máquina Virtual Java está sujeto a ciertas deficiencias. Los ataques de fallas enfocados pueden imponer el caos. Las máquinas virtuales son la defensa que Java propone como contramedida.
Recientemente, las máquinas virtuales de lenguaje de alto nivel (HLL VM) se han implementado en pequeños dispositivos integrados, concretamente teléfonos móviles, tarjetas inteligentes e incluso redes de sensores. El beneficio de las máquinas virtuales HLL es la alta densidad de código traducido, lo que hace que mover el código sea económico a través de líneas de comunicación. El uso de lenguajes de alto nivel también apunta a una programabilidad más sencilla y ciclos de gestión de aplicaciones más cortos que en el desarrollo tradicional de aplicaciones integradas. Por otro lado, las máquinas virtuales siempre introducen una degradación del rendimiento en comparación con la ejecución de código nativo.
Algunos dispositivos integrados, especialmente las tarjetas inteligentes, están diseñados para almacenar y procesar datos de forma segura. Incluso puede ser necesario que la presencia de tarjetas inteligentes esté justificada únicamente por su capacidad para... guardar secretos... Esto implica que la máquina virtual HLL del dispositivo también debe ser segura. El producto en su conjunto, hardware y software, debe estar diseñado para ser resistente a manipulaciones. Java es el mismo lenguaje en el sistema HLL VM. Generalmente se considera un lenguaje seguro porque está fuertemente tipado, impone la verificación de límites para matrices, no usa puntos o aritmética de puntos, las variables se inicializan antes de usarse y el lenguaje contiene modificadores de paso para clases, métodos y campos. Naturalmente, quienes escriben código Java, llamado bytecode (y llamado Java Virtual Machine Language, JVML), deben guardar estas propiedades. Por lo tanto, se comprueba la corrección del código de bytes antes de ejecutarlo. Esta verificación la realiza el verificador de código de bytes.
Sin embargo, la prueba introduce un período de tiempo para verificar situaciones de uso (TOCTOU), porque el código se verifica mucho antes de usarse. Resulta que el proceso requiere mucha memoria, lo que puede provocar debilidades. En sistemas pequeños, no es necesariamente posible ejecutar un probador en el dispositivo, pero la verificación debe realizarse en el dispositivo. Por lo tanto, existe un límite significativo, en espacio y tiempo, entre la verificación y el uso del código.
Java supera muchos problemas de seguridad tradicionales. Los programas Java no pueden acceder directamente al hardware ni direccionar memoria arbitraria. El programa se ejecuta en una máquina virtual Java C de hardware real. El programa también se ejecuta en un entorno restringido llamado sandbox. La seguridad de tipos es una piedra angular de la seguridad del lenguaje Java y los validadores son defensores clave en primera línea. Si esta defensa se rompe (es decir, el código no se verifica o el código se puede cambiar después de la verificación), entonces se puede romper la seguridad. Además, las deficiencias en la implementación del lenguaje pueden abrir oportunidades para los atacantes.