• No se han encontrado resultados

Aspectos Básicos de la Seguridad en Aplicaciones Web

N/A
N/A
Protected

Academic year: 2018

Share "Aspectos Básicos de la Seguridad en Aplicaciones Web"

Copied!
18
0
0

Texto completo

(1)

1 Profesor:

MTI. LIA. Juan Antonio León López.

Aspectos Básicos de la Seguridad en Aplicaciones Web

Introducción a la seguridad en sistemas web

En la actualidad el crecimiento de internet ha impactado directamente en la seguridad de la información manejada cotidianamente. Sitios de comercio electrónico, servicios, bancos e incluso redes sociales contienen información sensible que en la mayoría de los casos resulta ser muy importante.

Se puede decir que uno de los puntos más críticos de la seguridad en Internet son las herramientas que interactúan de forma directa con los usuarios, en este caso los servidores web. Es común escuchar sobre fallas en los sistemas de protección de los servidores más frecuentemente utilizados, por ejemplo Apache, NGINX, IIS, etc. (Build With, 2016) O en los lenguajes de programación en que son escritas las aplicaciones. Sin embargo, la mayoría de los problemas detectados en servicios web no son provocados por fallas de ninguna de estas partes, si no que los problemas se generan por malas prácticas de parte de los programadores.

(2)

2 Profesor:

MTI. LIA. Juan Antonio León López.

1. Problemas principales en la programación de sistemas web

Gran parte de los problemas de seguridad en las aplicaciones web son causados por la falta de seguimiento en dos rubros muy importantes de los que depende cualquier aplicación, las entradas y salidas del sistema. Ver Ilustración 1.

Ilustración 1. Entrada y salida del sistema.

(3)

3 Profesor:

MTI. LIA. Juan Antonio León López.

2. Prácticas básicas de seguridad web 2.1 Balancear riesgo y usabilidad

Si bien la usabilidad y la seguridad en una aplicación web no son excluyentes una de la otra, alguna medida tomada para incrementar la seguridad con frecuencia afecta la usabilidad. Normalmente siempre se debe pensar en las maneras en que usuarios ilegítimos nos pueden atacar y la facilidad de uso para los usuarios legítimos.

Es conveniente emplear medidas de seguridad que sean transparentes a los usuarios y que no resulten engorrosas en su empleo. Por ejemplo, el uso de un login que solicita el nombre de usuario y contraseña (Ilustración 2.), permite controlar el acceso de los usuarios hacia secciones restringidas de la aplicación. Este paso adicional, es una característica que impacta en la rapidez de acceso a la información por parte del usuario, pero que proporciona un elemento adicional de protección.

A mayor complejidad de nuestro sitio, aumenta el riesgo de que se sufra un ataque debido a sus características más elaboradas, es por eso que deben considerarse opciones de seguridad necesarias y sencillas pero eficientes, que ayuden a mitigar cualquier característica que la haga vulnerable.

(4)

4 Profesor:

MTI. LIA. Juan Antonio León López.

2.2 Rastrear el paso de los datos

Es muy importante mantener conocimiento de los pasos que ha recorrido la información en todo momento. Conocer de dónde vienen los datos y hacia dónde van. En muchas ocasiones lograr esto puede ser complicado, especialmente sin un conocimiento profundo de cómo funcionan las aplicaciones web.

En las aplicaciones web, existen maneras de distinguir los orígenes de los datos y poder así reconocer cuando los datos pueden ser dignos de confianza y cuando no.

Normalmente existen arreglos globales en la aplicación (por ejemplo en PHP los arreglos $_GET, $_POST, $_COOKIE y $_SESSION entre otros) que sirven para identificar de forma clara las entradas proporcionadas por el usuario. Si esto lo combinamos con una convención estricta para el nombrado de las variables podemos tener un control sobre el origen de los datos usados en el código.

Además de entender los orígenes de la información se debe dar la misma importancia a entender cuáles son las salidas que tiene la aplicación y hacia a donde se devuelven los resultados.

2.3 Filtrar entradas

El filtrado es una de las piedras angulares de la seguridad en aplicaciones web. Es el proceso por el cual se prueba la validez de los datos. Si nos aseguramos que los datos son filtrados apropiadamente al entrar, podemos eliminar el riesgo de que datos contaminados sean usados para provocar funcionamientos no deseados en la aplicación.

(5)

5 Profesor:

MTI. LIA. Juan Antonio León López.

Al usar listas blancas asumimos que los datos son inválidos a menos que prueben ser validos al encontrarse patrones coincidentes. Una limitante de usar este punto de vista es considerar inválidos datos que debieron considerarse válidos pero que no fueron tomados en cuenta patrones similares al construir la lista blanca.

Si llegamos a utilizar algún framework se debe tener especial cuidado, ya que estos brindan tantas comodidades que muchos desarrolladores inexpertos los utilizan sin preocuparse en entender el código que están observando y por lo tanto implementan medidas de validación en entradas, variables, entre otros, sin entender exactamente el funcionamiento de la solución empleada.

Es importante notar que en los lenguajes de programación existen una buena cantidad de filtros pero evidentemente estos no llegan a cubrir todas las necesidades que puede tener un desarrollador. En este caso, se llegan a utilizar funciones creadas y adaptadas a nuestras necesidades a modo de filtro especial, en la mayoría de estos casos es donde se puede encontrar el uso de expresiones regulares.

En la Ilustración 3 tenemos un ejemplo en PHP de variables GET sanitizadas mediante una función la cual valida que únicamente sean números enteros (FILTER_SANITAZE_NUMBER_INT) y no contengan etiquetas HTML (strip_tags).

Ilustración 3. Filtrado avanzado usando funciones de PHP.

(6)

6 Profesor:

MTI. LIA. Juan Antonio León López.

2.4 Escapado de salidas

Otro punto importante de la seguridad es el proceso de escapado y su contraparte para codificar o decodificar caracteres especiales de tal forma que su significado original sea preservado. Si llegamos a utilizar una codificación en particular es necesario conocer los caracteres reservados los cuales serán necesarios escapar.

El proceso de escapado debe estar compuesto a su vez por los siguientes pasos:

 Identificar las salidas.  Escapar las salidas.

 Distinguir entre datos escapados y no escapados.

El proceso de escapado debe adecuarse al tipo de salida de que se trate (si es al cliente, a la base de datos, etcétera). Para la mayoría de los destinatarios, existen funciones nativas en los lenguajes de programación para esta finalidad. En alguno de los casos como podría ser el de base de datos es importante incluso observar la codificación en la que son enviados.

Para distinguir entre los datos que han sido escapados de los que no, es recomendable también usar una convención de nombres. Es necesario una función de escapado para cada caso, como ejemplo en PHP se tomarían las siguientes consideraciones para:

 Correo electrónico, se puede usar la función filter_var() con los argumentos de FILTER_VALIDATE_EMAIL.

 Bases de datos SQL, es más recomendable utilizar consultas parametrizadas pero podríamos utilizar mysql_real_escape_string.  Líneas de comandos, se puede hacer uso de la función escapeshellarg().

(7)

7 Profesor:

MTI. LIA. Juan Antonio León López. 3. Clasificacion de ataques web. 3.1 Ataques URL de tipo semántico

Este tipo de ataques involucran a un usuario modificando la URL a modo de descubrir acciones a realizar que originalmente no están planeadas para ser manejadas correctamente por el servidor. La implementación de cualquier formulario debe contemplar validaciones necesarias para evitar el esas acciones y se deben realizar adecuaciones de acuerdo a nuestras entradas, en la ilustración 5 se muestra un formulario de login con campos de usuario y contraseña.

Ilustración 4. Formulario con envio de datos por metodo GET

En el ejemplo anterior los parámetros, que son enviados con el método GET, se agregan directamente en la URL, lo que produce que atacantes inexpertos puedan utilizarlos, ya que son solo un poco más fáciles de capturar y modificar que los enviados de forma oculta desde el navegador (POST). Un ejemplo del envío por GET es el de la ilustración 5.

(8)

8 Profesor:

MTI. LIA. Juan Antonio León López.

3.2 Ataques de Cross-Site Scripting

Cross-Site Scripting (XSS) es un tipo de vulnerabilidad de seguridad informática típicamente encontrada en aplicaciones web que permiten la inyección de código por usuarios maliciosos en páginas web. Los atacantes típicamente se valen de código HTML y de scripts ejecutados en el cliente. (OWASP, 2014)

(9)

9 Profesor:

MTI. LIA. Juan Antonio León López.

3.3 Ataques de Cross-Site Request Forgery

Este tipo de ataque permite al atacante enviar peticiones HTTP a voluntad desde la máquina de la víctima. Es difícil determinar cuándo una petición HTML se ha originado por un ataque de este tipo.

Cuando un atacante conoce el formato que debe tener una URL para lograr la ejecución de una acción en el sistema, ha logrado encontrar la posibilidad de explotar este tipo de ataques. Ahora lo que necesita el atacante es simplemente hacer que una víctima visite la URL.

Un recurso que se utiliza comúnmente para realizar este tipo de ataques suele tener embebida la petición en una imagen. En este caso el atacante sólo necesita crear alguna etiqueta HTML del siguiente tipo:

<img src="http://ejemplo.org/compra.php?param=valor&param2=valor" />

(10)

10 Profesor:

MTI. LIA. Juan Antonio León López.

3.4 Peticiones HTTP falsificadas

Un ataque más sofisticado que el anterior es enviar peticiones falsas empleando herramientas especiales para este propósito.

Para ello, se emplean herramientas de línea de comandos o plugins agregados a los navegadores, con estos se pone a la escucha de los servicios web que típicamente se conectan a través del puerto 80. En la ilustración 7 podemos observar los campos que pueden modificarse con Tamper Data.

Ilustración 7. Headers interceptados.

(11)

11 Profesor:

MTI. LIA. Juan Antonio León López.

4. Seguridad de las aplicaciones y su relación con las bases de datos

La mayoría de las aplicaciones web son usadas como un conducto entre fuentes de información y el usuario, esto es, las aplicaciones web son usadas para interactuar con una base de datos.

(12)

12 Profesor:

MTI. LIA. Juan Antonio León López.

4.1 Exposición de Credenciales de Acceso

Uno de los asuntos principales a ser cuidados cuando se utiliza una base de datos es el almacenamiento de las credenciales de acceso a ella.

Los datos de usuario y password son considerados sensibles, por lo que deben tener garantizada una atención especial. En archivos de configuración es común encontrar estos datos los cuales se encuentran como texto en claro. Ver ilustración 8.

Ilustración 8. Código PHP con contraseñas de acceso a base de datos.

La intercepción o acceso no autorizado de esta información podría comprometer los servidores de bases de datos o gestores de contenidos en donde estén alojados. Si por alguna razón no fuera posible localizar al archivo que contiene esta información fuera del directorio raíz, es necesario configurar el servidor web para rechazar las peticiones de recursos que no deben ser accesibles.

(13)

13 Profesor:

MTI. LIA. Juan Antonio León López.

La inyección de código SQL es la vulnerabilidad número uno en el top de OWASP (OWASP, 2015). Para que exista una vulnerabilidad de SQL Injection se requieren dos fallas por parte del programador:

1. Fallas en el filtrado de los datos.

2. Fallas en el escapado de los datos al enviarlos a la base de datos (escapado de salida).

? Ilustración 9. Descripción básica de SQL Injection.

Ninguno de estos pasos cruciales debe ser omitido, y los dos pasos requieren especial atención para poder minimizar los errores. Afortunadamente los ataques de SQL Injection son fácilmente evitables, mientras filtremos y escapemos las salidas.

4.3 Exposición de datos

(14)

14 Profesor:

MTI. LIA. Juan Antonio León López.

Para asegurar que no se almacenan datos como texto en claro en la base de datos, se pueden realizar procedimientos de hash a las cadenas almacenadas para que no sea entendible la información a simple vista. Se debe considerar el costo de esta implementación ya que habría que obtener el hash al insertarlo y al extraerlo realizar la operación inversa, lo que conllevaría a que la aplicación tarde un poco más en responder.

5. Páginas privadas y los sistemas de autenticación

La autenticación consiste en verificar la identidad de un usuario. Comúnmente el procedimiento involucra un nombre de usuario y una contraseña a revisar. Muchas aplicaciones tienen recursos que son accesibles sólo para los usuarios autenticados, así como recursos totalmente públicos.

5.1 Ataques de fuerza bruta

Este tipo de ataque es un método de ensayo y error utilizado para obtener información de una contraseña, clave o número de identificación personal, entre otros. Funciona mediante la generación de un gran número de intentos consecutivos para el valor de los datos deseados. Un ataque de este tipo agota todas las posibilidades sin preocuparse por cuales opciones tienen mayor probabilidad de funcionar.

(15)

15 Profesor:

MTI. LIA. Juan Antonio León López.

5.2 Espionaje de contraseñas (Password Sniffing)

Cuando un atacante tiene los medios para analizar el tráfico entre los usuarios y el servidor de la aplicación, debemos preocuparnos por la exposición que pueden tener los datos en el trayecto, sobre todo cuando se trata de credenciales de acceso.

Ilustración 10. Captura de tráfico HTTP con contraseña enviada en claro.

(16)

16 Profesor:

MTI. LIA. Juan Antonio León López.

5.3 Cookies o variables de sesión persistentes

Cuando un usuario permanece en el estado de registrado después de un tiempo no razonable (por ejemplo, cuando no expira la sesión), tenemos un problema de registros persistentes.

Este tipo de problemas disminuyen la seguridad de nuestro mecanismo de autenticación. Generalmente son causados por una cookie persistente, un ticket enviado al usuario o alguna variable de sesión establecida que no se considera como expirado jamás o que no cambia en cada nuevo registro establecido por el usuario.

(17)

17 Profesor:

MTI. LIA. Juan Antonio León López.

6. Conclusiones

La seguridad en aplicaciones Web involucra principalmente al desarrollador, aunque con gran frecuencia se encuentran defectos que pueden ser aprovechados por atacantes en las tecnologías en que se basan los sistemas web (Sistemas Operativos, Servidores Web, Servidor de Base de Datos, etc.) la atención principal debe dirigirse a los defectos propios al desarrollo nuestras aplicaciones.

Todo programador debe estar consciente que el manejo de las peticiones, para aceptarlas o rechazarlas, deben estar los datos o variables recibidas no cumplan con las características esperadas o predefinidas. Todas las entradas del sistema deben pasar por el filtrado de los datos contenidos para confirmar su usabilidad. Además para el programador debe ser claro y fácil de identificar cuando una variable ya ha sido sometida al proceso de limpieza, de esta forma evitaremos tener que confiar en la memorización o tener que hacer un mapa de los procesos ejecutados por cada línea de código ejecutada de manera previa.

Otro aspecto importante a considerar son los procesos de salida de la información del sistema. Es importante siempre considerar el significado que pueda tener la información enviada en su nuevo contexto, y en el caso de poder crear problemas de interpretación de las salidas, escaparlas para preservarlas. Al igual que en el proceso de filtrado, es importante mantener un control sobre la codificación que tienen los datos antes de enviarlos a su nuevo contexto.

Para mayor información y como solucionar los problemas antes mencionados les recomendamos seguir las Sugerencias de Seguridad para Sitios Web (Aguilar & Hernández, 2014)

(18)

18 Profesor:

MTI. LIA. Juan Antonio León López.

7. Referencias

Aguilar, A. & Hernández, A. (25 de Abril de 2014). Obtenido de Sugerencias de Seguridad para Sitios Web: http://www.seguridad.unam.mx/documento/?id=1143

Built With. (26 de Enero de 2016). Web Server Usage Statistics. Obtenido de http://trends.builtwith.com/Web-Server

Aguilar, A. (21 de Agosto de 2015). Obtenido de ¿Qué es y cómo opera un ataque de Cross-Site Scripting (XSS)?: http://www.seguridad.unam.mx/documento/?id=35

OWASP. (3 de Febrero de 2014). Obtenido de Top 10 2013-A3-Cross-Site Scripting (XSS): https://www.owasp.org/index.php/Top_10_2013-A3-Cross-Site_Scripting_(XSS)

OWASP. (21 de Agosto de 2015). Obtenido de Top 10 2013-Top 10: https://www.owasp.org/index.php/Top_10_2013-Top_10

Referencias

Documento similar

Cedulario se inicia a mediados del siglo XVIL, por sus propias cédulas puede advertirse que no estaba totalmente conquistada la Nueva Gali- cia, ya que a fines del siglo xvn y en

El nuevo Decreto reforzaba el poder militar al asumir el Comandante General del Reino Tserclaes de Tilly todos los poderes –militar, político, económico y gubernativo–; ampliaba

Products Management Services (PMS) - Implementation of International Organization for Standardization (ISO) standards for the identification of medicinal products (IDMP) in

Products Management Services (PMS) - Implementation of International Organization for Standardization (ISO) standards for the identification of medicinal products (IDMP) in

This section provides guidance with examples on encoding medicinal product packaging information, together with the relationship between Pack Size, Package Item (container)

Package Item (Container) Type : Vial (100000073563) Quantity Operator: equal to (100000000049) Package Item (Container) Quantity : 1 Material : Glass type I (200000003204)

D) El equipamiento constitucional para la recepción de las Comisiones Reguladoras: a) La estructura de la administración nacional, b) La su- prema autoridad administrativa

b) El Tribunal Constitucional se encuadra dentro de una organiza- ción jurídico constitucional que asume la supremacía de los dere- chos fundamentales y que reconoce la separación