初级前端开发者如何在遭入侵后寻找本地仓库和包配置中的遭黑痕迹
TuBrief 편집팀
2026년 8월 12일
0
Computing/Software원본 영상을 바탕으로 AI의 도움을 받아 작성했습니다. 원본 영상이 기준입니다.
커뮤니티의 다른 글
댓글 (0)
Log in to leave a comment
아직 작성된 글이 없습니다
원본 영상을 바탕으로 AI의 도움을 받아 작성했습니다. 원본 영상이 기준입니다.
Log in to leave a comment
아직 작성된 글이 없습니다
在接触到安全事故消息后,没有时间只顾着深夜在谷歌上狂搜。2026年5月,恶意 Visual Studio Code 扩展程序被分发,导致开发者机器被黑,约 3,800 个公司内部源码仓库直接遭到泄露。在这种情况下盲目删除代码或格式化笔记本电脑,会导致取证证据全部消失,连原因都无从找起。让我们直接检查包管理器执行日志、全局 CLI 时间戳以及当前运行的进程权限,以确认是否被攻破。
包管理器在安装过程中会在系统缓存目录中留下事务记录。npm 会在 npm config get cache 路径内的 _logs 文件夹中输出调试日志,而 pnpm 则会将构件留在 pnpm store path 中。由于恶意软件包会通过在安装瞬间执行的脚本将环境变量或凭据窃取到外部,因此必须首先检查生命周期执行历史记录。
查找最近14天的日志以捕获未经授权的添加软件包或外部脚本执行情况的命令如下。打开终端并按原样输入以下命令。
`bash
NPM_CACHE_DIR=$(npm config get cache)
find $NPM_CACHE_DIR/_logs/ -type f -mtime -14 -exec grep -Hn "lifecycle" {} +
`
在结果屏幕中查看是否运行了非预期的 preinstall 或 postinstall 钩子。3分钟即可完成。如果没有异常的外部 URL 通信记录,则暂时可以免于软件包级别的直接污染恐惧。
攻击者为了留在笔记本电脑内部,会将恶意二进制文件植入全局 CLI 工具或 npx 缓存中。列出全局安装的软件包列表,并将二进制文件夹的文件创建日期和修改日期与系统日志进行对比以验证完整性。
`bash
npm list -g --depth=0 --json
ls -lact $(npm config get prefix)/bin/
`
如果修改时间与不寻常的时间段重合,请使用以下命令提取哈希值并进行对比。
`bash
shasum -a 256 $(npm config get prefix)/bin/
`
软件包安装脚本会以开发者账户权限直接运行。必须切断在后台运行的守护进程。
`bash
ps aux | grep -E "node|npm|pnpm|bun" | grep -v grep
lsof -i -P -n | grep -E "node|npm|pnpm"
`
如果可疑进程正在与外部 C2 服务器通信,请立即将其捕获并终止。
`bash
kill -9 [PID]
npm config set ignore-scripts true
`
供应链攻击的常见模式是通过篡改配置文件来劫持注册表。攻击者会在项目内的 .npmrc 文件或全局配置中植入恶意镜像服务器地址。由于它会篡改锁定文件内部的下载 URL 路径,使得在实际安装时下载恶意的 tarball,因此必须彻底搜查配置值。
确认本地配置和全局配置中是否植入了未经授权的覆盖项的步骤如下。首先,列出配置绑定列表。
`bash
npm config list
pnpm config list
`
接下来,检查公司内部私有注册表的作用域是否正确设置。
`bash
npm config get @company:registry
`
还要直接搜索用户主目录和项目根配置文件中是否硬编码了外部镜像地址。
`bash
grep -Rn "registry" ~/.npmrc ./.npmrc
`
通过这三个步骤,可以在5分钟内判断是否注册了奇怪的镜像地址。
由于 package-lock.json 和 pnpm-lock.yaml 文件记录了依赖项下载的源 URL,因此必须用正则表达式清理是否被污染。
`bash
grep -E '"resolved": "https?://' package-lock.json | grep -vE 'registry.npmjs.org|registry.corp.example'
`
如果使用 pnpm,请输入以下命令。
`bash
grep -E 'resolution: {tarball:' pnpm-lock.yaml | grep -vE 'registry.npmjs.org|registry.corp.example'
`
如果出现了被污染的锁定文件,必须全部删除并重新生成。
`bash
rm -rf node_modules package-lock.json pnpm-lock.yaml
npm cache clean --force
pnpm store prune
npm config set registry https://registry.npmjs.org/
npm ci --ignore-scripts
`
忽略生命周期脚本的执行并重新构建不可变状态的依赖树,即可确保纯净状态的环境。
恶意二进制文件会在 Linux 和 Mac 环境中窃取浏览器密码存储库,并统统刮取环境变量中植入的 AI API 密钥、AWS Access Key 以及 SSH 密钥。现在必须立即检查终端环境中是否暴露了凭据。
`bash
ls -la ~/.ssh/
env | grep -E 'TOKEN|KEY|SECRET|AUTH|AWS|GITHUB|OPENAI|ANTHROPIC'
grep -E '(ghp_[A-Za-z0-9]{36}|AKIA[0-9A-Z]{16}|bearer)' ~/.zsh_history ~/.bash_history
`
如果出现了以明文暴露的密钥,绝不要姑息,应立即废弃。同时检查通过 GitHub CLI 登录的令牌作用域。
`bash
gh auth status
`
请立即丢弃包含所有仓库访问权限的 Classic 令牌。重新创建 PAT 时,只需指定特定仓库,且读取权限也应限制在最小范围内。
为了将本地主机与开发进程隔离,必须使用 DevContainer 结构。在项目根目录下创建 .devcontainer/devcontainer.json 文件并按下述方式设置镜像。
`json
{
"image": "mcr.microsoft.com/devcontainers/javascript-node:22",
"postCreateCommand": "npm ci --ignore-scripts"
}
`
像这样启动容器后,软件包的安装和构建将在与笔记本电脑本机的系统凭据完全隔离的状态下运行,从而从根本上切断公司资产的泄露路径。