PDF de programación - ¿Qué son las vulnerabilidades del software?

Imágen de pdf ¿Qué son las vulnerabilidades del software?

¿Qué son las vulnerabilidades del software?gráfica de visualizaciones

Publicado el 7 de Septiembre del 2017
364 visualizaciones desde el 7 de Septiembre del 2017
424,2 KB
11 paginas
Creado hace 8a (03/08/2011)
Cuaderno de notas del
OBSERVATORIO



Instituto Nacional
de Tecnologías
de la Comunicación

k



¿QUÉ SON LAS VULNERABILIDADES DEL SOFTWARE?

Las vulnerabilidades son la piedra angular de la seguridad, puesto que suponen el origen
del que derivan numerosos fallos de seguridad. Una vulnerabilidad en un programa
informático o software es simplemente un error, un problema en su código o en su
configuración. Es muy probable –por no decir que se produce siempre– que los
programas contengan errores, puesto que han sido creados por seres humanos. Esto es
especialmente frecuente en el caso de las aplicaciones muy complejas (como por
ejemplo, un sistema operativo), que tienden a contener errores de manera exponencial.
La peculiaridad que convierte un simple fallo en una vulnerabilidad es la posibilidad de
que el "abuso inteligente" de este defecto pudiera llevar a un riesgo de seguridad que
compromete todo el sistema sobre el que se ejecuta esa aplicación.

En los siguientes epígrafes se analizarán los aspectos básicos de las vulnerabilidades:
por qué ocurren y cómo gestionarlas.

I

Qué es una vulnerabilidad

Una vulnerabilidad es un fallo en un programa o sistema informático. Pero no cualquiera,
sino un fallo de seguridad. Es necesaria esta distinción puesto que no todos los errores
de programación derivan en fallos de seguridad. Un error en un programa puede llevar a
que no funcione correctamente o que su comportamiento no sea el esperado, pero no
todos estos tipos de problemas pueden considerarse fallos de seguridad. Según la
capacidad de aprovecharse de este defecto, la vulnerabilidad será más o menos grave.

Una vulnerabilidad se define, básicamente, por cinco factores o parámetros que deben
identificarla.

1.

Producto

Para definir una vulnerabilidad, lo primero que es necesario conocer es a qué productos
afecta. Dentro de un mismo programa, incluso, puede afectar a una sola versión, a toda
una rama o incluso a programas totalmente diferentes que compartan un mismo fallo.
Este último supuesto ocurre cuando la aplicación afectada por la vulnerabilidad reside en
sistemas operativos diferentes. Por ejemplo, todas las distribuciones de Linux comparten
una buena cantidad de software, entre ellos, el propio núcleo del sistema. Una sola
vulnerabilidad en el kernel puede afectar a todas las distribuciones que lo utilicen, desde
Debian a Mandriva pasando por OpenSuSE.



OBSERVATORIO DE LA SEGURIDAD DE LA INFORMACIÓN

Página 1 de 1

¿Qué son las vulnerabilidades del software?
Observatorio de la Seguridad de la Información

http://observatorio.inteco.es



Ilustración 1: Alerta de Microsoft Windows donde se especifica producto, impacto y

gravedad de las vulnerabilidades



Fuente: INTECO

Para identificar correctamente una vulnerabilidad debe especificarse a qué productos o
versiones de productos afecta concretamente.

2.

Dónde

Dentro de un mismo programa, una vulnerabilidad se localiza habitualmente en un
componente o módulo. Los programas suelen componerse de varios módulos que
interactúan entre sí. Una vulnerabilidad puede encontrarse en un módulo concreto del
programa o bien por utilizar una configuración concreta. Por ejemplo, puede existir una
vulnerabilidad en el módulo de interpretación de ficheros en formato RTF en Microsoft
Word sin afectar al módulo que procesa otro tipo de ficheros. O en el módulo de
procesado de ficheros MP3 en el programa de reproducción Winamp. Es posible que la
vulnerabilidad no pueda ser aprovechada si este módulo no se encuentra activo. Por
ejemplo, el módulo de procesamiento de JavaScript en documentos PDF no se encuentra
activo por defecto en Adobe Reader.

Si, por el contrario, el fallo se encuentra en un componente intrínseco al programa, no
existe posibilidad de deshabilitar componentes. Esto puede ocurrir por ejemplo si se
encuentra un fallo en el explorador de Windows o en su propio núcleo.

3.

Causa y consecuencia

¿Cuál es el origen del problema? ¿En qué falló su programador? Esto se refiere al fallo
técnico concreto que cometió el programador a la hora de crear la aplicación que es el
origen de la vulnerabilidad. Por ejemplo, puede que no comprobarse bien qué valores
alojaba una variable, los límites de la memoria, o que olvidara establecer unos permisos
adecuados a unos ficheros.

¿Qué son las vulnerabilidades del software?
Observatorio de la Seguridad de la Información

Página 2 de 2



técnicas de estos

Las consecuencias
fallos suelen ser diferentes. Desde el
desbordamiento de memoria hasta el consumo excesivo de memoria. Estas
consecuencias suelen ser siempre las mismas derivadas de los mismos descuidos, y es
lo que buscarán los cazadores de vulnerabilidades.

Un ejemplo claro es, que una falta de comprobación de caracteres en una aplicación web
(causa), lleve a una posible inyección SQL (consecuencia). Otro ejemplo: Una falta de
comprobación de límites en una variable (causa), puede llevar a un desbordamiento de
memoria intermedia (consecuencia). Un último ejemplo: Un descuido a la hora de
establecer los permisos de un servicio en Windows (causa) puede llevar a un salto de
restricciones (consecuencia).

Normalmente la causa de una vulnerabilidad es un fallo técnico de programación, una
falta de comprobación que permite que se den circunstancias indeseadas en el código
durante su ejecución.

4.

Impacto

El impacto es lo que puede conseguir un atacante que aprovechase la vulnerabilidad. Por
ejemplo, si existe un desbordamiento de memoria intermedia, es posible que el atacante
pueda conseguir ejecutar código. Si la consecuencia de la vulnerabilidad es que el
programa comienza a consumir recursos, es posible que el atacante pueda llegar a
conseguir una denegación de servicio (hacer que el programa deje de responder). Si no
se han comprobado bien los permisos del programa (causa) puede que se produzca un
salto de restricciones (consecuencia) y que el atacante consiga elevar privilegios en el
sistema (impacto).

El impacto define en gran medida la gravedad de la vulnerabilidad. La ejecución de
código arbitrario supone la mayor gravedad puesto que significa que el atacante podrá
ejecutar cualquier programa en el sistema de su víctima. Por tanto, podría realizar
cualquier acción. En estos casos, se dice que el sistema queda "comprometido" porque
ha quedado en manos de la voluntad de un tercero.

5.

Vector

A la forma que tiene el atacante de aprovechar la vulnerabilidad se le conoce como
“vector de ataque”. Un vector de ataque común es el envío de información especialmente
manipulada a un puerto concreto del sistema. Otra forma de conseguir aprovechar una
vulnerabilidad es creando un fichero manipulado que será procesado por ese programa.
Por ejemplo, si se encuentra una vulnerabilidad en Word, es muy probable que el vector
de ataque sea un archivo en formato .doc que aproveche la vulnerabilidad. Si la víctima lo
procesa con un Word vulnerable, el atacante conseguirá el impacto deseado.

¿Qué son las vulnerabilidades del software?
Observatorio de la Seguridad de la Información

Página 3 de 3



Otros vectores de ataque pueden ser muy sencillos de llevar a cabo: como hacer que la
víctima visite un enlace. Por ejemplo, muchas de las vulnerabilidades encontradas en los
navegadores son aprovechadas por atacante creando una página web adulterada que, al
ser visitada con el navegador vulnerable, aprovecha la vulnerabilidad. Por tanto, enviar un
enlace a la potencial víctima, sería el vector de ataque en este caso, y el impacto, podría
ser la ejecución de código.

Llegados este punto, pongamos un ejemplo concreto para unir todos estos parámetros
que definen una vulnerabilidad.

La aplicación de diseño gráfico MSPaint necesita conocer el tamaño de la imagen que va
a abrir antes de procesarla. Para conseguir esto, mspaint.exe se ayuda de fichero
llamado image_size.dll que está especializado en esta función.

El programador de la aplicación MSPaint 7 omitió la comprobación correcta de un
parámetro que define la longitud que debe tener una imagen, en la función SetImageSize
del fichero image_size.dll. Así pues, como no se comprueba que el valor del parámetro
coincida con el tamaño real de la imagen, se produce un desbordamiento de memoria.
Explicado de forma sencilla: la memoria del ordenador llega a sitios donde no debería.
Por tanto, un atacante puede retocar la cabecera de una imagen para modificar su
atributo de tamaño, añadir a esa imagen qué código quiere ejecutar y aprovecharse de la
vulnerabilidad.

Vamos a extraer la información necesaria que define la vulnerabilidad:

• Producto y versión: MSPaint 7 es la versión afectada.

• Causa / Consecuencia: Se omite la comprobación del parámetro tamaño (causa)

y se produce un desbordamiento de memoria intermedia (consecuencia)

• Dónde / Módulo: En la función SetImageSize del componente image_size.dll. Es

una librería en la que se apoya mspaint.exe.



Impacto: Lo que podría conseguir un atacante es ejecutar código arbitrario. O
sea, ejecutar cualquier programa que desee: malware, virus, etc.

• Vector: ¿Cómo puede un atacante explotarla? Un atacante debería enviar un
archivo de imagen manipulado (con el código que quiere ejecutar incrustado en su
interior, y el parámetro incorrecto retocado) a la víctima, y ésta abrirla con la
versión de MSPaint vulnerable. En ese momento se ejecutaría el código arbitrario
con el que se ha manipulado la imagen
  • Links de descarga
http://lwp-l.com/pdf6866

Comentarios de: ¿Qué son las vulnerabilidades del software? (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad

Revisar política de publicidad