Internet puede tener serios problemas debido a lenguajes como C y C ++ que contribuyen a las vulnerabilidades.

Hola Habr! Le presento la traducción del artículo " Internet aurait de sérieux problèmes à cause of langages comme C et C ++ favourite the survenue de failles " (francés).

Pero pocos desarrolladores se preocupan por esto.


Un error afecta el iPhone, otro, Windows y el tercero, servidores que se ejecutan en Linux. A primera vista, estos errores no tienen nada que hacer, ya que se relacionan con diferentes plataformas: Android, iOS, macOS, Windows, Linux. Sin embargo, en realidad, todo es diferente, según Alex Gaynor, un ingeniero de seguridad de software en Mozilla, que anteriormente trabajó para USDS (Servicio digital de Estados Unidos).

[1]
Más detalles: https://www.usds.gov , en adelante aprox. traductor

Durante el tercer enlace más débil, un evento anual organizado por Motherboard Vice,


Sobre el tema de la piratería informática y la ciberseguridad en el futuro, Alex Gaynor planteó un grave problema que, en su opinión, podría amenazar a Internet, pero, paradójicamente, deja a los desarrolladores completamente indiferentes.

Gaynor explicó que los tres errores mencionados anteriormente existen, porque el software que afectan en diferentes plataformas fue escrito usando lenguajes de programación, que tienen una tendencia desagradable de causar errores como "inseguridad de memoria", permitiendo el acceso a áreas de memoria no asignadas.

[3]
Lo más probable es que se permitiera referirse al sexto elemento de una matriz que consta de 5 elementos, aunque en otros lenguajes de programación que son más "seguros", al menos se mostrará un mensaje de error.

Esta categoría de errores puede generar errores y vulnerabilidades de seguridad al acceder a la memoria.

Al permitir que ocurran errores como "inseguridad de la memoria", los lenguajes de programación como C y C ++ pueden propagar un flujo casi infinito de vulnerabilidades críticas de seguridad a lo largo de los años. Un ejemplo de estas vulnerabilidades es:

  • tipo no coinciden
  • desbordamiento de búfer
  • desbordamiento de variable entera
  • usar después de una vulnerabilidad libre

La falta de coincidencia de tipos puede ocurrir cuando un código no verifica el tipo de objeto que se le pasa y lo usa a ciegas. Esta situación puede ser peligrosa. Además, junto con los desajustes de tipo, los punteros de función incorrectos o los datos incorrectos están asociados con la parte incorrecta del código, lo que en algunos casos puede conducir a su ejecución.

El desbordamiento del búfer (o "desbordamiento del búfer" en inglés) es una vulnerabilidad de seguridad crítica que ocurre cuando un usuario ingresa una cadena que estará en una matriz de caracteres de tamaño insuficiente. Esto hace que los datos se escriban fuera del área de memoria asignada para la matriz. HeartBleed, por ejemplo, que impactó al 17% de los servidores seguros en Internet, fue una vulnerabilidad de desbordamiento de búfer que le permitió leer 60 KB después del final de la lista, incluidas las contraseñas y otros datos de usuario.

El desbordamiento de enteros es una vulnerabilidad difícil de detectar que explota el hecho de que los números no pueden exceder un cierto valor, que depende de la cantidad de bits utilizados para representarlos y del método de codificación.

La vulnerabilidad de "usar después de liberar" generalmente ocurre cuando se usa un puntero o datos en la memoria cuando el puntero (o bloque de memoria) ya está liberado.

Juntas, estas vulnerabilidades son los exploits más comúnmente encontrados en software popular, como Firefox, Chrome, Windows, Android o iOS. Gaynor ya ha contado al menos 400 y declara: “He estado monitoreando la seguridad de estos proyectos durante más de un año, y en casi todas las versiones de estos productos, más de la mitad de las vulnerabilidades son inseguras de memoria. Y aún más alarmante es que las vulnerabilidades graves y críticas [...] casi siempre tienen este tipo ".

A pesar de los importantes riesgos de seguridad del software que soportan, los desarrolladores todavía usan lenguajes de programación amigables con la inseguridad de la memoria, como C o C ++, mientras que pueden considerarse alternativas comprobadas como Rust y Swift. como idiomas "seguros de memoria" son raros.

Esto puede deberse al hecho de que, para un nuevo proyecto, los desarrolladores, por regla general, eligen un lenguaje de programación basado en los lenguajes que su equipo conoce, el rendimiento y los sistemas de biblioteca que pueden derivarse de esta elección. Al tomar decisiones, el componente de seguridad asociado con esto casi nunca se considera, o al menos no se considera lo suficiente, dijo Gaynor.

Además, la mayoría de los proyectos de software, incluso los más importantes para la seguridad en Internet, no son nuevos. Fueron lanzados hace diez años, si no más. Linux, OpenSSL y el servidor web Apache, por ejemplo, tienen más de veinte años. Para proyectos a gran escala como estos, reescribir todo el código en un nuevo idioma no es una opción. Deben transformarse gradualmente, lo que significa que los proyectos deben escribirse y guardarse en dos idiomas diferentes en lugar de uno. También implica la necesidad de formar un equipo grande, lo que lleva mucho tiempo y requiere más dinero.

El mayor problema, finalmente, es que muchos desarrolladores no creen que el problema exista en absoluto. Creen que el problema no es que lenguajes como C o C ++ contribuyan a las vulnerabilidades, sino otros programadores que escriben código con errores. Creen que no hay problemas con estos lenguajes supuestamente "inseguros para la memoria", porque ningún código es perfecto, simplemente la gente no sabe cómo usarlos.

¿Qué opinas sobre esto?



Observo que las críticas a la traducción también son bienvenidas.

Gracias por su atencion!

Source: https://habr.com/ru/post/es432502/


All Articles