Mejoras de seguridad

Sistemas Distribuidos e Internet



Una creación de:
Álvaro Alonso Palacio - UO218732
Eduardo Parrado Puente - UO221513
Herminio García González - UO218768

Objetivo

Mejorar la seguridad contra posibles ataques que antes no se habían contemplado

Posibles ataques

Autenticación insuficiente

Acciones para las que el usuario no tiene privilegios, pero que por medio de un atajo puede hacer

Ejemplo

En este ejemplo vamos a coger la pantalla de edición de un mensaje, en principio sólo el usuario que escribio ese mensaje debería poder acceder a él.

Vista de edición de mensaje

Resultado

Vemos como en otro navegador que no comparte las mismas cookies se puede acceder a la edición del mensaje sin ningún problema

Vista de edición de mensaje

Solución

La solución a este problema es la comprobación de que las acciones que no se pueden ejecutar por otros usuarios esten bien autenticadas

Html Injection


Inyección de código HTML dentro de una página de tal modo que este sea ejecutado como tal

¿Por qué puede suceder?

Una mala gestión de las etiquetas HTML dentro de una página web que afecten a campos donde sea posible introducir texto

Pongamos un ejemplo sencillo

Supongamos que encontramos un foro y queremos verificar si es vulnerable ante este tipo de ataques, una forma es introducir una sencilla línea HTML

Vista de inyección en foro

Éxito

Si nos apareciera el mensaje como en este caso el sitio sería vulnerable

Vista de exito de inyeccion

Ataques mas serios

¿Que pasaría si introdujeramos mil veces <br /> ?

Código Meta

También podemos introducir scripts tal como veremos en la siguiente sección

Soluciones

Dos formas sencillas de evitar esto es eliminando y/o desactivando las etiquetas

strip_tags() = Elimina las etiquetas

htmlentities() = Obtiene las etiquetas de la inyeccion pero no las ejecuta

XSS

Cross Site Scripting


Inyección de código de scripting para que sea ejecutado por el navegador del cliente

Dos tipos

  • Reflejado: Cuando este es pasado como un parámetro entre diferentes vistas
  • Persistente: Cuando este queda guardado en una base de datos y siempre va a ejecutarse

Ejemplo

Vamos a usar XSS de tipo persistente en el foro para ver la información de las cookies

Haciendo XSS en MyForums

Resultado

El resultado puede no parecer maligno pero podríamos usar esta prueba para hacer ataques más sofisticados

Viendo el resultado del XSS en MyForums

Solución

  • Filtrar los datos de entrada, sobre todo los que contengan < ó >
  • Para formatear texto usar otros recursos que no sean código html
  • Uso de librerías anti-XSS

Sniffing


Escuchas ilegales de la red

Ejemplo

Vamos a ver un ejemplo de Sniffing en el foro. Nos registraremos cómo administrador y después utilizaremos un programa de escucha, a ver que pasa.

Logueando como admin

Resultado

Como podemos comprobar no tenemos ningún problema en hacernos con la contraseña del administrador.

Resultado Sniffing

Solución

La solución principal pasa por cifrar la conexión:
Https con SSL/TLS

Los datos viajarán cifrados con este protocolo

Sql Injection


Inyección de código SQL de manera que las consultas muestren datos que no deberían

Ejemplo

String consulta = "Select * from Users where username='"+ userInput +"' and password='"+ passInput +"';


¿Y si inyectamos un poco de SQL?

String userInput = ' OR 1=1; --

Resultado: Suplantación de identidad

Imagen suplantacion de indentidad

Select * from Users where username=' 'OR 1=1;

--' and password='miclave'

Otros posibles usos

  • Entrar como administrador -> admin'; --
  • Borrado de datos -> 'DROP TABLE USERS; --

Solución


Uso de PreparedStatement en Java


Select * from user where username = ? and password = ?

CSRF

Cross Site Request Forgery


Forzar o engañar a un usuario autentificado a realizar acciones que no desea

Ejemplo

Lori envía una aparentemente inofensiva imágen al Administrador haciendo uso de los mensajes del foro

CSRF

Resultado

El Administrador, un poco ingénuo, hace click en la imagen. Pero... ¡No es oro todo lo que reluce!

CSRF

Consecuencia

El administrador sin saberlo, y puede que no se haya dado cuenta, ha desactivado la cuenta de Rick.

A Lori no le caía bien Rick :(

Solución

Buenas prácticas

Logs

El uso de librerías de logs es altamente recomendado. Nos permiten saber la interacción de los usuarios con el sistema, además de los errores que se puedan haber producido:


  • Simple Logging Facade for Java (SLF4J)
  • Apache log4j
  • java.util.logging

Validar campos de los formularios

Es una buena práctica con la que evitaremos posibles futuros errores y agujeros de seguridad.

Quitar mensajes de error informativos

No se debe mostrar más información de la necesaria, por lo tanto los errores descriptivos no deberían ser mostrados al usuario

Web con errores de sqlite

También tenemos que tener especial cuidado con los comentarios en el código.

Quitar u ocultar archivos que no deberían ser accedidos

Archivos como configuraciones de la base de datos, logs u otros archivos de configuración no deberían poder ser accedidos para ello se deben sacar fuera del directorio de la web u ocultarlos.


También podemos configurar el servidor para servir solo algunos tipos de fichero. En el caso del foro, con ficheros HTML e imágenes, debería ser suficiente.

Ocultación de rutas privadas

Puede interesarnos que ciertos rutas no salgan en los buscadores:

Ficheros como robots.txt nos permite que los buscadores no indexen estas páginas: Robots.txt EpiGijón


¡CUIDADO! Esto no hace que no se pueda entrar, por lo tanto no nos exime de tomar medidas de seguridad complementarias

Vigilar JSP

Debemos tener en cuenta las vulnerabilidades que puedan existir en JSP. Hay que estar al tanto de nuevos exploits y tener siempre actualizado el sistema

Fin

Gracias por su atención

animacion agente seguridad