Tabla de contenido
Conclusiones clave
- La Casa Blanca insta al uso de lenguajes seguros para la memoria como Rust para reducir las vulnerabilidades de seguridad en el código.
- Los lenguajes más antiguos de nivel inferior, como C, plantean riesgos de que el código tenga errores y provoque incidentes de seguridad.
- Los lenguajes seguros para la memoria como Rust ofrecen funciones de administración automática de memoria y prevención de errores.
Una agencia del gobierno de EE. UU. ha decretado que los programadores deberían favorecer los lenguajes seguros para la memoria como Rust y Java. Pero, ¿por qué son mejores? ¿Esto realmente importa?
¿Qué dice la Casa Blanca?
En una declaración del 26 de febrero, la Oficina del Director Cibernético Nacional (ONCD) de la Casa Blanca instó a los desarrolladores de software a adoptar lenguajes de programación seguros para la memoria, como Rust.
Nosotros, como nación, tenemos la capacidad (y la responsabilidad) de reducir la superficie de ataque en el ciberespacio y evitar que clases enteras de errores de seguridad entren en el ecosistema digital, pero eso significa que debemos abordar el difícil problema de pasar a lenguajes de programación seguros para la memoria. .
¿Por qué es importante?
La ONCD, creada en 2021, depende directamente del presidente y le asesora sobre ciberseguridad y cuestiones relacionadas. Es probable que la política estadounidense tenga un efecto dominó en todo el mundo de la tecnología.
Muchas de las peores vulnerabilidades de seguridad de la historia tenían como causa principal problemas con la seguridad de la memoria. Los lenguajes más antiguos de nivel inferior dan a los programadores mucho poder, pero esto aumenta el riesgo de que el código con errores cause graves repercusiones.
De todos modos, el uso de lenguajes seguros para la memoria, como Rust, Python y JavaScript, ha ido en aumento durante mucho tiempo. Es probable que la ONCD haga este anuncio porque los lenguajes menos seguros como C existen desde hace tanto tiempo que su código heredado ahora está arraigado en la infraestructura y en gran parte del software que utilizamos a diario.
¿Qué aspecto tiene un lenguaje inseguro?
El código inseguro no siempre parece aterrador o incluso complicado. Tome este ejemplo de un programa C simple:
#include <stdio.h>int main (void) {
int arr[3] = { 0, 0, 0 };
printf("%d\n", arr[3]);
return 0;
}
Este es un ejemplo clásico de un error que puede provocar un ataque de desbordamiento del búfer. El programador ha olvidado que las matrices en C (y en la mayoría de los otros lenguajes) tienen índice cero, lo que significa que el primer elemento está en arr.[0]etc. Intentando acceder a arr[3] Por lo tanto, es un error, pero C permitirá:
El valor al llegar[3] es una dirección de memoria válida, como cualquier otra, simplemente no pertenece a la matriz. Cualquier valor podría almacenarse allí, y las consecuencias de acceder a él o escribir en él pueden variar desde un fallo del programa hasta un incidente de seguridad catastrófico. Muchos piratas informáticos a lo largo de la historia han aprovechado estos errores.
Aunque el compilador de C todavía genera una advertencia, también genera un ejecutable. Un programador es libre de ignorar las advertencias e incluso ocultarlas usando indicadores del compilador. C aún te permitirá dispararte en el pie, mientras que idiomas como Rust no te ofrecerán ningún arma.
¿Cómo se ve el código de memoria segura?
En un lenguaje seguro para la memoria como Rust, el mismo problema simplemente no existe. Aquí está el mismo programa, en Rust:
fn main() {
let arr: [u32; 5] = [0;3];
println!("{}", arr[3]);
}
Si bien este código es sintácticamente válido, Rust no podrá compilarlo:
El compilador explica el problema y se niega a producir un ejecutable. Rust simplemente no te permitirá ejecutar este código.
Rust tiene muchas más características además de esta, para ayudarte a protegerte. Incluye funciones como punteros inteligentes para manejar la administración de la memoria automáticamente y evitar la desreferenciación del puntero nulo.
¿Debería cambiar de idioma?
Cada lenguaje de programación tiene un propósito, por lo que debes tener cuidado con los consejos para evitarlos por completo, incluso si provienen del presidente. Si bien puedes optar por especializarte en un idioma en particular, siempre es útil aprender una variedad para ampliar tus opciones.
La seguridad de la memoria es una característica de tantos lenguajes modernos que es posible que estés familiarizado con al menos uno. C tiene sus usos, pero existen opciones más seguras que causarán menos contratiempos. En particular, si buscas un lenguaje eficiente que tenga buenas redes de seguridad, Rust es imprescindible.