07 FEB 2018

Vulnerabilidad de los programas: causas, riesgos y clasificación

Hoy en día siempre nos relacionamos con los programas, como componente de los dispositivos y de los sistemas que solemos usar a diario: ordenadores, smartphones, sistemas en los coches, control de los electrodomésticos, etc.

Podemos describir un software como un sistema generalmente complejo diseñado y desarollado por diferentes programadores. Para crear un software hay que escribir el código. Suele pasar que los programadores hagan errores (bug) escribiendo el código: estos errores son la raíz de las vulnerabilidades de los programas porque es a través de los errores que se crea una puerta de acceso. Así el software resulta estar expuesto a algunas vulnerabilidades.

La primera regla de la programación afirma que “la culpa es siempre del programador”. Dos estudios hechos en 1973 y en 1984 evidenciaron que, de los errores vistos:

  • El 95% se debe a los programadores;
  • El 2% se debe al software de sistema (el compilador y el sistema operativo);
  • El 2% a otros programas;
  • El 1% al hardware.

Una vulnerabilidad es, por lo tanto, una imperfección en la “construcción” del software que puede ser explotada de modo legítimo o ilícito para cambiar la normal conducta del sistema, como, por ejemplo, sacar algunos privilegios en el sistema. Esta actividad se conoce con el nombre de “exploit”.

Las vulnerabilidades, por lo tanto, ofrecen un posible punto de acceso a dispositivos y sistemas para actividades legítimas, como un control para resolver un problema, o ilícitas como el ataque externo hecho por un hacker.

No obstante el conocimiento y la conciencia de las vulnerabilidades que existen, hay una tendencia muy fuerte y que sigue creciendo a propósito del número de vulnerabilidades señaladas. Por eso la seguridad del software se ha vuelto en un importante campo de investigación y de negocios.

La presencia de vulnerabilidades en la producción de programas hace necesario tener instrumentos y actividades que puedan ayudar a los programadores a identificar o evitar errores cuando están escribiendo el código. Además que las actividades de “code review” típicas de los programadores expertos y/o de programas específicos, se pueden realizar actividades de vulnerability assessment o pruebas de penetración, que se parecen bastante a las actividades que podría hacer un hacker durante un su ataque.

Vulnerabilidades del software, algunos ejemplos

¿Cuántas y cuáles son las vulnerabilidades del software? Existen diferentes tipologías de vulnerabilidades, señaladas cada vez que se descruben. Vamos a ver algunas de estas:

Desbordamiento de búfer: es un error que se verifica mientras que el programa está en ejecución. Lo que pasa es que en un búfer de un tamaño fijo se escriben datos que tienen un tamaño mayor que el búfer. En esta situación se podría verificar un mal funcionamiento del sistema puesto que los nuevos datos podrían corromper los de otros búferes o procesos.

Format string bug: se verifica cuando los datos enviados de una cadena de caracteres de entrada son interpretados como una orden legítima por la aplicación.

Vulnerabilidades del software, ejemplos de Exploit

Cuando se verifica la posibilidad de atacar un software explotando una vulnerabilidad, se habla de Exploit.

Desbordamiento de búfer exploit: puede ser usado para inyectar código dañoso para ejecutar código inyectado y tomar el control del sistema.

Format string exploit: el usuario merodeador puede ejecutar código, leer la estructura de los datos (pila) o causar un error de segmentación en la aplicación en ejecución, causando nuevas conductas que podrían poner en peligro la seguridad o la estabilidad del sistema.

Elaborado por Lucia D’Adamo, en colaboración con Andrea Petriglia, supervisado por Marco Pirrone

Últimas Noticias