Hace dos años, Google afirmó que el 70% de las vulnerabilidades de alta gravedad de Android se debían a errores de memoria propios de los lenguajes C y C++ que siguen constituyendo la base del sistema operativo móvil. Ese dato se enarboló como la razón para introducir entonces Rust en el desarrollo de Android.
El pasado mes de noviembre, la Agencia Nacional de Seguridad (NSA) estadounidense difundió un breve informe titulado 'Software Memory Safety' (PDF) en el que recomendaba explícitamente dejar de usar los vetustos (y muy populares) lenguajes de programación C y C++ en favor de 'lenguajes con gestión segura de la memoria', cuyos ejemplos más conocidos serían C#, Java, Ruby o el pujante Rust.
Pero ahora el portal del Open Standards Project ha publicado un documento (PDF) que contesta al de la NSA, titulado "Un llamamiento a la acción: piensa en serio acerca de la seguridad y luego haz algo sensato al respecto"; su autor es nada menos que Bjarne Stroustrup, catedrático de computación danés que creó lenguaje C++ en 1979. En esta respuesta al informe original, nuestro protagonista se lanza a argumentar contra lo que percibe como una excesiva simplificación por parte de la agencia federal estadounidense:
"Ahora bien, si considerase que uno de esos lenguajes 'seguros' es superior a C++ para la gama de usos que me interesan, no vería la desaparición de C/C++ como algo negativo, pero no es el caso. Tal como se describe [por la NSA] 'seguro' se limita a la seguridad de la memoria, dejando de lado una docena de formas distintas en que un lenguaje podría (y será) usado para violar cualquier clase de protección".
"No hay una única definición de seguridad"
Stroustrup tiene claro que "ignorar los problemas de seguridad perjudicaría a grandes sectores de la comunidad de C++ y socavaría gran parte del resto del trabajo que estamos haciendo para mejorar C++", pero por ello propone no ceder ante quien ve Rust y cía. como la solución a dichos problemas: "podemos lograr varias clases de seguridad a través de una combinación de estilos de programación, bibliotecas complementarias y aplicaciones de análisis estático".
Un ejemplo de las citadas bibliotecas sería SLIMalloc, que según su autor convierte C en un lenguaje "más seguro que los lenguajes 'seguros para la memoria'". El creador de C++ menciona también otro documento de su autoría (PDF) que "proporciona un breve resumen del proceso" que propone.
Plantea que un analizador estático que cumpla con las directrices básicas de C++ elaboradas en los últimos años puede garantizar la seguridad del código a un coste mucho menor que el necesario para iniciar una transición de código a nuevos lenguajes. Algunas de dichas directrices ya han sido implementadas en el analizador estático de MS Visual Studio, o en el Clang-Tidy.
También señala que si trabajamos en dominios de aplicación que priorizan el rendimiento sobre la seguridad de tipos, se podrían "aplicar las garantías de seguridad sólo cuando sea necesario y usar nuestras técnicas de ajuste favoritas" en el resto de los casos.
Igualmente, Stroustrup sentencia que
"Por desgracia, gran parte del código C++ está atascado en el pasado distante, ignorando las mejoras, incluidas las formas de mejorar drásticamente la seguridad. [Pero] las miles de millones de líneas de código C ++ no van a desaparecer mágicamente, e incluso el código 'seguro' (en cualquier lenguaje) tendrá que llamar o ser llamado por código C o C++ tradicional que no ofrezca garantías de seguridad específicas".
Kommentare