如何伪造Git提交的时区

如何伪造Git提交的时区

💡 原文英文,约1100词,阅读约需4分钟。
📝

内容提要

最近XZ的后门事件引发了讨论,攻击者贾坦的真实身份成谜。他在东八区的提交信息显示他在中国假期期间未关闭,但在东欧假期期间关闭。本文介绍了修改Git提交时间的技术细节,包括使用其他时区和时区跳跃。攻击者可以使用专用环境、临时更改系统时区或Git钩子来隐藏或伪装时区。使用git filter-branch或git rebase可以修改历史提交。总之,Git中的日期和时区易于伪装,攻击者可以轻松篡改和隐藏。

🔎

延伸解读

时区伪装的技术门槛与操作成本

文章指出,Git本身不提供时区配置,默认使用系统时区。攻击者可通过专用虚拟机、临时修改系统时区、设置TZ环境变量或GIT_AUTHOR_DATE/GIT_COMMITTER_DATE环境变量来伪装时区。其中,环境变量方式粒度更细,但需每次提交手动设置;Git钩子可自动化,但钩子不会随仓库推送,因此不易被他人发现。这些方法操作成本低,但需要一定的技术知识。

历史提交时区修改的局限与风险

对于已提交的历史记录,可使用git filter-branch或git rebase修改提交时间。但文章强调,这会改变提交哈希值,因此只能处理尚未推送到远程仓库的本地提交。若已推送,重写历史可能导致协作问题。攻击者若想隐藏时区,需在推送前完成修改,否则可能留下痕迹。

从XZ事件看时区信息的取证价值

XZ后门事件中,攻击者贾坦的提交时区显示为东八区,但其活动规律与东欧假期吻合,这成为推断其真实所在地的依据之一。文章认为,攻击者未严格伪装时区可能是个失误。时区信息虽易伪装,但若忽略细节,仍可能暴露身份。这提醒我们,在分析可疑提交时,时区可作为辅助线索,但需结合其他证据。

❓

Q&A

贾坦是如何伪装自己的Git提交时区的?

贾坦通过使用其他时区和时区跳跃来伪装身份,Git不提供时区配置,因此他可以利用专用环境或临时更改系统时区来隐藏真实时区。

如何使用Git修改历史提交的时间?

可以使用git filter-branch或git rebase命令来修改历史提交的时间,但这会导致提交哈希值的变化。

使用Git时如何临时更改系统时区?

可以使用命令如'sudo timedatectl set-timezone America/New_York'来临时更改系统时区。

Git中如何使用环境变量控制提交时间?

可以通过设置GIT_AUTHOR_DATE和GIT_COMMITTER_DATE环境变量来控制提交时间,这样Git会读取这些变量作为提交日期。

为什么Git的日期和时区容易被伪装?

因为Git不提供时区配置,默认使用操作系统的时区,攻击者可以轻松篡改和隐藏这些信息。

如何使用Git钩子来标准化时区?

可以在.git/hooks/pre-commit中编辑钩子脚本,设置TZ环境变量和提交日期,以确保每次提交都使用相同的时区。

🏷️

标签

➡️

继续阅读