Descuentón, Groupon, Groupalia, LetsBonus y Clickonero en un solo lugar

Hemos lanzado recientemente una página llamada Descuentón, donde podras ver los descuentos de Groupon, Groupalia, Letsbonus y Clickonero en un solo lugar, tiene varias ventajas que nosotros creimos que les faltan a todos ellos como:

  • Categorías: Podras ver los descuentos por categoría
  • Facebook Connect: Tiene la opción de guardar tus preferencias mediante facebook connect
  • Mapa de google maps con link: Podras dar click en los mapas para ver en donde es y te llevará a la página de google maps
  • HTML5 compatible con iPhone: Si visitas la página desde tu iphone podras ver una vista especialmente diseñada para el iphone, e instalarlo como app

Y todo completamente gratis, espero que les guste, pruébalo ahora.

Ir a Descuentón

Vulnerabilidad LNK

El 17 de junio de 2010 se descubrió una vunerabilidad 0-day que afecta a todas las versiones de Windows. Lo terrible del asunto es que se descubrió después de que ya estaba siendo explotada por un troyano cuyo fin era el espionaje industrial.

La noticia saltó a los medios especializados el 16 de julio. Los primeros detalles indicaban que la vulnerabilidad permitía a un atacante ejecutar automáticamente código al insertar un medio extraíble en el sistema. La crónica y más detalles se puede encontrar aquí:

Interesante (y peligroso) troyano que aprovecha un interesante (y peligroso) 0 day en Microsoft Windows

Ahora el código es público y ni lentos ni perezosos ya lo incluyeron en la archiconocida suite MetaSploit. Aunque ya es posible mitigarlo mediante una Directiva de Seguridad Local, Microsoft no ha publicado aún ningún parche.

Gracias a Un informático en el lado del mal por la recopilación de fuentes.

Tag Cloud en PHP

Necesitaba hoy de un tag cloud sencillo en php y encontré muchos ejemplos que no se me hicieron muy buenos, así que programé uno. Se los dejo para que lo usen:

/**
$wordlist en la forma array('palabra1' => array('numero' => 5), 'palabra2' => array('numero' => 3))
*/
function tagCloud($wordlist, $fmax) {
	//esto sive para que el tamaño minimo de la letra sea 10px
	if($fmax < 20) {
            $fmax = 10;
 	} else {
	     $fmax -= 10;
        }
        //primera recorrida para obtener el maximo y el minimo
        $tmin = 0;
        $tmax = 0;
        foreach($wordlist as $key => $value) {
		if($value['numero'] > $tmax || $tmax == 0)
			$tmax = $value['numero'];
		if($value['numero'] < $tmin || $tmin == 0)
                        $tmin = $value['numero'];
         }
         foreach($wordlist as $key => $value) {
		if($value['numero'] > $tmin) {
                        $si = ceil(($fmax * ($value['numero'] - $tmin) / ($tmax - $tmin)))+10;
                } else {
			$si = 10;
		}
		$wordlist[$key]['size'] = $si;
	}
	return $wordlist;
}

Su uso es bastante sencillo. Tenemos que meter todos los elementos a un array de la siguiente forma:

$wordlist = array('palabra1' => array('numero' => 5), 'palabra2' => array('numero' => 3));
//30 es el tamaño máximo de la letra
$wordlist = tagCloud($wordlist, 30);
foreach($wordlist as $key => $value) {
     echo '<span style="font-size: '.$value['size'].'px;">'.$key.'</span> ';
}

Nótese que en el array podemos meter los valores que queramos y que necesitemos, sólo debe estar presente la llave llamada numero.

Me basé en el artículo de wikipedia: http://en.wikipedia.org/wiki/Tag_cloud

Cloud Computing aplicado a las empresas

El Cloud Computing es uno de los terminos más sonados en revistas y en diversos artículos en los últimos meses. Algunos alabándolo y otros criticándolo, pero hablando siempre de tecnologías futuristas y suponiendo que la nube es internet, cuando internet es sólo una parte de la nube.

La nube, como todo, tiene ventajas y desventajas. Por ejemplo, algunas ventajas son: no necesitas de una computadora con muchos recursos, no hay necesidad de instalar aplicaciones y sería muy difícil perder tus datos; pero una de sus desventajas es que deberás confiar en un tercero para que tus datos estén “seguros”.

Siempre se ha criticado mucho desde el aspecto de la seguridad y es por ello que muchas empresas ni consideran adoptarlo, aunque esas son las mismas empresas que se niegan a usar las redes sociales y prefieren bloquear twitter que usarlo para algo útil. Pero queramos o no todas las tecnologías van hacia ese rumbo pues cada vez hay más smartphones y computadoras con acceso a internet con menos recursos y más baratas. Todo parece apuntar a que en un futuro los smartphones serán los que dominen en internet. Si observamos el entorno es claro que las aplicaciones de escritorio desaparecerán en un futuro no muy lejano, la multiplataforma es lo que está en voga y más gente está usando las tecnologías de internet para intercomunicarse, por lo que sinceramente dudo mucho que las empresas puedan frenar este avance.

Es impresionante ver como la gran mayoría de las empresas siguen tan ciegas y centran sus esfuerzos en detener a los usuarios para usar las nuevas tecnologías. Llegan a poner proxies para limitar el acceso a facebook y twitter; para el correo electrónico compran sistemas para evitar enviar correos a personas que la compañía no considere confiables y usan filtros de spam poco útiles para el usuario final; gastan recursos humanos en revisar los antivirus de los usuarios y monitorear la red en busca de fugas de información, y prohíben a las personas instalar ciertos programas como iTunes por “problemas de seguridad potenciales”.

Pero ¿qué diferencía a las compañias con gran tecnología y productos realmente interesantes de las otras?

No piensan cómo es que podrían beneficiar las nuevas tecnologías a la empresa.

El cloud computing tiene muchas caras que ofrecer y depende de las empresas buscar una cara que les beneficie. Si pensamos en el Cloud Computing como una nube que sólo está dentro de la red de la empresa, entonces empieza a volverse interesante y es probable que las empresas adopten ese modelo.

Pero antes de seguir quiero aclarar que al hablar de cloud computing no me refiero sólo a aplicaciones web que hacen consultas con AJAX a un servidor central, o una aplicación que hace consultas SOAP o tiene web services. Cloud computing realmente es mucho más que eso.

Tomemos como ejemplo Google. Es una empresa totalmente dedicada a la nube, y sus tecnologías son realmente avanzadas, mucho más de lo que muchos creen. Bien se sabe que no sólo es un motor de búsqueda, es una gran parte de Internet y tiene tecnologías que se pueden aplicar perfectamente a las empresas como GMail, Google Docs, Google Calendar y Google Wave, además de otras tecnologías para desarrollar aplicaciones como Google App Engine y Google Web Toolkit; y tiene también su propio sistema operativo Google Chrome OS (totalmente enfocado a la nube) y su navegador Google Chrome.

Google Chrome OS, que aún continúa en su versión beta y no se le ha prestado suficiente atención, resulta ser una versión de Linux a la cual no se le puede instalar ninguna aplicación y que no tienen ningún medio de almacenamiento; toda tu información está en la nube, ni siquiera la música se puede guardar en el disco, a lo mucho se pueden guardar datos en un USB ¿qué locura no?. El sistema operativo completo funciona como un navegador: cuando cierras la sesión guarda el estado en el que te quedaste para que luego puedas continuar en cualquier otra computadora que tenga Chrome OS instalado; por lo cual las computadoras necesarias para correrlo no necesitan de mucho disco duro, ni de una capacidad de procesamiento brutal. Y es cierto para muchos esto puede parecer desconcertante e inservible, pero para la gran masa de usuarios podría funcionar perfectamente.

Hagamos ahora un ejercicio de imaginación y apliquemos la nube a una empresa como Coca Cola. Supongamos que tiene varios datacenters: uno en México, varios en Estados Unidos y en muchos otros países; y, en esos datacenters tuvieran instalados los appliances de Google, los cuales pudieran guardar la información correctamente duplicada en diferentes lados del mundo; luego supongamos que la empresa les diera a sus empleados una Laptop con un disco de estado sólido suficiente para alojar una versión de Chrome OS que se conectara a la VPN de Coca Cola.

Esto sería realmente seguro, pues al contratar a un empleado bastaría con dar de alta una nueva cuenta en la empresa con los privilegios de las aplicaciones que necesitara, usando la política del mínimo privilegio. Cuando el empleado necesitara conectarse a sus documentos podría hacerlo desde cualquier computadora y la información nunca estaría guardada en el disco duro, por lo que si se pediera una laptop en el aeropuerto no habría ningún problema ya que necesitarían de la contraseña para poder entrar a algo importante.

Pensemos también que el costo de mantenimiento se vería reducido totalmente, pues no habría que reinstalar prácticamente nada y podrían trabajar desde cualquier computadora que tuviera acceso a la red de Coca Cola mediante Chrome OS. El costo de todas las aplicaciones como antivirus, protectores contra intrusos y demás desaparecerían pues el sistema operativo no se podría modificar y estaría reducido a lo que el navegador te permitiera.

Es un hecho que todas las aplicaciones de Coca Cola necesitarían funcionar mediante Web, pero no me imagino alguna que actualmente no pudiera implementarse para funcionar en Web.

Los problemas de seguridad se verían reducidos de manera importante, pues se tendría mucho más control de todos los datos y éstos estarían alojados en los servidores de Coca Cola. Y aunque seguirían existiendo los mismos problemas de siempre: contraseñas débiles, fallas en la configuración, problemas de XSS en las aplicaciones web, servidores vulnerables y demás; ya no habría que preocuparse tanto por la seguridad de cada usuario final de la empresa. Sería ahora más complicado que pudiera haber una fuga importante de información y en todo caso se tendría registrado por dónde ocurrió.

Google es un ejemplo de empresa que ha aprovechado la nube y muchas más podrían estar incursionando en estos momentos, pero hay cosas de Google que ya funcionan muy bien y a menos que algunas empresas quieran reinventar la rueda bien podrían ya empezar a usarlas para satisfacer sus necesidades.

Java 4-Ever!

En Amarello desde siempre hemos apoyado el Open Source, y en el ámbito profesional siempre nos encontramos con muchas personas que prefieren tecnologías privativas, por lo que a veces nos hemos sentido fuera de lugar en algunos ambientes. Ojalá alguien nos entendiera…

El siguiente video es el trailer de la que podría  ser la mejor película geek del año. Disfrútenlo y tómenlo como lo que es: un chiste.


Java 4-Ever
Via: Koreus

¿Como saber si el ISP o la infraestructura telefónica del lugar son el problema de la conexión de Internet DSL?

Hoy en día la gran mayoría de los Routers modernos cuentan con una consola de información en la cual se indica el status de conexión, así como muchos datos interesantes que luego ignoramos por no saber qué significan.

Mi historia es la siguiente:

Yo era un fiel cliente de cablevisión, contaba con servicios de televisión y de internet en casa. Hasta que decidí cambiarme a prodigy debido a que requería tener una ip pública y estaba un poco cansado de que mi conexión se alentara en horas pico.

Después de contratar prodigy pensé que mis problemas se iban a solucionar, sin pensar más conecté el paquete infinitun que llegó a casa. Después de usarlo unos días me daba cuenta que la conexión era muy inestable, innumerables veces reinicié mi router esperando que se arreglara el problema, muchas veces funcionaba, otras no. En fin, no le di importancia ya que, al ser poweruser, podía reiniciar mi router de manera remota y olvidarme momentáneamente del problema. Algún amigo me comentó que el soporte que da prodigy es de los peores en México y que no perdiera mi tiempo marcando ya que lo único que lograría serían soluciones como “¿Ya reinicio su computadora?”, “Apague y vuelva a prender su router”, “El problema debe ser su computadora, seguro tiene algún virus”, “Algún equipo en su red debe estar consumiendo todo el ancho de banda”.

Después de algunos meses batallando con este tipo de problema empecé a notar que no solo perdía mi señal DSL sino que también tenia limitado mi velocidad ya que muchas veces llegaba ha dar hasta el 70% de la velocidad contratada, y después de unos días el problema se agravó quedando muchas veces horas sin internet y cuando llegaba a tener suerte un 20% de la velocidad contratada.

Llegó mi punto de quiebre y me dediqué a marcar al soporte técnico de prodigy esperando a que resolvieran mi problema. Pero inesperadamente al estar hablando con la persona que me atendía me di cuenta que mi conexión de internet mejoraba notablemente, y después de algunos minutos argumentando que no necesitaba soporte de usuario torpe (“¿Ubica el cable amarillo?”, “De click en el menú inicio”, “MacOSX ¿que es eso? solo damos soporte a Windows”) le comenté que ya estaba en la consola del router y le expliqué que mi problema no era mi red local (ya que no tenía otro equipo conectado), tampoco la red inalámbrica (Estaba conectado vía cable UDP), tampoco los filtros y los teléfonos (tenia filtro en cada teléfono de casa y había corroborado que estuvieran bien conectados antes de hacer la llamada) y mucho menos era mi computadora (tenía cerrado todo y monitoreando que ninguna aplicación hiciera alguna conexión remota).

Después de un rato de charlar y descartar lo que antes mencioné, me levantaron un ticket de reporte explicando que el técnico se comunicaría en los próximos 2 días para ver si el problema era de la calle o la infraestructura de mi casa, al terminar colgué y me dispuse a resolver el problema sin la necesidad de nadie.

Navegando (después de haberme dado cuenta que con la llamada mejoró mi conexión) me topé con una página que explicaba sobre el ruido en la señal telefónica y los síntomas que pudiera generar. Investigué un poco más y me tope con esto:

En la consola del router se pueden checar estos valores: Atenuación máxima y SNR. Por lo que se me ocurrió la brillante idea de hacer la prueba desconectando todos los teléfonos y otra prueba con todos los teléfonos conectados.

- Atenuación máxima: -mejor
Para 256 kbps: 64 dB.
Para 512 kbps: 55 dB.
De 1024 kbps en adelante: 41 dB.
De 6144 kbps en adelante (6 megas): 30 dB.
De 20480 kbps (20 megas): 20 dB.

- Margen señal-ruido (SNR): +mejor
6 dB o menos: Conexión inexistente o con graves deficiencias de estabilidad.
Entre 7 y 10 dB: Es posible que aparezcan problemas dependiendo de otros factores.
Entre 11 y 20 dB: Valor óptimo.
21 o más dB: Valor excelente.

Me di cuenta que si había gran mejora desconectando los teléfonos, entonces el problema era la infraestructura de la casa. En el caso de que no mejorara el problema sería la línea que llega desde la calle a casa y sería tiempo de llamar, de nuevo, al soporte telefónico de prodigy para reclamar por su pésimo servicio. Pero al darme cuenta que mi problema se arregló parcialmente fui descartando teléfonos hasta que di con el problema, uno de ellos generaba demasiado ruido (era marca Siemens) e interfería con la señal del DSL aún con filtro.

Al final concluí que entre más teléfonos conectados más ruido se generaba (en mi casa hay 9) y también influye a que altura de la linea conectes el DSL, pues no es lo mismo conectarlo desde donde llega a la casa la línea o al final de toda la cascada de conexiones telefónicas.

+Telefonos + Ruido = +Problemas de conexión

Si vemos bien la tabla anterior, donde se muestran los dB máximos y mínimos, nos podemos dar cuenta que aunque contratemos una conexión de 6mbps la infraestructura del lugar puede no soportarla debido a:

-la cantidad de teléfonos conectados a la infraestructura
-la distancia entre la central y el lugar
-la calidad de los teléfonos y filtros

Finalmente resultó que mi SNR era muy bajo debido a la cantidad de ruido que generaba un teléfono en particular y la otra razón que no he podido, ni podré resolver, es que tengo demasiada “Atenuación máxima” debido a la lejanía de mi casa con la central. Pero gracias a la tabla anterior puedo saber hasta que velocidad puedo contratar sin desperdiciar el ancho de banda pagado.

Puede ser que cablevisión dé servicios inferiores, pero como el equipo se encuentra dentro de la red interna (de ellos) es mucho más estable, puedes contratar más velocidad y no tener pérdida. A diferencia de una conexión DSL, Cablemodem llega vía cable coaxial desde un repetidor en la calle de fibra óptica, prácticamente no hay pérdida (sólo un poco de la calle a tu casa) y además no usas la infraestructura telefónica que aumenta el ruido por cada teléfono que conectes.

Mis conclusiones finales son:

Si lo que requieres es velocidad en el futuro : Cablevisión
Si lo que requieres es velocidad hoy y hasta que llegue al límite de lo que pueda aguantar la infraestructura del lugar: Prodigy

Por cierto, este problema me recuerda a un post que me dio mucha risa.

Autenticación segura sin SSL/TLS

Muchas veces no es necesario o es demasiado cifrar toda la comunicación entre el cliente y el servidor, por razones de performance o por el sobrecosto de implementar un esquema de PKI (Public Key Infraestructure) para usar SSL/TLS. Pero siempre hay algo que es necesario proteger por seguridad: las credenciales de autenticación del usuario. Por lo que en este post explicaré cómo se puede hacer una autenticación sin enviar esa información (no, no es telepatía).

Protocolos de conocimiento cero (ZKP)

Sabemos que sin un esquema de cifrado de llave pública es trivial para un atacante interceptar la información que se envía entre el cliente y el servidor, pero el sistema debe tener alguna manera de autenticar a los usuarios del sistema. Necesitamos enviar algo que si un atacante intercepta no pueda utilizar para autenticarse. Esto se conoce como un protocolo de conocimiento cero (Zero-knowledge proof), y en palabras coloquiales significa: “probar que poseemos cierta información sin revelar esa información”.

Como comúnmente la única información que queremos “probar que poseemos pero no queremos revelar” es la contraseña, voy a explicar el esquema que usa MySQL para implementar su autenticación de usuarios. Los detalles no están explicados de manera formal en la documentación de MySQL pero alguien se tomó el tiempo de leer el código fuente y explicar cómo funciona (MySQL 4.1.x authentication internals).

¿Cómo se almacenan las contraseñas?

Lo primero que hay que tener en cuenta es que, siguiendo los principios básicos de almacenamiento seguro de contraseñas, éstas se almacenan en el sistema sólo como un hash criptográfico. Que tiene la propiedad de ser prácticamente irreversible y prácticamente único. Por lo que esta es la primera parte del ZKP, ya que sólo quien conozca la contraseña podrá generar el hash criptográfico que le pertenece.

Desde MySQL 4.1 las contraseñas de usuario están almacenadas en la tabla “mysql.user” en la columna “Password” de la siguiente manera: SHA1(SHA1(password)). Donde SHA1 es el hash criptográfico SHA-1.

La transmisión

Si cada vez que el cliente se quiera autenticar sólo transmitiera SHA1(SHA1(password)), cumpliría con el principio de no revelar la contraseña, pero un atacante podría capturar y enviar después SHA1(SHA1(password)) para autenticarse exitosamente aún sin conocer la contraseña. Por lo que necesitamos agregar más cosas al protocolo para que la información que transmite el cliente sólo sea útil para un intento de autenticación.

Este sería el esquema cliente-servidor para la transmisión:

  1. Se inicia el intento de autenticación
  2. El servidor genera una cadena aleatoria salt y se la transmite al cliente.
  3. El cliente calcula S_1 = SHA1(pass), S_2 = SHA1(S_1) y S_3 = SHA1(salt+S_2) (aqui + significa concatenación).
  4. Finalmente el cliente transmite M = S_3 \oplus S_1. (aquí \oplus significa bitwise XOR)

Autenticación

El servidor sólo conoce H = SHA1(SHA1(password)), que está almacenado en la tabla de usuarios, y salt. Para autenticar hace lo siguiente:

  1. Calcula S'_3 = SHA1(salt+H).
  2. Calcula S'_1 = M\oplus S'_3.
  3. Calcula S'_2 = SHA1(S'_1).
  4. Sólo si H=S'_2 la autenticación es exitosa.

Observaciones

Nunca se transmite S_2 ni S_1, por lo que la fortaleza está en que este ZKP verifica que el cliente conoce SHA1(password)) y SHA1(SHA1(password)) pero sin revelar esa información, y que sería casi imposible que un atacante poseyera sin conocer password.

También hay que observar que salt es una cadena única por cada intento de autenticación, o sea que esa cadena siempre está cambiando.

Implementación

Próximamente trabajaremos en una implementación de este esquema para aplicaciones web usando JavaScript y PHP, que publicaremos bajo licencia LGPL.

Malware en Linux

Recientemente se descubrió un malware para Linux. Alojado en una página muy popular de descargas de temas para Gnome.

Este malware viene incorporado en un screensaver contenido en un paquete .deb que requiere privilegios de administrador para instalarse. Específicamente es un troyano diseñado para formar parte de una Botnet y hacer ataques DDoS.

Las instrucciones para eliminarlo revelan dónde se instala y cómo se autoejecuta:

sudo rm -f /usr/bin/Auto.bash /usr/bin/run.bash /etc/profile.d/gnome.sh index.php run.bash && sudo dpkg -r app5552

Hace tiempo reflexioné sobre este futuro poco alentador en un artículo sobre un troyano en mac. Lo que me lleva a hacer una reflexión que me gustaría que todos los linuxeros nos hiciéramos: ¿cuántas veces has revisado lo que hace e instala un paquete .deb antes de ponerle tu contraseña de administrador?

Eso de creernos invulnerables por usar Linux o Mac OS pronto va a dar frutos, y son frutos podridos. Si se le sigue diciendo a la gente, sistemáticamente, que es invulnerable al malware es casi seguro que caiga en un engaño por exceso de confianza. También pasó con el troyano que venía en la versión de bittorrent de iWork y quién sabe cuántos aún sigan infectados.

Compara el costo de vivir en un país diferente

Cuando planeamos un viaje largo, una estancia universitaria o simplemente tenemos curiosidad económica, es bastante difícil comparar efectivamente la diferencia de precios sin caer en el error de darle demasiada importancia a la evidencia anecdótica de alguien que viajó a ese lugar o extrapolar experencias propias.

Para hacer este tipo de cuestiones existe un sitio que nos permite hacer una comparación general de precio en diferentes cosas: restaurantes, productos básicos, transporte, renta de departamentos, gasolina, internet y telefonía. El sitio es:

http://www.numbeo.com/cost-of-living/compare_countries.jsp