Seguridad en lenguajes de programación

Nestor Alexander Tzunún Mérida

Estudiante de Ingeniería en Ciencias y Sistemas - USAC

Palabras Clave:
Lenguajes de Programación, vulnerabilidades, seguridad, cifrados, inyección sql, código

Saber desarrollar en un el lenguaje de programación puede ser no muy importante cuando se realice una nueva aplicación, esto si no se conoce el lenguaje como tal, saber si son propensos de ataques y conocer cuáles son sus vulnerabilidades es muy importante para nosotros los desarrolladores debido a que carecemos de conocimientos suficientes respecto a la seguridad en los lenguajes de programación.

Muchas veces cuando vamos a empezar a realizar una aplicación siempre vemos en que lenguaje se nos facilitará el desarrollo para poder cumplir con los tiempos pero a veces no se considera que tan seguro es el lenguaje de programación elegido.

Según Jeremiah Grossman, fundador de WhiteHat Security “la decisión de qué lenguaje de programación usar en algún proyecto a menudo se basa en consideraciones como qué tan familiarizado está el equipo de desarrollo con el lenguaje, con cuál se realiza el proyecto más rápido, o simplemente con cuál es posible realizar el trabajo solicitado por el cliente, consideraciones como qué tan seguro es el lenguaje a emplear surgen de último momento, cuando usualmente ya es demasiado tarde”.

Por ello es necesario conocer las vulnerabilidades que puedan tener los lenguajes de programación como contrarrestarlos y así poder decidir de mejor manera que lenguaje utilizar en nuestro proyecto.

A continuación cuatro vulnerabilidades más comunes en los lenguajes de programación:

  • Vulnerabilidades de Cifrado: Cifrar es transformar información con el fin de protegerla de miradas ajenas; en programación existe el cifrado RSA que se basa en un sistema criptográfico de clave pública, esto significa que cada usuario dispone de dos claves de cifrado: una pública y una privada muchas plataformas utilizan este cifrado y esta vulnerabilidad ataca y logra cifrar dichas claves.

  • Vulnerabilidades cross-site scripting o XSS: Son un tipo de inyección, en la cual los scripts maliciosos se inyectan en sitios web benignos y confiables. Los ataques XSS ocurren cuando un atacante usa una aplicación web para enviar código malicioso, generalmente en la forma de un script del lado del navegador, a un usuario final diferente. Los fallos que permiten que estos ataques tengan éxito son bastante comunes y ocurren en cualquier lugar en el que una aplicación web utiliza la información de entrada de un usuario dentro de la salida que genera sin validarla ni codificarla.

  • Vulnerabilidades de Inyección SQL: Es una de las técnicas más comunes del web hacking, es la colocación de código malicioso en las declaraciones SQL, a través de la entrada de la página web esta inyección de código podría destruir la Base de Datos generalmente ocurre cuando se solicita a un usuario que ingrese, su nombre de usuario / ID de usuario, y en lugar de un nombre / ID, el usuario te proporciona una declaración SQL que ejecutará sin saberlo la base de datos.

  • Vulnerabilidades de Inyección de Código: La inyección de código es el término general para los tipos de ataque que consisten en inyectar código que luego es interpretado / ejecutado por la aplicación. Este tipo de ataque explota el manejo deficiente de datos no confiables. Estos tipos de ataques generalmente son posibles debido a la falta de una validación adecuada de los datos de entrada / salida.

Imagen 1: Comparación de vulnerabilidades entre lenguajes de programación. Fuente: https://news.softpedia.com/news/top-programming-languages-that-generate-software-vulnerabilities-497101.shtml

Conociendo estas vulnerabilidades también es importante saber que lenguajes de programación son más propensos a estos ataques.

Según el estudio realizado por Veracode que es una empresa de seguridad que se dedica a analizar código fuente en busca de vulnerabilidades establece la siguiente lista atendiendo una calificación de mayor a menor.

Ahora que ya sabemos cuáles son las vulnerabilidades más comunes y que lenguajes de programación son más propensos a estos lenguajes, como podemos contrarrestarlos o cómo podemos remediar esta situación y así elegir el lenguaje más adecuado.

Obviamente una educación en prácticas de programación con seguridad es clave para resolverlas, muchos de los desarrolladores necesitamos educarnos adecuadamente para reducir la tasa de introducción de vulnerabilidades, además conocer el certificado PCI DSS (Payment Card lndustry Data Security Standard) que es un estándar de seguridad obligatorio para organizaciones que manipulan información acerca de tarjetas de crédito/débito, sería de mucha ayuda al elegir un lenguaje de programación.

Imagen 3: Cross Site Scripting. Fuente: https://medium.com/@marvin.soto/qu%C3%A9-es-xss-b9330eedbc07

Conclusiones

  • Conocer las vulnerabilidades del lenguaje de programación antes de iniciar un nuevo software definen a un buen desarrollador.

  • Cualquier lenguaje de programación pueden vulnerables si no se realiza una buena implementación de seguridad.

  • Andriod es el lenguaje de programación más vulnerable, sobre todo al cifrado.

Referencias