跳到主要內容
macOS · 已推出

Tsuba

陌生的程式碼第一次執行之前,先替你看一眼。

Tsuba app icon
類型
macOS
版本
0.3.0
發布於
2026年10月31日
下載次數
24
規則包
20 條規則 · 2026.10.27
系統需求
macOS 13+
價格
免費
隱私權
查看 →

Tsuba(鍔)是日本刀上護手的那塊鐵。這個 Tsuba 待在你的選單列裡,在陌生的程式碼第一次執行的那一刻介入:先弄清楚這段程式碼要做什麼、從哪裡來、像不像已知的攻擊手法,再決定放行、提醒還是攔截。

我做它,是因為在 Upwork 上被假客戶盯上了兩次。第一次我中招了,XProtect 和防毒軟體都沒發現。完整經過在這篇文章裡。

24 秒看懂 Tsuba。

概覽:保護狀態、需要處理的事,以及每一次檢查的即時紀錄。
概覽:保護狀態、需要處理的事,以及每一次檢查的即時紀錄。

為什麼防毒軟體擋不住

假面試專案、假會議軟體、被投毒的 npm 套件、惡意編輯器擴充功能,每次都換一身包裝,用的又都是 node、curl、bash 這些普通工具,傳統防毒軟體找不到可疑之處。所以 Tsuba 不去掃病毒特徵,而是守在程式碼執行的入口。

規模有多大:

  • 北韓的 Contagious Interview(傳染性面試) 行動至少從 2022 年 12 月就開始了。所謂「測試專案」是放在 GitHub、GitLab 或 Bitbucket 上的 npm 專案,你一旦信任這個儲存庫,VS Code 就會自己執行裡面的任務設定(Microsoft,2026 年 3 月)。
  • Socket 統計到,自 2025 年 1 月以來與這個行動有關的惡意套件 超過 1,700 個,分布在 npm、PyPI、Go、crates.io 和 Packagist(Socket,2026 年 4 月)。
  • GlassWorm 擴充功能把程式碼藏在看不見的 Unicode 字元裡,被發現之前已經被安裝了約 35,800 次(Koi Security,2025 年 10 月)。
  • Sonatype 在一個季度裡就記錄到 16,279 個新的開源惡意套件,累計 845,204 個(Sonatype,2025 年第二季)。

執行招募方傳來的專案之前

  1. 先別用編輯器打開。受信任的資料夾,打開時就可能自動執行 .vscode/tasks.json。
  2. 看 package.json:有沒有 preinstall、postinstall 腳本,有沒有沒聽過的、上週才發布的相依套件。
  3. 找找不該出現在面試題裡的程式碼:寫死的 IP 位址、對下載內容 eval、讀取瀏覽器設定檔、錢包或鑰匙圈。
  4. 聊天裡傳來的 curl … | bash,沒看過腳本內容之前不要貼進終端機。
  5. 如果已經執行過,就當電腦已經中招:先排查痕跡,再用一台乾淨的裝置更換密碼、權杖和金鑰。

Tsuba 會在關鍵時刻替你做前 4 步,第 5 步交給它的「健檢」。

它檢查什麼

入口 例子 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 伺服器、技能和 hook 已知惡意套件、是否從隱藏資料夾啟動、有沒有瞞著使用者的指示
健檢 選單列 → 健檢 已知攻擊留下的痕跡、可疑的登入項目

拿不準的專案,可以先放進沙箱試跑:用一個放了誘餌的假家目錄,網路請求只記錄、不真正送出,最多執行 60 秒。

攔下一個假會議軟體的安裝指令:結論、理由和證據,精確到哪一行。
攔下一個假會議軟體的安裝指令:結論、理由和證據,精確到哪一行。

隨時或定期掃描資料夾,有風險的東西移入隔離區。
隨時或定期掃描資料夾,有風險的東西移入隔離區。

健檢:查已知攻擊留下的痕跡,順便檢查編輯器擴充功能和 AI 工具。
健檢:查已知攻擊留下的痕跡,順便檢查編輯器擴充功能和 AI 工具。

和其他工具比較

大多數工具只守一個入口。Tsuba 守的是 Mac 上每一次「第一次執行」,可以和下面這些工具搭配使用。

工具 檢查什麼 什麼時候
Tsuba 終端機指令、npm 和 npx、複製下來的專案、.dmg / .pkg / .vsix、編輯器擴充功能、MCP 伺服器、skill 和 hook、貼上的指令 程式碼第一次執行之前
npq、Socket Firewall、Aikido Safe Chain npm 的套件(有的也支援 PyPI 等) 安裝時
mcp-scan 等 MCP 掃描工具 MCP 伺服器和 AI 代理工具 你主動掃描時
LuLu、BlockBlock、KnockKnock(Objective-See) 對外的網路連線,以及把自己設成登入時啟動的軟體 程式碼已經執行之後
防毒軟體和 XProtect 已知惡意程式的特徵 檔案和已知樣本比對相符時

它怎麼判斷

先跑離線規則,再搭配每天更新的公開威脅情資,其中包括 OpenSSF 收錄的超過 23 萬份惡意 npm 和 PyPI 套件回報。之後可以讓 AI 模型依上下文判斷:Claude 效果最好,也支援其他供應商和本機模型,也可以完全關掉 AI。

送給模型的只有這次判斷需要的證據。程式碼註解會先移除,密鑰永遠不會上傳。設定和檢查紀錄都存放在你 Mac 上的 ~/.tsuba 裡。

設定:每道防線各自開關,選擇判斷方式,用不用 AI 都可以。
設定:每道防線各自開關,選擇判斷方式,用不用 AI 都可以。

取得方式

Tsuba 已經推出,免費,並以 Apache 2.0 授權開源(GitHub)。有兩個版本:M1 及之後的 Mac 選 Apple 晶片版,更早的 Mac 選 Intel 版。不確定的話:蘋果選單 → 關於這台 Mac → 晶片。

應用程式支援十種語言:English、简体中文、繁體中文、日本語、한국어、Español、Français、Deutsch、Português 和 Русский。介面、通知、終端機檢查、規則說明和 AI 的回答都會跟隨 macOS 的語言,也可以在 設定 → 外觀 裡自己選。

Tsuba 還沒有經過 Apple 簽署和公證,所以第一次打開時會被 macOS 擋下。到 系統設定 → 隱私權與安全性,點 強制打開 就可以了。請不要改用 xattr 移除隔離標記:Tsuba 自己就會提醒你小心要求這麼做的安裝檔,它自己也不該例外。

這一步只需要做一次。之後 Tsuba 會自動更新:有新版本時提醒你,而且只有簽章和 App 內建的公鑰相符才會安裝。

想確認下載的 DMG 就是 GitHub 從公開原始碼建置出來的那一個,可以執行 shasum -a 256 Tsuba_*.dmg,和 發布頁面 上的 SHA256SUMS.txt 比對一下。

試試看

真實的輸出,真實的規則

選一個樣本,看看應用程式掃描它時實際印出了什麼:只用離線規則,版本 0.1.1。樣本來自它的測試集,只模仿真實攻擊的形態,本身無害。

$ tsuba scan ~/code/fake_interview_project

Tsuba ✗ 建议拦截  ~/code/fake_interview_project
  证据:
   高 解码后动态执行代码(eval/Function + base64),常见于混淆的投毒代码 [server/server.js] 来源:Tsuba 规则 · Apache-2.0
      eval(Buffer.from("Y29uc29sZS5sb2coImxvY2FsZ3VhcmQgdGVzdCBmaXh0dXJlIik=", "base64").toString()); const C2 = "http://203.0.113.7:1224/api"; app.get('/', (q, r) =>
   高 直接连接硬编码的 IP 地址加端口(C2 服务器的典型特征) [server/server.js]
      eval(Buffer.from("Y29uc29sZS5sb2coImxvY2FsZ3VhcmQgdGVzdCBmaXh0dXJlIik=", "base64").toString()); const C2 = "http://203.0.113.7:1224/api"; app.get('/', (q, r) =>
   高 代码被大量空白推到屏幕右侧之外,人眼看不到(典型的隐藏投毒手法) [server/server.js]
      const app = require("express")(); ⟨400 个空格⟩ eval(Buffer.from("Y29uc29sZS5sb2coImxvY2FsZ3VhcmQgdGVzdCBmaXh0dXJlIik=", "base64").toString()); const C2 = "http://2
更新日誌

更新日誌

訂閱新版本 ↗
檔案 · v0.3.0大小
Tsuba_0.3.0_aarch64.dmg19.5 MB4b8ff8f2cc343864f63be59c43460f4396ab61ad4ae2ddd368d13ff61a58d1d3
Tsuba_0.3.0_x64.dmg22.3 MB02cfbea2b133032c5207c9e1dcbd1432ecc737408db29fbc1d9fb92fb5962122
  1. 0.3.02026年10月31日
    • f8aa092Give other languages' relative times room in the terminal log
    • d4a8ac6Translate the README into nine languages and refresh its screenshots
    • 7c0a4a6Add seals, a crest and gold fittings to the samurai look
    • 9de218fSpeak ten languages
    • 52826a5Restyle the shell as held-back samurai armor
    • c103f41Show the guard on a laptop and open the app through it
    • 1d22fd0Replace the katana logo with a 3D tsuba
    • 0cfcdfdAdd pnpm app to start the app from the repo root
    • 54bf89dDeclare all four MCP tool hints and test quarantine_list
    • 51a757fAdd the M8ven Verified badge to the README
    • 4ccb857Give the README a product page look with screenshots
    全部變更 ↗
  2. 0.2.12026年10月29日
    全部變更 ↗
  3. 0.2.02026年10月29日
    • be28cfaPlay a short, soft sound with Block notifications
    • 14d4349Redesign Settings, Health Check and the window chrome
    • 42754edUpdate Tsuba in the app from GitHub Releases
    • 4392c89Let users ignore warnings and choose which notifications they get
    全部變更 ↗
  4. 0.1.22026年10月28日
    • d0353e4Add the Apache-2.0 LICENSE
    • e7f620eLeave folders the sandbox hides out of its PATH
    • d8fc3b7Let the website workflow run by hand to test the hook
    • a1f8191Rebuild the website when a release is published
    全部變更 ↗
常見問題

常見問題

招募方傳來的專案可以直接執行嗎?

在檢查之前,把它當成不可信的程式碼:假面試裡,測試專案本身就是惡意程式。把資料夾拖進 Tsuba 的視窗,或者在接上 Tsuba 的終端機裡 clone,它會在任何程式碼執行之前檢查相依套件、安裝腳本和 VS Code 任務。如果已經執行過,先跑一次 健檢,再看看 我的經歷。

怎麼在安裝之前檢查一個 npm 套件?

Tsuba 接上終端機後,npm install 和 npx 執行之前都會先檢查:是否在 OpenSSF 的惡意套件名單上、是不是幾天前才發布、有沒有安裝腳本。npq 這類命令列工具也能針對 npm 做類似的檢查。

為什麼 macOS 說無法打開 Tsuba?

Tsuba 還沒有經過 Apple 簽署和公證。第一次打開時,到 系統設定 → 隱私權與安全性,點 強制打開 就可以了。請不要改用 xattr 移除隔離標記:Tsuba 自己就會提醒你小心要求這麼做的安裝檔。想核對下載的檔案,可以對照下方更新日誌裡列出的 SHA-256。

Tsuba 會上傳我的程式碼嗎?

不會上傳任何檔案。開啟 AI 時,只有這次判斷需要的證據會送到你選的模型,程式碼註解會先移除,密鑰不會送出。關掉 AI 的話,檢查都在你的 Mac 上以離線規則完成。設定和檢查紀錄都存放在 ~/.tsuba 裡。會送出的每一項,以及何時送出,都列在 隱私權說明 裡。

需要 AI 訂閱或 API 金鑰嗎?

不需要。離線規則一定先跑,單獨就能用。AI 是選用的:Claude 效果最好,也支援其他供應商和本機模型。

它能取代防毒軟體嗎?

不能。辨識已知的惡意程式交給 macOS 內建的 XProtect 和公開的威脅情資。Tsuba 負責的是它們漏掉的部分:每次換一身包裝、沒人見過的程式碼,例如假面試專案、假會議軟體、被投毒的套件和惡意擴充功能,而且在程式碼執行之前就介入。

支援哪些 Mac?

macOS 13 以上,Apple 晶片和 Intel 都支援,各有一個下載檔。不確定的話:蘋果選單 → 關於這台 Mac → 晶片。

它把正常的東西攔下來了怎麼辦?

每一次提醒和攔截都附上證據:哪個檔案、哪一行、比對到什麼,你可以自己判斷;確認過的提醒可以忽略,信得過的可以加進白名單。也請 回報這次誤報,每一個誤報都會變成一條回歸測試。

意見回饋

發現 bug,或者漏報、誤報?

回饋會公開發到 GitHub Issues。不要貼任何密鑰;遇到真實的惡意樣本,只提供雜湊值和來源,不要上傳檔案。

追蹤我

我會持續分享正在做的專案、實驗和心得。

YouTube 上發影片,X 上發短筆記。這裡的每篇文章都會連結到兩邊。

YouTube