domingo, 10 de mayo de 2020

Vulnerabilidades del software

Una vulnerabilidad del software es cualquier defecto en el mismo que permita explotarlo con el fin de que un atacante pueda hacerse con el control del sistema.Las vulnerabilidades pueden deberse a:


  • Una mala configuración del software por parte del administrador/usuario.
  • Una incorrecta programación durante el proceso de desarrollo o actualización del software.

La mayoría de vulnerabilidades hoy en día se deben al segundo caso ya que:


  • Existe bastante documentación de usuario para configurar el software.
  • Desconocimiento de seguridad informática en la mayoría de programadores.
  • Empresarios que fuerzan los ciclos de desarrollo del software para terminar antes los productos.
  • Las auditorías de seguridad de código fuente apenas se practican.

XSS

XSS es una vulnerabilidad del software que permite ejecutar código de scripting en una aplicación debido a una incorrecta validación de los datos de entrada de la misma.

Generalmente las aplicaciones vulnerables a XSS son aquellas que utilizan HTML :
 Páginas web, phishing, exploits de navegadores...
Sus siglas son XSS en vez de CSS para no confundirlo con las hojas de estilo en cascada (Cascading Style Sheets).

Los objetivos de los atacantes que utilizan esta vulnerabilidad suelen ser:
– Conseguir acceso no autorizado
– Robo de información
– Causar daños económicos
– Conseguir un mejor Phising (Pasar desapercibido ante la víctima).

El XSS es una vulnerabilidad que puede estar presente de dos formas: Directa e Indirecta.


XSS se presenta en forma directa (llamada también persistente),cuando el atacante embebe código HTML malicioso en sitios que así lo permiten porque carecen de filtrado.
  • El código del atacante incluye etiquetas o tags del tipo <frame> o <script> entre las cuales escribe código malicioso, por ejemplo hacer spam no permitido en foros.
  • Es una de las vulnerabilidades más comunes y también de las más utilizada en la actualidad.
El XSS se presenta en forma indirecta cuando el código maligno se inyecta a través de formularios, de la URL, programas en FLASH e incluso vídeos y se busca que sea la víctima quien entre en el enlace malicioso.

  • Vulnerabilidad muy común pero en general, muy poco explotada.

  • Muy utilizada para robo de sesiones y phising.

Para saber si nuestra página web es vulnerable a este tipo de ataques existen escáneres de vulnerabilidades como el de http://www.acunetix.com/, que aunque es de pago tiene un
versión gratuita de prueba (freeware) que permite escanear ataques XSS presentes en
ambas formas.

Desbordamiento de Buffer (Buffer Overflow)

Tipo de vulnerabilidad del software que tiene lugar cuando por error (o intencionadamente) se copia una cantidad de datos sobre un área de memoria que no es lo suficientemente grande para contenerlos, sobrescribiendo de esta manera otras posiciones de memoria.
  • El desbordamiento de buffer se debe a fallos de programación y en un principio, el comportamiento del sistema cuando se sobrescribe una parte de la memoria es impredecible.
  • Los BO sirven para introducir código máquina en el espacio reservado para las variables locales y después modificar la dirección de retorno para que apunte a la posición de memoria donde han introducido nuevo código. Este código generalmente es un shell code. 
  • Se usa la función strcpy para sobrescribir posiciones de memoria. El string origen de la función strcpy contiene código máquina del atacante al principio y después la nueva dirección de retorno repetida tantas veces como sea necesaria para llegar a sobrescribir la antigua. Cuando la función llegue a su fin y llame a la instrucción return (que recupera la dirección de retorno de la pila) la ejecución del programa continuará en la posición de memoria que el atacante haya indicado y en la que tenemos nuestro código. 

Pisado de Pila (Stack Smashing)

Tipo de desbordamiento de buffer aprovechado por virus y malware para tomar control sobre una aplicación, o provocar que la misma termine.
  • El Stack Smashing sucede cuando se ingresa en la pila de la aplicación más datos que los que ésta puede contener (hasta que desborde) y así se sobrescriban datos.
  • Los atacantes hacen uso de esta vulnerabilidad para sobrescribir zonas de memoria que contribuyan a hacerles con el control del sistema ganando permisos. Si ejecutas el programa infectado con privilegios de administrador/root estás perdido.
  • Tanto el Desbordamiento de Buffer como el Pisado de Pila en sistemas GNU/Linux pueden evitarse instalando parches en el kernel que no permiten la ejecución de código máquina en la pila de las funciones, impidiendo así la ejecución de Shell Codes. 

Inyección SQL (SQL Injection)

SQL Injection es una vulnerabilidad de programación que le brinda a un usuario de una aplicación la posibilidad de inyectar sentencias SQL en la BD que la aplicación emplea como soporte de datos.

Para que un ataque por inyección SQL sea posible es necesario que el atacante arme sentencias SQL concatenadas con datos que a la aplicación le llegan del usuario.

La única forma de prevenirlo es labor del programador, diseñando una correcta aplicación. 

Ejemplo típico de Inyección SQL para loguearse con cuenta ajena a través de un formulario que solicita correo y contraseña (suponer que el atacante conoce el correo de Pepito): 

SELECT * FROM tusuarios WHERE correo=‘pepito@correo.com’ AND password=‘01234’ SELECT * FROM tusuarios WHERE correo=‘pepito@correo.com’ AND password=‘ ’OR 1=1 

Se denomina Blind SQL Injection al proceso del atacante de explorar los enlaces de la aplicación y las tablas y atributos de la BD que previamente no le son conocidos. Gracias a sus conocimientos y experiencia terminará por intuir qué instrucciones SQL se utilizan y cómo explotarlas en su beneficio.


Inyección SQL: Cómo evitarlo


Asignación de mínimos privilegios: La cuenta que se determina para conectarse en una aplicación web, debe tener sólo privilegios que ésta necesita, ni más ni menos.

Validar todas las entradas: Si en un campo de texto sólo se puede ingresar un tipo de dato, pues valide la entrada para tal efecto y especifique la longitud de caracteres a ingresar. Si permitimos introducir texto asegurémonos de que la aplicación busca caracteres como comas, puntos y comas, signo igual, paréntesis y palabras claves SQL para filtrarlo. De gran utilidad son las RegEx.

Empleo de procedimientos almacenados: Utilizar procedimientos almacenados y aceptar los datos del usuario como parámetros en lugar de cómo instrucciones SQL.

Utilizar comillas dobles en vez de las simples: En el archivo que procesa los datos de entrada del usuario reemplazamos las comillas simples por comillas dobles, posibilitando el truncamiento de las inyecciones SQL.

Como las comillas simples finalizan las expresiones SQL y posibilitan la entrada de expresiones peligrosas, la simple sustitución de la comilla simple hará que al atacante en su inicio por inyectar SQL lo lleve al fracaso.  

Otras vulnerabilidades

  • Cross Site Request Forgery (XSRF) o falsificación de sitios cruzados: tipo de exploit malicioso de una página web en la que comandos no autorizados son transmitidos por un usuario en el cual el sitio web confía. Esta vulnerabilidad es conocida también por otros nombres como enlace hostil, ataque de un click, cabalgamiento de sesión, y ataque automático.

  • ForceFul Browsing (FFB): Consiste en una intrusión de un sistema (generalmente web) accediendo directamente a subdirectorios protegidos supuestamente por la aplicación. 

No hay comentarios.:

Publicar un comentario