18 julio 2015

Detrás del telón: Una mirada al funcionamiento interno de XKEYSCORE de la NSA por Micah Lee, Glenn Greenwald y Morgan Marquis-Boire (The Intercept)

Behind the Curtain: A Look at the Inner Workings of NSA’s XKEYSCORE 
por Micah Lee, Glenn Greenwald y Morgan Marquis-Boire (The Intercept)
Detrás del telón: Una mirada al funcionamiento interno de XKEYSCORE de la NSA
«La gran cantidad de comunicaciones que XKEYSCORE procesa, filtra y consulta es impresionante. En todo el mundo, cuando una persona se pone en línea para hacer cualquier cosa -escribe un correo electrónico, deja un post en una red social, navega por Internet o juega un juego de video- hay una alta posibilidad de que el tráfico de Internet que su dispositivo envía y recibe sea recolectada y procesada por uno de los cientos de servidores de XKEYSCORE por todo el globo.
Con el fin de dar sentido a un flujo masivo y constante de información, los analistas que trabajan para la Agencia de Seguridad Nacional, así como las agencias de espionaje asociadas, han escrito miles de fragmentos de código para detectar diferentes tipos de tráfico y extraer información útil de cada tipo, de acuerdo a documentos que datan hasta 2013. Por ejemplo, el sistema detecta automáticamente si una determinada pieza de tráfico es un correo electrónico. Si es así, el sistema etiqueta si es de Yahoo o Gmail, si contiene un itinerario de avión, si está encriptado con PGP, o si el idioma del remitente se corresponde con el árabe, junto con miles de otros detalles.
Esta red de vigilancia mundial de Internet se alimenta de una pieza un tanto anticuada de software que se ejecuta en grupos de servidores Linux. Los analistas acceden a la interfaz web de XKEYSCORE para buscar en un caudal de información privada, de modo similar a cómo la gente común puede buscar en Google información pública.
Sobre la base de los documentos proporcionados por el denunciante de la NSA, Edward Snowden, The Intercept arroja luz sobre el funcionamiento interno de XKEYSCORE, uno de los más amplios programas de vigilancia masivos de la historia humana.

Cómo XKEYSCORE funciona por dentro 
Es tentador suponer que son costosos sistemas operativos propietarios los que deberían impulsar XKEYSCORE, pero en realidad se basa enteramente en un plataforma de código abierto. De hecho, según un análisis de un manual de XKEYSCORE para los administradores de nuevos sistemas de finales de 2012, el sistema puede tener deficiencias de diseño que podrían hacerlo vulnerable al ataque de operadores internos de la propia agencia de inteligencia.
XKEYSCORE es una pieza de software de Linux que normalmente se implementa en los servidores de Red Hat. Utiliza el servidor web Apache y almacena los datos recogidos en bases de datos MySQL. Los sistemas de archivos en clúster son manejados por un sistema de archivos de red distribuido NFS y el servicio autofs, y las tareas programadas son manejados por el servicio de programación de cron. Los administradores de sistemas que mantienen servidores de XKEYSCORE utilizan SSH para conectarse a ellos, y utilizan herramientas como rsync y vim, así como una completa herramienta de línea de comandos, para administrar el software.
John Adams, ex jefe de seguridad e ingeniero de operaciones de Twitter, dice que una de las cosas más interesantes de la arquitectura de XKEYSCORE es "que fueron capaces de llegar tan lejos con este sistema tan mal diseñado. La adquisición de datos, las operaciones del día a día, y la búsqueda está todo mal diseñado. Existen muchas ofertas de código abierto que funcionarían mucho mejor que este diseño con muy poco trabajo. Su equipo de operaciones debe ser extremadamente infeliz". 
Los analistas se conectan a XKEYSCORE a través de HTTPS  usando navegadores web estándar, como Firefox. Internet Explorer no es compatible. Los analistas pueden iniciar sesión en el sistema con un ID de usuario y contraseña o mediante la autenticación de clave pública. 
Desde 2009, los servidores de XKEYSCORE se encuentran en más de 100 sitios de campo en todo el mundo. Cada sitio de campo consiste en un grupo de servidores; el número exacto varía en función de la cantidad de información que vaya a ser recopilada en ese sitio. Los sitios con relativamente poco tráfico pueden llegar a funcionar con menos servidores, pero los sitios que espían grandes cantidades de tráfico requieren más servidores para filtrarlo y analizarlo todo. XKEYSCORE ha sido diseñado para escalar tanto en poder de procesamiento como de almacenamiento añadiendo más servidores a un clúster. Según un documento de 2009, algunos sitios de campo reciben más de 20 terabytes de datos por día. Esto es el equivalente a 5,7 millones de canciones, o más de 13 mil largometrajes. 
Cuando los datos se recogen en un sitio de campo de XKEYSCORE, se procesan localmente y en última instancia se almacenan en bases de datos MySQL en ese sitio. XKEYSCORE se apoya en un sistema de consulta federada, lo que significa que un analista puede realizar una sola consulta en el sitio web central de XKEYSCORE, y se comunicará a través de Internet a todos los sitios de campo, ejecutando la consulta en todas las partes a la vez. 
Esto puede plantear problemas de seguridad en el propio sistema de XKEYSCORE. Por mucho que los desarrolladores de software lo intenten, es casi imposible escribir código fuente libre de errores. Para compensar esto, los desarrolladores a menudo dependen de múltiples capas de seguridad; si los atacantes pueden atravesar una capa, todavía pueden ser neutralizados por otras capas. XKEYSCORE parece hacer un mal trabajo a este respecto.
Cuando los administradores de sistemas inician sesión en los servidores de XKEYSCORE para configurarlos, parecen utilizar una cuenta compartida, bajo el nombre de "oper." Adams señala: "Eso significa que los cambios realizados por un administrador no se pueden registrar." Si un administrador hace algo malicioso en un servidor XKEYSCORE usando el usuario "oper", es posible que el rastro digital de quien lo hizo no llevara de vuelta al administrador, ya que múltiples operadores utilizan la cuenta.
Parece que hay otra manera en la que un administrador de sistemas malintencionado podría ser capaz de cubrir sus huellas. Los analistas que desean consultar XKEYSCORE firman (sign in) a través de un navegador web y sus búsquedas se registran. Esto crea un registro de auditoría, en el que se basa el sistema para asegurar que los usuarios no hagan búsquedas excesivamente amplias que ralentizaría (pull up) el tráfico web de los ciudadanos estadounidenses. Los administradores de sistemas, sin embargo, son capaces de ejecutar consultas MySQL. Los documentos indican que los administradores tienen la posibilidad de consultar directamente las bases de datos MySQL, donde se almacenan los datos recogidos, al parecer, sin pasar por el registro de auditoría. 
AppId, huellas dactilares (fingerprints) y microplugins
La recopilación de cantidades masivas de datos en bruto no es muy útil a menos que ésta se recopile y organice de manera que pueda ser examinada. Para hacer frente a este problema, XKEYSCORE extracta y etiqueta metadatos y el contenido de los datos en bruto para que los analistas puedan  examinarla fácilmente.  
Esto se hace mediante el uso de diccionarios de reglas llamados appIDs, huellas dactilares y microplugins que están escritos en un lenguaje de programación personalizado llamado GENESIS. Cada uno de estos puede ser identificado por un nombre único que se asemeja a un árbol de directorios, como "mail/webmail/gmail", "chat/yahoo", o "botnet/blackenergybot/comand/flood".
Un documento que detalla appIDs y huellas dactilares de XKEYSCORE enumera varios ejemplos. Peticiones de Windows Update parecen caer en el epígrafe appID "update_service / windowsy peticiones web normales caen bajo el appID "http/get". XKEYSCORE puede detectar automáticamente los itinerarios de viaje de Airblue con la huella dactilar "travel/airblue", y el tráfico del navegador web del iPhone con la huella digital "browser/cellphone/iphone". 
Mensajes PGP cifrados se detectan con la huella digital "encryption/pgp/message", y los mensajes cifrados con Mojahedeen Secrets 2 (un tipo de cifrado popular entre los partidarios de Al Qaeda) se detectan con la huella dactilar "encryption/mojaheden2". 
Cuando nuevos flujos de tráfico entran en un clúster de XKEYSCORE, el sistema contrasta los datos interceptados con cada una de estas reglas y archiva si el tráfico coincide con el patrón. Una presentación de diapositivas a partir de 2010 dice que XKEYSCORE contiene casi 10.000 appIDs y huellas dactilares. 
AppIDs se utilizan para identificar el protocolo de tráfico siendo interceptado, mientras que las huellas digitales detectan un tipo específico de contenido. Cada flujo interceptado de tráfico es asignado a un appID y a varias huellas dactilares. Usted puede pensar en los appIDs como categorías y las huellas digitales como las etiquetas.
Si varios appIDs casan con una sola corriente de tráfico, se selecciona el appID con el "nivel" más bajo (appIDs de niveles más bajos son más específicos que appIDs de niveles más altos). Por ejemplo, cuando XKEYSCORE evalúa un archivo adjunto de correo de Yahoo, se aplicarán todos los appIDs de la siguiente diapositiva, aunque sólo "mail/webmail/yahoo/attachment" se asociará con esta corriente de tráfico.
Para harmonirlo todo, cuando alguien que hable árabe se identifique (logs in) en una cuenta de correo de Yahoo, XKEYSCORE almacenará "mail/yahoo/login" como el appID asociado. Este flujo de tráfico coincidirá con la huella dactilar "mail/arabic" (correo/árabe(que denota la configuración de idioma), así como la huella dactilar "mail/yahoo/ymbm(que detecta las cookies del navegador de Yahoo).
A veces el lenguaje de programación GENESIS, que se basa en gran medida en la lógica de Boole, expresiones regulares y un conjunto de funciones simples, no es lo suficientemente potente como para hacer frente al complejo sistema de hacer casar los patrones necesarios para detectar ciertos tipos de tráfico. En estos casos, como dice una diapositiva, "Los usuarios avanzados pueden pasarse a C ++ para expresarse." AppIDs o huellas digitales que están escritas en C ++ son llamados microplugins.
He aquí un ejemplo de una huella dactilar microplugin para "botnet/conficker_p2p_udp_data", que es un complejo tráfico de red de bots (botnet) que no puede ser identificado sin lógica complicada. Un botnet es una colección de ordenadores hackeados, a veces millones de ellos, que son controlados desde un único punto.
Aquí otro microplugin que utiliza C ++ para inspeccionar los mensajes interceptados de chat de Facebook y extraer detalles como la dirección de correo electrónico asociada y el cuerpo del mensaje de chat.
Un documento de 2009 describe en detalle cuatro generaciones de appIDs y huellas dactilares, que comienza con sólo la capacidad de analizar el tráfico interceptado por palabras clave, y termina con la capacidad de escribir microplugins complejos que se pueden implementar sobre el terreno en los sitios de campo de todo el mundo en horas. 
Si el desarrollo XKEYSCORE ha continuado a un ritmo similar en los últimos seis años, lo más probable es que sea considerablemente más potente hoy en día.»