# Tsuba

> 一个免费的 macOS 菜单栏应用。在 npm install、curl | bash 脚本、下载的 DMG、编辑器扩展和 AI 工具插件运行之前先做检查，拦住朝鲜 Contagious Interview 这类假面试恶意软件。

- URL: https://oliverz.dev/zh/products/tsuba
- Author: Oliver Zhang (https://oliverz.dev)
- Language: zh-Hans
- Platform: macos
- Status: live
- Price: Free
- Version: 0.1.1
- Requirements: macOS 13+
- 下载 Apple 芯片版: https://github.com/chihyungchang/Tsuba/releases/download/v0.1.1/Tsuba_0.1.1_aarch64.dmg
- 下载 Intel 版: https://github.com/chihyungchang/Tsuba/releases/download/v0.1.1/Tsuba_0.1.1_x64.dmg
- Source: https://github.com/chihyungchang/Tsuba

Tsuba（鍔）是日本刀上护手的那块铁。这个 Tsuba 待在你的菜单栏里，在陌生代码第一次运行的那一刻介入：先弄清楚这段代码要做什么、从哪来、像不像已知的攻击手法，再决定**放行**、**提醒**还是**拦下**。

我做它，是因为在 Upwork 上被假客户盯上了两次。第一次我中招了，XProtect 和杀毒软件都没发现。[完整经过在这篇文章里](/zh/blog/upwork-contagious-interview)。

![24 秒看懂 Tsuba。](https://oliverz.dev/products/tsuba/demo.zh.mp4)

![主界面：保护状态、需要处理的事，以及每一次检查的实时记录。](https://oliverz.dev/products/tsuba/1-overview.zh.webp)

## 为什么杀毒软件拦不住

假面试项目、假会议软件、被投毒的 npm 包、恶意编辑器扩展，每次都换一身包装，用的又都是 node、curl、bash 这些普通工具，传统杀毒软件找不到可疑的地方。所以 Tsuba 不去扫病毒特征，而是守在代码运行的入口。

## 它检查什么

| 入口 | 例子 | Tsuba 看什么 |
| --- | --- | --- |
| 终端命令 | `curl … \| bash`、`npm install`、`npx`、`npm start`、`git clone` | 远程脚本只下载不执行；npm 包查恶意包名单、发布时间和安装脚本；扫描项目里有没有藏起来的代码、写死的服务器地址，或者偷读钱包和密码库 |
| 粘贴进终端 | 网页让你「把这条命令复制到终端里」 | 粘贴的那一刻就提醒；混淆过、直接交给 shell 执行的命令会被标成高风险 |
| 下载文件夹 | 新的 `.dmg`、`.pkg`、`.vsix` 文件 | 签名、公证、下载来源和安装脚本 |
| 编辑器扩展 | VS Code、Cursor、Windsurf、VSCodium | 官方恶意扩展名单、是否开机自启、是否用不可见字符藏代码；高风险扩展自动隔离 |
| AI 编程工具 | Claude Code、Cursor、Codex 的 MCP 服务、技能和钩子 | 已知恶意包、是否从隐藏目录启动、有没有瞒着用户的指令 |
| 健康检查 | 菜单栏 → 健康检查 | 已知攻击留下的痕迹、可疑的开机启动项 |

拿不准的项目，可以先放进沙箱试跑：用一个放了诱饵的假主目录，网络请求只记录、不真正发出，最多运行 60 秒。

![拦下一个假会议软件的安装命令：结论、理由和证据，精确到哪一行。](https://oliverz.dev/products/tsuba/2-history.zh.webp)

![按需或定期扫描文件夹，有风险的东西进隔离区。](https://oliverz.dev/products/tsuba/3-scan.zh.webp)

![体检：查已知攻击留下的痕迹，顺便检查编辑器扩展和 AI 工具。](https://oliverz.dev/products/tsuba/4-doctor.zh.webp)

## 它怎么判断

先跑离线规则，再配合每天更新的公开威胁情报，其中包括 OpenSSF 收录的约 23 万个已确认的恶意 npm 和 PyPI 包。之后可以让 AI 模型结合上下文判断：Claude 效果最好，也支持其他模型和本地模型，也可以完全关掉 AI。

发给模型的只有这次判断需要的证据。代码注释会先去掉，密钥永远不会上传。配置和检查记录都保存在你 Mac 上的 `~/.tsuba` 里。

![设置：每道防线单独开关，选择判断方式，用不用 AI 都行。](https://oliverz.dev/products/tsuba/5-settings.zh.webp)

## 下载

Tsuba 已经发布，免费，源代码在 [GitHub](https://github.com/chihyungchang/Tsuba) 上。有两个版本：M1 及以后的 Mac 选 **Apple 芯片版**，更早的 Mac 选 **Intel 版**。不确定的话：苹果菜单 → 关于本机 → 芯片。

第一个版本还没有经过 Apple 签名和公证，所以第一次打开时会被 macOS 拦下。到 **系统设置 → 隐私与安全性**，点 **仍要打开** 就行。请不要改用 `xattr` 删除隔离标记：Tsuba 自己就会提醒你小心要求这么做的安装包，它自己也不该例外。

想确认下载的 DMG 就是 GitHub 从公开源代码构建出来的那个，可以运行 `shasum -a 256 Tsuba_*.dmg`，和 [发布页](https://github.com/chihyungchang/Tsuba/releases/latest) 上的 `SHA256SUMS.txt` 对一下。
