XZ后门:时代,该死的时代和骗局

内容

[

https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7beda52c-beec-4d60-983f-13d7f4061d57_1456x779.webp

由Rhea Karty和Simon Henniger撰写

最近在 xz/liblzma tarball 中发现了一个后门。这很可能是自由软件生态系统中最大的信任破坏之一,这个后门很可能是由 xz 的长期维护者田佳放入的。在担任维护者期间,田佳一直保持相对神秘——在社区中这并不罕见,除了他的名字(很可能是假的)之外,对他几乎一无所知。通常,在自由软件领域保持匿名是一件好事:软件本质上是基于成就和价值的,没有理由了解一个人的身份。然而,在这种情况下,有人建立了多年的社区信任,然后滥用了它,了解他们是谁变得很有趣。幸运的是,田佳的活动确实提供了一些元数据,我们可以潜在地利用这些数据来了解更多关于他的信息。因此,这里对我们可以从他的工作模式和时区中学到的内容进行了分析。

从时间中可以学到什么?软件创建的条件!想想时间模式告诉我们的广泛内容——有些人是为编写代码而获得报酬的,也有人将其作为一种爱好。在某些领域,有些人在不同的时间编写代码。有假期、睡眠时间表和工作与生活的平衡——代码并不例外。了解某人编写代码的时间有助于我们理解他们为何以及在哪里编写代码。弄清这些可以让我们更好地了解为什么以及是谁做了这个。

对 JiaT75 的(https://github.com/JiaT75?tab=overview&from=2021-12-01&to=2021-12-31)在 XZ 存储库中的提交和时间戳进行了以下分析。

首先让我们来解决房间里的大象问题:是的,你可以随意更改 Git 时间戳。甚至不需要计算机安全学位 — 只需在提交时设置环境变量 GIT_AUTHOR_DATE 和 GIT_COMMITTER_DATE 即可。如果你忘记了并且还没有推送,甚至在修改提交时稍后也可以更改日期。

然而,虚构时间数据实际上是很困难的:你不应该提交一个看起来是未来提交的提交,也不应该设置一个远在过去的日期,使提交看起来比它引用的在线讨论更旧。这意味着你通常无法改变时间而不增加延迟,即不提交并因此延迟项目开发——即使这样,每次都做对也很困难。毕竟,每个开发软件的人都知道,只需输入“git commit”这几个魔法词语是多么诱人,而不必仔细检查一切。

比实际更容易的方法是只更改时区!理想情况下,您可以将其更改为仍然导致一些合理的时间。例如,一个在欧洲正常办公时间工作但声称在东海岸的人可能会引起一些怀疑,因为中欧时间上午11点是东部时间上午5点,谁会经常在清晨工作呢?对于黑客来说,下午和深夜工作更有可能,因此那些保持正常办公时间的人会想要切换到大约提前五个小时左右的时区(这样他们开始工作是下午2点(真实时间上午9点),结束是晚上10点(真实时间下午5点))。

我认为贾坦就是这么做的。根据他的名字,他希望人们相信他是亚洲人——具体来说是中国人——他的绝大多数提交(440次)似乎都有UTC+08的时间戳。+0800很可能是中国标准时间(CST),考虑到几乎没有人居住在西伯利亚和戈壁沙漠,这个时区很可能是中国(或印度尼西亚或菲律宾或澳大利亚西部)的时区。

然而,我相信他实际上来自UTC+02(冬季)/UTC+03(夏令时)时区的某个地方,该时区包括东欧(EET),以及以色列(IST)和其他一些地区。伪造时区将很容易——无需进行任何数学计算或延迟提交。他很可能只是在每次提交时将系统时间更改为中国时间。

我们通常看到他在上午9点到下午6点工作(根据东欧时间调整)。这比有人在星期二晚上午夜和凌晨1点工作要合理得多(未调整,使用UTC+08)。

除了有时候,他忘记改变自己的时区。分别有3次提交和6次提交,对应于UTC+02和UTC+03。UTC+02时区与冬季时间(2月和11月)完全匹配,而UTC+03与夏季(6月、7月和10月初)匹配。这与东欧发生的夏令时切换完全吻合;我们在冬季(10月最后一个周末之后)看到时区切换为+0200,在夏季(3月最后一个星期日之后)切换为+0300。顺便提一下,这似乎是拉瑟·科林和汉斯·詹森所在的时区。

好的,你说。这是一个理论,但也许在这一点上并不是一个可信的理论。如果他只是从UTC+08的居住地飞往EET呢?嗯,事实证明当我们仔细观察时,我们会发现这是不可信的。让我们分析一下贾在非+0800时区记录的几次情况。在这里,我们注意到有一些情况下贾在+0800和+0300/+0200之间似乎不合理地切换时间。这表明也许他实际上并不在+0800 CST时间,正如他的个人资料所希望我们相信的那样。

值得注意的是,2022年10月6日,我们看到两次提交,一次是在21:53:09 +0300,随后另一次是在17:00:38 +0800。如果我们做一下计算,这两次提交之间相差大约11小时。然而,从中国飞往东欧或中东任何地方的航班至少需要10-12小时的飞行时间,考虑到这些地点之间的直达航班很少,实际飞行时间可能更长。

更为严重的是,在2023年6月27日,我们看到以下情况:一个提交在23:38:32 +0800,另一个在17:27:09 +0300。这只是几分钟的时间差!

他在哪个国家工作还有一个非常重要的线索:假期。我们注意到贾的工作时间表和假期似乎更符合东欧人而不是中国人。免责声明:我不是中国假期的专家,所以这很可能是不准确的。我参考了这份银行假期列表:https://www.bankofchina.co.id/en-id/service/information/latest-news/2022/public-holidays-in-china-hk-and-the-us-in-2023.html

2023年中国银行假期:

  • 2023年9月29日:中秋节
  • 在2023年,4月5日:清明节
  • 在2023年,1月26日,22日,23日,24日,26日,27日:农历新年

东欧假期:

  • 圣诞节(对许多东欧时间国家而言),12月25日永远不工作
  • 从不在12月31日或1月1日工作:新年

进一步调查,我们可以尝试查看他是在周末还是工作日工作:这是一种业余爱好还是他是为此付费的?贾先生最常工作的日子是周二(86)、周三(85)、周四(89)和周五(79)

再次强调,这些都不是任何事情的确凿证据 — 但我们认为这是一个足够有趣的观察结果,值得发布。根据这一点,“Jia”很可能是在UTC+02/03(例如东欧时间)的某处工作,而且通常是在办公时间工作。

更新(3月31日):感谢大家的宝贵反馈!我们稍微更新了帖子:我们调整了两个提交的时间,因为时区变化太快(我们的观点依然存在;我们只是颠倒了示例)。我们还澄清了UTC +02/03包括比东欧更广泛的地理范围。

总结
文章总结了在 xz/liblzma tarball 中发现的后门事件。长期维护者 Jia Tan 可能是后门制造者,通过分析他的工作模式和时区,推测他实际位于 UTC+02/03 时区,而非他所声称的 UTC+08 时区。文章指出 Jia 可能通过更改时区而非时间来掩盖身份,工作时间与欧洲东部时区更为吻合。通过分析提交时间和假期,推测 Jia 可能是在 UTC+02/03 时区工作,而非中国。文章提到时间戳可被更改,但更改时区相对容易且更难被察觉。总体来说,文章通过时间分析揭示了 Jia 的身份可能性。