2 pontos por GN⁺ 2024-04-01 | 1 comentários | Compartilhar no WhatsApp
  • Em torno do backdoor no tarball do xz/liblzma, o fuso horário dos commits e o padrão de trabalho de Jia Tan foram usados como pistas para estimar a região real de atividade
  • Os horários de commit podem ser manipulados com GIT_AUTHOR_DATE e GIT_COMMITTER_DATE, mas é provável que tenha sido mais fácil mudar apenas o fuso horário do que ajustar todo o histórico temporal de forma convincente
  • A maior parte dos 440 commits de Jia Tan foi registrada como UTC+08, mas alguns registros em UTC+02 e UTC+03 coincidem com a alternância de inverno/verão do Leste Europeu
  • As mudanças de fuso em 6 de outubro de 2022 e 27 de junho de 2023 ocorreram em intervalos curtos demais para serem explicadas por deslocamentos reais, o que enfraquece a hipótese de simples viagem
  • Alguns commits em +0200 parecem ser patches aplicados por Lasse Collin com git am, e no fluxo de patches por e-mail a confiabilidade das informações de fuso horário fica limitada

O backdoor do xz e o objeto da análise

  • O backdoor encontrado no tarball do xz/liblzma foi visto como um incidente que abalou fortemente a confiança no ecossistema de software livre
  • Considera-se possível que o backdoor tenha sido inserido por Jia Tan, mantenedor de longa data do xz
  • Na comunidade, quase nada se sabia sobre Jia Tan além do nome, e até esse nome pode não ser real
  • O objeto da análise são a atividade no GitHub de JiaT75 e os timestamps dos commits no repositório do xz
  • O ponto de partida foi esta publicação pública na lista de discussão oss-security

Por que é difícil falsificar timestamps no Git

  • O horário de um commit no Git pode ser alterado com as variáveis de ambiente GIT_AUTHOR_DATE e GIT_COMMITTER_DATE
  • Também é possível alterar a data depois com amend, desde que o commit ainda não tenha sido enviado com push
  • Porém, falsificar dados temporais de modo convincente envolve várias restrições
    • Fazer push de commits que pareçam ter sido feitos no futuro pode levantar suspeitas
    • Commits que pareçam mais antigos do que discussões públicas online também soam artificiais
    • Para evitar essas restrições, seria preciso reter commits, o que pode atrasar o desenvolvimento do projeto
  • Em vez de ajustar o horário real, mudar só o fuso horário permitiria enganar com mais facilidade, sem cálculos complexos nem atraso nos commits

Registros em UTC+08 e a possibilidade de UTC+02/03

  • A maioria dos commits de Jia Tan, 440 ao todo, ficou registrada com timestamp UTC+08
  • UTC+08 provavelmente indica o CST da China, mas Indonésia, Filipinas e a Austrália Ocidental também usam esse fuso
  • O nome Jia Tan pode ter servido como sinal para parecer asiático, especialmente chinês
  • Levanta-se a possibilidade de que a região real de atividade fosse uma área de UTC+02 no inverno / UTC+03 no horário de verão
    • Isso inclui, por exemplo, o EET do Leste Europeu e o IST de Israel
    • Ao corrigir os registros UTC+08 para UTC+02/03, o padrão vira algo como trabalho normal entre 9h e 18h
    • Sem essa correção, o padrão sugere trabalho à meia-noite e à 1h da madrugada de terça-feira, o que parece menos natural

Pistas reveladas pelas mudanças de fuso

  • Alguns commits podem refletir momentos em que Jia Tan esqueceu de mudar o fuso horário
  • Foram identificados 3 commits em UTC+02 e 6 commits em UTC+03
    • UTC+02 coincide com o horário de inverno em fevereiro e novembro
    • UTC+03 coincide com o horário de verão em junho, julho e início de outubro
    • Isso bate com a mudança de horário de verão no Leste Europeu: +0200 após o último fim de semana de outubro e +0300 após o último domingo de março
  • Esse fuso também parece coincidir com o de Lasse Collin e Hans Jansen
  • Em uma atualização de 2 de abril, refletindo uma observação de Joey Hess, foi acrescentado que muitos desses casos são commits em que Lasse Collin aparece como committer
    • Ainda assim, nem todos os commits de Jia registrados por Lasse mostram o mesmo fenômeno, e muitos aparecem como +0800
    • Portanto, não está claro se os commits em +02/03 são erro, ou apenas mudança de fluxo de trabalho

Intervalos difíceis de explicar por deslocamento real

  • A explicação de que alguém residente em UTC+08 teria voado ocasionalmente para uma região UTC+02/03 não combina bem com os timestamps detalhados
  • Em 6 de outubro de 2022, há um commit às 21:53:09 +0300 seguido por outro às 17:00:38 +0800
    • A diferença entre os dois é de cerca de 11 horas
    • Da China ao Leste Europeu ou Oriente Médio, o tempo mínimo de voo já seria de 10 a 12 horas, e voos diretos são raros, então o deslocamento real provavelmente levaria mais tempo
  • Em 27 de junho de 2023, aparecem em sequência um commit às 23:38:32 +0800 e outro às 17:27:09 +0300
    • A diferença entre eles é de apenas alguns minutos
  • Essas transições reforçam a possibilidade de que Jia Tan não estivesse de fato numa região de CST UTC+08

Feriados e padrão de trabalho durante a semana

  • O padrão de feriados também parece combinar mais com o Leste Europeu do que com a China
  • Para os feriados chineses, a referência usada é o aviso de feriados de 2023 do Bank of China Indonesia
  • Há registros de trabalho em datas apresentadas como feriados na China
    • 29 de setembro de 2023: Festival do Meio do Outono
    • 5 de abril de 2023: Qingming
    • 22 a 27 de janeiro de 2023 etc.: período do Ano-Novo Lunar
  • Em relação aos feriados do Leste Europeu, observa-se ausência de trabalho no Natal de 25 de dezembro e no Ano-Novo de 31 de dezembro e 1º de janeiro
  • Os dias de trabalho mais frequentes de Jia foram terça-feira com 86 vezes, quarta com 85, quinta com 89 e sexta com 79

Nome e ressalva sobre aplicação de patches

  • Se “Jia Cheong Tan” fosse um nome real, aponta-se que ele não seria uma romanização válida de um nome em caracteres chineses usado na China, parecendo mais uma grafia do Sudeste Asiático, como a da Malásia
  • Também se observa que a grafia “Cheong” não é usada na China atual, e cita-se como exemplo a tendência do inglês chinês de juntar os caracteres do nome
    • O exemplo dado é “Yangqing Jia”, não “Yang Qing Jia”
  • No entanto, dois commits em +0200, de5c5e4 e e446ab7a, têm Lasse Collin como committer e parecem ser patches enviados por Jia por e-mail e aplicados com git am
  • Esses commits e alguns commits adjacentes compartilham timestamps idênticos, o que é compatível com a aplicação de um conjunto de arquivos de patch com git am
  • Quando patches circulam por e-mail, fica difícil confiar nas informações de fuso horário, o que enfraquece parte desta análise

1 comentários

 
GN⁺ 2024-04-01
Opiniões no Hacker News
  • Se foi um ataque patrocinado por Estado, é bem possível que houvesse uma pessoa/departamento escrevendo o código e as mensagens na mailing list, e uma equipe separada alinhando o horário e os timestamps em que esse material ia para a internet com uma “história adequada à configuração do projeto”
    Às vezes, eles podem até ter inserido “erros” de propósito para sugerir aos investigadores não a localização real, mas outro lugar escolhido

    • É provável que houvesse uma equipe inteira por trás dessa operação, e entre as tarefas dessa equipe poderia estar algo como “induzir por engenharia social o projeto XZ a aceitar o mantenedor que escolhemos”
      Em outro texto[1], também foi levantada a possibilidade de que contas surgidas de repente tenham criado um senso de urgência para acelerar a transferência de controle
      [1] https://connortumbleson.com/2024/03/31/watching-xz-unfold-fr...
      via: https://news.ycombinator.com/item?id=39888854
      A parte relevante pode ser encontrada buscando por "Progress will not happen until there is new maintainer"
    • Partindo da premissa de que não foi “um lobo solitário”, muito mais coisas se tornam possíveis
      Isso inclui fazer parecer que a atividade vinha de uma determinada localização e, ao mesmo tempo, fazer com que não parecesse haver mais de uma pessoa
  • Não acho que seja alguém do Leste Europeu, mas olhando para UTC+0200/+0300, na Europa isso incluiria Finlândia, os três países bálticos, Ucrânia, Romênia, Moldávia e Grécia
    Um pouco mais abaixo, também inclui uma área considerável do Oriente Médio, incluindo Israel

    • Em agosto aparece uma lacuna de 4 semanas, o que bate com o calendário de férias europeu
      Porém, na Finlândia normalmente se prefere julho, então é menos comum
    • A Tukaani é uma organização finlandesa com contribuições principalmente de finlandeses e, olhando para os contribuidores, quase todos têm nomes finlandeses
      À primeira vista, isso parece fazer sentido
    • Tenho curiosidade para saber como isso se encaixa com Israel, considerando horário de verão e feriados
    • Não entendo por que estou recebendo downvotes. Quando se pensa em atores estatais, por casos como o Stuxnet, Israel fica bem no alto da lista junto com EUA/Rússia/China/Coreia do Norte
      Especialmente a Unit 8200 da IDF tem uma reputação bastante conhecida
      Não estou dizendo que outros países não tenham capacidade, e esse ataque também não parece exigir necessariamente recursos no nível da NSA ou do GCHQ. Na prática, pode até ter sido um único lobo solitário, mas ainda assim é algo digno de atenção
    • “Não confie em ninguém! Desde que Deus cagou o terceiro homem das cavernas, já se tramava uma conspiração contra um deles!” - Gen. Hunter Gathers, OSI (The Venture Bros.)
      Forças com recursos e motivações praticamente ilimitados podem montar operações de falsa bandeira para direcionar a responsabilidade para um lado específico. Elas são muito competentes em apagar rastros, e mesmo os pesquisadores de segurança mais experientes podem levar meses ou anos para chegar a uma estimativa informada de quem foi o responsável
      Por isso, tentar descobrir “quem fez” chega perto de ser perda de tempo
      A lição é esta: não colocar, por motivo nenhum, software de ponta não verificado em ambientes de produção; os pentesters da organização devem quebrar regularmente a stack e informar os resultados à organização e aos mantenedores de pacotes; mantenedores de software livre e open source devem auditar, a cada release, qualquer código novo especialmente sensível a segurança; e deve-se doar aos mantenedores
      Felizmente isso não entrou na stable, e foi algo que quase chegou ao ponto de provocar um Chernobyl de segurança dentro dos sistemas, mas acabou sendo evitado por pouco
      Há pessoas tentando convencer todo mundo de que um determinado grupo é o responsável, e isso tem objetivos geopolíticos. Por exemplo, num contexto em que se discute nos EUA proibir a posse estrangeira de apps web populares, seria muito conveniente para governos ou empresas que se beneficiariam de tal lei se um usuário do GitHub com nome de aparência chinesa tivesse commitado um vetor de ataque com timestamps que parecem vir da RPC
      Mesmo que de fato seja alguém da China continental, se houve patrocínio estatal, é muito improvável que essa pessoa seja entregue a um US Marshal mesmo que haja acusação formal e pedido de extradição. Ao contrário, ela pode até ser “silenciada” para impedir que informações sobre a organização maior caiam nas mãos do inimigo
      Tirando conspirações dignas de filme do Bond, não há muitos lugares onde aplicar esse conhecimento na prática. Em geral, você já sabe de onde vêm os usuários e pode até aplicar bloqueio regional. Caso contrário, precisa se preparar para outras ameaças vindas daquela região
  • GMT+8, a composição do nome (nome em chinês/dialeto misto + sobrenome Hokkien) e os indícios[1] de acesso por algo que parece ser uma saída de VPN ou servidor de hospedagem em Singapura batem todos com uma identidade singapurense, seja real ou disfarçada
    Portanto, também é preciso relativizar um pouco quando a fonte de [1] diz que “o nome soa falso”. Pessoas da China continental nem sempre conhecem bem as comunidades chinesas da diáspora
    Vários dos feriados mencionados também não são feriados públicos de Singapura[2]. 24 de janeiro foi feriado, mas, para aplicar o padrão de “trabalhar em dias úteis”, 22 de janeiro era domingo e aparece como dia trabalhado
    Seria interessante ver mais textos de Jia Tan, especialmente os mais antigos. Pode haver hábitos linguísticos bem distintos que ajudem a diferenciar singapurenses, chineses continentais, falantes de várias línguas eslavas e falantes nativos de inglês
    [1] https://boehs.org/node/everything-i-know-about-the-xz-backdo...
    [2] https://www.mom.gov.sg/employment-practices/public-holidays

    • Em alguns commits de Jia Tan que vi, o inglês soava natural como o de um nativo dos EUA ou do Reino Unido, e não percebi sinais de inglês singapurense
      Claro que a amostra é muito pequena, então não dá para inferir demais
      Quase 10% dos singapurenses têm Tan como sobrenome
      [1] [https://en.wikipedia.org/wiki/File:Singaporean_surnames_by_f...](https://en.wikipedia.org/wiki/File:Singaporean_surnames_by_frequency.png)
    • Tan não é apenas um sobrenome Hokkien distinto (o muito mais comum 陳), mas também é o sobrenome chinês
  • Deixando a gravidade da questão de lado por um momento, fiquei completamente envolvido pelo lado de romance policial desse caso
    É fascinante ver a internet tentando descobrir “quem, como e por quê”

  • Há alguns anos, justamente por esse motivo, mapeei o gc do terminal para TZ=UTC0 git commit
    Não é preciso mudar o horário do sistema nem a configuração do git. Talvez exista um jeito melhor na configuração global
    Também não é por motivo malicioso. Viajo bastante e não quero vazar meus itinerários de viagem em repositórios públicos

    • Uso uma pequena ferramenta que criei para ocultar as informações de horário dos commits do git: https://github.com/SmartHypercube/git-date-truncate
      Além de ajustar o fuso para UTC, ela define o horário como 00:00, de modo que no commit reste apenas a informação da data. Acho que, para informações armazenadas permanentemente em commits do git, a data já é suficiente, e não há necessidade de vazar o horário exato do commit
    • Que tal fazer assim?
      alias git='TZ=UTC0 git'
    • Viajo bastante, mas hoje em dia não mudo mais o fuso horário da minha workstation de PST/PDT
      Exige uma etapa manual, e também não uso serviços de localização
  • Coitado do Jia. Dois anos de trabalho foram todos por água abaixo
    Jia, se você estiver lendo isto, lembre-se: você erra 100% dos arremessos que não tenta. Cabeça erguida, irmão

    • Ninguém sabe quantas outras personas a pessoa por trás daquela identidade online tem, nem quantos outros projetos ela contaminou com elas
    • Não precisa se preocupar. Eles, ou seja, a equipe, também devem estar contribuindo para bibliotecas de imagem, WebKit, Kubernetes etc.
    • Por que acha que foi por água abaixo? Sabemos que o objetivo não foi alcançado?
    • É difícil ter certeza de que JiaT tenha trabalhado apenas no projeto xz
  • “Quem trabalha regularmente de madrugada?”
    Eu
    “Para um hacker, é muito mais plausível trabalhar à tarde e tarde da noite”
    Aqui, se trocar hacker por pessoa jovem, talvez fique mais correto

    • O estereótipo de “hacker” já é ultrapassado, mas trocá-lo por “pessoa jovem” e insinuar que “pessoa mais velha” não se encaixa é igualmente estranho
      Tenho 41 anos e, nos últimos 10 anos, devo ter acordado antes das 7 da manhã umas 20 vezes, se tanto. Metade do motivo pelo qual ainda aguento trabalhar com computadores é que esta é uma das poucas profissões em que consigo me sair bem trabalhando, na maioria dos dias, em um horário das 11h às 19h
      Existem pessoas diurnas e pessoas noturnas. Cada um tem seu próprio ritmo, e isso não é algo para julgar; não é algo que mude naturalmente, ou deva mudar, com a idade
    • Que sintaxe é essa, c/hacker/younger person? Conheço a substituição s/a/b/ do sed, mas não conheço uma que começa com c
    • Mesmo deixando estereótipos de lado, hackers que codam com seriedade geralmente acabam moldando a agenda de “trabalho real” em torno de obrigações externas
      De manhã há muitas interrupções, como ter de lidar com “pessoas matutinas”; do pós-almoço até a noite entram muito menos coisas no caminho
      Dá para fazer muito mais em 4 horas sem interrupção do que em uma jornada de 8 horas cheia de telefonemas e e-mails aleatórios. Já não sou jovem, mas também há trabalhos que faço à noite porque, sem interrupções e depois de ter pensado neles aos poucos por algumas horas, consigo terminar em metade do tempo
      Se você tem manhãs tranquilas, tenho inveja
  • “Em terça-feira, 27 de junho de 2023, aparecem dois commits: 23:38:32 +0800 e 17:27:09 +0300. Fazendo as contas, há cerca de 9 horas entre os dois commits”
    Mas 17:27:09 +0300 é 22:27:09 +0800, então os dois commits não estão separados por cerca de 1 hora?

    • Sim. E há uma parte ainda pior
      “De forma mais decisiva, em 6 de outubro de 2022, depois de um commit às 21:53:09 +0300, aparece um commit às 17:00:38 +0800. Isso é uma diferença de apenas alguns minutos!”
      Não. Isso é uma diferença de quase 10 horas
      Parece que o autor trocou as duas análises por engano, ou não sabe muito bem calcular fusos horários
  • E se fosse um americano, ou alguém de uma região completamente diferente, fingindo ser um europeu do leste fingindo ser chinês?
    Se eu fosse disfarçar algo, colocaria pelo menos mais uma camada de indireção

    • Também pode ter sido um chinês fingindo ser um europeu do leste, ou israelense, fingindo ser chinês
      Numa configuração dessas, mesmo com esse tipo de vazamento, nada demais aconteceria
  • Sou um dos autores do texto original. Recebi muitas ideias úteis para análises futuras e, para responder às quatro objeções que apareceram com frequência:
    Concordo que não está claro se era uma pessoa ou várias. Mas, mesmo que fosse uma equipe, a abordagem por fuso horário pode indicar onde essa equipe estava. Os horários de atividade parecem demais com horário comercial regular, em vez de uma equipe espalhada pelo mundo todo
    É claro que também é possível que os horários dos commits tenham sido alterados, ou que os commits/uploads tenham sido feitos por scripts com agendamento. Ainda assim, acho pouco realista esconder uma grande diferença de fuso horário de verdade, porque isso exigiria atrasos enormes. O xz não foi desenvolvido no vácuo; o desenvolvimento reagia a eventos online, como abertura de issues e mensagens em listas de discussão
    De fato, misturamos os dois exemplos. Os dois horários que dissemos ter cerca de 10 horas de diferença na verdade diferem por alguns minutos, e os horários que dissemos diferir por alguns minutos na verdade diferem por cerca de 10 horas. Vamos atualizar
    Por fim, também é correto dizer que UTC+2/3 inclui não só o Leste Europeu, mas também partes do Oriente Médio. Também deixamos isso claro na atualização do texto