Понимание безопасности
NVM for Windows v2 считает Node.js недоверенной загрузкой, пока не пройдут проверки целостности, затем в режиме shim снова проверяет бинарник при каждом запуске. Certified и Governance-редакции добавляют машинные политики, version firewall и (опционально) зеркало загрузок Author.
На этой странице — что проверяется, когда и какая редакция владеет контролем. Подробности — в связанных документах.
Модель безопасности кратко
Ключи по редакциям
| Контроль | Community | Certified | Governance add-on |
|---|---|---|---|
Archive SHASUM + Authenticode node.exe | ✓ | ✓ | ✓ |
| Allowed publisher org / thumbprint pins | ✓ | ✓ | ✓ |
| Ужесточение DACL каталога версии | ✓ | ✓ | ✓ |
| Shim verify-cache + доверие на каждый запуск | shim mode | shim mode | shim mode |
| Переопределение политикой HKLM (ADMX) | — | — | ✓ (+ ADMX-пакет) |
| Version allow/block firewall | — | — | ✓ |
| Cooldown пакетных менеджеров | — | — | ✓ |
Принудительный --permission / V8 lockdown | — | — | ✓ |
| Author mirror + hosted rules | — | — | ✓ |
Функции безопасности shim-режима не работают в link mode. Для управляемых парков предпочтителен shim.
1. Проверки при установке
Когда nvm install (или auto-install) получает сборку Node.js:
- Version firewall (Governance) —
VersionAllowList/VersionBlockListв hive Policies могут отказать версии до загрузки, приnvm useи при запуске shim. Без Governance эти списки игнорируются. См. Version Firewall + Author Mirror. - Целостность архива —
.7z(или staged-архив) сверяется с опубликованнымSHASUMS256для версии/архитектуры. - Authenticode для
node.exe— после распаковки выполняется проверка доверия Windows. Одной валидной подписи мало: организация подписанта должна быть в allow list. - Доверенные организации по умолчанию — всегда доверяются
OpenJS Foundation,Node.js FoundationиAuthor Software Inc.. Других (например NodeSource) добавляйте черезAllowedSigners. ОпциональноAllowedThumbprintsзакрепляют конкретные leaf-сертификаты. - Ужесточение DACL — каталог установки версии блокируется так, чтобы другие учётные записи не могли переписать
node.exe(или подменить троян в этом дереве). Скомпрометированная учётная запись, уже владеющая профилем, всё ещё может атаковать свои файлы; контроль нацелен на cross-account и удалённую запись. - Seed verify-cache — пишется подписанная запись кэша, чтобы последующие запуски shim обходили полный Authenticode на горячем пути.
Поведение revocation настраивается (AuthenticodeRevocation; air-gapped установки предпочитают cached-проверки). См. справочник политик реестра.
2. Проверки во время выполнения (shims)
Основные runtime-shim v2:
| Бинарник | Роль |
|---|---|
.shim\node.exe | Разрешает версию, проверяет доверие, применяет опциональные security-флаги, запускает настоящий Node |
utils\proxy.exe | Тот же путь доверия для npm / npx / yarn / pnpm и CLI глобальных модулей |
(reshim.exe — вспомогательный, не повседневный command shim.)
При каждом запуске shim:
- Определяет, какую версию Node.js запускать (разрешение версии).
- Self-check, если вызван из data-root
.shim— byte-compare с каноническим payload Program Files / установки (целостность самого shim, не второй круг Authenticode). - Доверяет
node.exe— предпочитает hit verify-cache (~1–2 ms). При miss или инвалидации кэша — полный Authenticode по allowed signers, затем сверка PE FileVersion с версией папки. Отказ Authenticode — NVM4301. Несовпадение FileVersion (например Node 10 в папкеv24.0.0) — NVM4314. Отказ version firewall на Certified — NVM4411. - Опционально добавляет Governance security-флаги (ниже), затем
CreateProcessWнастоящего Node.js.
Подробности: node (shim), Package Manager Shims.
3. Пакетные менеджеры и модули
Через proxy.exe NVM может применять Governance-контроли пакетных менеджеров, например NpmModuleMinimumAge (cooldown / минимальный возраст публикации для npm, npx, pnpm, yarn, vlt и bun/bunx при shim_bun). Community по умолчанию выключен (0) — как stock npm/npx без version manager. Certified Builds по умолчанию 2 дня (2880 минут), если ключ не задан, включая npx, vlt и shimmed bun. HKLM Policies фиксирует значение и удаляет CLI-флаги обхода возраста.
NVM сейчас не применяет allow/deny list пакетов npm для вложенных зависимостей. Supply-chain риск внутри node_modules остаётся проблемой upstream-реестра; более долгосрочная работа Author Software Runtime закрывает это отдельно. Что NVM действительно ограничивает сегодня:
- Версии Node.js — локальный firewall + опциональные правила Author mirror (author-mirror)
- Доверие к издателю
node.exeна каждый запуск - Cooldown при установках пакетных менеджеров (Governance)
- Allow-list пакетов (Governance module firewall) и доверие self-update (trust firewall) — см. Firewall
4. Permission model и V8 lockdown Node (Governance, shim)
Большинство команд не передают флаги permission model Node. Политика Governance может принудительно включать их на shim-node и, если хотя бы один ключ включён, на lifecycle-скрипты npm/npx/pnpm. По умолчанию выкл.: npm_config_node_options не пишется. Yarn, bun, corepack и vlt не покрыты. NVM не задаёт NODE_OPTIONS.
| Политика | Эффект |
|---|---|
EnforcePermissionModel | Добавляет --permission (Node 23+) или --experimental-permission (20–22) на node. Default-deny FS/network, пока процесс не передаст --allow-*. NVM не внедряет grants, кроме DefaultPermissionGrants. HKLM Policies удаляет --permission-audit (только отчёт) из argv, NODE_OPTIONS и npm_config_node_options, затем всё равно внедряет --permission. Enforce только из Preferences оставляет --permission-audit как отладочное исключение для node. Proxy вписывает те же флаги в npm_config_node_options для npm/npx/pnpm. NVM никогда не внедряет --permission-audit. |
FreezeV8GlobalObjects | Добавляет --frozen-intrinsics на node; тот же флаг в npm_config_node_options для npm/npx/pnpm при включении |
DisableEvalAndStringExecution | Добавляет --disallow-code-generation-from-strings (блокирует eval / new Function; не покрывает node:vm). Тот же флаг в npm_config_node_options для npm/npx/pnpm при включении |
См. Operating Modes и ключи реестра.
5. Реестр и enterprise-политики
Настройки живут в реестре Windows. В общих чертах:
- Пользовательские предпочтения (HKCU) — то, что интерактивный пользователь может менять без прав администратора.
- Машинные предпочтения (HKLM Preferences) — то, что администраторы пишут в hive Preferences. Доступны без Governance.
- Машинная политика (HKLM Policies) — то, что GPO/MDM пишут в
Software\Policies. Учитывается только с лицензией Governance (AllowsMachinePolicy).
Пакет Governance поставляет шаблоны ADMX/ADML для Active Directory и конфигурации в стиле Entra/Intune. Разные GPO могут задавать разный уровень риска (например блокировать EOL Node для большинства, разрешить одну legacy-версию команде миграции). См. Administrative Templates и справочник политик реестра.
6. Зеркало загрузок Author (Governance)
Организации могут запретить публичный nodejs.org/dist на сетевом периметре и allow-list mirror.author.io. Тогда NVM качает через policy-aware зеркало Author. Контроли сочетают:
- Списки клиента/GPO (
VersionAllowList/VersionBlockList) для точных версий и диапазонов — lifecycle-алиасы вродеEOL/ALPHA/MAINTENANCEна клиенте игнорируются и применяются только Author Mirror при скачивании - Hosted rules в клиентском портале (IP, geo, domain/tenant, SID, license group)
Подробности: Version Firewall + Author Mirror. Domain/tenant ID: Как найти AD Domain ID или Entra Tenant ID.
7. Аудит и нативные интеграции
Критические события установки, конфигурации и безопасности пишутся в Windows Event Viewer на Community и Certified. Опциональный Advanced Logging (Certified add-on) рассчитан на структурированные коды для SIEM. Логирование каждого вызова доступно через LogExecutions в shim-режиме.
См. Event Logging. Более широкий контекст продукта (включая native integrations): Why we rewrote NVM for Windows (внешний).
Связанные материалы
| Тема | Документ |
|---|---|
| Поведение shim | node (shim) |
| Shim npm / yarn / pnpm | Package Manager Shims |
| Shim vs link | Operating Modes |
| Ключи политик | Справочник политик реестра |
| Version firewall / mirror | Author Mirror |
| Редакции | Выбор edition |
| Коды ошибок (NVM43xx / NVM44xx) | Коды ошибок |