¿Puede un lenguaje de programación reducir las vulnerabilidades?



Rust ofrece un lenguaje de programación más seguro, pero la adopción sigue siendo un problema a pesar de los recientes signos de creciente popularidad.

Cuando Microsoft quiso reescribir un agente de procesamiento de purple crítico para la seguridad para eliminar las vulnerabilidades de seguridad de la memoria que causaban dolores de cabeza recurrentes para el Centro de Respuesta de Seguridad de Microsoft (MSRC), la compañía asignó a un pasante y le dijo que reescribiera el código en Rust.

Rust, un lenguaje de programación que ha reclamado el título de «más querido» entre los desarrolladores durante cinco años seguidos, podría cambiar el panorama de la vulnerabilidad al eliminar prácticamente ciertos tipos de errores de seguridad de la memoria. El reclamo de fama del lenguaje es que proporciona la velocidad y el handle de C y C ++, al tiempo que ofrece garantías de seguridad y protección de otros lenguajes, como Go y Python. Casi el 70% de las vulnerabilidades que los procesos de MSRC son clasificados como problemas de seguridad de la memoria, por lo que eliminar la clase de vulnerabilidades es fundamental.

Al discutir su preferencia recién descubierta por Rust, Alexander Clarke, el pasante de software de MSRC, declarado en una publicación de blog site que, si bien puede ser más fácil escribir un programa que se compilará en C ++, es más possible que el programa resultante tenga errores y vulnerabilidades.

«Los mensajes de error del compilador (Rust) son justamente famosos por lo útiles que son», dice. «A través de los mensajes de mistake, Rust refuerza los conceptos de programación segura diciéndole exactamente por qué el código no es correcto, al tiempo que brinda posibles sugerencias sobre cómo solucionarlo».

Más de una década después de que Mozilla adoptara y comenzara a reescribir el código para su navegador Firefox usando Rust, el idioma puede estar listo para despegar. Si bien la adopción sigue siendo anémica, solo el 5,1% de los desarrolladores utilizan el lenguaje Rust, según el «Encuesta para desarrolladores de StackOverflow 2020«: Varias grandes empresas se han comprometido a utilizar Rust en proyectos de desarrollo específicos.

La Fundación Mozilla envió código desarrollado utilizando el lenguaje de su navegador Firefox. a partir de 2016. En 2019, Microsoft manifestó su intención adoptar Rust más ampliamente para escribir software package de sistema en Home windows. Y en febrero, Mozilla escindió el proyecto para ser administrado por nueva Fundación Rust, con patrocinadores fundadores Microsoft, Google, Amazon y Huawei.

¿Por qué la popularidad cada vez mayor? No se trata solo de velocidad y seguridad, al menos no para los desarrolladores, dice Ashley Williams, directora ejecutiva interina de la Fundación Rust.

«Mi respuesta en broma es que tenemos una mascota animal», se ríe. «En realidad, cuando la gente habla de amar a Rust, existe el lenguaje y el compilador, pero también la noción de que la comunidad debe ser acogedora y la administración de paquetes debe ser de primera clase. Hay todos estos valores que la gente aprecia».

Para las empresas, la decisión se reduce a las capacidades que Rust no permite. Cuando el lenguaje se usa correctamente, el compilador alerta y se niega a compilar. ciertos patrones de codificación que conducen a desbordamientos de búfer, vulnerabilidades de uso después de la liberación, problemas de memoria de doble liberación y faltas de puntero nulo.

«Haces un pacto de sangre con el compilador», dice Williams. «Escribes tu código de una manera específica para que el compilador sepa que tu código es correcto».

Para Microsoft, los errores que Rust puede evitar representan la mayoría de las vulnerabilidades para las que la empresa asigna identificadores de vulnerabilidades y exposiciones comunes (CVE). El uso del lenguaje de programación para construir los componentes centrales del sistema puede ayudar a reducir una fuente importante de vulnerabilidades, dijo Ryan Levick, principal promotor de desarrolladores de nube en Microsoft. en una publicación de blog site.

«Creemos que Rust cambia el juego cuando se trata de escribir program de sistemas seguros», dijo. «Rust proporciona el rendimiento y el handle necesarios para escribir sistemas de bajo nivel, al tiempo que permite a los desarrolladores de software program escribir programas sólidos y seguros».

Sin embargo, los lenguajes de programación que prometen seguridad adicional no siempre lo han hecho.

En enero de 1996, Sunshine Microsystems anunció Java 1.. El lenguaje contaba con un código portátil, como en «escribir una vez, ejecutar en cualquier lugar», pero Sunshine también promocionó una serie de atributos de seguridad, como la administración de memoria automatizada, es decir, la «recolección de basura», así como la seguridad de tipos y la capacidad de aislar los subprogramas de la modificación de los recursos del sistema.

Avance rápido hasta hoy. Con una adopción de alrededor del 40%, Java es el quinto lenguaje más utilizado, detrás de JavaScript, HTML / CSS, SQL y Python, según StackOverflow. encuesta. Sin embargo, los programas Java representaron el 15% de las más de 6.000 vulnerabilidades encontradas en componentes de código abierto en 2019, detrás de C, que representó el 30%, y PHP, que representó el 27%, según «El estado de la seguridad de código abierto de 2020«Informe publicado por la firma de seguridad de application WhiteSource.

Java muestra que los desarrolladores, en nombre de la eficiencia, a menudo no utilizan las funciones de seguridad y, en cambio, continúan creando código inseguro.

Rust tiene más opiniones en su enfoque que Java, pero es possible que el lenguaje no evite la posibilidad de que los desarrolladores socaven la seguridad. Si bien Rust brinda seguridad a la memoria, también permite una forma de evitarlo: la palabra clave «UNSAFE». El uso de la palabra clave es una forma para que un desarrollador anule el compilador y evite que el compilador verifique un bloque de código, aparentemente porque el desarrollador afirma que el código es seguro.

Muchos entusiastas de Rust – «Rustáceos», como se les llama – argumentan que el uso excesivo de la palabra clave socava el modelo de Rust. Si bien el debate está matizado, Williams comprende el punto.

«Hay personas que usan el bloque INSEGURO de una manera que no es segura», dice. «Si pones algo en el bloque inseguro, el compilador no lo comprobará, y si te equivocas, podrías introducir un mistake de memoria».

Sin embargo, señala, incluso si se united states la capacidad para anular solo el compilador correctamente, es possible que las vulnerabilidades se introduzcan en los programas de los desarrolladores y, debido a que los investigadores de seguridad y los piratas informáticos tienden a encontrar los problemas que los desarrolladores dejan atrás, esas vulnerabilidades se encontrarán. Caso en cuestión: el sitio de seguridad centrado en Rust RustSec enumera más de 250 vulnerabilidades en los paquetes de Rust – o «cajas» – y el idioma.

«El panorama de la vulnerabilidad no es absoluto, por lo que siempre hay nuevas áreas de vulnerabilidad», dice Williams. «Algunos idiomas pueden ser más seguros que otros, pero … no existe tal cosa como un sistema completamente seguro, especialmente si su idioma de destino tiene muchos piratas informáticos examinándolo».

Periodista tecnológico veterano de más de 20 años. Ex ingeniero de investigación. Escrito para más de dos docenas de publicaciones, incluidas CNET News.com, Darkish Examining, MIT&#39s Technology Evaluate, Well known Science y Wired Information. Cinco premios de periodismo, incluido el de Mejor fecha límite … Ver biografía completa

Lectura recomendada:

Más información





Enlace a la noticia initial