# Tsuba: Смотрит на незнакомый код до его первого запуска.

> Бесплатное приложение для строки меню macOS, которое проверяет npm install, скрипты curl | bash, скачанные DMG, расширения редакторов и плагины ИИ-инструментов до их запуска, чтобы поймать вредонос с фейковых собеседований вроде северокорейской Contagious Interview.

- URL: https://oliverz.dev/ru/products/tsuba
- Author: Oliver Zhang (https://oliverz.dev)
- Language: ru
- 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 silicon: 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 (鍔) — гарда японского меча. Эта живёт в строке меню и вмешивается в те моменты, когда незнакомый код запускается впервые: выясняет, что код собирается сделать, откуда он взялся и похож ли на известную атаку, а затем решает: **Разрешить**, **Предупредить** или **Заблокировать**.

Я сделал его после того, как фейковые заказчики с Upwork дважды пытались заразить мой Mac. В первый раз у них получилось, и ни XProtect, ни антивирус ничего не заметили. [Вот вся история](https://oliverz.dev/ru/blog/upwork-contagious-interview).

![Tsuba за 24 секунды.](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 года. «Тестовый проект» — npm-проект на GitHub, GitLab или Bitbucket, и как только вы доверяете репозиторию, VS Code сам запускает его файл задач ([Microsoft, март 2026](https://www.microsoft.com/en-us/security/blog/2026/03/11/contagious-interview-malware-delivered-through-fake-developer-job-interviews/)).
- С января 2025 года Socket отследил **более 1700 вредоносных пакетов**, связанных с кампанией, в npm, PyPI, Go, crates.io и Packagist ([Socket, апрель 2026](https://socket.dev/blog/contagious-interview-campaign-spreads-across-5-ecosystems)).
- Расширения GlassWorm прятали код в невидимых символах Unicode и набрали около **35 800 установок**, прежде чем их поймали ([Koi Security, октябрь 2025](https://web.archive.org/web/20260101202601/https://www.koi.ai/blog/glassworm-first-self-propagating-worm-using-invisible-code-hits-openvsx-marketplace)).
- Sonatype зафиксировал **16 279 новых вредоносных open-source-пакетов** за один квартал, всего 845 204 ([Sonatype, Q2 2025](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 | Официальный список вредоносных расширений, активация при запуске, код в невидимых символах; высокорисковые расширения отправляются в карантин |
| ИИ-инструменты для кода | MCP-серверы, skills и hooks для Claude Code, Cursor, Codex | Известные вредоносные пакеты, запуск из скрытых папок, инструкции, скрытые от пользователя |
| Диагностика | Строка меню → Диагностика | Следы известных атак и подозрительные объекты входа |

Проекты, в которых вы не уверены, можно сначала пробно запустить в песочнице: поддельная домашняя папка с приманками, сетевые запросы записываются, но не отправляются, лимит 60 секунд.

![Заблокированная установка фейкового приложения для встреч: вердикт, причины и доказательства, строка за строкой.](https://oliverz.dev/products/tsuba/2-history.en.webp?v=f0168298)

![Сканирование папок по запросу или по расписанию. Всё рискованное отправляется в карантин.](https://oliverz.dev/products/tsuba/3-scan.en.webp?v=2f8accaf)

![Диагностика ищет следы известных атак и проверяет расширения редакторов и ИИ-инструменты.](https://oliverz.dev/products/tsuba/4-doctor.en.webp?v=8a48a5e3)

## Сравнение с другими инструментами

Большинство инструментов закрывают один вход. Tsuba закрывает каждый первый запуск на Mac и работает вместе с остальными.

| Инструмент | Что проверяет | Когда |
| --- | --- | --- |
| **Tsuba** | Команды терминала, npm и npx, клонированные проекты, `.dmg` / `.pkg` / `.vsix`, расширения редакторов, MCP-серверы, skills и hooks, вставленные команды | До первого запуска кода |
| npq, Socket Firewall, Aikido Safe Chain | Пакеты из npm (а некоторые — ещё из PyPI и других) | При установке |
| mcp-scan и другие MCP-сканеры | MCP-серверы и инструменты агентов | Когда вы запускаете сканирование |
| LuLu, BlockBlock, KnockKnock (Objective-See) | Исходящие соединения и ПО, которое прописывается в автозапуск | После того как код уже запустился |
| Антивирус и XProtect | Сигнатуры известного вредоносного ПО | Когда файл совпадает с известным образцом |

## Как он принимает решения

Первыми всегда срабатывают офлайн-правила, опирающиеся на публичные данные об угрозах, которые обновляются ежедневно, включая более 230 000 зарегистрированных вредоносных пакетов npm и PyPI из [OpenSSF](https://ossf.github.io/malicious-packages/stats/). Затем ИИ-модель может оценить доказательства в контексте. Лучше всего работает Claude, поддерживаются другие провайдеры и локальные модели, а ИИ можно полностью выключить.

Модели отправляются только доказательства, нужные для проверки. Комментарии в коде сначала удаляются, а секреты никогда не загружаются. Настройки и история хранятся в `~/.tsuba` на вашем Mac.

![Настройки: включайте и выключайте каждую защиту и выбирайте, как выносятся вердикты, с ИИ или без.](https://oliverz.dev/products/tsuba/5-settings.en.webp?v=ce24d1bc)

## Доступность

Tsuba вышел, он бесплатный и с открытым кодом под лицензией Apache 2.0 ([на GitHub](https://github.com/chihyungchang/Tsuba)). Есть две сборки: **Apple silicon** для Mac на M1 и новее, **Intel** для более старых. Не знаете, какой у вас? Меню Apple → Об этом Mac → Чип.

Приложение говорит на десяти языках, включая русский: English, 简体中文, 繁體中文, 日本語, 한국어, Español, Français, Deutsch, Português и Русский. Интерфейс, уведомления, проверки в терминале, объяснения правил и ответы ИИ следуют языку macOS, или выберите язык в **Настройки → Оформление**.

Tsuba пока не подписан и не нотаризован Apple, поэтому macOS блокирует его при первом запуске. Откройте **Системные настройки → Конфиденциальность и безопасность** и нажмите **Все равно открыть**. Пожалуйста, не снимайте вместо этого флаг карантина через `xattr`: Tsuba предупреждает об установщиках, которые просят вас об этом, и его собственный не должен быть исключением.

Это нужно сделать один раз. Дальше Tsuba обновляется сам: сообщает о выходе новой версии и устанавливает её, только если её подпись совпадает с ключом, встроенным в приложение.

Чтобы убедиться, что ваш DMG — тот самый, который GitHub собрал из публичного исходного кода, сравните `shasum -a 256 Tsuba_*.dmg` с `SHA256SUMS.txt` на [странице релиза](https://github.com/chihyungchang/Tsuba/releases/latest).

## FAQ

### Безопасно ли запускать проект, который прислал рекрутер?

Считайте его недоверенным, пока он не проверен: на фейковых собеседованиях вредоносом оказывается как раз тестовый проект. Перетащите папку в окно Tsuba или клонируйте её, когда Tsuba подключён к терминалу, и он проверит зависимости, скрипты установки и задачи VS Code до того, как что-либо запустится. Если вы уже запустили проект, выполните **Диагностику** и прочитайте, [что случилось со мной](https://oliverz.dev/ru/blog/upwork-contagious-interview).

### Как проверить npm-пакет перед установкой?

Когда Tsuba подключён к терминалу, `npm install` и `npx` проверяются до запуска: известные вредоносные пакеты из списка OpenSSF, пакеты, опубликованные всего несколько дней назад, и скрипты установки. Похожую проверку только для npm делают консольные инструменты вроде npq.

### Почему macOS пишет, что Tsuba нельзя открыть?

Tsuba пока не подписан и не нотаризован Apple, поэтому при первом запуске откройте **Системные настройки → Конфиденциальность и безопасность** и нажмите **Все равно открыть**. Пожалуйста, не снимайте вместо этого флаг карантина через `xattr`: Tsuba предупреждает об установщиках, которые об этом просят. Чтобы проверить загрузку, сравните её с SHA-256 в разделе «Изменения».

### Загружает ли Tsuba мой код?

Файлы не загружаются. Если вы включите ИИ, выбранной модели уходят только доказательства, нужные для проверки, без комментариев в коде и без секретов. С выключенным ИИ проверки идут на вашем Mac по офлайн-правилам. Настройки и история хранятся в `~/.tsuba`. В [политике конфиденциальности](https://oliverz.dev/ru/products/tsuba/privacy) перечислено всё, что Tsuba отправляет, и когда.

### Нужна ли подписка на ИИ или API-ключ?

Нет. Офлайн-правила всегда срабатывают первыми и работают сами по себе. ИИ необязателен: лучше всего работает Claude, поддерживаются и другие провайдеры, и локальные модели.

### Он заменяет антивирус?

Нет. Распознавание известного вредоносного ПО остаётся за macOS XProtect и открытыми данными об угрозах. Tsuba закрывает то, что они пропускают: код в новой упаковке, который ещё никто не видел, — фейковые проекты с собеседований, фейковые приложения для встреч, отравленные пакеты и вредоносные расширения, — и вмешивается до того, как этот код запустится.

### На каких Mac он работает?

macOS 13 или новее, на Apple silicon и Intel, с отдельной загрузкой для каждого. Узнать свой чип можно в меню Apple → Об этом Mac → Чип.

### А если он пометит что-то безопасное?

Каждое «Предупредить» и «Заблокировать» показывает доказательства (какой файл, какая строка, что совпало), так что вы можете судить сами; проверенное предупреждение можно игнорировать, а то, чему вы доверяете, добавить в список разрешённых. Пожалуйста, [сообщите о ложном срабатывании](#feedback): каждое становится регрессионным тестом.
