jueves, 1 de octubre de 2015

En producción, mejor desactivar los mensajes de error

Cuando tenemos una web en producción, debemos de tener los mensajes de error desactivados para que el usuario no pueda saber como funciona por dentro, ya que damos demasiadas pistas si la persona que lo está viendo quiere atacarnos.


"Espiado" por una imagen...

Hoy os traigo algo que la mayoría de desarrolladores ya sabíamos, pero que no está de más saber para todo el que quiera saberlo (pero que lol).

Me refiero a que nuestros emails nos espían ¿COMO! O_o? Pues fácil, cuando por ejemplo nos metemos a nuestro gestor de correo online (Gmail, Hotmail, Chimichanga, etc, etc…), si al abrir los mensajes tenemos activado que automáticamente los correos con formato html carguen las imágenes, ahí ya el sitio web o empresa que te ha enviado el correo ya sabe que lo has leído y desde donde lo has leido (mediante seguimiento IP por ejemplo). 

¿Te estás preguntando por qué?

El por qué es sencillo. Muchas imágenes que se nos cargan no tienen una fuente que apunte directamente a una imagen normal colgada en un servidor contenedor de la misma. Sino que son fuentes que apuntan a fuentes dinámicas con identificación única de usuario.

¿Pero qué me estas contando?
dicho de otra manera,  con un ejemplo:

si te envían un email, que por ejemplo en una imagen pone este source:

http://servidortal/rutapascual/imagepubli?id=200&client=422445

la primera parte http://servidortal/ es el dominio del servidor
la segunda rutapascual/imagepubli es el path dentro del servidor que apunta al fichero que supuestamente cargará
y aquí en la tercera y cuarta parte la parte de espionaje

id=200&client=422445

id=200 puede que nos esté diciendo que el fichero enlazado cargue una imagen dinámica que esté identificada por el número 200

client=422445 seguramente sea nuestro id de cliente de newsletter (por ejemplo) único

Por este motivo, cuando el gestor de correo carga la página, el script que nos devuelve una imagen (el del src de la etiqueta img), seguramente tenga activo algún tipo de vigilante que cuando recibe la petición de carga con el id de usuario único, la empresa ya sabe que ese email ha sido leido por X persona en X fecha, además de saber también desde que dirección IP ha sido cargado (pudiendo hacer geolocalización del usuario).
—————-
A continuación os pongo unas capturas de ejemplo, en las que vemos que no obtenemos el mismo resultado visualizando la imagen desde un gestor online como gmail o hotmail que si lo hiciésemos a través de un gestor de correo local como outlook o thunderbird (estos segundos gestores locales nos exponen mucho más ya que no nos filtran nada al no hacernos de proxys intermediarios).

CASO 1: Ejemplo de visualización en la web de GMAIL



CASO 2: Ejemplo de visualización en el gestor de correo LOCAL


En este caso estamos tan expuestos que pueden averiguar nuestra IP, sistema y tipo de gestor utilizado entre otras muchas cosas.

CASO 3: Ejemplo de  visualización en gestor de correo de GMAIL (App de Android)


Ahora vemos que la aplicación de cliente de Gmail para Android, es simplemente un cliente de la aplicación web de Google, y por lo tanto también utiliza el proxy de Google para cargar las imágenes.

CASO 4: Ejemplo de visualización en gestor de correo móvil Android para cuentas Hotmail




Aquí podemos ver, que este gestor de correo no utiliza ningún tipo de protección proxy para la carga de imágenes, y por lo tanto es nuestro dispositivo el que descarga directamente la imagen del servidor (lo sabemos porque los datos que aparecen en la imagen son los nuestros).

CASO 5: Servidor de correo web empresarial con las políticas de seguridad bien configuradas



Este gestor de correo, aunque no nos haga de intermediario de la descarga de la imagen, simplemente no nos la carga al hacer una lectura de cabeceras de correo electrónico y ver que algo no cuadra (efectivamente las cabeceras del correo están manipuladas). Y aunque podamos cambiar las políticas para este remitente y dejarnos cargar la imagen, ya somos nosotros los que decidimos arriesgarnos a cargarlo teniendo en cuenta las consecuencias de lo visto anteriormente en los otros ejemplos ;-).

—————-
CONCLUSIÓN:
Si no queréis estar tan controlados, activar que no se carguen las imágenes automáticamente, excepto a vuestra expresa petición y sabiendo que el remitente sea lo más altamente fiable posible (y aun asi sigue habiendo riesgos…)

sábado, 26 de septiembre de 2015

¿Qué esconde http://www.omfgdogs.com? xDD

El otro día, mi amigo Thomás me pasó un enlace a la página http://www.omfgdogs.com y me quedé un poco pillado cuando ví aparecer lo siguiente:


Lo que vemos en la imagen de arriba, es una serie de perritos repetidos por toda la pantalla corriendo en bucle.

Si inspeccionamos el código fuente, podemos ver que captura los eventos de las pulsaciones del teclado.


En este caso, podemos ver que el evento "keydown" incluye el siguiente código:


function(e) {
  kkeys.push(e.keyCode);
  if (kkeys.toString().indexOf(konami) >= 0) {
    if (triggered == false) {
      triggered = true;
      kkeys.length = 0;
      soundManager.stopAll();
      $("body").append("<div><video class='centre' id='stormvind' autoplay controls loop width='window.innerWidth' height='window.innerHeight'><source src='stormvind.webm' type='video/webm'></video></div>");
      var video = document.getElementById("stormvind");
    } else if (triggered == true) {
      triggered = false;
      $("#stormvind").remove();
      soundManager.play('omfgdogs');
    }
  }
  while (kkeys.length >= konami.split(',').length) {
    kkeys.shift();
  }
}


Podemos observar que la tecla pulsada es buscada dentro de una variable, y si buscamos esa variable, vemos que se inicializa en el fichero wat.js de la siguiente manera:

var kkeys = [], konami = "38,38,40,40,37,39,37,39,66,65";

 Dichos valores tienen un significado, el cual es el siguiente:

38 = Flecha arriba
38 = Flecha arriba
40 = Flecha abajo
40 = Flecha abajo
37 = Flecha izquierda
39 = Flecha derecha
66 = B
65 = A
(Según mis amigos de Puerta de Hades, se trata de un truco usado en los juegos de antaño de la compañía Konami :-) )


Volviendo al script, nos dice que si el valor de la tecla pulsada se encuenta dentro de la variable konami, se cumple la primera condición:

if (kkeys.toString().indexOf(konami) >= 0)

 La segunda condición a cumplir, es que la variable triggered sea false, y como vemos en la siguiente linea del archivo wat.js, ya está declarada al inicio como false:

var triggered = false;
 
por lo cual, la siguiente condición también se cumple:

if (triggered == false)

A continuación resumimos un poco lo que continúa en la función, en las cosas más importantes.

pone triggered en true para evitar más lecturas del teclado hasta que este bloque de código haya sido procesada:

triggered = true;

Y ahora mostramos la parte del código que más mola (xD):

$("body").append("<div><video class='centre' id='stormvind' autoplay controls loop width='window.innerWidth' height='window.innerHeight'><source src='stormvind.webm' type='video/webm'></video></div>");

Que lo que hace es lo siguiente, en la etiqueta body nos añade el siguiente html:

<div><video class='centre' id='stormvind' autoplay controls loop width='window.innerWidth' height='window.innerHeight'><source src='stormvind.webm' type='video/webm'></video></div>

Que como podéis ver, no es nada más que un video con la música del bucle de los perritos de la web pero sin acelerar, el cual su url de acceso directo es la siguiente:

http://www.omfgdogs.com/stormvind.webm


Y eso es básicamente lo que hace la web... aunque hay que decir que rular, muy bien no rula jeje.

Saludos, y espero que os haya gustado la tontería.

Gracias.

Alias maliciosos en GNU/Linux

Podéis ver mi artículo sobre el "Ataques a GNU/Linux con alias maliciosos de su y sudo" en el blog de Chema Alonso "Un informático en el lado del mal".

Esta es la dirección del post http://www.elladodelmal.com/2014/10/ataques-gnulinux-con-alias-maliciosos.html

Un saludo!

Cómo controlar un troyano en un equipo desconectado de la red usando SSIDs WiFi maliciosos

Podéis ver mi artículo sobre el "control de troyanos en equipos sin red mediante SSIDs WiFis maliciosas" en el blog de Chema Alonso "Un informático en el lado del mal".

Esta es la dirección del post http://www.elladodelmal.com/2015/07/como-controlar-un-troyano-en-un-equipo.html

Un saludo!

Problemas de seguridad al poner la lógica de juego en el cliente

En este caso, el problema de seguridad sería poder manipular la puntuación obtenida en un juego online tipo web. Al tener toda la parte lógica del juego en el javascript del cliente, éste puede manipularlo haciendo que las puntuaciones sean incoherentes y por lo tanto, que el sistema de puntuación no sea fiable.

Aquí os pongo un ejemplo de la manipulación de un juego en el que había que encontrar el cuadrado de diferente color, en el cual despejamos todos y dejamos que sea visible a un tamaño grande el cuadrado correcto. El resto, esto todo el rato hacer "click" en el cuadrado ;-)


Tenlo en cuenta si vas a programar algo serio.

Un saludo!