Backdoor do XZ: tempo, maldito tempo e fraudes
(rheaeve.substack.com)- 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_DATEeGIT_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_DATEeGIT_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,
de5c5e4ee446ab7a, têm Lasse Collin como committer e parecem ser patches enviados por Jia por e-mail e aplicados comgit 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
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
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"
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
Porém, na Finlândia normalmente se prefere julho, então é menos comum
À primeira vista, isso parece fazer sentido
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
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
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)
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
gcdo terminal paraTZ=UTC0 git commitNã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
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
alias git='TZ=UTC0 git'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
“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
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
c/hacker/younger person? Conheço a substituiçãos/a/b/dosed, mas não conheço uma que começa comcDe 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?
“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
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