Aportación Java México - PCJ - Seguridad de Aplicaciones Web con WebScarab

Un tema importante que en ocasiones olvidamos o descuidamos es la seguridad de las aplicaciones que desarrollamos o que solicitamos que desarrollen, en este articulo hablare de WebScarab una herramienta que permite analizar las vulnerabilidades de aplicaciones Web, forma parte del proyecto OWASP (Open Web Application Security Project) cuyo objetivo es determinar y combatir las causas que hacen que el software sea inseguro, es un proyecto de código abierto y sin ánimo de lucro.

Actualmente siguen existiendo sitios que basan parte de la seguridad en código javascript que se ejecuta del lado del cliente, este tipo de validaciones puede se evadido fácilmente con tan solo utilizar un Proxy local y modificar la petición antes de que llegue al servidor.

Principales características de WebScarab:

  1. Escrito en java(Portable)
  2. Revelar campos ocultos
  3. Permite interpretar y modificar WSDL antes de que llegue al servidor
  4. Recolección y análisis de Cookies
  5. Permite al usuario modificar peticiones y respuestas HTTP y HTTPS "al vuelo", antes de que alcancen el servidor o el navegador.
  6. El proxy de WebScarab es capaz de observar trafico HTTP y HTTPS
  7. Sustitución automatizada de valores en los parámetros de las peticiones para detectar vulnerabilidades como Cross Site Scripting XSS o SQL Injection

Existen muchas características no mencionadas que pueden consultar en la página oficial, en esta ocasión realizaremos un ejemplo muy sencillo, consiste en interceptar/modificar peticiones y respuestas realizadas entre el navegador y el HTTP/S Server.

Descarga & Instalación:

Se puede descargar con Java Web Start, Zip, Repositorio GIT, etc. En este caso utilizare la versión zip.

No hay que instalar solo extraer el zip descargado y desde línea de comandos colocarnos en la ruta de extracción para ejecutar:

java -jar webscarab.jar

Se carga la página de inicio, en la cual se pueden observar diferentes plugins, así como la vista principal “Sumary”. En este ejemplo se asume que tienen acceso directo a Internet (regularmente en las empresas se depende de un Proxy es necesario configurarlo en el menú Tools -> Proxy).

Configuración:

En este caso utilizaremos WebScarab como Proxy, así que es necesario configurar nuestro navegador (IE, Firefox, Chrome, etc.) , regularmente esto se configura en Tools -> Internet Options -> Connections -> LAN Settings.

Asumiendo que WebScarab esta en nuestra maquina colocaremos los siguientes valores aun que es claro que ustedes pueden configurarlos según sus necesidades

HTTP Proxy : localhost
Port : 8008

Iniciando:

  1. Iniciar el Proxy dando clic en el botón Start
  2. En el navegador entrar a un sitio de Internet por ejemplo Java México , se puede observar en la pestaña Sumary el flujo de conversación entre el navegador y el servidor.
  3. Si navegan por el sitio verán como se actualiza la conversación en WebScarab, de hecho vamos a intentar firmarnos al sistema con cualquier usuario, dentro del flujo se observara la petición de login con los siguientes datos
    • Method : POST
    • Host:
    • Path: /node
    • Params: ?destination=node
    • Status: 200 OK

    Si damos doble clic se pueden observar los datos enviados.

Interceptar petición
Para interceptar una petición y modificarla antes de que llegue al Server, es necesario entrar a la pestaña Proxy -> Manual Edit

Seleccionamos el método POST, si desea puede seleccionar mas de un metodo con CTRL + clic, ahora regresemos al navegador y enviemos una petición de login, ustedes observaran una pantalla similar a la que se muestra a continuación en la cual pueden cambiar los valores que gusten.

Dar clic en el boton Accept Changes para enviar la petición o en alguno de los otros botones para cancelar o abortar.

Por ejemplo podemos cambiar la contraseña por alguno de los siguientes valores para ver si logramos un SQL Injection
' or ''='
' or 'x'='x
" or "x"="x
') or ('x'='x
0 or 1=1

De hecho es un poco tedioso estar cargando valor por valor para lo cual WebScarab nos ofrece el plugin Fuzzer donde se pueden cargar archivos completos o definir expresiones regulares que generen diferentes combinaciones de contraseñas.

Como pueden imaginarse WebScarab se presta no solo para probar nuestras aplicaciones, así que bajo su responsabilidad, se utilizo la página de java México solo para demostrar la funcionalidad de esta herramienta

Referencias:

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de fcodiaz

Validacion en Cliente y Sevidor

algo que siempre se ovlida es la seguridad o se minimiza, me han preguntado entonces donde tengo que validar.. con javascript o en el servidor (con el leguaje q sea), yo aconsejo hacer doble validación, doble trabajo tal ves, pero creo que la validación en JS se debe seguir haciendo que aunque no nos garantiza nada hace la experiencia de usuario mucho mejor que tener que esperar un postback que me muestre el error, es obvio que queriendo hacer maldades estas validaciones no sirven para nada, por esa razón es indispenzable de igual forma validar los datos en el servidor que por desgracia el confiar en un request lo tenemos que hacer ya que es tan sencillo emular una request y enviar informacion al servidor.

si usamos modelos de programacion tipo MVC las validaciones pueden manejarse desde el Modelo generando expeciones como respuesta a la posible entrada de información errónea.

Imagen de morpheus

Validación en Cliente y Servidor

Creo que el tema de validación en cliente o en servidor es algo que todos algún día nos hemos preguntado, muchos le apuestan a javascript y otros
se inclinan por la validación en servidor...creo que ya depende del estilo de programación de cada quien, desde mi punto de vista es bueno hacer
algunas validaciones ligeras en el cliente y complementarlas con el servidor...Saludos!!

Imagen de ezamudio

Validación en Servidor

A fin de cuentas la única que es confiable es la validación en el servidor. Si el navegador tiene deshabilitado javascript, o si de hecho no es un navegador sino un bot que hace POST o GET directo a un URL entonces se brincan la validación de cliente.

Imagen de morpheus

Validación en Servidor

Totalmente de acuerdo, las validaciones que me refiero son solo por estética(complacer al usuario) para no permitir algunos caracteres y cosas por el estilo, aunque como bien comentan solo es seguro validar en el Server.

Por otro lado ya he actualizado la imágenes que no se veían, intente subirlas en base64 pero no logre que se vean completas …se nota q es mi primer post. Gracias por sus comentarios.