Backdoor de XZ: tiempos, malditos tiempos y engaños
(rheaeve.substack.com)- En torno al backdoor del tarball de xz/liblzma, los husos horarios y patrones de trabajo de los commits de Git de Jia Tan se usan como pistas para estimar su zona real de actividad
- Aunque la hora de un commit puede manipularse con
GIT_AUTHOR_DATEyGIT_COMMITTER_DATE, es probable que haya sido más fácil cambiar solo el huso horario que ajustar toda la hora de forma convincente - La mayoría de los 440 commits de Jia Tan quedaron registrados en UTC+08, pero algunos registros en UTC+02 y UTC+03 coinciden con el cambio de horario de invierno/verano de Europa del Este
- Los cambios de huso horario del 6 de octubre de 2022 y del 27 de junio de 2023 ocurrieron con intervalos demasiado cortos como para explicarlos fácilmente por viajes reales, lo que debilita la posibilidad de simples traslados
- Algunos commits +0200 parecen ser parches aplicados por Lasse Collin con
git am, y en un flujo de parches por email hay una limitación: la información de zona horaria se vuelve menos confiable
El backdoor de xz y el objeto del análisis
- El backdoor descubierto en el tarball de xz/liblzma fue recibido como un incidente que sacudió fuertemente la confianza en el ecosistema de software libre
- Se considera probable que el backdoor haya sido introducido por Jia Tan, mantenedor de largo plazo de xz
- En la comunidad casi no se sabía nada de Jia Tan más allá del nombre, e incluso ese nombre podría no ser real
- El análisis se centra en la actividad de GitHub de JiaT75 y en las marcas de tiempo de los commits del repositorio de xz
- El punto de partida fue una publicación pública en la lista de correo oss-security
Por qué es difícil falsificar timestamps de Git
- La hora de un commit de Git puede cambiarse con las variables de entorno
GIT_AUTHOR_DATEyGIT_COMMITTER_DATE - En commits que todavía no se han pusheado, también es posible modificar la fecha más tarde con amend
- Sin embargo, falsificar datos horarios de forma convincente tiene varias restricciones
- Si se pushea un commit que parece creado en el futuro, puede levantar sospechas
- También resulta poco natural que un commit parezca más antiguo que una discusión en línea relacionada
- Para evitar estas restricciones habría que retener commits, lo que podría retrasar el desarrollo del proyecto
- En lugar de ajustar la hora real, cambiar solo el huso horario permite engañar con más facilidad, sin cálculos ni retrasos en los commits
Registros UTC+08 y posibilidad de UTC+02/03
- La mayoría de los commits de Jia Tan, 440 en total, quedaron con timestamps UTC+08
- UTC+08 probablemente corresponde a CST de China, pero Indonesia, Filipinas y Australia Occidental también están en el mismo huso horario
- El nombre Jia Tan podría ser una señal destinada a hacerlo parecer asiático, especialmente chino
- Se plantea la posibilidad de que la zona real de actividad fuera una región de UTC+02 en horario de invierno / UTC+03 en horario de verano
- Esa región incluye EET de Europa del Este, IST de Israel, entre otros
- Al ajustar los registros UTC+08 a UTC+02/03, aparece un patrón habitual de trabajo de 9:00 a 18:00
- Sin ese ajuste, parecería que trabajaba los martes a medianoche y a la 1 de la madrugada, algo menos natural
Pistas reveladas por los cambios de huso horario
- Algunos commits podrían ser resultado de que Jia Tan olvidó cambiar el huso horario
- Se identificaron 3 commits en UTC+02 y 6 commits en UTC+03
- UTC+02 coincide con el horario de invierno de febrero y noviembre
- UTC+03 coincide con el horario de verano de junio, julio y comienzos de octubre
- Esto encaja con el cambio de horario de verano de Europa del Este: +0200 después del último fin de semana de octubre y +0300 después del último domingo de marzo
- Ese huso horario también parece coincidir con el de Lasse Collin y Hans Jansen
- En una actualización del 2 de abril, incorporando una observación de Joey Hess, se agrega que muchos de estos casos son commits en los que Lasse Collin figura como committer
- Sin embargo, no ocurre lo mismo en todos los commits de Jia hechos por Lasse, ya que muchos aparecen registrados como +0800
- Por lo tanto, no queda claro si los commits +02/03 fueron errores o simplemente cambios en el flujo de trabajo
Intervalos difíciles de explicar como viajes reales
- La explicación de que alguien residente en UTC+08 volara ocasionalmente a regiones UTC+02/03 no encaja bien con los timestamps detallados
- El 6 de octubre de 2022, a un commit de las 21:53:09 +0300 le sigue un commit de las 17:00:38 +0800
- La diferencia entre ambos commits es de unas 11 horas
- Desde China hasta Europa del Este o Medio Oriente, solo el tiempo de vuelo directo es de al menos 10 a 12 horas, y como los vuelos directos son poco frecuentes, probablemente tomaría más
- El 27 de junio de 2023, un commit de las 23:38:32 +0800 va seguido por uno de las 17:27:09 +0300
- La diferencia entre ambos commits es de apenas unos minutos
- Estos cambios respaldan la posibilidad de que Jia Tan no estuviera realmente en una región CST UTC+08
Feriados y patrón de trabajo entre semana
- El patrón de feriados también parece encajar mejor con Europa del Este que con China
- Para la lista de feriados chinos se toma como referencia el aviso de feriados de 2023 de Bank of China Indonesia
- Hay registros de trabajo incluso en días señalados como feriados chinos
- 29 de septiembre de 2023: Festival de Medio Otoño
- 5 de abril de 2023: Qingming
- 22 al 27 de enero de 2023, entre otros: periodo del Año Nuevo chino
- En relación con los feriados de Europa del Este, se observa que no hay registros de trabajo en Navidad, el 25 de diciembre, ni en Año Nuevo, el 31 de diciembre y el 1 de enero
- Los días de trabajo más frecuentes de Jia fueron martes 86 veces, miércoles 85 veces, jueves 89 veces y viernes 79 veces
Nombre y caveat sobre la aplicación de parches
- Se señala que, si “Jia Cheong Tan” fuera su nombre real, no sería una romanización válida de un nombre chino escrito en caracteres chinos, y se acercaría más a formas usadas en el sudeste asiático, como Malasia
- También se da el ejemplo de que la grafía “Cheong” no se usa en la China moderna y que en la transliteración china al inglés se tiende a escribir juntos los caracteres del nombre
- El ejemplo es “Yangqing Jia”, no “Yang Qing Jia”
- Sin embargo, dos commits +0200,
de5c5e4ye446ab7a, tienen como committer a Lasse Collin, y parecen ser parches que Jia envió por email y que se aplicaron congit am - Ese commit y algunos commits adyacentes tienen el mismo timestamp, lo que coincide con la aplicación de un conjunto de archivos de parche mediante
git am - Cuando los parches se intercambian por email, es difícil depender de la información de zona horaria, por lo que parte de este análisis se debilita
1 comentarios
Opiniones en Hacker News
Si hubiera sido un ataque respaldado por un Estado, es muy posible que hubiera existido un equipo aparte encargado de hacer coincidir a las personas o departamentos que escribían el código y los mensajes de la lista de correo, así como las horas y marcas de tiempo en que esos resultados salían a Internet, con una “historia acorde a la configuración del proyecto”
A veces incluso podrían haber introducido “errores” a propósito para insinuar a los investigadores otro lugar elegido, en vez de la ubicación real
En otro texto[1] también se planteó que cuentas creadas de repente pudieron haber generado urgencia y acelerado la transferencia del control de mantenimiento
[1] https://connortumbleson.com/2024/03/31/watching-xz-unfold-fr...
vía: https://news.ycombinator.com/item?id=39888854
La parte relevante se puede encontrar buscando "Progress will not happen until there is new maintainer"
Incluido hacer que parezca que opera desde cierta ubicación y, al mismo tiempo, que no parezca más de una persona
No creo que sea de Europa del Este, pero con UTC+0200/+0300 en Europa eso incluiría más o menos a Finlandia, los tres países bálticos, Ucrania, Rumania, Moldavia y Grecia
Si bajas un poco más, también entra una parte bastante grande de Medio Oriente, incluido Israel
Aunque en Finlandia normalmente se prefiere julio, así que sería menos común
A simple vista, parece coherente
En particular, la Unit 8200 de las IDF tiene una reputación bastante conocida
No significa que otros países no tengan capacidad, ni tampoco que este ataque parezca algo que necesariamente requiera recursos al nivel de la NSA o GCHQ. En realidad sí podría haber sido un lobo solitario, pero aun así vale la pena considerarlo
Fuerzas con recursos y motivación prácticamente infinitos pueden montar operaciones de bandera falsa para dirigir la atribución hacia cierta dirección. Son muy hábiles borrando rastros, y hasta los investigadores de seguridad más expertos pueden tardar meses o años en llegar a una estimación fundamentada de quién fue responsable
Por eso, intentar averiguar “quién lo hizo” es casi una pérdida de tiempo
La lección es esta: no meter software de punta no verificado en entornos de producción bajo ninguna circunstancia, que los pentesters de la organización rompan regularmente el stack e informen los resultados a la organización y a los mantenedores de paquetes, que los mantenedores de software libre y de código abierto auditen especialmente todo código nuevo sensible a la seguridad en cada release, y donar a los mantenedores
Por suerte no llegó a stable, y fue algo que apenas se evitó justo antes de que explotara un Chernóbil de seguridad dentro del sistema
Hay gente intentando convencer a todos de que cierta fuerza específica fue la responsable, y ahí hay objetivos geopolíticos. Por ejemplo, en un contexto donde en EE. UU. se discute prohibir la propiedad extranjera de apps web populares, qué conveniente sería para un gobierno o empresa que se beneficia de una ley así que un usuario de GitHub con nombre chino hiciera commit del vector de ataque con marcas de tiempo que parecieran venir de la RPC
Incluso si realmente fuera alguien de China continental, si contó con respaldo estatal, aunque salieran una acusación formal y una solicitud de extradición, es casi imposible que lo entreguen a los marshals estadounidenses. Más bien podría ser “silenciado” para evitar que información organizacional más grande caiga en manos del enemigo
Dejando de lado las conspiraciones estilo película de Bond, hay pocos lugares donde aplicar ese conocimiento en la práctica. Normalmente ya sabes de dónde vienen tus usuarios, y también puedes bloquear por región. Y si no, de todos modos deberías estar preparado para otras amenazas que vengan de esa región
GMT+8, la composición del nombre (nombre de estilo chino/mezcla dialectal + apellido hokkien), y los indicios[1] de que accedió desde lo que parece una salida de VPN o un servidor de hosting en Singapur, encajan todos con una identidad singapurense, ya sea real o fingida
Así que la fuente de [1], cuando dice que “el nombre suena falso”, también hay que tomarla con cierto filtro. La gente de China continental no siempre conoce bien a las comunidades chinas de la diáspora
Varios de los feriados mencionados tampoco son feriados públicos de Singapur[2]. El 24 de enero sí fue feriado, pero si aplicas el patrón de “trabaja en días laborables”, el 22 de enero era domingo y aun así aparece como día trabajado
Sería interesante ver más escritos de Jia Tan, especialmente los más antiguos. Puede que haya hábitos lingüísticos bastante marcados que sirvan para distinguir entre un singapurense, alguien de China continental, hablantes de varias lenguas eslavas y un angloparlante nativo
[1] https://boehs.org/node/everything-i-know-about-the-xz-backdo...
[2] https://www.mom.gov.sg/employment-practices/public-holidays
Claro, la muestra es muy pequeña, así que tampoco se puede concluir demasiado
Casi el 10% de los singapurenses tiene Tan como apellido
[1] [https://en.wikipedia.org/wiki/File:Singaporean_surnames_by_f...](https://en.wikipedia.org/wiki/File:Singaporean_surnames_by_frequency.png)
Dejando de lado por un momento la gravedad del asunto, quedé completamente atrapado por el lado de novela detectivesca de este caso
Es fascinante el proceso por el que internet va deduciendo “quién, cómo y por qué”
Justamente por esto, desde hace años tengo mapeado
gcen mi terminal aTZ=UTC0 git commitNo hace falta cambiar la hora del sistema ni la configuración de git. Puede que haya una mejor forma en la configuración global
Tampoco es por una razón maliciosa. Viajo mucho y no quiero ir filtrando mi itinerario de viaje en repositorios públicos
No solo ajusta la zona horaria a UTC, sino que también fija la hora en 00:00, así que en el commit solo queda la fecha. Me parece suficiente que la información almacenada permanentemente en un commit de git sea la fecha; no veo necesidad de filtrar la hora exacta del commit
alias git='TZ=UTC0 git'Requiere pasos manuales y tampoco uso servicios de ubicación
Qué mala suerte la de Jia. Dos años de trabajo se fueron por la borda
Jia, si estás leyendo esto, recuerda que el 100% de los tiros que no haces los fallas. Arriba la cabeza, hermano
“¿Quién trabaja regularmente de madrugada?”
Yo
“Si fuera un hacker, sería mucho más creíble que trabajara por la tarde y entrada la noche”
Creo que aquí sería más acertado cambiar hacker por gente joven
Tengo 41 años, y en los últimos 10 años habré estado despierto antes de las 7 a. m. unas 20 veces, si acaso. La mitad de la razón por la que sigo aguantando el trabajo con computadoras es que es uno de los pocos trabajos en los que puedes rendir bien trabajando la mayoría de los días en horario de 11 a. m. a 7 p. m.
Hay gente madrugadora y gente nocturna. Cada quien tiene su ritmo y no es algo para juzgar, pero no es algo que cambie naturalmente con la edad ni que deba cambiar
c/hacker/younger person¿qué sintaxis es esa? Conozco la sustitucións/a/b/desed, pero no sé cuál empieza concEn la mañana hay muchas interrupciones, como tener que tratar con “gente madrugadora”, y desde después del almuerzo hasta la noche hay muchas menos intromisiones
Puedes hacer muchísimo más en 4 horas sin interrupciones que en una jornada de 8 horas con llamadas y correos aleatorios. Ya no soy joven, pero a veces también trabajo de noche porque, si no me interrumpen y ya llevo unas horas pensando en el problema a ratos, puedo terminarlo en la mitad del tiempo
Si estás teniendo mañanas tranquilas, te envidio
“Se ven dos commits, el martes 27 de junio de 2023 a las 23:38:32 +0800 y a las 17:27:09 +0300. Si haces la cuenta, entre ambos commits hay una diferencia de unas 9 horas”
Pero 17:27:09 +0300 equivale a 22:27:09 +0800, así que ¿la diferencia entre ambos commits no sería de aproximadamente 1 hora?
“De forma aún más concluyente, el 6 de octubre de 2022 se ve un commit a las 21:53:09 +0300 seguido por otro a las 17:00:38 +0800. ¡Eso es una diferencia de apenas unos minutos!”
No. Eso es casi una diferencia de 10 horas
Parece que el autor invirtió por error los dos análisis, o que se le dan mal los cálculos de zona horaria
¿Y si fuera un estadounidense, o alguien de una región completamente distinta, fingiendo ser un europeo del este que finge ser chino?
Si alguien estuviera montando una tapadera, por lo menos habría metido una capa más de desvío
En una configuración así, este tipo de filtración tampoco causaría gran cosa
Soy uno de los autores del texto original. Saqué muchas ideas útiles para análisis futuros y, para responder a cuatro objeciones que salieron con frecuencia, diría esto
Estoy de acuerdo en que no está claro si era una sola persona o varias. Aun así, incluso si fuera un equipo, el enfoque de las zonas horarias puede dar pistas de dónde estaba ese equipo. Los horarios de actividad se parecen demasiado a horario laboral regular como para pensar en un equipo distribuido por todo el mundo
Por supuesto, también es posible que se hayan alterado las horas de los commits, o que los commits/subidas se hayan hecho con scripts programados. Aun así, para ocultar en la práctica una diferencia grande de zonas horarias habría que introducir retrasos enormes, así que no me parece muy realista. xz no se desarrolló en el vacío, sino reaccionando a eventos en línea como issues o mensajes en listas de correo
En efecto, mezclé los dos ejemplos. Las dos horas que dije que tenían unas 10 horas de diferencia en realidad están separadas por unos minutos, y las que dije que estaban separadas por unos minutos en realidad tienen unas 10 horas de diferencia. Lo voy a actualizar
Por último, también es cierto que UTC+2/3 no solo abarca Europa del Este, sino también parte de Medio Oriente. Eso también lo aclaré en una actualización del texto