我检查了面试的技术测试项目,发现这居然是一场精心策划的行动
Hacker News 摘要原标题:I Inspected My Take-Home Interview Project. It Was a Whole Operation
一名招聘人员通过 LinkedIn 私信联系了作者,提供了一个月薪高达 10,000 至 15,000 美元的远程 Python 开发职位。虽然高昂的薪酬和对方过早透露待遇的行为让作者产生了怀疑,但他还是决定继续流程。在简历通过后,作者收到了一个通过谷歌云盘分享的压缩包,里面是所谓的入职前技术测试题目。
隐藏目录中的秘密
压缩包解压后表面上是一个基于 FastAPI 和 SQLAlchemy 的标准后端项目。作者检查了 requirements.txt 文件,没有发现任何拼写劫持或恶意包。然而,当作者习惯性地使用 tree -a 命令查看隐藏目录时,发现了异常。在 .git/hooks 文件夹中,攻击者预设了大量的 Git 钩子脚本。
作者查看了其中的 pre-commit 脚本,发现其逻辑非常阴险:
• 该脚本会首先判断受害者的操作系统是 Mac、Linux 还是 Windows。
• 根据系统类型,它会使用 curl 或 wget 从远程服务器 45.61.164.38 静默下载并执行特定的有效负载。
• 所有的执行过程都重定向到了 /dev/null,意味着用户在终端看不到任何异常输出。
恶意负载的执行流程
以 Linux 系统为例,第一阶段的脚本会从远程服务器下载一个名为 tokenlinux.npl 的文件,将其移动到用户的文档目录下并重命名为 tokenlinux.sh。随后,脚本会赋予该文件执行权限,并利用 nohup 命令让其在后台持续运行。
第二阶段的脚本功能更加复杂:
• 它会自动配置 Node.js 环境并修改系统路径。
• 下载 parser.js 和 package.json 文件。
• 静默安装所需的依赖项,然后隐蔽地启动解析器。
针对加密货币的意图
作者通过分析 package.json 文件发现了一些非常可疑的依赖项:
• clipboardy:用于获取系统剪贴板的内容。
• fs:用于直接操作文件系统。
• hardhat:这是一个以太坊开发环境工具。
结合这些工具和脚本名称中的 token 字样,作者推测攻击者的目标是定位并窃取受害者的加密货币钱包,或者监控浏览器扩展程序中的敏感信息。攻击者还在请求 URL 中使用了唯一的 id 参数,以便为不同的目标提供定制化的恶意代码并进行追踪。
攻击手段的多样性
随着调查深入,作者发现这是一个分布广泛的攻击活动:
• 有些版本的恶意软件隐藏在 .vscode 文件夹中。只要开发者使用 VSCode 打开该项目文件夹,里面的启动命令就会立即自动执行,用户甚至不需要运行任何 Git 命令就会被感染。
• 攻击者通常会冒充知名初创公司的名义,或者直接克隆 GitHub 上合法的开源项目(例如本项目就是克隆自一个名为 personal-finance-service 的个人财务服务项目),然后在上面覆盖一层隐藏的恶意目录。
技术溯源与反击尝试
作者尝试对攻击者的 IP 地址进行扫描。结果显示该服务器运行着 Ubuntu 系统,并开放了端口 22,使用的是较新版本的 OpenSSH。由于该版本发布时间较短,目前还没有已知的漏洞可以被利用,这表明攻击者在服务器安全防护方面也做得相当到位。
作者最后提醒所有开发者,在运行任何来源不明的代码之前,务必检查其中的隐藏目录和脚本,以免落入此类精心设计的招聘陷阱。
原文:https://citizendot.github.io/articles/fake-job-interview-git-hook-malware/