Mostrando entradas con la etiqueta Vulnerabilidad. Mostrar todas las entradas
Mostrando entradas con la etiqueta Vulnerabilidad. Mostrar todas las entradas

miércoles, 11 de abril de 2012

La inseguridad por la sensación de seguridad

La seguridad relacionada con el uso de Internet desde nuestro ordenador, tablet o smartphone es algo que está de constante actualidad. Es raro el día que no se publica la aparición de una vulnerabilidad en uno u otro sistema operativo o programa, un nuevo malware, en cualquiera de sus variedades, robos de información, suplantación de identidad y un largo etcétera de casos en los que la seguridad es, o puede ser comprometida. Dicho así, parece que tener un dispositivo conectado a Internet es como "jugar al fútbol en un campo de minas".

Por si todo esto fuera poco, también casi a diario, aparecen noticias de aplicaciones que registran nuestra actividad, localización, pautas de uso, etc. y que esta información es enviada al proveedor que suministra la aplicación, sin el consentimiento del usuario.

Ya por terminar; aunque la lista no acaba aquí; están los Google, Facebook, Twitter y demás, que saben que pié calzamos, cual es nuestra comida favorita, donde vamos de vacaciones y si te descuidas, cuantas veces miccionamos al cabo del día.

Bien, pues a pesar de lo que pueda parecer un panorama desalentador, para la mayoría de los "usuarios", existe una sensación de seguridad, que aparte de ser irreal e inconsciente, no hace más que provocarles mayor inseguridad. Un ejemplo sencillo, es lo que ocurre con el antivirus: 

A - Yo tengo antivirus en mi ordenador, no hay problema.
B - Pero... ¿tienes actualizados los parches de seguridad de tu sistema operativo?
A - Y eso, ¿que es?
A - ¿No será un mensaje que me sale cada poco tiempo diciendo que instale no se que cosa?. No le digo que sí, porque no me atrevo.
B - Y el antivirus, ¿lo tienes actualizado?
A - Supongo!. Eso se hace solo ¿no?
A - No le hago caso, porque cada dos por tres me está dando el coñazo de que renueve la licencia.
A - Bueno, hasta ahora nunca he tenido ningún problema. Ahora el ordenador me va más lento y me salen unas ventanas que no se de que son, pero las cierro y no no pasa nada.

No, no exagero. Esta conversación la he tenido muchas veces.

La verdad es que para un usuario de a pié, todo esto es muy complicado y le sobrepasa. No me extraña!.

En lado opuesto, están los "listos", que saben casi de todo, que usan Linux (parcheado al último nivel), porque no tiene problemas de virus, es gratis (no le hacen la cama a Microsoft) y además hay aplicaciones gratis para lo que quieras. Además, como todo es código abierto, puedes leer el código y ver que no te están engañando. Otro ejemplo:

A - ¿Que tal te apañas con el Office 2010?
B - Yo paso de Microsoft, yo uso OpenOffice en mi Ubuntu.
A - ¿Solo usas Linux?
B - Si, es lo más seguro, no tiene virus, además tengo instalado Firestarter, que está basado en IPTables. Es de lo mejorcito.
B - Además, ahora estoy usando TOR para que no me puedan rastrear y no puedan saber mi IP. Así me puedo meter en cualquier sitio sin peligro.

Esta segunda conversación, tal cual, no la he tenido con nadie y evidentemente es una parodia, pero he tenido conversaciones parecidas con algún que otro aprendiz de hacker, que tras leer en un foro que usando TOR (por si alguien tiene curiosidad, esta es la web del Proyecto TOR: https://www.torproject.org/), no te pueden rastrear, se ha lanzado a "intentar" hacer alguna que otra tontería, amparándose en su sensación de seguridad; o más bien impunidad; que cree tener.

El problema no es que TOR no funcione, que funciona, el problema es que no se ha tomado la molestia de leer lo que se puede y no puede hacer y las precauciones que hay que tomar para que realmente sea efectivo.

No quiero que ninguno se me enfade con este post; sobre todo tú, Eneko ;-) , que seguro que los que recabáis en este blog no pertenecéis a ninguno de estos dos colectivos, pero esto es como las "meigas", que "haberlas, haylas", o ¿no?.

lunes, 3 de octubre de 2011

Ataques por SQLInjection, un clásico

Afortunadamente, cada vez es más difícil encontrar una web vulnerable a un ataque por SQLInjection, en realidad solo es cuestión de aplicar buenas prácticas en el desarrollo. Algo tan sencillo como hacer convenientemente un parseo previo de los datos introducidos en nuestra web, nos puede evitar sobresaltos por ataques como SQLInjection o XSS, por ejemplo.

Aunque por lo general, protegerse ante este tipo de ataques es una práctica habitual, como tan habitual es protegerse ante un fallo inesperado de tu programa, sencillamente con instrucciones Try/Catch, por ejemplo, la verdad es que aún podemos encontrar "descuidos". Estos descuidos son muy fáciles de corregir, pero de no hacerlo a tiempo, si los "señores del sombrero negro" lo descubren, a buen seguro lo van a aprovechar, o sencillamente se van a divertir borrando o manipulando nuestros datos.

De vez en cuando, navegando por la red, cuando accedo a un formulario de Usuario/Contraseña, suelo tener la tentación de comprobar si han sido cuidadosos o no, con la diferencia de que cuando lo encuentro; yo, que soy un caballero :-); aviso de la desprotección.

Por lo general, cuando un formulario de Usuario/Contraseña está un poco descuidado de aspecto, es probable que también esté descuidado en protección.

Algo tan sencillo como introducir una comilla [ ' ] en el campo del Usuario y si al Aceptar tenemos algo así como:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]Comilla no cerrada antes de la cadena de caracteres '' AND CLAVE=''.
/xxxx/yyy/login.asp, línea zz

estamos ante uno de estos "descuidos". Ya solo es cuestión de seguir poco a poco para "colarse hasta la cocina". 

En realidad, todo se basa en hacer fallar el procesamiento del formulario y que la información de fallo que nos muestre, nos vaya dando pistas acerca de nombre de tabla, nombres de campos o los propios datos en sí.

No hace falta buscar con demasiado ahínco en la red, para encontrar auténticos manuales de como hacer un SQLInjection. Con esto y unos conocimientos básicos de SQL, en muchos casos es suficiente para colarse en una web, modificar datos o directamente borrarlos, dependiendo de "la mala leche" del que lo encuentre.

No pretendo hacer apología del SQLInjection, ni mucho menos. Cualquiera que tenga el más mínimo interés en el tema, encontrará en la red, información más detallada y precisa de lo que yo pueda mostrar, a modo de ilustración, en este post.  

Como indicaba anteriormente, el proceso consiste en ir provocando sucesivos fallos en cada paso, de forma que cada uno, nos aporte información adicional a usar en los pasos sucesivos.

Veamos un ejemplo:
Para empezar, un primer dato...
Introduciendo como Usuario' HAVING 1=1 -- , el error que se nos muestra, es la punta del ovillo que estábamos buscando:

[Microsoft][ODBC SQL Server Driver][SQL Server]La columna 'CLIENTES.IDCLIENTE' de la lista de selección no es válida, porque no está contenida en una función de agregado y no hay cláusula GROUP BY. 

ya tenemos dos datos, el nombre de la tabla y el primero de sus campos. Ahora a por los siguientes...
Introduciendo como Usuario' GROUP BY CLIENTES.IDCLIENTE HAVING 1=1-- , tenemos el siguiente dato:

[Microsoft][ODBC SQL Server Driver][SQL Server]La columna 'CLIENTES.NOMBRECLIENTE' de la lista de selección no es válida, porque no está contenida en una función de agregado ni en la cláusula GROUP BY.

... y así campo por campo hasta conocer la estructura de toda la tabla.

El siguiente paso es hacer fallar el sistema en la conversión de un tipo de dato, para que nos muestre el valor del dato que no se puede convertir.
Introduciendo como Usuario: ' AND CLIENTES.IDCLIENTE IN (SELECT TOP 1 CLIENTES.NOMBRECLIENTE FROM CLIENTES WHERE CLIENTES.NOMBRECLIENTE LIKE '%A%') -- , tenemos el siguiente dato:

[Microsoft][ODBC SQL Server Driver][SQL Server]Error de sintaxis al convertir el valor varchar 'Mi Nombre de Cliente' para una columna de tipo de datos int.

Este es solamente un ejemplo; que por prudencia no he querido mostrar completo, para ilustrar lo simple que puede ser acceder a unos datos en una web vulnerable a este tipo de ataque. 

Como se puede ver, no hace falta ser un avezado hacker, para realizar este tipo de intrusiones, aunque evidentemente, no todos los casos son tan sencillos como este.