Cómo comprobar tus contraseñas

Ayer saltó la noticia de que circula una colección de 773 millones de pares email-contraseña denominada “Collection #1”. Troy Hunt, creador del servicio Have I Been Pwned (HIBP), describía cómo, tras la oportuna limpieza y deduplicación de datos, esta colección añadía unas 20 millones de nuevas contraseñas a HIBP para hacer un total de algo más de 550 millones de contraseñas únicas entre todas las filtraciones que ha ido incorporando con el tiempo.

Al final, parece que esta filtración proviene de muchas fuentes distintas que tienen años de antigüedad, por lo que no habría de qué preocuparse en principio. No obstante, la alarma me ha servido para volver a pasarme por HIBP —un servicio en el que puedes registrar tu email para recibir un aviso si aparece en alguna filtración—, y he podido comprobar que han añadido la muy interesante funcionalidad de buscar contraseñas de manera segura para comprobar si están en su base de datos de filtraciones.

La cosa funciona de la siguiente manera. Cogemos una contraseña que queramos consultar (por ejemplo, 123456) y le pasamos la función hash SHA-1:

SHA1(123456) = 7c4a8d09ca3762af61e59520943dc26494f8941b

En principio, no podemos volver a “123456” a partir de ese churro, pero tampoco sería seguro que sepan que andamos preguntando por ese hash. Así que lo que hacemos es coger los primeros 5 caracteres y se los pasamos a la API de HIBP (así: 7c4a8), y la API nos devuelve todos los hashes que empiezan por esos 5 caracteres (que son muchos, típicamente cientos). Y en esa lista, ya manejable, nosotros podemos comprobar si el resto del hash (en definitiva, la contraseña que queremos consultar) está ahí.

Esto es exactamente lo que hace el formulario online (lo he comprobado), con el JavaScript que tiene detrás, de modo que es seguro utilizarlo.

123456, cómo no…

Si aun así no os fiais, en tres líneas de Bash se puede implementar lo mismo:

#!/bin/bash
read -s -p "Password: " PASS; echo
PASS=$(echo -n $PASS | sha1sum - | cut -d" " -f1)
wget "https://api.pwnedpasswords.com/range/${PASS:0:5}" -q -O - | grep -i "${PASS:5}"

Si ese grep saca algo… malo.

The difference that matters: Paul Romer sobre ciencia y software libre

Me permito dejar por aquí un extracto de este artículo de Paul Romer que resume perfectamente el valor del modelo de software libre y cómo se parece al de la ciencia:

This technical engineering dimension is not the only one we should use to compare the proprietary and open models. There is an independent social dimension, where the metrics assess the interactions between people. Does it increase trust? Does it increase the importance that people attach to a reputation for integrity?

It is along this social dimension that open source unambiguously dominates the proprietary model. Moreover, at a time when trust and truth are in retreat, the social dimension is the one that matters. […]

Membership in an open source community is like membership in the community of science. There is a straightforward process for finding a true answer to any question. People disagree in public conversations. They must explain clearly and listen to those who response with equal clarity. Members of the community pay more attention to those who have been right in the past, and to those who enhance their reputation for integrity by admitting in public when they are wrong. They shun those who mislead. There is no court of final appeal. The only recourse is to the facts.

It’s a messy process but it works, the only one in all of human history that ever has. No other has ever achieved consensus at scale without recourse to coercion.

In science, anyone can experiment. In open source, anyone can access the facts of the code. Linus Torvalds may supervise a hierarchy that decides what goes into the Linux kernel, but anyone can see what’s there. Because the communities of science and open source accept facts as the ultimate source of truth and use the same public system for resolving disagreements about the facts, they foster the same norms of trust grounded in individual integrity.

Anatomía de una infección por malware

En informática, como en biología, los mejores virus son los mejor adaptados, son aquellos que se aprovechan de su huésped sin que este se percate… hasta que ya es demasiado tarde. También como en biología, no siempre sucede así.

—Iñaki, ¿te pillo por aquí?
—Sí, dime.
—Estoy acojonado. Algo pasa con WordPress. He llamado al hosting porque pensaba que sería problema del mismo, pero lo último que me han dicho es que el archivo “index.php” es 20 veces más grande de lo normal. ¿Es grave?

Inmediatamente le insto a descargar el fichero y a enviármelo, y a machacarlo con uno legítimo de WordPress. En una situación así, no hay tiempo que perder hasta saber a qué nos enfrentamos. Mientras tanto, conviene recabar toda la información posible, buscar más archivos modificados, comprobar la base de datos en busca de usuarios ilegítimos…

El “index.php” de una instalación de WordPress es minúsculo, de menos de 0.5 kB; por tanto 20 veces más, poco más de 8 kB, sigue siendo notablemente pequeño. El archivo que recibo es un “index.php” legítimo de WordPress con una línea (muy larga) añadida al comienzo, y tiene esta pinta:

Una larga cadena de caracteres sin ningún sentido y unas pocas operaciones debajo con menos sentido todavía. Por ahora. Es lo que se llama ofuscación de código, una técnica que tiene dos objetivos principales: por un lado, encubrir el propósito del código, o al menos dificultar su comprensión; por otro lado, dificultar su identificación. Efectivamente, una búsqueda en Google no arroja ningún resultado. Toca, pues, seguir los pasos uno por uno para descifrar el puzle.

El funcionamiento es simple, pero efectivo. El código se asemeja a una matrioska: de un conjunto de caracteres aparentemente aleatorios, se extraen unos cuantos en un orden determinado formando funciones que actúan sobre otras cadenas, que obtienen nuevos chorizos sin sentido y nuevas funciones ilegibles. En el caso que nos ocupa, la ofuscación es particularmente compleja, y me lleva hasta ocho etapas distintas hasta que logro llegar a un fragmento de código que deja de interaccionar consigo mismo y ensambla el verdadero propósito del malware. El corazón del virus tiene nombre: day212().

Esta vez, sí: una búsqueda en Google revela que existe un repositorio donde otros autores realizaron el mismo proceso que yo con otra muestra del virus. Recogen el fragmento original, el código final y detallan el proceso. ¿La fecha? Hace once meses. Lo que podemos deducir del análisis del malware es que, una vez instalado en un servidor legítimo y de una manera bastante sofisticada, inyecta código que obtiene de servidores rusos, con dominios alojados en China, en la web que recibe el usuario final. Pero esto solo es la punta del iceberg.

EITest, el negocio de la distribución de malware

Hace más de dos años, Malwarebytes publicaba una investigación en la que exponía una campaña de distribución de malware a la que apodaron EITest (por uno de los nombres de las variables del código involucrado). Desde entonces, se ha mantenido activa sin que ninguna autoridad competente haya tomado el control sobre los servidores rusos que son centrales a dicha operación. Podemos encontrar nuevos reportes de investigadores de marzo y octubre del pasado año, y ahora nos encontramos ante un nuevo repunte en sus actividades.

EITest se puede definir como una cadena de infección. Se centra en las fases de entrega, explotación de vulnerabilidades e instalación de software malicioso; es decir, su beneficio viene principalmente de la distribución de malware para otros criminales. Todo apunta a que es un negocio rentable y bien engrasado, por su evolución y su perdurabilidad, ya que sus orígenes podrían remontarse a 2011. La muestra de código con la que abríamos este artículo no es otra cosa que la puerta de entrada a esta red de distribución.

Anatomía de una infección

Todo empieza con un servidor web legítimo comprometido por alguna razón. Las posibles vías son múltiples: una instalación desactualizada, un plugin vulnerable, un servidor mal configurado… Una de las principales vías de infección conocidas fue, durante largo tiempo, una vulnerabilidad en MailPoet, un popular plugin para WordPress. No son infrecuentes tampoco los ataques distribuidos contra el panel de control de WordPress y otros gestores de contenidos (este mes precisamente ha habido un incremento que hemos notado en este blog; por eso es tan importante escoger una contraseña robusta y limitar los intentos de acceso fallidos). De una manera u otra, el código que encabeza la entrada o similar acaba en la cabecera de uno o más archivos —se han llegado a reportar cientos en un mismo servidor.

La infección está diseñada para parasitar sin perturbar demasiado al huésped y tiene unos targets muy determinados. Cuando un usuario apunta con su navegador al sitio en cuestión, está despertando a la bestia sin percatarse. El código entra en funcionamiento no sin antes comprobar cuidadosamente una serie de parámetros para asegurarse de que se encuentra ante un usuario legítimo con unas características determinadas. Pasará, por tanto, desapercibido ante bots como el de Google o Microsoft para evitar que el sitio sea identificado como portador de malware. Se ha reportado que EITest busca equipos Windows con Chrome o Internet Explorer como navegador, pero en la muestra analizada he podido comprobar que también buscan navegadores Firefox y sistemas Android.

Una vez confirmado el target, el código contacta con un tercero que será el que devuelva un regalito hecho a la medida del navegador. Parece ser que este servidor malicioso realiza más comprobaciones para asegurar que el contenido va directo a una web infectada, y además evita una misma IP durante un periodo de 24 horas [1]. Como resultado, el usuario carga la web en cuestión… y algo más. Y, de repente…

Chrome no encuentra la fuente

Cuando el cliente es Google Chrome, el usuario verá un pop-up similar al siguiente:

Da la impresión de que el navegador nos insta a descargar un pack de fuentes necesario para visualizar la página actual, pero evidentemente es un truco. De hecho, un navegador jamás necesita descargar fuentes: si no encuentra una, simplemente usa una por defecto. Pulsar ese botón desencadena otra ristra de comprobaciones, de que Chrome es en realidad Chrome, y una petición a otro servidor infectado que inicia la descarga de un archivo: “Chrome_Font.exe” o “Font_Update.exe”.

La manera en que ese archivo es servido, de nuevo para asegurarse de que la petición viene de una víctima legítima, y cómo está protegido para evitar la detección por antivirus son dignos de mención (para los curiosos, todos los detalles se encuentran en [1]). Pero sobra decir que la ejecución del archivo consuma la infección. En el caso particular de Chrome, lo que se distribuye es un virus que se dedica a lanzar múltiples instancias invisibles de Internet Explorer y a navegar autónomamente, todo apunta que para generar dinero a base de clicks fraudulentos en publicidad. Los investigadores han sido capaces de identificar 7000 sitios web infectados y 30000 IPs únicas de usuarios que han descargado el malware diseñado para Chrome [1], principalmente de Estados Unidos, durante las últimas semanas.

¿E Internet Explorer?

Peor lo tienen los usuarios de Internet Explorer —aunque todo apunta a que un Windows 10 bien actualizado mitiga las probabilidades de infección, ya que el principal sistema infectado es Windows 7—. EITest distribuye una amplia variedad de malware sin intervención del usuario utilizando como vía de entrada este navegador. En concreto, la estrategia consiste en inyectar código para descargar un ejecutable de Adobe Flash Player capaz de explotar dos vulnerabilidades diferentes. La única acción necesaria por parte del usuario es visitar la web infectada.

En ese momento, y si la versión de Flash Player es vulnerable, se inyecta un script capaz de “llamar a casa” y descargar y ejecutar cualquier tipo de malware que se provea desde los servidores de EITest: desde ransomware hasta programas capaces de convertir un PC en parte de una red de bots sin levantar las sospechas de su dueño.

El patrón es claro: de día trabajan y de noche descansan cuando el dueño apaga su computadora, ya que las víctimas principales son ordenadores personales, y se aprecia cómo el número de bots ha crecido de forma sostenida durante estas últimas semanas. Para un análisis pormenorizado, por si no me he reiterado lo suficiente todavía, lean [1].

[1] Exposing EITest campaign, Malware Traffic Analysis.

Gafas para daltónicos

(Esta anotación se publica simultáneamente en Naukas)

Todos sabemos qué es el daltonismo, o creemos que lo sabemos. Si le preguntamos directamente a Google, nos responderá:

Defecto de la vista que consiste en no distinguir ciertos colores o confundirlos con otros.

Pero aquí cabe preguntarse, ¿cómo vemos? La vista es una interfaz de entrada más que nos permite desenvolvernos en el mundo que nos rodea. En concreto, es una pequeña ventana por la que asomarnos a una parte del espectro electromagnético que nos aporta mucha información para formarnos una imagen detallada (nótese que no digo precisa) de nuestro entorno.

Nuestra vista tiene como dispositivo de entrada el ojo, una pieza de hardware bastante compleja a la par que complicada. Aparte de enfocar la luz en un punto mediante una lente, tiene células especializadas en la captación luz y posterior transducción en la correspondiente señal neuronal. Hay dos tipos de células fotorreceptoras: los bastones y los conos. Los primeros tienen una gran sensibilidad y su señal nos sirve solo en condiciones de muy poca luz. Los segundos son los responsables de nuestra visión en condiciones normales.

Respuesta frecuencial de los conos
By OpenStax College [CC BY 3.0], via Wikimedia Commons
Pero un momento… todavía no nos hemos hecho una pregunta incluso más pertinente que la primera: ¿qué es el color? Nuestro ojo posee tres tipos de conos, y su respuesta en frecuencia (qué parte del espectro captan) se encuentra sobre estas líneas. Como se puede observar, tenemos receptores de onda corta (que se corresponde con el azul), onda media (verde) y larga (rojo). ¿Esto quiere decir que captan azul, verde y rojo respectivamente? No: simplemente quiere decir que los tres tipos de conos envían una señal diferente al encéfalo. Es este último el que, mediante dichas señales, se hace una composición de lugar y forma la imagen que vemos y los colores que percibimos.

Por tanto, podemos decir que los colores no existen —como concepto absoluto—; lo que existe es la luz a diferentes frecuencias. El color no es más que la respuesta a la primera pregunta: cómo vemos. El cerebro dispone, gracias a los conos, de tres señales diferentes, de los valores de intensidad en —podríamos decir— tres dimensiones independientes de un universo de frecuencias. Esto nos permite discernir entre un gran conjunto de frecuencias del espectro visible (pero, cuidado, no todas las existentes), y se traduce en lo que experimentamos como color. Ver dos colores es diferenciar dos espectros de luz, pero lo contrario no se sigue: dos fuentes de luz pueden diferir en su espectro y, para nosotros, corresponder al mismo color.

Esto nos lleva de vuelta al daltonismo. Así pues, un daltónico es aquella persona cuya percepción del color es diferente a la normal, entendido como habitual dado nuestro hardware y su funcionamiento. Dejando de lado aspectos neuronales que también pueden afectar a la visión y ciñéndonos al ojo, este daltonismo se presenta de tres posibles formas:

  • Monocromatismo: Por ausencia o disfunción de dos o tres tipos de conos, la visión queda reducida a una sola dimensión, por lo que el cerebro solo puede formar una imagen en base a la luminosidad; en blanco y negro, para que nos entendamos.
  • Dicromatismo: Por ausencia o disfunción de un tipo de cono, la visión queda reducida a dos dimensiones. Esto simplemente significa que la percepción del color es diferente de forma que se disciernen menos frecuencias: hay colores que se perciben como el mismo. Lo habitual suele ser que los rojos y los verdes se perciban como una misma gama. No es que se confundan los colores, como se suele decir, —lo que nos lleva a pensar que a veces el verde parece rojo y el rojo, verde— no: es como si, en lugar de rojos y verdes, viésemos toda una gama de marrones.
  • Tricromatismo anómalo: La visión normal es tricromática, por los tres conos o tres dimensiones que percibimos. En esta disfunción, lo que sucede es que la respuesta frecuencial de dos tipos de conos se solapan (las montañitas de la imagen de más arriba se superponen de forma que su cumbre casi coincide), y, de nuevo, lo habitual es que suceda con los conos verdes y rojos. Esto significa que el cerebro recibe señales muy similares de dos tipos de conos, por lo que pierde una dimensión. El resultado perceptivo es el mismo que el producido por el dicromatismo. La diferencia radica en que aquí de hecho funcionan los tres tipos de conos, pero mal.

Finalmente, llegamos a lo que la ciencia y la tecnología pueden hacer por estas personas. Y es que una empresa estadounidense llamada EnChroma vende unas gafas de sol que prometen corregir el daltonismo. ¿Puede funcionar algo así? ¿Cómo? Lo cierto es que sí, pero solo en el último tipo de daltonismo, que precisamente es el más común.

Respuesta frecuencial de las gafas EnChroma
Fuente de la imagen: EnChroma®

Estas gafas llevan un recubrimiento especial que actúa como un simple filtro, pero un filtro muy particular. En concreto, son opacas a dos rangos de frecuencia estratégicamente situados entre los máximos de la respuesta de los tres tipos de conos (véase la imagen superior). Dicho de otro modo, las gafas no dejan pasar la luz más conflictiva, la que produciría una señal más parecida en dos conos solapados (de ahí que necesariamente sean de sol: no son transparentes, por construcción). Como resultado, el cerebro recibe tres señales distintas y vuelve a ganar la dimensión perdida. El cerebro tiene una gran plasticidad y, con esa nueva información, el daltónico pasa a ver automáticamente como vemos los demás. Impresionante.

La empresa en cuestión pide a sus clientes que se graben en vídeo al estrenar las gafas y lo compartan en YouTube (no se me ocurre mejor publicidad…). Recomiendo encarecidamente ver sus reacciones, porque encogen el corazón un poquito. Ahí va un ejemplo (y otro, y más):

Como reflexión final, fijaos en que nuestra representación del color en cámaras, ordenadores, etc., —el sistema RGB— no es más que un reflejo de nuestra propia percepción. ¿Qué ocurriría si, como los daltónicos que pasan de dos tipos de conos a tres gracias a estas gafas, pasásemos de tres tipos a cuatro? Que ganaríamos otra dimensión, ni más ni menos, y, por tanto, distinguiríamos muchas más frecuencias y nuestra percepción del color sería mucho más rica. De hecho hay personas con esta rara cualidad, que se denomina, como no podía ser de otra forma, tetracromatismo.

(Gracias al compañero @BioTay por proporcionarme los punteros que han propiciado este artículo).