# Tsuba: 見知らぬコードが初めて実行される前に、ひと目確認します。

> npm install、curl | bash スクリプト、ダウンロードした DMG、エディタ拡張機能、AI ツールのプラグインを実行前にチェックし、北朝鮮の Contagious Interview のような偽面接マルウェアを捕まえる、無料の macOS メニューバーアプリ。

- URL: https://oliverz.dev/ja/products/tsuba
- Author: Oliver Zhang (https://oliverz.dev)
- Language: ja
- Platform: macOS app
- Status: live
- Price: Free
- License: Apache-2.0
- Version: 0.3.0
- First released: 2026-10-28
- Latest release: 2026-10-31
- Requirements: macOS 13+
- Apple シリコン版をダウンロード: https://github.com/chihyungchang/Tsuba/releases/download/v0.3.0/Tsuba_0.3.0_aarch64.dmg
- Intel 版をダウンロード: https://github.com/chihyungchang/Tsuba/releases/download/v0.3.0/Tsuba_0.3.0_x64.dmg
- Source: https://github.com/chihyungchang/Tsuba

Tsuba（鍔）は日本刀の鍔のこと。この Tsuba はメニューバーに常駐し、見知らぬコードが初めて実行される瞬間に介入します。そのコードが何をしようとしているのか、どこから来たのか、既知の攻撃に似ていないかを調べ、**許可**、**警告**、**ブロック** のどれにするかを決めます。

つくったきっかけは、Upwork の偽クライアントに 2 回、Mac を感染させられそうになったことです。1 回目は感染し、XProtect もアンチウイルスも気づきませんでした。[経緯はこちら](https://oliverz.dev/ja/blog/upwork-contagious-interview)。

![24 秒でわかる Tsuba。](https://oliverz.dev/products/tsuba/demo.en.mp4?v=d8f6a21d)

![ダッシュボード：保護の状態、対応が必要なもの、すべてのチェックのライブログ。](https://oliverz.dev/products/tsuba/1-overview.en.webp?v=e341faf4)

## アンチウイルスがこうした攻撃を見逃す理由

偽の面接プロジェクト、偽の会議アプリ、汚染された npm パッケージ、悪意あるエディタ拡張機能は、毎回新しい包装でやってきます。node、curl、bash のような普通のツールを通して動くので、従来のスキャナーには検出する手がかりがありません。だから Tsuba は入口を見張ります。

規模はこれほどです：

- 北朝鮮の **Contagious Interview** キャンペーンは、少なくとも 2022 年 12 月から続いています。「テストプロジェクト」は GitHub、GitLab、Bitbucket 上の npm プロジェクトで、リポジトリを信頼すると VS Code がそのタスクファイルを自動で実行します（[Microsoft、2026 年 3 月](https://www.microsoft.com/en-us/security/blog/2026/03/11/contagious-interview-malware-delivered-through-fake-developer-job-interviews/)）。
- Socket は、2025 年 1 月以降このキャンペーンに関連する **1,700 以上の悪意あるパッケージ** を、npm、PyPI、Go、crates.io、Packagist で追跡しています（[Socket、2026 年 4 月](https://socket.dev/blog/contagious-interview-campaign-spreads-across-5-ecosystems)）。
- GlassWorm の拡張機能は、見えない Unicode 文字にコードを隠し、発見されるまでに約 **35,800 回インストール** されました（[Koi Security、2025 年 10 月](https://web.archive.org/web/20260101202601/https://www.koi.ai/blog/glassworm-first-self-propagating-worm-using-invisible-code-hits-openvsx-marketplace)）。
- Sonatype は、わずか 1 四半期で **16,279 件の新たな悪意あるオープンソースパッケージ** を記録し、累計は 845,204 件にのぼります（[Sonatype、2025 年第 2 四半期](https://www.sonatype.com/press-releases/q2-2025-open-source-malware-index)）。

## 採用担当者から送られたプロジェクトを実行する前に

1. まだエディタで開かないこと。信頼したフォルダは、開いた時点で `.vscode/tasks.json` を実行することがあります。
2. `package.json` を読む：`preinstall` と `postinstall` のスクリプト、聞いたことのない依存パッケージや先週公開されたばかりのもの。
3. 課題にあるはずのないコードを探す：ハードコードされた IP アドレス、ダウンロードしたテキストの `eval`、ブラウザのプロファイル、ウォレット、キーチェーンの読み取り。
4. チャットで渡された `curl … | bash` の行を、スクリプトを読まずにターミナルに貼り付けないこと。
5. すでに実行してしまったなら、マシンは侵害されたものと考える：痕跡を確認し、クリーンなデバイスからパスワード、トークン、キーを変更します。

Tsuba は手順 1〜4 をここぞというタイミングで代わりに行い、ヘルスチェックが手順 5 をカバーします。

## チェックする対象

| 入口 | 例 | Tsuba が見るもの |
| --- | --- | --- |
| ターミナルのコマンド | `curl … \| bash`、`npm install`、`npx`、`npm start`、`git clone` | リモートのスクリプトを実行せずにダウンロード。npm パッケージを悪意あるパッケージのリスト、公開からの日数、インストールスクリプトと照合。プロジェクト内の隠しコード、ハードコードされたサーバー、ウォレットやパスワードストアの読み取りをスキャン |
| ターミナルへの貼り付け | ページが「このコマンドをターミナルにコピーして」と指示する | 貼り付けた瞬間に警告。難読化されたコマンドをシェルにパイプするものは高リスクとして検出 |
| ダウンロードフォルダ | 新しい `.dmg`、`.pkg`、`.vsix` ファイル | 署名、公証、ダウンロード元、インストールスクリプト |
| エディタ拡張機能 | VS Code、Cursor、Windsurf、VSCodium | 公式の悪意ある拡張機能リスト、起動時の自動有効化、見えない文字に隠されたコード。高リスクの拡張機能は隔離 |
| AI コーディングツール | Claude Code、Cursor、Codex の MCP サーバー、スキル、フック | 既知の悪意あるパッケージ、隠しフォルダからの起動、ユーザーから隠された指示 |
| ヘルスチェック | メニューバー → ヘルスチェック | 既知の攻撃が残した痕跡と、怪しいログイン項目 |

不安なプロジェクトは、まずサンドボックスで試しに動かせます。おとりを置いた偽のホームフォルダ、記録はされても実際には送信されないネットワークリクエスト、60 秒の制限つきです。

![ブロックされた偽の会議アプリのインストール：判定、理由、証拠を 1 行ずつ。](https://oliverz.dev/products/tsuba/2-history.en.webp?v=f0168298)

![フォルダをその場で、またはスケジュールでスキャン。危険なものは隔離されます。](https://oliverz.dev/products/tsuba/3-scan.en.webp?v=2f8accaf)

![ヘルスチェックは既知の攻撃の痕跡を探し、エディタ拡張機能と AI ツールを監査します。](https://oliverz.dev/products/tsuba/4-doctor.en.webp?v=8a48a5e3)

## ほかのツールとの比較

ほとんどのツールがカバーする入口は 1 つです。Tsuba は Mac 上のあらゆる初回実行をカバーし、ほかのツールと併用できます。

| ツール | チェックする対象 | タイミング |
| --- | --- | --- |
| **Tsuba** | ターミナルのコマンド、npm と npx、クローンしたプロジェクト、`.dmg` / `.pkg` / `.vsix`、エディタ拡張機能、MCP サーバー、スキルとフック、貼り付けたコマンド | コードが初めて実行される前 |
| npq、Socket Firewall、Aikido Safe Chain | npm のパッケージ（一部は PyPI なども） | インストール時 |
| mcp-scan などの MCP スキャナー | MCP サーバーとエージェントのツール | スキャンを実行したとき |
| LuLu、BlockBlock、KnockKnock（Objective-See） | 外向きの通信と、ログイン時に起動するよう自分を登録するソフトウェア | コードが実行された後 |
| アンチウイルスと XProtect | 既知のマルウェアのシグネチャ | ファイルが既知のサンプルに一致したとき |

## 判定のしくみ

まずオフラインルールが必ず動きます。その裏には毎日更新される公開の脅威インテリジェンスがあり、[OpenSSF](https://ossf.github.io/malicious-packages/stats/) に報告された 23 万件以上の悪意ある npm・PyPI パッケージも含まれます。そのうえで AI モデルが文脈から証拠を判断できます。Claude がいちばんよく機能し、ほかのプロバイダーやローカルモデルにも対応、AI を完全にオフにすることもできます。

モデルに送るのは、チェックに必要な証拠だけです。コードのコメントは先に取り除かれ、シークレットがアップロードされることはありません。設定と履歴は Mac 上の `~/.tsuba` に残ります。

![設定：防御を一つずつオン・オフし、判定のしかたを AI ありかなしかで選べます。](https://oliverz.dev/products/tsuba/5-settings.en.webp?v=ce24d1bc)

## 入手方法

Tsuba は公開中で、無料、Apache 2.0 ライセンスのオープンソースです（[GitHub](https://github.com/chihyungchang/Tsuba)）。ビルドは 2 種類あります。M1 以降の Mac なら **Apple シリコン**、それより前の Mac なら **Intel** を選んでください。どちらかわからなければ、Apple メニュー →「この Mac について」→ チップで確認できます。

アプリは 10 の言語に対応しています：English、简体中文、繁體中文、日本語、한국어、Español、Français、Deutsch、Português、Русский。日本語ももちろん含まれます。画面、通知、ターミナルのチェック、ルールの説明、AI の回答はすべて macOS の言語設定に従い、**設定 → 外観** で選ぶこともできます。

Tsuba はまだ Apple の署名と公証を受けていないため、初めて開くときに macOS がブロックします。**システム設定 → プライバシーとセキュリティ** で **このまま開く** をクリックしてください。代わりに `xattr` で検疫フラグを外すのはやめてください。Tsuba はそれを求めるインストーラーに警告を出すので、自分だけ例外にするべきではありません。

これが必要なのは最初の 1 回だけです。その後は Tsuba が自分でアップデートします。新しいバージョンが出たら知らせ、アプリに組み込まれた鍵と署名が一致した場合にだけインストールします。

DMG が GitHub で公開ソースからビルドされたものか確かめるには、`shasum -a 256 Tsuba_*.dmg` の結果を [リリースページ](https://github.com/chihyungchang/Tsuba/releases/latest) の `SHA256SUMS.txt` と照合してください。

## FAQ

### 採用担当者から送られたプロジェクトを実行しても大丈夫？

チェックが済むまでは信頼できないものとして扱ってください。偽の採用面接では、テストプロジェクトそのものがマルウェアです。フォルダを Tsuba のウィンドウにドラッグするか、Tsuba をつないだターミナルでクローンすれば、何かが実行される前に依存パッケージ、インストールスクリプト、VS Code のタスクをチェックします。すでに実行してしまったなら、**ヘルスチェック** を実行し、[私に起きたこと](https://oliverz.dev/ja/blog/upwork-contagious-interview) を読んでください。

### npm パッケージをインストール前にチェックするには？

Tsuba をターミナルにつなぐと、`npm install` と `npx` は実行前にチェックされます。OpenSSF のリストにある既知の悪意あるパッケージ、公開されて数日しか経っていないパッケージ、インストールスクリプトを確認します。npq のようなコマンドラインツールも、npm に限って似たチェックをします。

### macOS が「Tsuba を開けません」と表示するのはなぜ？

Tsuba はまだ Apple の署名と公証を受けていないため、初めて開くときは **システム設定 → プライバシーとセキュリティ** で **このまま開く** をクリックしてください。代わりに `xattr` で検疫フラグを外すのはやめてください。Tsuba はそれを求めるインストーラーに警告を出します。ダウンロードを確認するには、変更履歴に載っている SHA-256 と照合してください。

### Tsuba は私のコードをアップロードしますか？

ファイルは一切アップロードしません。AI をオンにした場合も、チェックに必要な証拠だけを選んだモデルに送り、コードのコメントは取り除き、シークレットは含めません。AI がオフなら、チェックは Mac 上のオフラインルールで行います。設定と履歴は `~/.tsuba` に残ります。Tsuba が何をいつ送るかは、すべて [プライバシーについて](https://oliverz.dev/ja/products/tsuba/privacy) に載っています。

### AI のサブスクリプションや API キーは必要？

いいえ。オフラインルールが必ず先に動き、それだけで機能します。AI は任意です。Claude がいちばんよく機能し、ほかのプロバイダーやローカルモデルにも対応しています。

### アンチウイルスの代わりになりますか？

いいえ。既知のマルウェアの識別は macOS の XProtect と公開の脅威インテリジェンスに任せています。Tsuba が受け持つのは、それらが見逃すもの、つまり偽の面接プロジェクト、偽の会議アプリ、汚染されたパッケージ、悪意ある拡張機能のように、新しい包装でまだ誰も見たことのないコードで、それが実行される前に介入します。

### どの Mac で動きますか？

macOS 13 以降の Apple シリコンと Intel で動き、それぞれ別のダウンロードがあります。どちらかは、Apple メニュー →「この Mac について」→ チップで確認できます。

### 安全なものを検出してしまったら？

警告とブロックにはすべて証拠（どのファイルのどの行が、何にマッチしたか）が表示されるので、自分で判断できます。確認した警告は無視でき、信頼するものは許可リストに入れられます。ぜひ [誤検出を報告](#feedback) してください。一つひとつが回帰テストになります。
