domingo, 18 de febrero de 2018

Las principales vulnerabilidades web

Cuando se va a atacar un sistema, lo último que se quiere es que salten todas las alarmas. Es por eso que usar fuentes online son una buena herramienta. Se puede utilizar hacking de buscadores para localizar URLs con paso de parámetros, para comprobar si éstos están correctamente validados, para buscar correos electrónicos u otra información que pueda extraerse de un determinado sitio: ficheros de backup o de configuración que hayan quedado indexados, etc. 

Un buscador muy utilizado es Shodan. Este buscador almacena toda la información pública que puede obtener de aquellos dispositivos que están expuestos a Internet. Entre otras cosas, podemos encontrar dispositivos con sus claves por defecto (routers, cámaras ip, etc), direcciones IP con los puertos que tienen abiertos, servicio y versión del mismo que corre en cada uno, certificados SSL, con sus respectivas suites de cifrado, etc. Una vez indexada una determinada IP en Shodan, evita tener que hacer una comprobación directa sobre el sistema, de manera que permite a un atacante conocer si un sitio web está correctamente actualizado, sin necesidad de lanzar un escaneo de puertos, que pueda delatarle a él.

METADATOS
Otra fuente de información importante son las fugas de información que se producen por culpa de los metadatos, que van incluidos en los documentos que se publican en Internet.
Con estos datos, es posible conocer nombres de usuario, equipos, sistemas operativos, versiones de software, etc. que se utiliza en la organización.
Si no se tiene cuidado, con estos datos es posible incluso realizar un mapa interno de la organización, desde los equipos cliente, con los usuarios de cada uno, hasta los servidores de los que se dispone, pasando por impresoras, etc.
Es por esto que es muy importante, antes de subir un documento o publicarlo, realizar una limpieza de metadatos del mismo.
Herramientas como FOCA, son de gran utilidad para comprobar qué información sensible estamos publicando, sin que seamos conscientes.

Principales vulnerabilidades web

Una vez que hemos visto lo importante que es la información acerca de nosotros que tenemos publicada, y que debemos intentar controlar, veamos qué vulnerabilidades más importantes puede presentar un sitio web.
En primer lugar nos situamos en el escenario, tenemos una plataforma montada sobre un sistema operativo, con su motor de base de datos, lenguajes, normalmente interpretados, certificados, etc. Ésta es la parte del servidor web en sí. Las vulnerabilidades que tendrá desde ese punto de vistas serán:

Configuración débil, por defecto o mal configurado. Esto suele producirse por intentar desplegar el servicio lo más rápido posible o por una confianza excesiva en el software utilizado, incluso por desconocimiento. Cuando se expone a Internet un sistema con su configuración por defecto, si se encuentra una vulnerabilidad en el mismo, el exploit por defecto funcionará. Es necesario revisar el servicio a desplegar y buscar una configuración suficientemente fuerte.

Comunicación insegura entre cliente y servidor. Es muy importante que la comunicación entre cliente y servidor esté cifrada, sobre todo, cuando se trata de envíos de formularios, por ejemplo, para autentificarse en sitio web. En muchas ocasiones, se configura el sitio web para usar cifrado, con una configuración débil, permitiendo protocolos inseguros, como SSLv2 y SSLv3, o suites de cifrado vulnerables, como MD5. Esto dará una falsa sensación de seguridad, el cliente verá que hay un certificado, que el sitio web, aparentemente está cifrado, y, sin embargo, por culpa de los protocolos permitidos, podría ser relativamente fácil descifrar esta comunicación. Es por ello que es necesario revisar el estado de la calidad en la configuración de nuestros certificados.

Software desactualizado. Una vez desplegado el sistema, independientemente de que se hiciese el trabajo correctamente, pasado el tiempo, el software se desactualiza. Se localizan vulnerabidades, se corrigen en versiones posteriores, etc. Es necesario llevar un control de las versiones utilizadas, así como mantener el software actualizado, en el menor tiempo posible, desde que se libera una nueva versión. En caso contrario, al cabo de un tiempo, nuestro sistema será vulnerable y existirán exploits públicos que permitirán atacarlo.

Vulnerabilidades de la aplicación

Estas vulnerabilidades son propias de la aplicación que se quiere desplegar, del código de la misma. Independientemente de que la plataforma sobre la que despleguemos la aplicación esté correctamente fortificada, si la aplicación posee vulnerabilidades, corremos el riesgo de que puedan encontrarse y ser  atacadas.

Las vulnerabilidades más comunes en una aplicación web son:

Cross-Site Scripting (XSS), ésta es una vulnerabilidad o, mejor dicho, un conjunto de vulnerabilidades, que permiten, utilizando los parámetros de entrada de la aplicación, modificar y añadir código a la misma.
Son vulnerabilidades que se encuentran en el servidor, pero que están destinadas a atacar al cliente.
Generalmente, se necesita que el cliente sigua un enlace de la aplicación, en el que se ha modificado algún parámetro, para permitir añadir código, que se ejecutará en el navegador del cliente.
Normalmente, el código inyectado será html o JavaScript y la intención será un robo de cookies del cliente, predicción del id de sesión, etc.
Esta vulnerabilidad se aprovecha de la confianza en el cliente en el sitio web: Verá que es el dominio de la aplicación y que, al seguir el enlace, llega realmente al sitio web que quería, no hay suplantación del mismo.

Básicamanente, podemos agrupar los XSS en dos grupos:

– XSS reflejados: El código modificado se elimina al cargar la página de nuevo. Está basado en la URL y, por tanto, al recargar la página, se elimina el mismo.

-XSS persistentes: El código modificado queda almacenado en la web.

La forma de corregir esta vulnerabilidad es filtrar y validar todas las entradas de la aplicación. No se debe utilizar nunca una variable que se recibe desde el cliente, confiando en que ésta tendrá un valor correcto. Los lenguajes de programación incluyen diferentes funciones que permiten filtrar el contenido de las variables, dependiendo de dónde las vayamos a utilizar.

Cross Site Request/Reference Forgery (CSRF)

Esta vulnerabilidad es una evolución de los XSS. En este caso, se va a explotar la confianza en el servidor sobre el cliente. Es decir, nos haremos pasar por un cliente legítimo, utilizando datos parciales del mismo.
Esta vulnerabilidad está presente en formularios. Cuando estos se envían al servidor, es necesario asegurarse que la petición es legítima y debemos asegurarnos que el cliente ha realizado la petición, realizando los pasos previos necesarios.
La forma más común para eliminar esta vulnerabiliad o, al menos, mitigarla, es la inclusión de tockens dinámicos. En los actuales FrameWorks, suelen incluirse mecanismos para añadir esta protección a los formularios, de una forma muy sencilla. En algunos, por ejemplo, Laravel (utilizado para desarrollo de aplicaciones en PHP), basta añadir una etiqueta a la plantilla del formulario, para que se añada al mismo el tocken anti-csrf.
A continuación os muestro los nombres de los diferentes XSS más comunes, que dependen del lugar donde se consiga inyectar el código deseado.
  • DOM Cross Site Scripting (DOM XSS)
  • Cross Site Flashing (XSF)
  • Cross Frame Scripting (XFS)
  • Cross Zone Scripting (XZS)
  • Cross Agent Scripting (XAS)
  • Cross Referer Scripting (XRS)
SQL INJECION
Si los ataques XSS son peligrosos, ya que pueden provocar un robo de sesión, los SQLi son aún más porque permiten acceder y manipular la BBDD. La idea es modificar las consultas que hace la aplicación a la base de datos, aprovechando las entradas de usuario a la aplicación.
Veamos una estructura de una consulta SQL típica.
SELECT [Columnas] FROM [Tabla] WHERE [Condiciones]
Primero se seleccionan las columnas que queremos mostrar, después se indica la BBDD y la tabla de la que queremos obtener las columnas y, por último, las condiciones para filtrar esos datos.
Cuando se van a realizar consultas, se realizan con un usuario de BBDD. Este usuario tendrá diferentes permisos.
Otra cosa a tener en cuenta es que, los motores de BBDD, tienen sus propias tablas para almacenar metadados, por ejemplo, las bases de datos que hay, qué tablas tiene cada BBDD, las columnas y tipo de cada una, información de usuarios, etc.
Hay que tener presente que, cuando se puede hacer un SQL injection, se hará con los permisos que disponga el usuario con el que se ejecuta.
Existen diferentes ataques de SQL injection, dependiendo de cómo se consiga inyectar y modificar la consulta, para obtener los datos que se desean.
  • Bypass de un login mediante SQL Injection
  • SQL Injection (Mediante UNION)
  • Serialized SQL Injection
  • Boolean-Base SQL Injection
  • Time-Base SQL Injection
  • Heavy-Queries SQL Injection
  • Stack-Queries
Ahora vamos a explicar cómo se realizaría un SQLi.
Empezaremos explicando un SQLi de tipo Union.
Lo primero es tener claro cómo sería la estructura de la consulta que se desea modificar. Cuando se va a utilizar Union para realizar la inyección, lo primero que debe hacerse es negar la consulta original, para que esa no sea la que devuelva la información.
Por lo tanto, se debe añadir una condición que siempre sea falsa.
SELECT ID, Nombre FROM Clientes WHERE ID=1 AND 1=0
Una vez que sabemos cómo negar la consulta legítima, vamos a testear cuantas columnas devuelve la consulta original. Esto es importante, porque los SQLi deben devolver exactamente el mismo número de columnas. Para ello, vamos probando mostrando un valor constante, luego dos, etc. hasta que veamos que tenemos un resultado.
http://dominio/index.php?id=1 AND 1=0 UNION SELECT 1
http://dominio/index.php?id=1 AND 1=0 UNION SELECT 1,2
...
Hecho esto, ya sabemos cuantas columnas debe devolver nuestra consulta, a partir de aquí, habrá que intentar obtener información de los nombres de tablas que hay en la BBDD, luego de los nombres de columnas por cada tabla y, una vez tengamos esa información, podremos ir extrayendo aquello que necesitemos.
user(): usuario que ejecuta las consultas en la aplicación
database():la base de datos usada actualmente
http://dominio/index.php?id=1+and+1=0+union+select+1,2,user(),database()
Otro escenario común es utilizar un consulta para validar la autentificación de un usuario. Se consulta en la BBDD si el nombre de usuario y password existen y, si devuelve un registro, entonces se le permite el acceso. Si alguna de estas variables es vulnerable a un SQLi, se puede forzar la consulta para que siempre devuelva algo, de manera que podremos saltar el login de la aplicación.
Por supuesto, existen herramientas que automatizan esto. Por ejemplo, SQLMap, nos permite automatizar los SQLis y, una vez detectado un parámetro vulnerable, nos permite extraer información de una manera muy cómoda. Incluso nos permitirá abrir una shell en el servidor, si esto es posible con el usuario actual, subir ficheros, realizar elevación de privilegios, etc.
Para prevenir los SQLi, se deben parametrizar las consultas y es necesario filtrar y comprobar el valor de las entradas. También es muy importante restringir al máximo los permisos del usuario con el que la aplicación se conecta a la BBDD y, por supuesto, para cada BBDD, utilizar un usuario diferente. Esto es muy importante y, aunque es una mala práctica usar una misma instancia del motor de BBDD para diferentes aplicaciones, es un escenario muy común. Por este motivo, si un usuario de la BBDD tiene permisos sobre varias BBDD de diferentes aplicaciones y una de éstas presenta esta vulnerabilidad, el atacante podría obtener los datos del resto de aplicaciones.
Además de esto, es muy importante ocultar los errores provocados por consultas en BBDD. Esto es porque la forma de detectar un SQLi es intentar forzar un error (la típica ‘) y, una vez se comprueba que existe, si se muestra al usuario, éste puede extraer información, como el motor de BBDD usado, etc., con lo que se le facilitará la realización del ataque.

He intentado explicar de una forma sencilla las principales vulnerabilidades. ¡Espero que os haya gustado!

https://hacking-etico.com/2017/04/04/las-principales-vulnerabilidades-web/#more-5489

miércoles, 27 de diciembre de 2017

Mi lista de libros para el 2018



“Los libros son los amigos más silenciosos y constantes; son los consejeros más accesibles y los maestros más pacientes.”

-Charles William Eliot-


1. Fugas o la ansiedad de sentirse vivo - James Rhodes

Traducción: Ismael Attrache

James Rhodes intenta averiguar cómo hacer soportable lo insoportable en las situaciones más inimaginables. A lo largo de cinco meses de agotadora gira musical, tocando frente a miles de personas y con la incesante compañía de las torturadoras voces de su cabeza, a James no le queda otro remedio que lidiar con una mente salvaje y llena de recovecos.

Afortunadamente, todavía le queda la música, siempre. Bach, Chopin, Beethoven… Su Santo Grial, su mecanismo de supervivencia. Solo eso.

Estas son unas memorias importantes y necesarias. Sobre sobrellevar la rutina al mismo tiempo que te sientes incapaz de escapar de la locura. Sobre no poner el listón de la felicidad demasiado alto. Sobre aceptar que la vida es algo imperfecto y turbulento.

James Rhodes explora los mitos que rodean a la depresión, la ansiedad y el estrés (las plagas de nuestra sociedad hoy en día), los degrana en un millón de pedazos y los vuelte a recomponer con el sentido del humor y la sensibilidad que lo caracterizan.




2. De amor y guerra, antología de relatos


Colección benéfica de relatos a favor de la Fundación FIVAN.

Innata es la Guerra y el Amor al ser humano, tanto como inherente es la dualidad en su propia condición de ser humano: no existe Bien sin Mal, ni Alma sin Cuerpo; ni Amor sin Odio ni Muerte sin Vida. Todos los extremos se enriquecen y generan los conflictos con los que los autores de este volumen nos tejen, cual Penélope, un manto de pasiones dispares y encontradas que aúnan esta especial dicotomía. Así nacen y se expresan, como un principio y como un fin, dieciocho magníficos relatos.

Adentrarse en el mundo de Relatos de amor y guerra equivale a un viaje en esa bifurcación que suma prosa y verso, aflicción e hilaridad, letras noveles con escritores consagrados, cuentistas y poetas del Viejo y el Nuevo Continente… Literatura que baila en torno a una fuerte presencia femenina que se desliza entre los recovecos del amor y de la guerra como una ninfa; a veces triunfadora, otras, vencida.

sábado, 14 de octubre de 2017

Lugares mágicos... Bibliotecas del mundo



Las bibliotecas son lugares mágicos que nos permiten acceder a todo el conocimiento de la humanidad. Aunque ahora es muy fácil acceder a este contenido gracias a internet.   

A mí me sigue apasionando entrar a una biblioteca y perderme por los pasillos llenos de libros y buscar un rincón para viajar entre las páginas de un buen libro.

Por eso lo mismo que tengo mi lista de mis futuros viajes, tengo una lista especial de bibliotecas que deseo visitar:


  1. Biblioteca Nacional de Praga, Praga, República Checa 
  2. Biblioteca del Trinity College, Dublin, Irlanda 

domingo, 17 de septiembre de 2017

La ciencia y las humanidades deben unirse para un futuro mejor

Existe una gran desconfianza hacia las humanidades, sólo escuchamos que las carreras del futuro son ciencia, tecnología, ingeniería y matemáticas. No sólo se va encaminado a los alumnos a las carreras de ciencias, sino que a las universidades se le exigen que tienen que invertir más en éstas, dejando a un lado humanidades.

En el sistema educativo, se ha elegir si se estudia Ciencias o Humanidades a una edad excesivamente temprana. Esto hace que, los alumnos que eligen Ciencias, dejen de estudiar materias relacionadas con las humanidades. Dado que se hace a una muy corta edad, estos alumnos no alcanzan a tener una base suficiente. Si le sumamos que todo el sistema les empuja a estudiar Ciencias, el resultado es que ,cada vez más, se pierde el conocimiento en estas materias.

Esto consigue que los niños, cuando salen del sistema educativo, pueden ser grandes especialistas en su área, pero no tienen una base en temas básicos de cultura general, como pueda ser Historia. Además, no tienen una base para ser críticos, pueden ser manipulables, etc.

Mi opinión es que debemos darles más importancia a las humanidades. Es decir,  lo que hoy es necesario puede tener fecha de caducidad y no ser importante en el trascurso de los años. Sin embargo, las humanidades siempre son importantes.

Las Humanidades son la base de nuestra especie. Debemos trasmitir de generación en generación la cultura, la lengua, la historia, el arte,etc. Wilson en su libro “The Meaning of Human Existence”, lo explica con un magnífico ejemplo:

Imaginar que un extraterrestre llegase a la Tierra. ¿Qué necesita para aprender de la raza humana?

¿La última aplicación creada para Android? ¿El último modelo de SmartPhone? Lo que realmente necesitaría aprender es lo que nos distingue como especie, nuestra historia, lengua, costumbres, etc.

Conclusión: Debemos dar importancia a las humanidades y devolver su espacio en el sistema educativo, para que el alumno se pueda expresar bien, argumentar y tener una mente abierta y critica ante las distintas situaciones que se puede encontrar a lo largo de la vida.

domingo, 11 de junio de 2017

MOSCOWC0N 2017

He tenido el lujo de poder compartir una gran aventura con grandes profesionales y amigos en Moscú.

Todo empezo con un tuit el 11 de enero 2017:



Yo, sin pensarlo, envié un correo diciendo "estoy super interesada en dar una charla". Realmente no sabía nada de la organización pero, mis ganas de viajar, ganaron a todas las preguntas sin respuesta, dudas y miedos. Al tiempo fui descubriendo quién estaba detrás de está maravillosa aventura: Javier Conde, Luis Jurado, David Marugán.

martes, 2 de mayo de 2017

Diario de un opositor en paro #DOPARO

Hoy no voy hablar de nada técnico, ni relaccionado con la informática. Os voy hablar de un libro que he leído, Diario de un opositor en paro  que me ha enganchado de tal forma que estoy deseando que el autor Ángel Company Albert, publique otra obra ;-)

Además de este libro tiene un maravilloso poemario Mikrokosmos, y un relato maravilloso, La mujer despechada, premiado con el II Premio Digi-Book de Relatos. 







"...Cojamos todos juntos la pluma
– pincel - del escritor,
se escuche una nueva música,
de paz, libertat y amor.
Invoquemos todos juntos las artes
para hacer un mundo nuevo." 
Cambio - Mikrokosmos


Sobre el libro en cuestión os puedo decir que el autor realiza un análisis de lo que ha supuesto la crisis económica a la dinámica laboral del país. Reflejando en cada página las vivencias, frustraciones y sacrificio de Luis en su día a día en busca de conseguir un futuro mejor en una España rota por la crisis provocada por políticos y empresarios…, allá por el 2007 y que por desgracia aún seguimos inmersa.


Para mí es un libro necesario en el que nos identificamos con el protagonista. El autor narra un tema serio y difícil con un toque de humor, utilizando una prosa irreverente y directa, que en mi caso consigue recordarme a mi director favorito Quentin Tarantino.

 En pocas palabras es un libro que ME ENCANTA.
¡Si todavía no lo habéis leído ya estáis tardando!

PD: También tiene un corto precioso "Càncer d'amor" le otorgaron el "Primer premio del  II concurso de cortometrajes 'Acurta't' vila d'Agullent"

sábado, 18 de febrero de 2017

Requisitos para el taller de "Hacking Ético Web - Iniciación"


El  25 de febrero participaré con el taller "Hacking Ético Web - Iniciación" en el Sábado Hacker de Uned Guadalajara y HoneySEC con el patrocinio del Patronato de Cultura del Ayuntamiento de Guadalajara.

El taller es gratuito y puedes inscribirte aquí


Requisitos: