Un grupo que trabaja en el desarrollo del popular lenguaje de programación C++ ha delineado un camino para hacer que el lenguaje sea «seguro en memoria», al igual que su rival más joven, Rust.
Rust ha sido adoptado por Microsoft, AWS, Meta, el proyecto de código abierto de Android de Google, el proyecto Chromium dominado por C++ (más o menos), el kernel de Linux y muchos más, lo que ha ayudado a reducir los fallos de seguridad de memoria. Incluso la Agencia de Seguridad Nacional (NSA) ha recomendado a los desarrolladores que hagan un cambio estratégico de C++ a favor de C#, Java, Ruby, Rust y Swift.
Las advertencias generalizadas sobre la seguridad de C++ han provocado movimientos para trazar un camino a seguir para la «Seguridad de C++», detallada en un documento de un grupo que incluye a Bjarne Stroustrup, el creador de C++, para el Grupo de Trabajo 21 del Comité de Normas de C++ (WG21), que fue lanzado este mes.
El documento aboga por cambios técnicos y considera cómo C++ debería abordar su «problema de imagen» con seguridad.
Apple es el último gigante tecnológico en destacar los problemas de seguridad con el código C/C++ en los sistemas operativos. La empresa está abordando la seguridad de la memoria en XNU, el kernel para iOS, macOS, watchOS y más.
«Debido a que casi todos los dispositivos de usuario populares en la actualidad se basan en código escrito en lenguajes de programación como C y C++ que se consideran «inseguros para la memoria», lo que significa que no brindan garantías sólidas que eviten ciertas clases de errores de software, mejorar la seguridad de la memoria es un objetivo importante para los equipos de ingeniería de toda la industria», explicó Apple en octubre.
C++ surgió en 1985 y sigue siendo uno de los lenguajes más populares, en parte debido a su rendimiento. Está estandarizado por la Organización Internacional de Normalización (ISO), cuya última versión es C++20, finalizada en diciembre de 2020. Es probable que el próximo estándar se llame C++2023. Rust, por otro lado, alcanzó la versión 1.0 en 2015 y no está estandarizado sino impulsado por su comunidad de colaboradores.
El artículo de Stroustrup y sus colegas habla sobre el uso de C++ en dominios críticos de seguridad, como integrado, médico, aeroespacial y aviónica. Reconocen que hay «mayores demandas de restricciones más formales con respecto a la seguridad» debido al aumento de vehículos autónomos, infraestructura crítica conectada, aplicaciones de mensajería, etc.
«Aplicaciones como integradas, automotrices, de aviónica, médicas y nucleares eran aplicaciones obvias que requerían seguridad si se programaban en C++», escriben los autores.
«Entonces, en el camino, se desarrollaron pautas de seguridad para la mayoría de estos. La explosión de Internet trajo navegadores que fueron cada vez más objetivos de piratería a medida que se realizan más transacciones comerciales a través de los navegadores. Rust, originalmente de Mozilla, construido sobre C ++ se convirtió en el cartel hijo de un lenguaje de navegador seguro. Hemos visto cada vez más las afirmaciones de seguridad de RUST probadas en más aplicaciones más allá de los navegadores, por ejemplo, controladores y kernel de Linux».
El documento señala la recomendación reciente de la NSA para que las organizaciones «consideren hacer un cambio estratégico de los lenguajes de programación que brindan poca o ninguna protección inherente a la memoria, como C/C++, a un lenguaje seguro para la memoria cuando sea posible».
«Más recientemente, dos desarrollos relacionados con publicaciones del gobierno de los EE. UU. que aconsejan a las aplicaciones de seguridad que no usen C/C++ del NIST y la NSA parecen haber provocado una discusión generalizada sobre la seguridad dentro de C++. Tanto el NIST como la NSA parecen sugerir el uso de un lenguaje alternativo». Dice el papel. El riesgo es que «las entidades no gubernamentales puedan ignorar la directiva del gobierno Y/O, la directiva del gobierno bloquea a C ++ de cierto mercado e indirectamente conduce a un alejamiento de C ++».
El documento señala que C++ tiene un problema de imagen en lo que respecta a la seguridad, pero lo atribuye a otros lenguajes que se promocionan a sí mismos como seguros, lo que, según los autores, ignora los avances en seguridad que C++ ha realizado en los últimos años.
«C++ parece, al menos en la imagen pública, menos competitivo que otros lenguajes en lo que respecta a la seguridad. Esto parece cierto, especialmente cuando se compara con lenguajes que se anuncian a sí mismos de manera más fuerte/activa/descarada/competente que C++. De alguna manera, parecen especialmente satisfacer una definición de seguridad de la suite ejecutiva, lo que hace que sea atractivo para los ejecutivos solicitar un cambio de C++», dice el documento.
«Sin embargo, lo que se ha perdido en el ruido es que C++ ha logrado grandes avances en los últimos años en materia de seguridad de recursos y memoria colgantes… C++ se beneficia de tener una especificación, una comunidad activa de usuarios e implementadores. Otros lenguajes «seguros» puede que ni siquiera tenga ninguna especificación, al menos no todavía. Estas propiedades importantes para la seguridad se ignoran porque nos preocupamos menos por la publicidad. C++ también ha sido probado en millones de líneas de código, durante casi medio siglo».
Otros idiomas no lo son, argumenta.
«Puede llegar un momento en que C++ pase su antorcha a otro lenguaje más grande, pero ninguno de los contendientes actuales lo es. Nunca debemos abandonar los millones de líneas de código existentes, algunas de las cuales no piden a gritos seguridad. Nosotros deberíamos reconocer que la urgencia de respaldar la seguridad en C++ es uno de los problemas de nuestro tiempo».
El documento dice que el comité de estándares de C++ WG21 apoya la idea de que los cambios para la seguridad deben adoptarse no solo en las herramientas, donde ha trabajado más en el pasado, sino también para ser «visibles» en el lenguaje/compilador y la biblioteca. Para ayudar a abordar la imagen de C++ en relación con la seguridad.