26
Autor: Francisco José Cruz Jiménez Aplicaciones Web Seguras (Anti-SQLi)

Aplicaciones Web Seguras (Anti-SQLi)

Embed Size (px)

Citation preview

Page 1: Aplicaciones Web Seguras (Anti-SQLi)

Autor: Francisco José Cruz Jiménez

Aplicaciones Web Seguras (Anti-SQLi)

Page 2: Aplicaciones Web Seguras (Anti-SQLi)

2

APLICACIONES WEB SEGURAS

Este documento ha sido realizado por:

© Francisco José Cruz Jiménez

Diciembre 2013

Algunos derechos reservados. Este artículo se distribuye

bajo la licencia “Reconocimiento-NoComercial 4.0 Internacional "

de Creative Commons, disponible en

http://creativecommons.org/licenses/by-nc/4.0/

Francisco José Cruz Jiménez Aplicaciones Web Seguras

Page 3: Aplicaciones Web Seguras (Anti-SQLi)

3

¿Qué son Aplicaciones Web?En la ingeniería de software se denomina Aplicación Web a aquellas herramientas informáticas que los usuarios pueden utilizar accediendo a un servidor web a través de Internet o de una intranet, normalmente accediendo mediante un navegador web.

Francisco José Cruz Jiménez Aplicaciones Web Seguras

Page 4: Aplicaciones Web Seguras (Anti-SQLi)

4

Ventajas de usar App Web

• Usan un cliente ligero (Navegador web)• No dependen del Sistema Operativo usado• No hay instalaciones y no ocupa el espacio

correspondiente en disco• Facilidad para la distribución y actualización• Enorme número de clientes potenciales

Francisco José Cruz Jiménez Aplicaciones Web Seguras

Page 5: Aplicaciones Web Seguras (Anti-SQLi)

5

Lenguajes más usadosEstas aplicaciones se codifica en un lenguaje soportado por los navegadores web, algunos de estos lenguajes son:PHPJava (Java Servlets y JavaServer

Pages (JSP))JavascriptPerlPythonRuby (Ruby on Rails)

Francisco José Cruz Jiménez Aplicaciones Web Seguras

Page 6: Aplicaciones Web Seguras (Anti-SQLi)

6

Cómo funcionan las App WebEstá normalmente estructurada por tres capas:I. El navegador web ofrece la primera capa (la

interfaz que se muestra al usuario) .II. Motor capaz de usar alguna tecnología web

dinámica, por ejemplo las mencionadas anteriormente.

III. Una base de datos constituye la tercera y última capa

Francisco José Cruz Jiménez Aplicaciones Web Seguras

Page 7: Aplicaciones Web Seguras (Anti-SQLi)

7

Cómo funcionan las App WebEl navegador web manda peticiones a la capa intermedia, y ésta ofrece servicios por medio de consultas y actualizaciones a la base de datos y a su vez proporciona una interfaz de usuario.

Una página Web puede contener elementos que permiten una comunicación activa entre el usuario y la información. Esto permite que el usuario acceda a los datos de modo interactivo, gracias a que la página responderá a cada una de sus acciones, como por ejemplo rellenar y enviar formularios o cualquier tipo de juego.

Francisco José Cruz Jiménez Aplicaciones Web Seguras

Page 8: Aplicaciones Web Seguras (Anti-SQLi)

8

Cómo funcionan las App Web

Francisco José Cruz Jiménez Aplicaciones Web Seguras

Page 9: Aplicaciones Web Seguras (Anti-SQLi)

9

Problemas de seguridad en Aplicaciones Web

El tema de la creación de una Aplicación Web segura es muy

amplio ya que requiere realizar un estudio para conocer y comprender las vulnerabilidades.

Es esencial entender cómo usar estas características de seguridad para enfrentarse a las amenazas, ya que con una Aplicación Web se da un servicio a los usuarios, éstos, en la mayoría de los casos, introducen y confían sus datos y sus asuntos privados, así que para ofrecer un buen servicio a aquellos que han confiado en usar la aplicación web hay que mantener seguro y proteger sus datos e información confidencial.

Francisco José Cruz Jiménez Aplicaciones Web Seguras

Page 10: Aplicaciones Web Seguras (Anti-SQLi)

10

Pautas a seguir para crear App Web Segura

Aunque a la hora de crear una aplicación web no se tenga

mucha experiencia en seguridad, existen unas medidas básicas que siempre se deberían de adoptar para proteger cualquier aplicación web.

A continuación proporcionaré una lista de medidas de seguridad mínima que se deberían aplicar a todas las Aplicaciones Web.

Francisco José Cruz Jiménez Aplicaciones Web Seguras

Page 11: Aplicaciones Web Seguras (Anti-SQLi)

11

1. Recomendaciones generales de seguridad en el servidor Utilizar firewall y establecer programas antivirus para

supervisar el trafico entrante y saliente. Mantener todo el software instalado totalmente actualizado. Ubicar el equipo del servidor en un lugar físico seguro. Cierra los puertos que no se utilicen y desactive los servicios no usados.

Francisco José Cruz Jiménez Aplicaciones Web Seguras

Page 12: Aplicaciones Web Seguras (Anti-SQLi)

12

2. Ejecutar aplicaciones con privilegios mínimos

No ejecutar la aplicación identificado como el administrador del sistema.

Ejecutar la aplicación con un usuario con los mínimos privilegios posibles.

Mantener los archivos de la aplicación web en una carpeta ubicada debajo del raíz de la aplicación.

Francisco José Cruz Jiménez Aplicaciones Web Seguras

Page 13: Aplicaciones Web Seguras (Anti-SQLi)

13

3. Protegerse contra entradas malintencionadas

Nunca dar por segura del todo una aplicación web ya que a los usuarios malintencionados les resulta fácil enviar información potencialmente peligrosa desde el cliente a la aplicación.

Establecer filtros.

Francisco José Cruz Jiménez Aplicaciones Web Seguras

Page 14: Aplicaciones Web Seguras (Anti-SQLi)

14

4. Mantener segura la información confidencial

Si la aplicación transmite información confidencial entre el explorador y el servidor, utilizar el protocolo SSL.

Utilizar algoritmos de cifrado de alta seguridad.

Francisco José Cruz Jiménez Aplicaciones Web Seguras

Page 15: Aplicaciones Web Seguras (Anti-SQLi)

15

5. Usar cookies de forma segura

No almacenar información vital en cookies. Establecer el período de tiempo mínimo posible para la

fecha de expiración de las cookies.

Francisco José Cruz Jiménez Aplicaciones Web Seguras

Page 16: Aplicaciones Web Seguras (Anti-SQLi)

16

6. Protegerse contra amenazas de denegación de servicio

Establecer límites de tamaño para consultas a bases de datos o subida de archivos.

Configurar servidor para utilizar la regulación de procesos, que evita que una aplicación use una cantidad desproporcionada de la CPU.

Seguir otras medidas recomendadas para este tipo de ataque.

Francisco José Cruz Jiménez Aplicaciones Web Seguras

Page 17: Aplicaciones Web Seguras (Anti-SQLi)

17

7. Acceso seguro a bases de datos

Usar el sistema de seguridad de la base de datos para limitar quién puede tener acceso a los recursos de dicha base.

Si la aplicación utiliza el acceso anónimo, crear un único usuario con permisos muy limitados,

y hacer que las consultas se ejecuten conectándose como dicho usuario. No crear instrucciones SQL concatenando cadenas que contengan información aportada por los usuarios.

Francisco José Cruz Jiménez Aplicaciones Web Seguras

Page 18: Aplicaciones Web Seguras (Anti-SQLi)

18

8. Crear mensajes de error seguros

• No escribir mensajes de error que presenten información que pudiera resultar útil a los usuarios malintencionados, como un nombre de usuario.

• Configure la aplicación para que no muestre errores detallados a los usuarios.

• Controlar bien las excepciones.

Francisco José Cruz Jiménez Aplicaciones Web Seguras

Page 19: Aplicaciones Web Seguras (Anti-SQLi)

19

SQL InjectionEste tipo de ataque consiste en inyectar código SQL en una sentencia SQL ya programada, con el fin de alterar el funcionamiento de la base de datos. Consiste en generar consultas a la base de datos para que nos devuelva datos de interés, como usuarios, contraseñas, información personal de los clientes, etc...

Francisco José Cruz Jiménez Aplicaciones Web Seguras

Page 20: Aplicaciones Web Seguras (Anti-SQLi)

20

Aplicaciones Web Anti-SQLi

Conocido el problema, ahora hay que poner una solución. Para que una aplicación web no tenga esta vulnerabilidad, las medidas que hay que tomar depende del lenguaje que se esté usando para acceder a la base de datos, a continuación mostraré unos ejemplos de cómo evitar SQLi en lenguajes comunes:

Francisco José Cruz Jiménez Aplicaciones Web Seguras

Page 21: Aplicaciones Web Seguras (Anti-SQLi)

21

App Web Anti-SQLi: PHP

En el lenguaje PHP, hay diferentes funciones que pueden servir de ayuda para usar con distintos sistemas de gestión de bases de datos. Si se usa MySQL, la función a usar es mysql_real_escape_string:

$query_result = mysql_query("SELECT * FROM usuarios WHERE nombre = \"" . mysql_real_escape_string($nombre_usuario) . "\"");

Francisco José Cruz Jiménez Aplicaciones Web Seguras

Page 22: Aplicaciones Web Seguras (Anti-SQLi)

22

App Web Anti-SQLi: RubyEn el Framework Ruby on Rails las consultas son verificadas automáticamente por cualquiera de los métodos de búsqueda incluidos. Por ejemplo:Project.find(:all, :conditions => ["name = ?", params[:name]])

La única forma de que un usuario mal intencionado pueda usar una inyección de SQL en RoR es que mediante código se transforme la variable a tipo string y se utilice como argumento de la búsqueda directamente.

Francisco José Cruz Jiménez Aplicaciones Web Seguras

Page 23: Aplicaciones Web Seguras (Anti-SQLi)

23

App Web Anti-SQLi: Perl

En lenguaje Perl, el método DBI::quote filtra los caracteres especiales:

$query = $sql->prepare ( "SELECT * FROM usuarios WHERE nombre = " . $sql->quote($nombre_usuario) );

Francisco José Cruz Jiménez Aplicaciones Web Seguras

Page 24: Aplicaciones Web Seguras (Anti-SQLi)

24

App Web Anti-SQLi: Java

En lenguaje Java, se puede usar la clase PreparedStatement:

Connection con = (acquire Connection) PreparedStatement pstmt = con.prepareStatement("SELECT *

FROM usuarios WHERE nombre = ?"); pstmt.setString(1, nombreUsuario); ResultSet rset = pstmt.executeQuery();

Francisco José Cruz Jiménez Aplicaciones Web Seguras

Page 25: Aplicaciones Web Seguras (Anti-SQLi)

25

App Web Anti-SQLi: 'or'1'=1La solución consiste en no concadenar los campos en la select que se va a usar para verificar un usuario y contraseña, un ejemplo de mal configuración:

Select idfrom t_usuarioswhere usuario='$usuario' and pass='$pass';

Francisco José Cruz Jiménez Aplicaciones Web Seguras

Page 26: Aplicaciones Web Seguras (Anti-SQLi)

26

App Web Anti-SQLi: 'or'1'=1Otro ejemplo:

Francisco José Cruz Jiménez Aplicaciones Web Seguras