KirtashDev/dephawk
GitHub: KirtashDev/dephawk
一款 npm 依赖运行时行为监控与拦截工具,通过追踪依赖包对文件系统、网络、进程等敏感操作的实际调用来防范供应链攻击。
Stars: 1 | Forks: 0
# 🦅 dephawk
### 像老鹰一样敏锐地监控你的 npm 依赖。
**查看——并拦截——你的依赖在运行时的实际行为:**
读取你的 SSH 密钥、向外通信、启动 shell。
[](https://www.npmjs.com/package/dephawk)
[](https://www.npmjs.com/package/dephawk)
[](https://github.com/kellendir/dephawk/actions/workflows/ci.yml)
[](./LICENSE)
[](#)
[](https://github.com/kellendir/dephawk)
你安装了一个包。它有 40 个间接依赖。其中任何一个都可以读取 `~/.ssh/id_rsa`,获取你的 `NPM_TOKEN`,并将其 POST 到一个你从未听说过的服务器——而你根本不会察觉。
`dephawk` 在你的代码上空盘旋,**监控每一个依赖**。当某个依赖触及你的文件系统、打开 socket、启动进程,或从环境中读取敏感信息的那一刻,dephawk 就会将其记录下来,归属到确切的包,并且——如果你愿意——**拦截它**。
```
npx dephawk run npm test
```

这张截图本身就足以说明问题。如果一个包试图读取你的密钥并向外通信,这只“鹰”会在最初的几秒钟内发现它——而不是等你上了新闻之后。
## 为什么需要
针对 npm 的供应链攻击现在已成常态:拼写劫持、维护者账号被盗、恶意的 post-install 脚本。静态扫描工具(Socket、`npm audit`)能起到一定作用,但它们无法看到混淆或动态加载的代码_在运行时的实际行为_。`dephawk` 是运行时的绊线:它不从源码猜测,而是监控实际行为。
## 快速开始
**观察模式**(默认——记录一切,不拦截任何内容):
```
npx dephawk run npm test
npx dephawk run node ./build.js
```
**强制模式**(拦截任何未明确允许的行为):
```
npx dephawk run --enforce npm start
# 或者: DEPHAWK_MODE=enforce npx dephawk run npm start
```
或者将其直接接入任何 Node 进程(遵循 `DEPHAWK_MODE`):
```
node --import dephawk/register ./your-app.js
```
在退出时,dephawk 会打印上述摘要,并生成一个可分享、独立完整的 **`.dephawk/report.html`**。
## 监控范围
| 能力 | 捕获示例 |
| ---------------- | ------------------------------------------------------------------------------- |
| `fs.read` | 读取 `~/.ssh`、`~/.aws`、`~/.gnupg`、`.env`、`.npmrc`、`/etc/passwd` |
| `fs.write` | 覆盖 `~/.npmrc`、`authorized_keys` 及其他敏感文件 |
| `net.connect` | `http`/`https`/`fetch`,以及原始 `net`/`tls` socket 和 UDP (`dgram`) |
| `net.resolve` | `dns.lookup`/`resolve*` — 用于侦察和 DNS 隧道数据外泄(无需建立 TCP 连接) |
| `process.spawn` | `child_process.exec`/`spawn`/`fork`,以及 `worker_threads`(例如 curl-pipe-sh) |
| `process.native` | `process.dlopen` — 加载脱离 JS sandbox 的原生 addon (`.node`) |
| `code.eval` | `vm.runInThisContext`/`Script`/`compileFunction` — 执行分阶段投放的 payload |
| `env.read` | 依赖项读取 `NPM_TOKEN`、`AWS_SECRET_ACCESS_KEY` 等 |
| `os.info` | `os.userInfo`/`networkInterfaces`/`hostname` 主机信息探查 |
每一个事件都会**归属到触发它的具体包**,让你确切知道是谁在搞鬼。
## 策略
仅允许包合法需要的行为。dephawk 会在工作目录中寻找 `dephawk.config.js`(或通过 `--config 标签:GNU通用公共许可证, IP 地址批量处理, MITM代理, Node.js, npm, StruQ, 数据可视化, 暗色界面, 自动化攻击, 行为监控