2 points par GN⁺ 2024-04-01 | 1 commentaires | Partager sur WhatsApp
  • Autour de la backdoor du tarball xz/liblzma, les fuseaux horaires des commits Git de Jia Tan et ses schémas de travail sont utilisés comme indices pour estimer sa véritable zone d’activité
  • Les horaires de commit peuvent être manipulés via GIT_AUTHOR_DATE et GIT_COMMITTER_DATE, mais il était probablement plus simple de changer seulement le fuseau horaire que d’ajuster de manière crédible tous les horaires
  • La plupart des 440 commits de Jia Tan sont enregistrés en UTC+08, mais certains en UTC+02 et UTC+03 correspondent aux bascules hiver/été de type Europe de l’Est
  • Les changements de fuseau horaire des 6 octobre 2022 et 27 juin 2023 sont trop rapprochés pour s’expliquer facilement par de réels déplacements, ce qui affaiblit l’hypothèse d’un simple voyage
  • Certains commits en +0200 semblent être des patchs appliqués par Lasse Collin avec git am, ce qui limite la fiabilité des informations de fuseau horaire dans un flux de patchs par e-mail

La backdoor xz et le périmètre de l’analyse

  • La backdoor découverte dans le tarball xz/liblzma est considérée comme un événement ayant fortement ébranlé la confiance dans l’écosystème du logiciel libre
  • On estime que la backdoor a probablement été introduite par Jia Tan, mainteneur de longue date de xz
  • Jia Tan était très peu connu dans la communauté au-delà de son nom, qui pourrait lui-même ne pas être authentique
  • L’analyse porte sur l’activité GitHub de JiaT75 et sur les horodatages des commits du dépôt xz
  • Le point de départ est ce billet public publié sur la liste de diffusion oss-security

Pourquoi il est difficile de falsifier les horodatages Git

  • L’heure d’un commit Git peut être modifiée avec les variables d’environnement GIT_AUTHOR_DATE et GIT_COMMITTER_DATE
  • Il est aussi possible de corriger ultérieurement la date de commits qui n’ont pas encore été poussés, via amend
  • Mais une falsification crédible des données temporelles implique plusieurs contraintes
    • Pousser un commit qui semble avoir été créé dans le futur peut éveiller les soupçons
    • Un commit qui paraît plus ancien qu’une discussion en ligne est également peu naturel
    • Pour éviter ces contraintes, il faut retenir les commits, ce qui peut retarder le développement du projet
  • Au lieu d’ajuster l’heure réelle, modifier seulement le fuseau horaire permet de tromper plus facilement, sans calculs ni retard de commit

Traces en UTC+08 et hypothèse UTC+02/03

  • La majorité des commits de Jia Tan, soit 440 commits, portent un horodatage UTC+08
  • UTC+08 correspond probablement au CST chinois, mais l’Indonésie, les Philippines et l’Australie-Occidentale se trouvent aussi dans ce fuseau
  • Le nom Jia Tan pourrait être un signal destiné à suggérer une personne asiatique, en particulier chinoise
  • Il est avancé que la véritable zone d’activité pourrait avoir été une région en UTC+02 en heure d’hiver / UTC+03 en heure d’été
    • Cette zone inclut notamment l’EET d’Europe de l’Est et l’IST d’Israël
    • En corrigeant les traces UTC+08 vers UTC+02/03, le schéma de travail devient généralement une activité de 9 h à 18 h
    • Sans correction, cela donne une activité le mardi à minuit et à 1 h du matin, ce qui paraît moins naturel

Indices révélés par les changements de fuseau horaire

  • Certains commits pourraient résulter du fait que Jia Tan a oublié de changer de fuseau horaire
  • Trois commits en UTC+02 et six commits en UTC+03 ont été identifiés
    • UTC+02 correspond à l’heure d’hiver en février et novembre
    • UTC+03 correspond à l’heure d’été en juin, juillet et début octobre
    • Cela correspond au passage à l’heure d’été en Europe de l’Est : +0200 après le dernier week-end d’octobre, +0300 après le dernier dimanche de mars
  • Ce fuseau horaire semble aussi être celui de Lasse Collin et de Hans Jansen
  • Dans une mise à jour du 2 avril, en tenant compte de la remarque de Joey Hess, il est ajouté que beaucoup de ces cas sont des commits dont Lasse Collin est le committer
    • Toutefois, le même phénomène n’apparaît pas dans tous les commits de Jia validés par Lasse, et beaucoup sont enregistrés en +0800
    • Il n’est donc pas clair si les commits en +02/03 relèvent d’une erreur ou d’un simple changement de workflow

Des intervalles difficiles à attribuer à de vrais déplacements

  • L’explication selon laquelle une personne résidant en UTC+08 aurait parfois pris l’avion vers une zone UTC+02/03 colle mal aux détails des horodatages
  • Le 6 octobre 2022, un commit à 21:53:09 +0300 est suivi d’un commit à 17:00:38 +0800
    • L’écart entre les deux commits est d’environ 11 heures
    • De la Chine à l’Europe de l’Est ou au Moyen-Orient, le temps de vol pur est d’au moins 10 à 12 heures, et les vols directs étant rares, le trajet peut probablement être plus long
  • Le 27 juin 2023, un commit à 23:38:32 +0800 est suivi d’un commit à 17:27:09 +0300
    • L’écart entre les deux commits n’est que de quelques minutes
  • Ces bascules renforcent l’idée que Jia Tan ne se trouvait peut-être pas réellement dans une zone CST UTC+08

Jours fériés et schémas de travail en semaine

  • Les schémas liés aux jours fériés semblent aussi mieux correspondre à l’Europe de l’Est qu’à la Chine
  • La liste des jours fériés chinois est basée sur le calendrier 2023 des jours fériés en Chine, à Hong Kong et aux États-Unis de Bank of China Indonesia
  • Des traces de travail existent même les jours présentés comme fériés en Chine
    • 29 septembre 2023 : fête de la Mi-Automne
    • 5 avril 2023 : fête de Qingming
    • Du 22 au 27 janvier 2023, entre autres : période du Nouvel An chinois
  • Pour les jours fériés d’Europe de l’Est, il est noté qu’aucune trace de travail n’apparaît le 25 décembre, jour de Noël, ni les 31 décembre et 1er janvier, période du Nouvel An
  • Les jours de travail les plus fréquents de Jia sont le mardi avec 86 occurrences, le mercredi avec 85, le jeudi avec 89 et le vendredi avec 79

Nom et réserve sur l’application des patchs

  • Il est signalé que si « Jia Cheong Tan » était un vrai nom, il ne pourrait pas être une romanisation valide d’un nom chinois utilisé en Chine et se rapprocherait plutôt d’une transcription d’Asie du Sud-Est, comme en Malaisie
  • L’orthographe « Cheong » n’est pas utilisée dans la Chine moderne, et il est aussi donné comme exemple que les transcriptions anglaises chinoises tendent à coller les caractères du prénom
    • L’exemple est « Yangqing Jia », et non « Yang Qing Jia »
  • Cela dit, deux commits en +0200, de5c5e4 et e446ab7a, ont Lasse Collin comme committer et semblent correspondre à des patchs envoyés par Jia par e-mail puis appliqués avec git am
  • Ces commits et certains commits voisins possèdent le même horodatage, ce qui correspond à l’application d’un lot de fichiers de patch avec git am
  • Lorsque les patchs circulent par e-mail, il devient difficile de s’appuyer sur les informations de fuseau horaire, ce qui affaiblit une partie de cette analyse

1 commentaires

 
GN⁺ 2024-04-01
Avis sur Hacker News
  • S’il s’agissait d’une attaque soutenue par un État, il est tout à fait possible qu’il y ait eu une personne/un service chargé d’écrire le code et les messages sur les listes de diffusion, et une équipe distincte chargée de faire correspondre les heures de publication sur Internet et les horodatages avec le « récit adapté à la configuration du projet ».
    Parfois, ils ont même pu introduire volontairement des « erreurs » pour suggérer aux enquêteurs non pas l’emplacement réel, mais un autre lieu choisi.

    • Il est très probable qu’une équipe entière ait été derrière cette opération, et que ses tâches aient inclus des choses comme « amener, par ingénierie sociale, le projet XZ à accepter le mainteneur que nous avons choisi ».
      Dans un autre article[1], il a aussi été avancé que des comptes apparus soudainement avaient pu créer un sentiment d’urgence afin d’accélérer le transfert des droits de maintenance.
      [1] https://connortumbleson.com/2024/03/31/watching-xz-unfold-fr...
      via : https://news.ycombinator.com/item?id=39888854
      Pour la partie pertinente, cherchez "Progress will not happen until there is new maintainer".
    • Si l’on part du principe qu’il ne s’agit pas d’un « loup solitaire », beaucoup plus de choses deviennent possibles.
      Y compris donner l’impression que l’activité vient d’un endroit précis, tout en faisant en sorte qu’elle ne ressemble pas à l’œuvre de plus d’une personne.
  • Je ne pense pas qu’il soit originaire d’Europe de l’Est, mais si l’on regarde UTC+0200/+0300, en Europe cela correspond à peu près à la Finlande, aux trois pays baltes, à l’Ukraine, à la Roumanie, à la Moldavie et à la Grèce.
    Un peu plus au sud, cela inclut aussi une assez grande partie du Moyen-Orient, dont Israël.

    • On observe en août une pause de quatre semaines, qui colle avec les calendriers de congés européens.
      En Finlande, toutefois, juillet est généralement préféré, donc c’est moins courant.
    • Tukaani est une organisation finlandaise à laquelle contribuent principalement des Finlandais, et presque tous les contributeurs semblent avoir des noms finlandais.
      À première vue, cela paraît cohérent.
    • Je serais curieux de voir comment cela correspond à Israël si l’on se base sur l’heure d’été et les jours fériés.
    • Je ne comprends pas pourquoi je suis downvoté. Quand on pense à un acteur étatique, à cause d’exemples comme Stuxnet, Israël se place assez haut, aux côtés des États-Unis, de la Russie, de la Chine et de la Corée du Nord.
      En particulier, l’Unit 8200 de l’IDF a une réputation assez célèbre.
      Cela ne veut pas dire que les autres pays n’ont pas les capacités, et cette attaque ne semble pas forcément exiger des ressources du niveau de la NSA ou du GCHQ. En réalité, il pourrait aussi s’agir d’un simple loup solitaire, mais cela mérite quand même l’attention.
    • « Ne faites confiance à personne ! Depuis que Dieu a pondu le troisième homme des cavernes, il y en a un qui complote contre l’un des autres ! » - Gen. Hunter Gathers, OSI (The Venture Bros.)
      Des acteurs disposant de ressources et de motivations pratiquement illimitées peuvent monter des opérations sous faux drapeau pour orienter la responsabilité dans une certaine direction. Ils sont très doués pour effacer leurs traces, et même les chercheurs en sécurité les plus expérimentés peuvent mettre des mois, voire des années, à parvenir à une estimation éclairée de l’identité du responsable.
      Chercher à savoir « qui l’a fait » revient donc presque à perdre son temps.
      La leçon est la suivante : ne jamais introduire, pour quelque raison que ce soit, de logiciel de pointe non vérifié dans un environnement de production ; les pentesters de l’organisation doivent régulièrement essayer de casser la stack et communiquer les résultats à l’organisation et aux mainteneurs des paquets ; les mainteneurs de logiciels libres/open source doivent auditer à chaque release le nouveau code particulièrement sensible du point de vue de la sécurité ; et il faut faire des dons aux mainteneurs.
      Heureusement, ce n’est pas entré dans stable : on est passé tout près d’un Tchernobyl de la sécurité dans nos systèmes, mais on l’a évité de justesse.
      Il y a des gens qui essaient de convaincre tout le monde qu’un acteur précis est responsable, et cela sert des objectifs géopolitiques. Par exemple, alors qu’aux États-Unis on discute d’interdire la propriété étrangère d’apps web populaires, imaginez à quel point ce serait pratique, pour des gouvernements ou des entreprises qui bénéficieraient d’une telle loi, qu’un utilisateur GitHub au nom chinois commette un vecteur d’attaque avec des horodatages donnant l’impression qu’il vient de la RPC.
      Même s’il s’agit réellement de quelqu’un de Chine continentale, s’il a reçu le soutien d’un État, il y a peu de chances qu’il soit livré aux US Marshals en cas d’inculpation et de demande d’extradition. Il pourrait même être « réduit au silence » pour éviter que des informations sur une organisation plus vaste ne tombent aux mains de l’ennemi.
      En dehors des conspirations façon film de James Bond, il y a peu d’endroits où appliquer concrètement ce savoir. En général, on sait déjà d’où viennent les utilisateurs, et l’on peut aussi faire du blocage géographique. Sinon, il faut se préparer aux autres menaces venant de cette région.
  • GMT+8, la composition du nom (nom de type chinois/dialecte mixte + nom de famille hokkien), ainsi que les indices[1] indiquant des connexions depuis ce qui semble être une sortie VPN ou un serveur d’hébergement à Singapour, correspondent tous, que ce soit réel ou une couverture, à une identité singapourienne.
    Il faut donc aussi prendre avec un certain recul le fait que la source de [1] estime que « le nom sonne faux ». Les Chinois de Chine continentale ne connaissent pas toujours bien les communautés chinoises de la diaspora.
    Beaucoup des jours fériés mentionnés ne sont pas non plus des jours fériés à Singapour[2]. Le 24 janvier était bien férié, mais si l’on applique le schéma « travailler les jours ouvrés », le 22 janvier était un dimanche et apparaît pourtant comme travaillé.
    Il serait intéressant de voir davantage de textes de Jia Tan, en particulier les plus anciens. Il pourrait y avoir des habitudes linguistiques assez nettes permettant de distinguer un Singapourien, un Chinois de Chine continentale, des locuteurs de diverses langues slaves et un anglophone natif.
    [1] https://boehs.org/node/everything-i-know-about-the-xz-backdo...
    [2] https://www.mom.gov.sg/employment-practices/public-holidays

    • Dans quelques commits de Jia Tan que j’ai vus, l’anglais se lisait naturellement comme celui d’un natif américain ou britannique, et je n’ai pas vu de traces d’anglais singapourien.
      Bien sûr, l’échantillon est très réduit, donc il ne faut pas trop en tirer.
      Près de 10 % des Singapouriens portent le nom de famille Tan.
      [1] [https://en.wikipedia.org/wiki/File:Singaporean_surnames_by_f...](https://en.wikipedia.org/wiki/File:Singaporean_surnames_by_frequency.png)
    • Tan n’est pas seulement un nom de famille hokkien distinct (le bien plus courant 陳), c’est aussi le nom de famille chinois .
  • Si l’on met de côté un instant la gravité de l’affaire, je suis complètement happé par son côté roman policier
    Voir Internet reconstituer « qui, comment, pourquoi » est fascinant

  • Depuis quelques années, c’est précisément pour ce genre de raison que j’ai mappé gc dans mon terminal sur TZ=UTC0 git commit
    Pas besoin de changer l’heure système ni la configuration de git. Il existe peut-être une meilleure façon de faire dans la configuration globale, mais bon
    Ce n’est pas non plus pour des raisons malveillantes. Je voyage beaucoup et je n’ai pas envie de laisser fuiter mon itinéraire de voyage dans des dépôts publics

    • J’utilise un petit outil que j’ai créé pour masquer les informations d’heure des commits git : https://github.com/SmartHypercube/git-date-truncate
      Il ne se contente pas de mettre le fuseau horaire en UTC, il règle aussi l’heure sur 00:00, de sorte que les commits ne conservent que la date. À mon avis, la date suffit comme information stockée durablement dans un commit git, et il n’y a pas besoin de divulguer l’heure exacte du commit
    • Et si on faisait comme ça ?
      alias git='TZ=UTC0 git'
    • Je voyage beaucoup, mais ces temps-ci je ne change pas le fuseau horaire de ma workstation depuis PST/PDT
      Cela demande une étape manuelle, et je n’utilise pas non plus les services de localisation
  • Pauvre Jia. Deux ans de travail partis en fumée
    Jia, si tu lis ceci, souviens-toi qu’on rate 100 % des tirs qu’on ne tente pas. Garde la tête haute, frère

    • Personne ne sait combien d’autres identités possède la personne derrière cette personnalité en ligne, ni combien d’autres projets elle a contaminés avec elles
    • Pas d’inquiétude. Eux — l’équipe — contribuent sûrement aussi à des bibliothèques d’images, à WebKit, à Kubernetes, etc.
    • Pourquoi dire que c’est parti en fumée ? Tu sais qu’il n’a pas atteint son objectif ?
    • Difficile d’être sûr que JiaT n’a travaillé que sur le projet xz
  • « Qui travaille régulièrement tôt le matin ? »
    Moi
    « Pour un hacker, il est bien plus plausible de travailler l’après-midi et tard le soir »
    Remplacer hacker par jeune personne serait sans doute plus juste ici

    • Le stéréotype du « hacker » est déjà dépassé, mais le remplacer par « jeune personne » et sous-entendre que ce ne serait pas le cas d’une « personne plus âgée » est tout aussi étrange
      J’ai 41 ans et, ces dix dernières années, je ne suis probablement pas resté éveillé avant 7 h du matin plus d’une vingtaine de fois. Si je supporte encore de travailler avec des ordinateurs, c’est en partie parce que c’est l’un des rares métiers où l’on peut être bon tout en travaillant la plupart du temps sur un créneau 11 h–19 h
      Il y a des gens du matin et des gens du soir. Chacun a son rythme, il n’y a pas à juger ; mais ce n’est pas quelque chose qui change naturellement, ou devrait changer, avec l’âge
    • C’est quoi cette syntaxe c/hacker/younger person ? Je connais la substitution s/a/b/ de sed, mais je ne connais pas celle qui commence par c
    • Même en retirant le stéréotype, les hackers qui codent sérieusement finissent généralement par organiser leur « vrai travail » autour des obligations extérieures
      Le matin, il y a beaucoup d’interruptions du genre devoir composer avec les « gens du matin » ; de l’après-midi au soir, il y a beaucoup moins d’intrusions
      On peut faire bien plus en 4 heures sans interruption qu’en une journée de 8 heures ponctuée d’appels et d’e-mails aléatoires. Je ne suis plus jeune non plus, mais s’il n’y a pas d’interruptions et que j’ai pu y réfléchir par bribes pendant quelques heures, il m’arrive de faire le travail le soir, parce que je peux le terminer en deux fois moins de temps
      Si vos matinées sont paisibles, je vous envie
  • « Le mardi 27 juin 2023, on voit deux commits à 23:38:32 +0800 et 17:27:09 +0300. En calculant, il y a environ 9 heures d’écart entre les deux commits »
    Sauf que 17:27:09 +0300 correspond à 22:27:09 +0800, donc les deux commits n’ont pas plutôt environ 1 heure d’écart ?

    • Exact. Et il y a pire
      « Plus décisif encore, le 6 octobre 2022, on voit un commit à 21:53:09 +0300 suivi d’un commit à 17:00:38 +0800. Cela ne fait que quelques minutes d’écart ! »
      Non. Là, il y a presque 10 heures d’écart
      L’auteur semble avoir inversé les deux analyses par erreur, ou être mauvais en calcul de fuseaux horaires
  • Et si c’était un Américain, ou quelqu’un d’une région complètement différente, qui faisait semblant d’être un Européen de l’Est faisant semblant d’être chinois ?
    Si je voulais dissimuler quelque chose, j’ajouterais au moins un niveau d’indirection supplémentaire

    • Cela pourrait aussi être un Chinois faisant semblant d’être un Européen de l’Est ou un Israélien faisant semblant d’être chinois
      Avec une telle configuration, ce genre de fuite ne poserait pas vraiment de problème
  • Je suis l’un des auteurs de l’article original. J’ai récupéré beaucoup d’idées utiles pour de futures analyses, et voici ma réponse aux quatre objections revenues le plus souvent
    Je suis d’accord pour dire qu’il n’est pas clair s’il s’agissait d’une seule personne ou de plusieurs. Cela dit, même s’il s’agissait d’une équipe, l’approche par fuseaux horaires peut indiquer où cette équipe se trouvait. Les horaires d’activité ressemblent beaucoup trop à des heures de bureau pour une équipe répartie dans le monde entier
    Il est bien sûr possible que les heures de commit aient été modifiées, ou que les commits/uploads aient été effectués via un script de planification. Mais pour masquer réellement un gros décalage horaire, il faudrait introduire d’énormes délais, ce qui me paraît peu réaliste. xz n’a pas été développé dans le vide : le développement réagissait à des événements en ligne, comme des issues déposées ou des messages sur une mailing list
    Les deux exemples ont effectivement été mélangés. Les deux horaires que nous disions séparés d’environ 10 heures n’étaient en réalité séparés que de quelques minutes, et ceux que nous disions séparés de quelques minutes l’étaient d’environ 10 heures. Une mise à jour est prévue
    Enfin, il est aussi exact que UTC+2/3 ne couvre pas seulement l’Europe de l’Est, mais aussi une partie du Moyen-Orient. Nous l’avons également clarifié dans la mise à jour de l’article