La NSA o Agencia Nacional de Seguridad de Estados Unidos ha publicado una guía en la que anima a las organizaciones a cambiar los lenguajes de programación de C y C++ por alternativas «memoria segura», donde entran otros lenguajes como C#, Rust, Go, Java, Ruby o Swift.
«La NSA recomienda que las organizaciones utilicen lenguajes seguros para la memoria siempre que sea posible y refuercen la protección mediante defensas de endurecimiento del código» dice el último comunicado emitido por el organismo.
La principal preocupación de la Agencia es que los delincuentes puedan explotar las vulnerabilidades de un código que no centra su gestión en la memoria, lo que ocurre con más frecuencia en los lenguajes que dan más opciones y flexibilidad al programador.
-Razones de la NSA
Dice el informe que «los lenguajes más utilizados, como C y C++, ofrecen mucha libertad y flexibilidad en la gestión de la memoria mientras que dependen en gran medida del programador para realizar los controles necesarios en las referencias de memoria. Errores simples pueden llevar a vulnerabilidades basadas en la memoria».
Mientras que, por otro lado, recuerda que «las protecciones inherentes ofrecidas por los lenguajes de software de memoria segura pueden prevenir o mitigar la mayoría de los problemas de gestión de memoria», aunque sí reconoce que el uso de lenguajes de memoria seguros no proporciona una protección absoluta contra los problemas explotables.
Hay que recoerdar que la comunidad de software en general en el sector privado y también organismos públicos han comenzado iniciativas para impulsar la cultura del desarrollo de software hacia la utilización de lenguajes seguros de memoria. Uno de ellos es Rust, que se está impulsando desde esta perspectiva.
-Lenguajes seguros para la memoria
La NSA explica que su recomendación se basa en que los lenguajes seguros para la memoria utilizan una combinación de comprobaciones en tiempo de compilación y de ejecución para bloquear automáticamente las vulnerabilidades causadas por los errores de los programadores. «No todos los errores, pero ayuda», dice el informe.
La misma NSA ofrece ejemplos de lenguajes de memoria segura: C#, Go, Java, Ruby, Rust y Swift. Algunos lenguajes requieren que cualquier cosa insegura para la memoria sea explícitamente anotada como tal para que el programador lo sepa. Los lenguajes al estilo de Rust o Ruby también pueden usar bibliotecas escritas en lenguajes no seguros para la memoria.